From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S937201AbdADVFw (ORCPT ); Wed, 4 Jan 2017 16:05:52 -0500 Received: from p3plsmtps2ded01.prod.phx3.secureserver.net ([208.109.80.58]:43580 "EHLO p3plsmtps2ded01.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750979AbdADUzF (ORCPT ); Wed, 4 Jan 2017 15:55:05 -0500 x-originating-ip: 72.167.245.219 From: Long Li To: "K. Y. Srinivasan" , Haiyang Zhang Cc: devel@linuxdriverproject.org, linux-kernel@vger.kernel.org, Long Li Subject: [PATCH] Retry infinitely for hypercall Date: Wed, 4 Jan 2017 14:39:31 -0800 Message-Id: <1483569571-26024-1-git-send-email-longli@exchange.microsoft.com> X-Mailer: git-send-email 1.7.4.1 X-CMAE-Envelope: MS4wfKJd4EPqpYr6gp4ujWspLgpzGIpgFEQEzwsn1L3tfUk2eGw46Bz6mrQ3YEFbwz+KymwulhHl11xeVoMY1h5rOfzkqdko+r5UkdiJOoxmchH9h7gcYMiS bi1mudobTRyfar3PG30SCmTBEnN7BFeOQ5N3xFcWJx2noGfwdrmmgC5BGqc9p5PTgbjfnhYl6Ahf1A0xVWjjDAlG+D5t7ZQ73dyOxzvmxFpJKvUKsZRqiKGv o3pKV2OMiYhblpFzMrI9+k7ndN6cYbMak1FmhJO2/c5KDaPR5KjrYHrqi4TRhpekufRpqVT6VNzZCOyzijOP8gwpALlf2l/zOcCCIXpu9gA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Long Li Hyper-v host guarantees that a hypercall will succeed. Retry infinitely to avoid returning transient failures to upper layer. Signed-off-by: Long Li --- drivers/hv/connection.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c index 6ce8b87..4bcb099 100644 --- a/drivers/hv/connection.c +++ b/drivers/hv/connection.c @@ -439,7 +439,6 @@ int vmbus_post_msg(void *buffer, size_t buflen) { union hv_connection_id conn_id; int ret = 0; - int retries = 0; u32 usec = 1; conn_id.asu32 = 0; @@ -447,10 +446,10 @@ int vmbus_post_msg(void *buffer, size_t buflen) /* * hv_post_message() can have transient failures because of - * insufficient resources. Retry the operation a couple of - * times before giving up. + * insufficient resources. We retry infinitely on these failures + * because host guarantees hypercall will eventually succeed. */ - while (retries < 20) { + while (1) { ret = hv_post_message(conn_id, 1, buffer, buflen); switch (ret) { @@ -459,11 +458,11 @@ int vmbus_post_msg(void *buffer, size_t buflen) * 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; + /* + * Temporary failure out of resources + */ break; case HV_STATUS_SUCCESS: return ret; @@ -472,12 +471,12 @@ int vmbus_post_msg(void *buffer, size_t buflen) return -EINVAL; } - retries++; udelay(usec); if (usec < 2048) usec *= 2; } - return ret; + /* Impossible to get here */ + BUG_ON(1); } /* -- 2.7.4