All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick McHardy <kaber@trash.net>
To: David Kimdon <david.kimdon@devicescape.com>
Cc: netdev@vger.kernel.org,
	"John W. Linville" <linville@tuxdriver.com>,
	Jiri Benc <jbenc@suse.cz>
Subject: Re: [patch] d80211: use pfifo_qdisc_ops rather than d80211-specific qdisc
Date: Thu, 26 Oct 2006 03:21:10 +0200	[thread overview]
Message-ID: <45400D86.70406@trash.net> (raw)
In-Reply-To: <453FF357.6060007@trash.net>

Patrick McHardy wrote:
> David Kimdon wrote:
> 
>>wme.c needs a generic fifo qdisc for each hardware queue.  Switch 
>>wme.c to use the generic fifo qdisc in net/sched/sch_fifo.c.  This allows
>>removal of net/d80211/fifo_qdisc.c which isn't particularily tied to
>>IEEE 802.11 in any way.
>>
>>-#define CHILD_QDISC_OPS pfifo_qdisc_ops
>>-
>> static inline int WLAN_FC_IS_QOS_DATA(u16 fc)
>> {
>> 	return (fc & 0x8C) == 0x88;
>>@@ -433,7 +431,7 @@ static int wme_qdiscop_init(struct Qdisc
>> 	/* create child queues */
>> 	for (i = 0; i < queues; i++) {
>> 		skb_queue_head_init(&q->requeued[i]);
>>-		q->queues[i] = qdisc_create_dflt(qd->dev, &CHILD_QDISC_OPS);
>>+		q->queues[i] = qdisc_create_dflt(qd->dev, &pfifo_qdisc_ops);
>> 		if (q->queues[i] == 0) {
>> 			q->queues[i] = &noop_qdisc;
>> 			printk(KERN_ERR "%s child qdisc %i creation failed", dev->name, i);
>>Index: wireless-dev/net/d80211/Kconfig
>>===================================================================
>>--- wireless-dev.orig/net/d80211/Kconfig
>>+++ wireless-dev/net/d80211/Kconfig
>>@@ -3,6 +3,7 @@ config D80211
>> 	select CRYPTO
>> 	select CRYPTO_ARC4
>> 	select CRYPTO_AES
>>+	select NET_SCHED
> 
> 
> 
> pfifo_fast is available even without CONFIG_NET_SCHED, maybe
> thats a better choice to avoid unnecessary bloat.

BTW, I noticed a few bugs while looking at the qdisc handling in
wireless-dev:

- wme_qdiscop_enqueue doesn't increment q.qlen for packets queued
  to q->requeued[], which might cause upper layer code to stop
  dequeueing if q.qlen reaches zero.

- classify_1d doesn't care about tc_classify return values.
  tc_classify may decide to steal packets, drop them, etc. In case
  of stolen packets this causes use-after-free, otherwise just
  malfunctions.

- classify_1d returns res.class if it is != -1, which can never happen
  (except with an empty classifier list because of the explicit
  initialization, but you should check the return code) since ->get()
  and ->bind_tcf() both return 0 for invalid classes and the classid
  otherwise. There's also an off-by-one, classids start at one, so it
  should return res.class - 1 (or better res.classid - 1, which is
  meant to be a numerical identifier).

- wme_discop_destroy leaks classifier module references and memory
  when destroying classifiers, it should use tcf_destroy()

Considering that it is possibly and may be desirable to attach a
different qdisc than the built-in multiband qdisc, it might also
make sense to split the 80211 specific classification in a seperate
classifier module to allow simple classification of management traffic
with other qdiscs.


  reply	other threads:[~2006-10-26  1:21 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-25 22:04 [patch] d80211: use pfifo_qdisc_ops rather than d80211-specific qdisc David Kimdon
2006-10-25 23:29 ` Patrick McHardy
2006-10-26  1:21   ` Patrick McHardy [this message]
2006-10-26  2:38     ` Jeff Garzik
2006-10-26  3:37       ` Simon Barber
2006-10-26  5:04         ` Jeff Garzik
2006-10-26  5:15           ` Simon Barber
2006-11-01 10:28             ` Jiri Benc
2006-11-01 14:20               ` John W. Linville
2006-11-01 18:31                 ` James Ketrenos
2006-11-02  0:30                   ` Jeff Garzik
2006-11-02  1:48                     ` d80211 merge (was Re: [patch] d80211: use pfifo_qdisc_ops rather than d80211-specific qdisc) James Ketrenos
2006-11-02  2:55                       ` Jeff Garzik
2006-11-02  8:49                         ` cfg80211/nl80211/WE (was: Re: d80211 merge) Johannes Berg
2006-11-02  8:59                           ` cfg80211/nl80211/WE Jeff Garzik
2006-11-02 10:56                           ` cfg80211/nl80211/WE (was: Re: d80211 merge) Christoph Hellwig
2006-11-02 12:03                             ` Johannes Berg
2006-11-02 12:16                   ` [patch] d80211: use pfifo_qdisc_ops rather than d80211-specific qdisc Christoph Hellwig
2006-11-02 14:05                     ` Jiri Benc
2006-11-02 14:18                       ` Christoph Hellwig
2006-11-02 14:32                         ` Johannes Berg
2006-11-02 14:41                           ` Jochen Friedrich
2006-11-02 14:45                           ` Christoph Hellwig
2006-11-02 15:02                             ` Johannes Berg
2006-11-02 16:38                             ` Simon Barber
2006-11-02 15:42                         ` Jiri Benc
2006-11-02 16:09                           ` Sven-Haegar Koch
2006-11-02 18:38                             ` Jiri Benc
2006-11-02 20:58                               ` Dan Williams
2006-11-02 21:27                               ` Simon Barber
2006-11-02 22:48                                 ` Stephen Hemminger
2006-11-02 23:15                                   ` Luis R. Rodriguez
2006-11-02 14:22                       ` Johannes Berg
2006-11-02 16:33                         ` [patch] d80211: use pfifo_qdisc_ops rather thand80211-specific qdisc Simon Barber
2006-11-02 16:43                           ` Johannes Berg
2006-11-02 22:34                             ` Stephen Hemminger
2006-11-02 22:56                               ` Johannes Berg
2006-11-03 19:23                                 ` [patch] d80211: use pfifo_qdisc_ops rather thand80211-specificqdisc Simon Barber
2006-11-03 19:29                                   ` Simon Barber
2006-11-03 19:39                                     ` John W. Linville
2006-11-03 23:07                                   ` Johannes Berg
2006-11-04  2:20                                     ` [patch] d80211: use pfifo_qdisc_ops ratherthand80211-specificqdisc Simon Barber
2006-11-02 14:06                     ` [patch] d80211: use pfifo_qdisc_ops rather than d80211-specific qdisc John W. Linville
2006-10-26  1:34   ` Simon Barber
2006-10-26  1:49     ` Patrick McHardy
2006-10-26  3:17       ` Simon Barber
2006-10-26  2:04     ` Patrick McHardy

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=45400D86.70406@trash.net \
    --to=kaber@trash.net \
    --cc=david.kimdon@devicescape.com \
    --cc=jbenc@suse.cz \
    --cc=linville@tuxdriver.com \
    --cc=netdev@vger.kernel.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.