linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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 RESEND 2/6] hv: vmbus_post_msg: retry the hypercall on some transient errors
Date: Tue,  3 Feb 2015 07:31:53 -0800	[thread overview]
Message-ID: <1422977517-16313-2-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1422977517-16313-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


  reply	other threads:[~2015-02-03 14:18 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-03 15:31 [PATCH RESEND 0/6] Drivers: hv: vmbus: Some miscellaneous bug fixes and cleanup K. Y. Srinivasan
2015-02-03 15:31 ` [PATCH RESEND 1/6] hv: hv_util: move vmbus_open() to a later place K. Y. Srinivasan
2015-02-03 15:31   ` K. Y. Srinivasan [this message]
2015-02-03 15:31   ` [PATCH RESEND 3/6] hv: vmbus_open(): reset the channel state on ENOMEM K. Y. Srinivasan
2015-02-03 15:31   ` [PATCH RESEND 4/6] hv: channel: match var type to return type of wait_for_completion K. Y. Srinivasan
2015-02-03 15:31   ` [PATCH RESEND 5/6] hv: channel_mgmt: " K. Y. Srinivasan
2015-02-03 15:31   ` [PATCH RESEND 6/6] hv: hv_balloon: " K. Y. Srinivasan
2015-02-03 23:45 ` [PATCH RESEND 0/6] Drivers: hv: vmbus: Some miscellaneous bug fixes and cleanup Greg KH
2015-02-03 23:51   ` KY Srinivasan
2015-02-04  0:00     ` Greg KH
2015-02-04  0:01       ` KY 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=1422977517-16313-2-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).