mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 12:26:54 +07:00
dfe7805e6a
[ 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:
|
||
---|---|---|
.. | ||
internal.h | ||
Kconfig | ||
Makefile | ||
ncsi-aen.c | ||
ncsi-cmd.c | ||
ncsi-manage.c | ||
ncsi-netlink.c | ||
ncsi-netlink.h | ||
ncsi-pkt.h | ||
ncsi-rsp.c |