All of lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
To: Wei Liu <wei.liu2@citrix.com>
Cc: xen-devel@lists.xen.org, minios-devel@lists.xen.org,
	Sarah Newman <srn@prgmr.com>
Subject: Re: [PATCH] Mini-OS: netfront: fix off-by-one error introduced in 7c8f3483
Date: Fri, 25 Mar 2016 19:33:20 +0100	[thread overview]
Message-ID: <20160325183320.GB2792@var> (raw)
In-Reply-To: <20160325130907.GC20441@citrix.com>

[-- Attachment #1: Type: text/plain, Size: 622 bytes --]

Wei Liu, on Fri 25 Mar 2016 13:09:07 +0000, wrote:
> CC Samuel

Thanks.

> On Wed, Mar 23, 2016 at 02:26:51PM -0700, Sarah Newman wrote:
> > 7c8f3483 introduced a break within a loop in netfront.c such that
> > cons and nr_consumed were no longer always being incremented. The
> > offset at cons will be processed multiple times with the break in
> > place.
> > 
> > Remove the break and re-add "some !=0" in the loop for HAVE_LIBC.

Mmm, right.

That ifdef makes things even more difficult to understand then. That
however makes me think: how about the attached patch, which actually
simplifies the rest.

Thanks!
Samuel

[-- Attachment #2: patch --]
[-- Type: text/plain, Size: 1769 bytes --]

netfront: fix off-by-one error introduced in 7c8f3483

7c8f3483 introduced a break within a loop in netfront.c such that
cons and nr_consumed were no longer always being incremented. The
offset at cons will be processed multiple times with the break in
place.

Remove the break and re-add "some !=0" in the loop for HAVE_LIBC,
rename it into dobreak to mitigate confusion.

Signed-off-by: Sarah Newman <srn@prgmr.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

diff --git a/netfront.c b/netfront.c
index 0eca5b5..b8fac62 100644
--- a/netfront.c
+++ b/netfront.c
@@ -97,19 +97,15 @@ void network_rx(struct netfront_dev *dev)
 {
     RING_IDX rp,cons,req_prod;
     int nr_consumed, more, i, notify;
-#ifdef HAVE_LIBC
-    int some;
-#endif
+    int dobreak;
 
     nr_consumed = 0;
 moretodo:
     rp = dev->rx.sring->rsp_prod;
     rmb(); /* Ensure we see queued responses up to 'rp'. */
 
-#ifdef HAVE_LIBC
-    some = 0;
-#endif
-    for (cons = dev->rx.rsp_cons; cons != rp; nr_consumed++, cons++)
+    dobreak = 0;
+    for (cons = dev->rx.rsp_cons; cons != rp && !dobreak; nr_consumed++, cons++)
     {
         struct net_buffer* buf;
         unsigned char* page;
@@ -134,8 +130,8 @@ moretodo:
 		    len = dev->len;
 		memcpy(dev->data, page+rx->offset, len);
 		dev->rlen = len;
-		some = 1;
-                break;
+		/* No need to receive the rest for now */
+		dobreak = 1;
 	    } else
 #endif
 		dev->netif_rx(page+rx->offset,rx->status);
@@ -144,11 +140,7 @@ moretodo:
     dev->rx.rsp_cons=cons;
 
     RING_FINAL_CHECK_FOR_RESPONSES(&dev->rx,more);
-#ifdef HAVE_LIBC
-    if(more && !some) goto moretodo;
-#else
-    if(more) goto moretodo;
-#endif
+    if(more && !dobreak) goto moretodo;
 
     req_prod = dev->rx.req_prod_pvt;
 

[-- Attachment #3: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2016-03-25 18:33 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-23 21:26 [PATCH] Mini-OS: netfront: fix off-by-one error introduced in 7c8f3483 Sarah Newman
2016-03-25 13:09 ` Wei Liu
2016-03-25 18:33   ` Samuel Thibault [this message]
2016-03-25 19:19     ` Sarah Newman
2016-03-25 19:32       ` Samuel Thibault
2016-03-25 19:56         ` Sarah Newman
2016-03-26 20:53     ` Sarah Newman
2016-03-30 13:46       ` Wei Liu
  -- strict thread matches above, loose matches on Subject: below --
2016-04-01 18:17 Samuel Thibault
2016-04-01 18:26 ` Samuel Thibault
2016-04-01 18:26 Samuel Thibault
2016-04-04 10:28 ` Wei Liu
2016-04-25 11:14   ` Wei Liu

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=20160325183320.GB2792@var \
    --to=samuel.thibault@ens-lyon.org \
    --cc=minios-devel@lists.xen.org \
    --cc=srn@prgmr.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /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.