Drivers: hv: vmbus: serialize process_chn_event() and vmbus_close_internal()
authorDexuan Cui <decui@microsoft.com>
Tue, 15 Dec 2015 00:01:47 +0000 (16:01 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Sep 2016 06:27:40 +0000 (08:27 +0200)
commitff83d7914b749f8c654c0e08d21667035901ab75
tree6a8bf43103f2fe841ba72e18d27b9debf6ca5c64
parentbf59c816fb104b2e92d29f8c13f1118f4c5333c4
Drivers: hv: vmbus: serialize process_chn_event() and vmbus_close_internal()

[ Upstream commit 63d55b2aeb5e4faa170316fee73c3c47ea9268c7 ]

process_chn_event(), running in the tasklet, can race with
vmbus_close_internal() in the case of SMP guest, e.g., when the former is
accessing channel->inbound.ring_buffer, the latter could be freeing the
ring_buffer pages.

To resolve the race, we can serialize them by disabling the tasklet when
the latter is running here.

Signed-off-by: Dexuan Cui <decui@microsoft.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.c