public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <eric.dumazet@gmail.com>
To: Stephen Hemminger <shemminger@vyatta.com>
Cc: David Miller <davem@davemloft.net>,
	Fabio Checconi <fabio@gandalf.sssup.it>,
	Luigi Rizzo <rizzo@iet.unipi.it>,
	netdev@vger.kernel.org
Subject: Re: [PATCH] sched: QFQ - quick fair queue scheduler (v3)
Date: Thu, 03 Mar 2011 23:28:53 +0100	[thread overview]
Message-ID: <1299191333.2547.12.camel@edumazet-laptop> (raw)
In-Reply-To: <20110303084839.3ae312ed@nehalam>

Le jeudi 03 mars 2011 à 08:48 -0800, Stephen Hemminger a écrit :
> This is an implementation of the Quick Fair Queue scheduler developed
> by Fabio Checconi. The same algorithm is already implemented in ipfw
> in FreeBSD. Fabio had an earlier version developed on Linux, I just
> cleaned it up.  Thanks to Eric Dumazet for doing the testing and
> finding bugs.
> 
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
> 
> ---
> v3 - bug fixes found by Eric
> 
>  include/linux/pkt_sched.h |   15 
>  net/sched/Kconfig         |   11 
>  net/sched/Makefile        |    1 
>  net/sched/sch_qfq.c       | 1125 ++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 1152 insertions(+)
> 


Hmm... please compile before sending your patches ;)

You used sched_priv(sch) calls instead of qdisc_priv(sch)

> +}
> +
> +static void qfq_destroy_class(struct Qdisc *sch, struct qfq_class *cl)
> +{
> +	struct qfq_sched *q = sched_priv(sch);

	q = qdisc_priv(sch);

> +
> +	if (cl->inv_w) {
> +		q->wsum -= ONE_FP / cl->inv_w;
> +		cl->inv_w = 0;
> +	}
> +
> +	gen_kill_estimator(&cl->bstats, &cl->rate_est);
> +	qdisc_destroy(cl->qdisc);
> +	kfree(cl);
> +}

> +
> +static void qfq_qlen_notify(struct Qdisc *sch, unsigned long arg)
> +{
> +	struct qfq_sched *q = sched_priv(sch);

	q = qdisc_priv(sch);

> +	struct qfq_class *cl = (struct qfq_class *)arg;
> +
> +	if (cl->qdisc->q.qlen == 0)
> +		qfq_deactivate_class(q, cl, NULL);
> +}
> +



> +static void qfq_reset_qdisc(struct Qdisc *sch)
> +{
> +	struct qfq_sched *q = qdisc_priv(sch);
> +	struct qfq_group *grp;
> +	struct qfq_class *cl, **pp;
> +	struct hlist_node *n;
> +	unsigned int i, j;
> +
> +	for (i = 0; i <= QFQ_MAX_INDEX; i++) {
> +		grp = &q->groups[i];
> +		for (j = 0; j < QFQ_MAX_SLOTS; j++) {
> +			for (pp = &grp->slots[j]; *pp; pp = &(*pp)->next) {
> +				cl = *pp;
> +				if (cl->qdisc->q.qlen)
> +					qfq_deactivate_class(q, cl, pp);


Here there is the problem of *pp = cl->next (possibly NULL)

		maybe use

	for (pp = &grp->slots[j]; (cl = *pp) != NULL;) {
		if (cl->qdisc->q.len)
			qfq_deactivate_class(...);
		else
			pp = &cl->next;
	}


> +			}
> +		}
> +	}
> +
> +	for (i = 0; i < q->clhash.hashsize; i++) {
> +		hlist_for_each_entry(cl, n, &q->clhash.hash[i], common.hnode)
> +			qdisc_reset(cl->qdisc);
> +	}
> +	sch->q.qlen = 0;
> +}
> +




  reply	other threads:[~2011-03-03 22:28 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-01  1:17 [PATCH] sched: QFQ - quick fair queue scheduler (v2) Stephen Hemminger
2011-03-01  5:28 ` Eric Dumazet
2011-03-02  2:06 ` Fabio Checconi
2011-03-02 11:17   ` Eric Dumazet
2011-03-02 16:11     ` Stephen Hemminger
2011-03-02 16:18       ` Eric Dumazet
2011-03-02 17:31         ` Eric Dumazet
2011-03-02 18:16           ` Patrick McHardy
2011-03-03  9:35             ` Eric Dumazet
2011-03-02 23:55           ` Stephen Hemminger
2011-03-03  8:19           ` Fabio Checconi
2011-03-03  8:27             ` Eric Dumazet
2011-03-03 10:40               ` Eric Dumazet
2011-03-03 15:07                 ` Fabio Checconi
2011-03-03 15:25                   ` Eric Dumazet
2011-03-03 15:31                     ` Eric Dumazet
2011-03-03 15:39                       ` Eric Dumazet
2011-03-03 15:18                 ` Eric Dumazet
     [not found]                   ` <20110303161912.GC29685@gandalf.sssup.it>
     [not found]                     ` <1299170053.2983.134.camel@edumazet-laptop>
     [not found]                       ` <20110303181339.GD29685@gandalf.sssup.it>
     [not found]                         ` <1299180567.2547.4.camel@edumazet-laptop>
     [not found]                           ` <1299192974.2547.13.camel@edumazet-laptop>
     [not found]                             ` <20110304064302.GE29685@gandalf.sssup.it>
     [not found]                               ` <1299222074.2547.50.camel@edumazet-laptop>
     [not found]                                 ` <AANLkTinAGjZ5SAOA1iUAFu5rtYydeb6Soy_Xg5kMvn-z@mail.gmail.com>
     [not found]                                   ` <1299274468.2758.4.camel@edumazet-laptop>
     [not found]                                     ` <AANLkTikeQCfShKfZWq2Y7V_MA4iRjQvWWtkC68rK9nUm@mail.gmail.com>
     [not found]                                       ` <1299277003.2758.52.camel@edumazet-laptop>
     [not found]                                         ` <AANLkTinR7QDC2uGjQurJQ1JfBA7q1pxyewePggh87z8E@mail.gmail.com>
     [not found]                                           ` <1299278778.2758.53.camel@edumazet-laptop>
     [not found]                                             ` <AANLkTikBoQd+ZA1kY0F0MvUsJ8Y=9KwGkfmZNdi4hLXz@mail.gmail.com>
     [not found]                                               ` <20110304150741.5d4aa354@nehalam>
     [not found]                                                 ` <AANLkTi=HBDayfd0bEA+AQqzjTKMajghet=UJAw9vL56A@mail.gmail.com>
     [not found]                                                   ` <20110309110242.3307ca69@nehalam>
     [not found]                                                     ` <1300016057.2761.16.camel@edumazet-laptop>
     [not found]                                                       ` <1300034690.2761.29.camel@edumazet-laptop>
2011-03-23  6:45                                                         ` [BUG] net_sched: failed bisection Eric Dumazet
2011-03-24  6:53                                                           ` [PATCH] net_sched: fix THROTTLED/RUNNING race Eric Dumazet
2011-03-24  7:13                                                             ` David Miller
2011-03-03  9:07             ` [PATCH] sched: QFQ - quick fair queue scheduler (v2) Eric Dumazet
2011-03-02 11:50 ` Patrick McHardy
2011-03-02 15:41 ` Eric Dumazet
2011-03-02 15:53 ` Eric Dumazet
2011-03-03 16:03 ` Eric Dumazet
2011-03-03 16:48   ` [PATCH] sched: QFQ - quick fair queue scheduler (v3) Stephen Hemminger
2011-03-03 22:28     ` Eric Dumazet [this message]
2011-03-03 22:59       ` Stephen Hemminger
2011-03-03 23:02         ` [PATCH] sched: QFQ - quick fair queue scheduler (v3.1) Stephen Hemminger
2011-03-03 23:12           ` Eric Dumazet
2011-03-04  0:03       ` [PATCH] sched: QFQ - quick fair queue scheduler (v3) Stephen Hemminger
2011-03-04  0:30         ` [PATCH] sched: QFQ - quick fair queue scheduler (v4) Stephen Hemminger
2011-03-04  6:50           ` Eric Dumazet
2011-03-04 17:17             ` Stephen Hemminger
2011-03-04 17:18             ` Stephen Hemminger
2011-03-04 17:20             ` QFQ debugfs Stephen Hemminger

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=1299191333.2547.12.camel@edumazet-laptop \
    --to=eric.dumazet@gmail.com \
    --cc=davem@davemloft.net \
    --cc=fabio@gandalf.sssup.it \
    --cc=netdev@vger.kernel.org \
    --cc=rizzo@iet.unipi.it \
    --cc=shemminger@vyatta.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox