From: Dan Carpenter <dan.carpenter@oracle.com>
To: Long Li <longli@exchange.microsoft.com>
Cc: "K. Y. Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
devel@linuxdriverproject.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Retry infinitely for hypercall
Date: Thu, 5 Jan 2017 00:47:34 +0300 [thread overview]
Message-ID: <20170104214734.GC13756@mwanda> (raw)
In-Reply-To: <1483569571-26024-1-git-send-email-longli@exchange.microsoft.com>
Fix the subsystem prefix in the subject.
On Wed, Jan 04, 2017 at 02:39:31PM -0800, Long Li wrote:
> From: Long Li <longli@microsoft.com>
>
> Hyper-v host guarantees that a hypercall will succeed. Retry infinitely to avoid returning transient failures to upper layer.
>
> Signed-off-by: Long Li <longli@microsoft.com>
> ---
> 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;
Btw, when you disable GCC's uninitialized variable checking by storing
bogus values in "ret", it's eventually going to bite you in the bum.
Eventually you're going to get a bug that should have been detected
through static analysis if only you hadn't disabled it.
> - 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.
> */
Move the comment above the code it's commenting about.
/*
* We could get INVALID_CONNECTION_ID if we flood the
* host with too many messages.
*/
case HV_STATUS_INVALID_CONNECTION_ID:
case HV_STATUS_INSUFFICIENT_MEMORY:
case HV_STATUS_INSUFFICIENT_BUFFERS:
break;
> - 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;
return 0;
Better to be more explicit. When I looked at this I got briefly
confused if this function was supposed to return HV_ statuses or
standard kernel error codes. It turns out that HV_STATUS_SUCCESS is
zero the success returns map directly to linux kernel code for success
but it's clearer to be explicit.
> @@ -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);
Remove the comment and the BUG_ON().
regards,
dan carpenter
next prev parent reply other threads:[~2017-01-04 21:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-04 22:39 [PATCH] Retry infinitely for hypercall Long Li
2017-01-04 20:50 ` Greg KH
2017-01-04 22:03 ` Long Li
2017-01-04 21:47 ` Dan Carpenter [this message]
2017-01-04 22:05 ` Long Li
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=20170104214734.GC13756@mwanda \
--to=dan.carpenter@oracle.com \
--cc=devel@linuxdriverproject.org \
--cc=haiyangz@microsoft.com \
--cc=kys@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longli@exchange.microsoft.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.