summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorK. Y. Srinivasan <kys@microsoft.com>2014-01-15 17:12:58 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-02-22 13:34:53 -0800
commitbbd93499238ec41f64a203e0a89f725e0891c4fa (patch)
tree1f9b0503f1c391ae7da1ad68160e63888bc549da
parent88c7df1b5e2caeb3b406396e3bc610fe3c74ad1c (diff)
Drivers: hv: vmbus: Specify the target CPU that should receive notification
commit e28bab4828354583bb66ac09021ca69b341a7db4 upstream. During the initial VMBUS connect phase, starting with WS2012 R2, we should specify the VPCU in the guest that should receive the notification. Fix this issue. This fix is required to properly connect to the host in the kexeced kernel. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/hv/connection.c2
-rw-r--r--include/linux/hyperv.h2
2 files changed, 3 insertions, 1 deletions
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index af6edf9b1936..855bbda9964d 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -78,6 +78,8 @@ static int vmbus_negotiate_version(struct vmbus_channel_msginfo *msginfo,
msg->interrupt_page = virt_to_phys(vmbus_connection.int_page);
msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]);
msg->monitor_page2 = virt_to_phys(vmbus_connection.monitor_pages[1]);
+ if (version == VERSION_WIN8)
+ msg->target_vcpu = hv_context.vp_index[smp_processor_id()];
/*
* Add to list before we send the request since we may
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 15da677478dd..344883dce584 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -875,7 +875,7 @@ struct vmbus_channel_relid_released {
struct vmbus_channel_initiate_contact {
struct vmbus_channel_message_header header;
u32 vmbus_version_requested;
- u32 padding2;
+ u32 target_vcpu; /* The VCPU the host should respond to */
u64 interrupt_page;
u64 monitor_page1;
u64 monitor_page2;