Skip to content
Commit 03cb4d05 authored by Milton Miller's avatar Milton Miller Committed by David S. Miller
Browse files

net/ncsi: Avoid channel_monitor hrtimer deadlock

Calling ncsi_stop_channel_monitor from channel_monitor is a guaranteed
deadlock on SMP because stop calls del_timer_sync on the timer that
invoked channel_monitor as its timer function.

Recognise the inherent race of marking the monitor disabled before
deleting the timer by just returning if enable was cleared.  After
a timeout (the default case -- reset to START when response received)
just mark the monitor.enabled false.

If the channel has an entry on the channel_queue list, or if the
state is not ACTIVE or INACTIVE, then warn and mark the timer stopped
and don't restart, as the locking is broken somehow.

Fixes: 0795fb20

 ("net/ncsi: Stop monitor if channel times out or is inactive")
Signed-off-by: default avatarMilton Miller <miltonm@us.ibm.com>
Signed-off-by: default avatarEddie James <eajames@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6e5a03bc
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment