]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commit
net/ncsi: Avoid channel_monitor hrtimer deadlock
authorMilton Miller <miltonm@us.ibm.com>
Mon, 29 Mar 2021 15:20:39 +0000 (10:20 -0500)
committerStefan Bader <stefan.bader@canonical.com>
Tue, 4 May 2021 14:08:51 +0000 (16:08 +0200)
commit9bc06b5c8967aa4e18ed2c675fa1ffad27944459
tree47dd7ed24fa8cdd55bbec2146990ffb3ce33d5e2
parent3c6e3c8452c5a0a547bd04647205bde965f2687f
net/ncsi: Avoid channel_monitor hrtimer deadlock

BugLink: https://bugs.launchpad.net/bugs/1926489
[ Upstream commit 03cb4d05b4ea9a3491674ca40952adb708d549fa ]

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: 0795fb2021f0 ("net/ncsi: Stop monitor if channel times out or is inactive")
Signed-off-by: Milton Miller <miltonm@us.ibm.com>
Signed-off-by: Eddie James <eajames@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
net/ncsi/ncsi-manage.c