Drivers: hv: vmbus: avoid scheduling in interrupt context in vmbus_initiate_unload()
authorVitaly Kuznetsov <vkuznets@redhat.com>
Thu, 28 Jan 2016 06:29:35 +0000 (22:29 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Sep 2016 06:27:46 +0000 (08:27 +0200)
commitd6d72d7cbe464e3776370b65f518866953cb4e12
tree2cdc0642da89f8d41d4643a2d87bc3209f47b6b7
parentd0d84ae99d3c11775896420ff2e4bd2a084e1f90
Drivers: hv: vmbus: avoid scheduling in interrupt context in vmbus_initiate_unload()

[ Upstream commit 415719160de3fae3bb9cbc617664649919cd00d0 ]

We have to call vmbus_initiate_unload() on crash to make kdump work but
the crash can also be happening in interrupt (e.g. Sysrq + c results in
such) where we can't schedule or the following will happen:

[  314.905786] bad: scheduling from the idle thread!

Just skipping the wait (and even adding some random wait here) won't help:
to make host-side magic working we're supposed to receive CHANNELMSG_UNLOAD
(and actually confirm the fact that we received it) but we can't use
interrupt-base path (vmbus_isr()-> vmbus_on_msg_dpc()). Implement a simple
busy wait ignoring all the other messages and use it if we're in an
interrupt context.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/hv/channel_mgmt.c