| From 269f979467cf49f2ea8132316c1f00f8c9678f7c Mon Sep 17 00:00:00 2001 |
| From: "K. Y. Srinivasan" <kys@microsoft.com> |
| Date: Thu, 16 Jan 2014 11:59:58 -0800 |
| Subject: Drivers: hv: vmbus: Don't timeout during the initial connection with host |
| |
| From: "K. Y. Srinivasan" <kys@microsoft.com> |
| |
| commit 269f979467cf49f2ea8132316c1f00f8c9678f7c upstream. |
| |
| When the guest attempts to connect with the host when there may already be a |
| connection with the host (as would be the case during the kdump/kexec path), |
| it is difficult to guarantee timely response from the host. Starting with |
| WS2012 R2, the host supports this ability to re-connect with the host |
| (explicitly to support kexec). Prior to responding to the guest, the host |
| needs to ensure that device states based on the previous connection to |
| the host have been properly torn down. This may introduce unbounded delays. |
| To deal with this issue, don't do a timed wait during the initial connect |
| with the host. |
| |
| Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/hv/connection.c | 11 +---------- |
| 1 file changed, 1 insertion(+), 10 deletions(-) |
| |
| --- a/drivers/hv/connection.c |
| +++ b/drivers/hv/connection.c |
| @@ -67,7 +67,6 @@ static int vmbus_negotiate_version(struc |
| int ret = 0; |
| struct vmbus_channel_initiate_contact *msg; |
| unsigned long flags; |
| - int t; |
| |
| init_completion(&msginfo->waitevent); |
| |
| @@ -102,15 +101,7 @@ static int vmbus_negotiate_version(struc |
| } |
| |
| /* Wait for the connection response */ |
| - t = wait_for_completion_timeout(&msginfo->waitevent, 5*HZ); |
| - if (t == 0) { |
| - spin_lock_irqsave(&vmbus_connection.channelmsg_lock, |
| - flags); |
| - list_del(&msginfo->msglistentry); |
| - spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, |
| - flags); |
| - return -ETIMEDOUT; |
| - } |
| + wait_for_completion(&msginfo->waitevent); |
| |
| spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); |
| list_del(&msginfo->msglistentry); |