瀏覽代碼

Drivers: hv: vmbus: Specify the target CPU that should receive notification

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>
Cc: <stable@vger.kernel.org>        [3.9+]
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
K. Y. Srinivasan 11 年之前
父節點
當前提交
e28bab4828
共有 2 個文件被更改,包括 3 次插入1 次删除
  1. 2 0
      drivers/hv/connection.c
  2. 1 1
      include/linux/hyperv.h

+ 2 - 0
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->interrupt_page = virt_to_phys(vmbus_connection.int_page);
 	msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]);
 	msg->monitor_page1 = virt_to_phys(vmbus_connection.monitor_pages[0]);
 	msg->monitor_page2 = virt_to_phys(vmbus_connection.monitor_pages[1]);
 	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
 	 * Add to list before we send the request since we may

+ 1 - 1
include/linux/hyperv.h

@@ -875,7 +875,7 @@ struct vmbus_channel_relid_released {
 struct vmbus_channel_initiate_contact {
 struct vmbus_channel_initiate_contact {
 	struct vmbus_channel_message_header header;
 	struct vmbus_channel_message_header header;
 	u32 vmbus_version_requested;
 	u32 vmbus_version_requested;
-	u32 padding2;
+	u32 target_vcpu; /* The VCPU the host should respond to */
 	u64 interrupt_page;
 	u64 interrupt_page;
 	u64 monitor_page1;
 	u64 monitor_page1;
 	u64 monitor_page2;
 	u64 monitor_page2;