The spin_lock()/spin_unlock() is synchronizing on the adapter->work_lock as the comment also suggests, which is equivalent to spin_unlock_wait() but the later should be more efficient.
Signed-off-by: Nicholas Mc Guire <hof...@osadl.org> --- Problem located by coccinelle spatch Patch was compile tested with: x86_64_defconfig + CONFIG_CHELSIO_T1=m Patch is against linux-next (localversion-next is next-20160318) drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/chelsio/cxgb/cxgb2.c b/drivers/net/ethernet/chelsio/cxgb/cxgb2.c index f5f1b0b..c5a38dc 100644 --- a/drivers/net/ethernet/chelsio/cxgb/cxgb2.c +++ b/drivers/net/ethernet/chelsio/cxgb/cxgb2.c @@ -282,8 +282,8 @@ static int cxgb_close(struct net_device *dev) !(adapter->open_device_map & PORT_MASK)) { /* Stop statistics accumulation. */ smp_mb__after_atomic(); - spin_lock(&adapter->work_lock); /* sync with update task */ - spin_unlock(&adapter->work_lock); + /* sync with update task */ + spin_unlock_wait(&adapter->work_lock); cancel_mac_stats_update(adapter); } -- 2.1.4