Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933068AbbBBJls (ORCPT ); Mon, 2 Feb 2015 04:41:48 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58232 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754893AbbBBJlp (ORCPT ); Mon, 2 Feb 2015 04:41:45 -0500 Date: Mon, 02 Feb 2015 09:49:16 +0008 From: Jason Wang Subject: Re: [PATCH v2 2/3] hv: vmbus_post_msg: retry the hypercall on some transient errors To: Dexuan Cui Cc: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, driverdev-devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com, kys@microsoft.com, vkuznets@redhat.com, haiyangz@microsoft.com Message-Id: <1422870076.7028.6@smtp.corp.redhat.com> In-Reply-To: <1422851763-2391-1-git-send-email-decui@microsoft.com> References: <1422851763-2391-1-git-send-email-decui@microsoft.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2873 Lines: 93 On Mon, Feb 2, 2015 at 12:36 PM, Dexuan Cui wrote: > 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. Better to clarify this kind of throttling. Looks like it only affects HVCALL_POST_MESSAGE. Other looks good. Reviewed-by: Jason Wang > > 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" > Signed-off-by: Dexuan Cui > --- > > v2: > updated the subject and changelog > on HV_STATUS_INVALID_CONNECTION_ID: ret = -EAGAIN; > added HV_STATUS_INSUFFICIENT_MEMORY > removed unreachable -ENOMEM > changed the delay from 100ms to 1000ms > > 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.9.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/