public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sch_qfq: fix overflow in qfq_update_start()
@ 2012-01-02 15:47 Eric Dumazet
  2012-01-02 21:45 ` Eric Dumazet
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Eric Dumazet @ 2012-01-02 15:47 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, Stephen Hemminger, Dave Taht

grp->slot_shift is between 22 and 41, so using 32bit wide variables is
probably a typo.

This could explain QFQ hangs Dave reported to me, after 2^23 packets ?

(23 = 64 - 41)

Reported-by: Dave Taht <dave.taht@gmail.com>
CC: Stephen Hemminger <shemminger@vyatta.com>
CC: Dave Taht <dave.taht@gmail.com>
---
 net/sched/sch_qfq.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
index 1033434..7b03254 100644
--- a/net/sched/sch_qfq.c
+++ b/net/sched/sch_qfq.c
@@ -817,11 +817,11 @@ skip_unblock:
 static void qfq_update_start(struct qfq_sched *q, struct qfq_class *cl)
 {
 	unsigned long mask;
-	uint32_t limit, roundedF;
+	u64 limit, roundedF;
 	int slot_shift = cl->grp->slot_shift;
 
 	roundedF = qfq_round_down(cl->F, slot_shift);
-	limit = qfq_round_down(q->V, slot_shift) + (1UL << slot_shift);
+	limit = qfq_round_down(q->V, slot_shift) + (1ULL << slot_shift);
 
 	if (!qfq_gt(cl->F, q->V) || qfq_gt(roundedF, limit)) {
 		/* timestamp was stale */

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] sch_qfq: fix overflow in qfq_update_start()
  2012-01-02 15:47 [PATCH] sch_qfq: fix overflow in qfq_update_start() Eric Dumazet
@ 2012-01-02 21:45 ` Eric Dumazet
  2012-01-02 21:56   ` Dave Taht
  2012-01-03 16:25 ` Stephen Hemminger
  2012-01-03 17:59 ` David Miller
  2 siblings, 1 reply; 6+ messages in thread
From: Eric Dumazet @ 2012-01-02 21:45 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, Stephen Hemminger, Dave Taht

Le lundi 02 janvier 2012 à 16:47 +0100, Eric Dumazet a écrit :
> grp->slot_shift is between 22 and 41, so using 32bit wide variables is
> probably a typo.
> 
> This could explain QFQ hangs Dave reported to me, after 2^23 packets ?
> 
> (23 = 64 - 41)
> 
> Reported-by: Dave Taht <dave.taht@gmail.com>
> CC: Stephen Hemminger <shemminger@vyatta.com>
> CC: Dave Taht <dave.taht@gmail.com>

Oh well, I forgot my SOB :(

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>

David please just tell me if you prefer me to resend it

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] sch_qfq: fix overflow in qfq_update_start()
  2012-01-02 21:45 ` Eric Dumazet
@ 2012-01-02 21:56   ` Dave Taht
  0 siblings, 0 replies; 6+ messages in thread
From: Dave Taht @ 2012-01-02 21:56 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: David Miller, netdev, Stephen Hemminger

On Mon, Jan 2, 2012 at 10:45 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Le lundi 02 janvier 2012 à 16:47 +0100, Eric Dumazet a écrit :
>> grp->slot_shift is between 22 and 41, so using 32bit wide variables is
>> probably a typo.
>>
>> This could explain QFQ hangs Dave reported to me, after 2^23 packets ?
>>
>> (23 = 64 - 41)
>>
>> Reported-by: Dave Taht <dave.taht@gmail.com>
>> CC: Stephen Hemminger <shemminger@vyatta.com>
>> CC: Dave Taht <dave.taht@gmail.com>
>
> Oh well, I forgot my SOB :(
>
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
>
> David please just tell me if you prefer me to resend it
>
>

I figure I'm the wrong david, but I'll be testing the QFQ patch overnight.
I have tested it for about an hour thus far.

Your SFQ patch, posted earlier today, does bring SFQ and QFQ back
into equivalence at 10 iperfs.

http://www.teklibre.com/~d/bloat/sfqnewvsqfq10iperfs.png

Well done.

-- 
Dave Täht
SKYPE: davetaht
US Tel: 1-239-829-5608
FR Tel: 0638645374
http://www.bufferbloat.net

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] sch_qfq: fix overflow in qfq_update_start()
  2012-01-02 15:47 [PATCH] sch_qfq: fix overflow in qfq_update_start() Eric Dumazet
  2012-01-02 21:45 ` Eric Dumazet
@ 2012-01-03 16:25 ` Stephen Hemminger
  2012-01-03 16:54   ` Luigi Rizzo
  2012-01-03 17:59 ` David Miller
  2 siblings, 1 reply; 6+ messages in thread
From: Stephen Hemminger @ 2012-01-03 16:25 UTC (permalink / raw)
  To: Eric Dumazet, Luigi Rizzo; +Cc: David Miller, netdev, Dave Taht

On Mon, 02 Jan 2012 16:47:57 +0100
Eric Dumazet <eric.dumazet@gmail.com> wrote:

> grp->slot_shift is between 22 and 41, so using 32bit wide variables is
> probably a typo.
> 
> This could explain QFQ hangs Dave reported to me, after 2^23 packets ?
> 
> (23 = 64 - 41)
> 
> Reported-by: Dave Taht <dave.taht@gmail.com>
> CC: Stephen Hemminger <shemminger@vyatta.com>
> CC: Dave Taht <dave.taht@gmail.com>
> ---
>  net/sched/sch_qfq.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
> index 1033434..7b03254 100644
> --- a/net/sched/sch_qfq.c
> +++ b/net/sched/sch_qfq.c
> @@ -817,11 +817,11 @@ skip_unblock:
>  static void qfq_update_start(struct qfq_sched *q, struct qfq_class *cl)
>  {
>  	unsigned long mask;
> -	uint32_t limit, roundedF;
> +	u64 limit, roundedF;
>  	int slot_shift = cl->grp->slot_shift;
>  
>  	roundedF = qfq_round_down(cl->F, slot_shift);
> -	limit = qfq_round_down(q->V, slot_shift) + (1UL << slot_shift);
> +	limit = qfq_round_down(q->V, slot_shift) + (1ULL << slot_shift);
>  
>  	if (!qfq_gt(cl->F, q->V) || qfq_gt(roundedF, limit)) {
>  		/* timestamp was stale */
> 
> 


You need to copy the BSD developers on these patches since
most of the code came from them and FreeBSD probably still has same bug!

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] sch_qfq: fix overflow in qfq_update_start()
  2012-01-03 16:25 ` Stephen Hemminger
@ 2012-01-03 16:54   ` Luigi Rizzo
  0 siblings, 0 replies; 6+ messages in thread
From: Luigi Rizzo @ 2012-01-03 16:54 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: Eric Dumazet, David Miller, netdev, Dave Taht

thanks, appreciated.

cheers
luigi

On Tue, Jan 03, 2012 at 08:25:57AM -0800, Stephen Hemminger wrote:
> On Mon, 02 Jan 2012 16:47:57 +0100
> Eric Dumazet <eric.dumazet@gmail.com> wrote:
> 
> > grp->slot_shift is between 22 and 41, so using 32bit wide variables is
> > probably a typo.
> > 
> > This could explain QFQ hangs Dave reported to me, after 2^23 packets ?
> > 
> > (23 = 64 - 41)
> > 
> > Reported-by: Dave Taht <dave.taht@gmail.com>
> > CC: Stephen Hemminger <shemminger@vyatta.com>
> > CC: Dave Taht <dave.taht@gmail.com>
> > ---
> >  net/sched/sch_qfq.c |    4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c
> > index 1033434..7b03254 100644
> > --- a/net/sched/sch_qfq.c
> > +++ b/net/sched/sch_qfq.c
> > @@ -817,11 +817,11 @@ skip_unblock:
> >  static void qfq_update_start(struct qfq_sched *q, struct qfq_class *cl)
> >  {
> >  	unsigned long mask;
> > -	uint32_t limit, roundedF;
> > +	u64 limit, roundedF;
> >  	int slot_shift = cl->grp->slot_shift;
> >  
> >  	roundedF = qfq_round_down(cl->F, slot_shift);
> > -	limit = qfq_round_down(q->V, slot_shift) + (1UL << slot_shift);
> > +	limit = qfq_round_down(q->V, slot_shift) + (1ULL << slot_shift);
> >  
> >  	if (!qfq_gt(cl->F, q->V) || qfq_gt(roundedF, limit)) {
> >  		/* timestamp was stale */
> > 
> > 
> 
> 
> You need to copy the BSD developers on these patches since
> most of the code came from them and FreeBSD probably still has same bug!

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] sch_qfq: fix overflow in qfq_update_start()
  2012-01-02 15:47 [PATCH] sch_qfq: fix overflow in qfq_update_start() Eric Dumazet
  2012-01-02 21:45 ` Eric Dumazet
  2012-01-03 16:25 ` Stephen Hemminger
@ 2012-01-03 17:59 ` David Miller
  2 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2012-01-03 17:59 UTC (permalink / raw)
  To: eric.dumazet; +Cc: netdev, shemminger, dave.taht

From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Mon, 02 Jan 2012 16:47:57 +0100

> grp->slot_shift is between 22 and 41, so using 32bit wide variables is
> probably a typo.
> 
> This could explain QFQ hangs Dave reported to me, after 2^23 packets ?
> 
> (23 = 64 - 41)
> 
> Reported-by: Dave Taht <dave.taht@gmail.com>
> CC: Stephen Hemminger <shemminger@vyatta.com>
> CC: Dave Taht <dave.taht@gmail.com>

Applied, thanks Eric.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-01-03 17:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-02 15:47 [PATCH] sch_qfq: fix overflow in qfq_update_start() Eric Dumazet
2012-01-02 21:45 ` Eric Dumazet
2012-01-02 21:56   ` Dave Taht
2012-01-03 16:25 ` Stephen Hemminger
2012-01-03 16:54   ` Luigi Rizzo
2012-01-03 17:59 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox