summaryrefslogtreecommitdiffstats
path: root/drivers/staging/hv/channel.c
diff options
context:
space:
mode:
authorOlaf Hering <olaf@aepfle.de>2011-03-21 14:41:37 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2011-04-04 21:33:25 -0700
commit22356585712d1ff08fbfed152edd8b386873b238 (patch)
treeaeb0a6192077d4865d06f6b35cdbf789b390ca99 /drivers/staging/hv/channel.c
parent75e4fb221babbe329c1aba8c34092d29034f1545 (diff)
downloadop-kernel-dev-22356585712d1ff08fbfed152edd8b386873b238.zip
op-kernel-dev-22356585712d1ff08fbfed152edd8b386873b238.tar.gz
staging: hv: use sync_bitops when interacting with the hypervisor
Locking is required when tweaking bits located in a shared page, use the sync_ version of bitops. Without this change vmbus_on_event() will miss events and as a result, vmbus_isr() will not schedule the receive tasklet. Signed-off-by: Olaf Hering <olaf@aepfle.de> Cc: stable <stable@kernel.org> Acked-by: Haiyang Zhang <haiyangz@microsoft.com> Acked-by: Hank Janssen <hjanssen@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/hv/channel.c')
-rw-r--r--drivers/staging/hv/channel.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/staging/hv/channel.c b/drivers/staging/hv/channel.c
index 775a52a..f7ce7d2 100644
--- a/drivers/staging/hv/channel.c
+++ b/drivers/staging/hv/channel.c
@@ -81,14 +81,14 @@ static void vmbus_setevent(struct vmbus_channel *channel)
if (channel->offermsg.monitor_allocated) {
/* Each u32 represents 32 channels */
- set_bit(channel->offermsg.child_relid & 31,
+ sync_set_bit(channel->offermsg.child_relid & 31,
(unsigned long *) vmbus_connection.send_int_page +
(channel->offermsg.child_relid >> 5));
monitorpage = vmbus_connection.monitor_pages;
monitorpage++; /* Get the child to parent monitor page */
- set_bit(channel->monitor_bit,
+ sync_set_bit(channel->monitor_bit,
(unsigned long *)&monitorpage->trigger_group
[channel->monitor_grp].pending);
@@ -104,7 +104,7 @@ static void VmbusChannelClearEvent(struct vmbus_channel *channel)
if (Channel->offermsg.monitor_allocated) {
/* Each u32 represents 32 channels */
- clear_bit(Channel->offermsg.child_relid & 31,
+ sync_clear_bit(Channel->offermsg.child_relid & 31,
(unsigned long *)vmbus_connection.send_int_page +
(Channel->offermsg.child_relid >> 5));
@@ -112,7 +112,7 @@ static void VmbusChannelClearEvent(struct vmbus_channel *channel)
vmbus_connection.monitor_pages;
monitorPage++; /* Get the child to parent monitor page */
- clear_bit(Channel->monitor_bit,
+ sync_clear_bit(Channel->monitor_bit,
(unsigned long *)&monitorPage->trigger_group
[Channel->monitor_grp].Pending);
}
OpenPOWER on IntegriCloud