From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com,
vkuznets@redhat.com
Cc: Dexuan Cui <"[mailto:decui@microsoft.com]"@linuxonhyperv.com>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Dexuan Cui <decui@microsoft.com>
Subject: [PATCH 10/16] hv: vmbus_post_msg: retry the hypercall on some transient errors
Date: Tue, 3 Feb 2015 18:26:38 -0800 [thread overview]
Message-ID: <1423016804-22014-10-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1423016804-22014-1-git-send-email-kys@microsoft.com>
From: Dexuan Cui <[mailto:decui@microsoft.com]>
I got HV_STATUS_INVALID_CONNECTION_ID on Hyper-V 2008 R2 when keeping running
"rmmod hv_netvsc; modprobe hv_netvsc; rmmod hv_utils; modprobe hv_utils"
in a Linux guest. Looks the host has some kind of throttling mechanism if
some kinds of hypercalls are sent too frequently.
Without the patch, the driver can occasionally fail to load.
Also let's retry HV_STATUS_INSUFFICIENT_MEMORY, though we didn't get it
before.
Removed 'case -ENOMEM', since the hypervisor doesn't return this.
CC: "K. Y. Srinivasan" <kys@microsoft.com>
Reviewed-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
---
arch/x86/include/uapi/asm/hyperv.h | 2 ++
drivers/hv/connection.c | 11 +++++++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/arch/x86/include/uapi/asm/hyperv.h b/arch/x86/include/uapi/asm/hyperv.h
index 90c458e..ce6068d 100644
--- a/arch/x86/include/uapi/asm/hyperv.h
+++ b/arch/x86/include/uapi/asm/hyperv.h
@@ -225,6 +225,8 @@
#define HV_STATUS_INVALID_HYPERCALL_CODE 2
#define HV_STATUS_INVALID_HYPERCALL_INPUT 3
#define HV_STATUS_INVALID_ALIGNMENT 4
+#define HV_STATUS_INSUFFICIENT_MEMORY 11
+#define HV_STATUS_INVALID_CONNECTION_ID 18
#define HV_STATUS_INSUFFICIENT_BUFFERS 19
typedef struct _HV_REFERENCE_TSC_PAGE {
diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index c4acd1c..af2388f 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -440,9 +440,16 @@ int vmbus_post_msg(void *buffer, size_t buflen)
ret = hv_post_message(conn_id, 1, buffer, buflen);
switch (ret) {
+ case HV_STATUS_INVALID_CONNECTION_ID:
+ /*
+ * We could get this if we send messages too
+ * frequently.
+ */
+ ret = -EAGAIN;
+ break;
+ case HV_STATUS_INSUFFICIENT_MEMORY:
case HV_STATUS_INSUFFICIENT_BUFFERS:
ret = -ENOMEM;
- case -ENOMEM:
break;
case HV_STATUS_SUCCESS:
return ret;
@@ -452,7 +459,7 @@ int vmbus_post_msg(void *buffer, size_t buflen)
}
retries++;
- msleep(100);
+ msleep(1000);
}
return ret;
}
--
1.7.4.1
next prev parent reply other threads:[~2015-02-04 1:15 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-04 2:26 [PATCH 00/16] Drivers: hv: vmbus: Miscellaneous fixes/enhancements K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 01/16] Drivers: hv: vmbus: prevent cpu offlining on newer hypervisors K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 02/16] Drivers: hv: vmbus: rename channel work queues K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 03/16] drivers:hv:vmbus drivers:hv:vmbus Allow for more than one MMIO range for children K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 04/16] Drivers: hv: vmbus: avoid double kfree for device_obj K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 05/16] Drivers: hv: vmbus: teardown hv_vmbus_con workqueue and vmbus_connection pages on shutdown K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 06/16] drivers: hv: vmbus: Teardown synthetic interrupt controllers on module unload K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 07/16] clockevents: export clockevents_unbind_device instead of clockevents_unbind K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 08/16] Drivers: hv: vmbus: Teardown clockevent devices on module unload K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 09/16] hv: hv_util: move vmbus_open() to a later place K. Y. Srinivasan
2015-02-04 2:26 ` K. Y. Srinivasan [this message]
2015-02-04 2:26 ` [PATCH 11/16] hv: vmbus_open(): reset the channel state on ENOMEM K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 12/16] hv: channel: match var type to return type of wait_for_completion K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 13/16] hv: channel_mgmt: " K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 14/16] hv: hv_balloon: " K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 15/16] Drivers: hv: vmbus: Fix a bug in the error path in vmbus_open() K. Y. Srinivasan
2015-02-04 2:26 ` [PATCH 16/16] Drivers: hv: vmbus: Add support for the NetworkDirect GUID K. Y. Srinivasan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1423016804-22014-10-git-send-email-kys@microsoft.com \
--to=kys@microsoft.com \
--cc="[mailto:decui@microsoft.com]"@linuxonhyperv.com \
--cc=apw@canonical.com \
--cc=decui@microsoft.com \
--cc=devel@linuxdriverproject.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=olaf@aepfle.de \
--cc=vkuznets@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.