android_kernel_xiaomi_sm7250/net/ncsi
Milton Miller 9b5eec0099 net/ncsi: Avoid channel_monitor hrtimer deadlock
[ 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: 0795fb2021 ("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>
2021-04-14 08:22:35 +02:00
..
internal.h net/ncsi: Refactor MAC, VLAN filters 2018-04-17 13:50:58 -04:00
Kconfig net/ncsi: Resource management 2016-07-19 20:49:16 -07:00
Makefile net/ncsi: Add generic netlink family 2018-03-05 10:43:37 -05:00
ncsi-aen.c net/ncsi: Use netdev_dbg for debug messages 2018-06-20 07:26:58 +09:00
ncsi-cmd.c net/ncsi: Fix several packet definitions 2017-08-28 16:49:49 -07:00
ncsi-manage.c net/ncsi: Avoid channel_monitor hrtimer deadlock 2021-04-14 08:22:35 +02:00
ncsi-netlink.c net/ncsi: Fix netlink registration 2020-11-24 13:27:19 +01:00
ncsi-netlink.h net/ncsi: Fix netlink registration 2020-11-24 13:27:19 +01:00
ncsi-pkt.h net/ncsi: Fix several packet definitions 2017-08-28 16:49:49 -07:00
ncsi-rsp.c net/ncsi: Use real net-device for response handler 2021-01-12 20:10:18 +01:00