forked from Minki/linux
net: dsa: mv88e6xxx: call _mv88e6xxx_stats_wait with SMI lock held
At switch setup, _mv88e6xxx_stats_wait was called without holding the SMI mutex. Fix this by requesting the lock for this call. Also, return the _mv88e6xxx_stats_wait code, since it may fail. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e44deb2f0c
commit
24751e29fe
@ -1881,6 +1881,7 @@ int mv88e6xxx_setup_common(struct dsa_switch *ds)
|
||||
int mv88e6xxx_setup_global(struct dsa_switch *ds)
|
||||
{
|
||||
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
/* Set the default address aging time to 5 minutes, and
|
||||
@ -1979,9 +1980,11 @@ int mv88e6xxx_setup_global(struct dsa_switch *ds)
|
||||
REG_WRITE(REG_GLOBAL, GLOBAL_STATS_OP, GLOBAL_STATS_OP_FLUSH_ALL);
|
||||
|
||||
/* Wait for the flush to complete. */
|
||||
_mv88e6xxx_stats_wait(ds);
|
||||
mutex_lock(&ps->smi_mutex);
|
||||
ret = _mv88e6xxx_stats_wait(ds);
|
||||
mutex_unlock(&ps->smi_mutex);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int mv88e6xxx_switch_reset(struct dsa_switch *ds, bool ppu_active)
|
||||
|
Loading…
Reference in New Issue
Block a user