Skip to content

Commit

Permalink
net: dsa: mv88e6xxx: call _mv88e6xxx_stats_wait with SMI lock held
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Vivien Didelot authored and David S. Miller committed Aug 3, 2015
1 parent e44deb2 commit 24751e2
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions drivers/net/dsa/mv88e6xxx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 24751e2

Please sign in to comment.