Skip to content

Commit

Permalink
pkt_sched: Remove 'dev' member of struct Qdisc.
Browse files Browse the repository at this point in the history
It can be obtained via the netdev_queue.  So create a helper routine,
qdisc_dev(), to make the transformations nicer looking.

Now, qdisc_alloc() now no longer needs a net_device pointer argument.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
davem330 committed Jul 9, 2008
1 parent bb949fb commit 5ce2d48
Show file tree
Hide file tree
Showing 17 changed files with 93 additions and 92 deletions.
16 changes: 9 additions & 7 deletions include/net/sch_generic.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ struct Qdisc
atomic_t refcnt;
struct sk_buff_head q;
struct netdev_queue *dev_queue;
struct net_device *dev;
struct list_head list;

struct gnet_stats_basic bstats;
Expand Down Expand Up @@ -156,14 +155,18 @@ struct tcf_proto
struct tcf_proto_ops *ops;
};

static inline struct net_device *qdisc_dev(struct Qdisc *qdisc)
{
return qdisc->dev_queue->dev;
}

extern void qdisc_lock_tree(struct net_device *dev);
extern void qdisc_unlock_tree(struct net_device *dev);

#define sch_tree_lock(q) qdisc_lock_tree((q)->dev)
#define sch_tree_unlock(q) qdisc_unlock_tree((q)->dev)
#define tcf_tree_lock(tp) qdisc_lock_tree((tp)->q->dev)
#define tcf_tree_unlock(tp) qdisc_unlock_tree((tp)->q->dev)
#define sch_tree_lock(q) qdisc_lock_tree(qdisc_dev(q))
#define sch_tree_unlock(q) qdisc_unlock_tree(qdisc_dev(q))
#define tcf_tree_lock(tp) qdisc_lock_tree(qdisc_dev((tp)->q))
#define tcf_tree_unlock(tp) qdisc_unlock_tree(qdisc_dev((tp)->q))

extern struct Qdisc noop_qdisc;
extern struct Qdisc_ops noop_qdisc_ops;
Expand Down Expand Up @@ -217,8 +220,7 @@ extern void dev_deactivate(struct net_device *dev);
extern void qdisc_reset(struct Qdisc *qdisc);
extern void qdisc_destroy(struct Qdisc *qdisc);
extern void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n);
extern struct Qdisc *qdisc_alloc(struct net_device *dev,
struct netdev_queue *dev_queue,
extern struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
struct Qdisc_ops *ops);
extern struct Qdisc *qdisc_create_dflt(struct net_device *dev,
struct netdev_queue *dev_queue,
Expand Down
28 changes: 14 additions & 14 deletions net/mac80211/wme.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ static inline int wme_downgrade_ac(struct sk_buff *skb)
* negative return value indicates to drop the frame */
static int classify80211(struct sk_buff *skb, struct Qdisc *qd)
{
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;

if (!ieee80211_is_data(hdr->frame_control)) {
Expand Down Expand Up @@ -140,7 +140,7 @@ static int classify80211(struct sk_buff *skb, struct Qdisc *qd)

static int wme_qdiscop_enqueue(struct sk_buff *skb, struct Qdisc* qd)
{
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;
struct ieee80211_sched_data *q = qdisc_priv(qd);
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
Expand Down Expand Up @@ -249,7 +249,7 @@ static int wme_qdiscop_requeue(struct sk_buff *skb, struct Qdisc* qd)
static struct sk_buff *wme_qdiscop_dequeue(struct Qdisc* qd)
{
struct ieee80211_sched_data *q = qdisc_priv(qd);
struct net_device *dev = qd->dev;
struct net_device *dev = qdisc_dev(qd);
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;
struct sk_buff *skb;
Expand Down Expand Up @@ -286,7 +286,7 @@ static struct sk_buff *wme_qdiscop_dequeue(struct Qdisc* qd)
static void wme_qdiscop_reset(struct Qdisc* qd)
{
struct ieee80211_sched_data *q = qdisc_priv(qd);
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;
int queue;

Expand All @@ -303,7 +303,7 @@ static void wme_qdiscop_reset(struct Qdisc* qd)
static void wme_qdiscop_destroy(struct Qdisc* qd)
{
struct ieee80211_sched_data *q = qdisc_priv(qd);
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;
int queue;

Expand All @@ -328,7 +328,7 @@ static int wme_qdiscop_tune(struct Qdisc *qd, struct nlattr *opt)
static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
{
struct ieee80211_sched_data *q = qdisc_priv(qd);
struct net_device *dev = qd->dev;
struct net_device *dev = qdisc_dev(qd);
struct ieee80211_local *local;
struct ieee80211_hw *hw;
int err = 0, i;
Expand Down Expand Up @@ -359,7 +359,7 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
/* create child queues */
for (i = 0; i < QD_NUM(hw); i++) {
skb_queue_head_init(&q->requeued[i]);
q->queues[i] = qdisc_create_dflt(qd->dev, qd->dev_queue,
q->queues[i] = qdisc_create_dflt(qdisc_dev(qd), qd->dev_queue,
&pfifo_qdisc_ops,
qd->handle);
if (!q->queues[i]) {
Expand All @@ -386,7 +386,7 @@ static int wme_classop_graft(struct Qdisc *qd, unsigned long arg,
struct Qdisc *new, struct Qdisc **old)
{
struct ieee80211_sched_data *q = qdisc_priv(qd);
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;
unsigned long queue = arg - 1;

Expand All @@ -410,7 +410,7 @@ static struct Qdisc *
wme_classop_leaf(struct Qdisc *qd, unsigned long arg)
{
struct ieee80211_sched_data *q = qdisc_priv(qd);
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;
unsigned long queue = arg - 1;

Expand All @@ -423,7 +423,7 @@ wme_classop_leaf(struct Qdisc *qd, unsigned long arg)

static unsigned long wme_classop_get(struct Qdisc *qd, u32 classid)
{
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;
unsigned long queue = TC_H_MIN(classid);

Expand All @@ -450,7 +450,7 @@ static int wme_classop_change(struct Qdisc *qd, u32 handle, u32 parent,
struct nlattr **tca, unsigned long *arg)
{
unsigned long cl = *arg;
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;

if (cl - 1 > QD_NUM(hw))
Expand All @@ -467,7 +467,7 @@ static int wme_classop_change(struct Qdisc *qd, u32 handle, u32 parent,
* when we add WMM-SA support - TSPECs may be deleted here */
static int wme_classop_delete(struct Qdisc *qd, unsigned long cl)
{
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;

if (cl - 1 > QD_NUM(hw))
Expand All @@ -480,7 +480,7 @@ static int wme_classop_dump_class(struct Qdisc *qd, unsigned long cl,
struct sk_buff *skb, struct tcmsg *tcm)
{
struct ieee80211_sched_data *q = qdisc_priv(qd);
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;

if (cl - 1 > QD_NUM(hw))
Expand All @@ -494,7 +494,7 @@ static int wme_classop_dump_class(struct Qdisc *qd, unsigned long cl,

static void wme_classop_walk(struct Qdisc *qd, struct qdisc_walker *arg)
{
struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
struct ieee80211_local *local = wdev_priv(qdisc_dev(qd)->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw;
int queue;

Expand Down
2 changes: 1 addition & 1 deletion net/sched/cls_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ static int tcf_fill_node(struct sk_buff *skb, struct tcf_proto *tp,
tcm->tcm_family = AF_UNSPEC;
tcm->tcm__pad1 = 0;
tcm->tcm__pad1 = 0;
tcm->tcm_ifindex = tp->q->dev->ifindex;
tcm->tcm_ifindex = qdisc_dev(tp->q)->ifindex;
tcm->tcm_parent = tp->classid;
tcm->tcm_info = TC_H_MAKE(tp->prio, tp->protocol);
NLA_PUT_STRING(skb, TCA_KIND, tp->ops->kind);
Expand Down
4 changes: 2 additions & 2 deletions net/sched/cls_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ static int route4_delete(struct tcf_proto *tp, unsigned long arg)
*fp = f->next;
tcf_tree_unlock(tp);

route4_reset_fastmap(tp->q->dev, head, f->id);
route4_reset_fastmap(qdisc_dev(tp->q), head, f->id);
route4_delete_filter(tp, f);

/* Strip tree */
Expand Down Expand Up @@ -500,7 +500,7 @@ static int route4_change(struct tcf_proto *tp, unsigned long base,
}
tcf_tree_unlock(tp);

route4_reset_fastmap(tp->q->dev, head, f->id);
route4_reset_fastmap(qdisc_dev(tp->q), head, f->id);
*arg = (unsigned long)f;
return 0;

Expand Down
10 changes: 5 additions & 5 deletions net/sched/sch_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ static enum hrtimer_restart qdisc_watchdog(struct hrtimer *timer)
{
struct qdisc_watchdog *wd = container_of(timer, struct qdisc_watchdog,
timer);
struct net_device *dev = wd->qdisc->dev;
struct net_device *dev = qdisc_dev(wd->qdisc);

wd->qdisc->flags &= ~TCQ_F_THROTTLED;
smp_wmb();
Expand Down Expand Up @@ -493,7 +493,7 @@ void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
if (TC_H_MAJ(parentid) == TC_H_MAJ(TC_H_INGRESS))
return;

sch = qdisc_lookup(sch->dev, TC_H_MAJ(parentid));
sch = qdisc_lookup(qdisc_dev(sch), TC_H_MAJ(parentid));
if (sch == NULL) {
WARN_ON(parentid != TC_H_ROOT);
return;
Expand Down Expand Up @@ -593,7 +593,7 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
if (ops == NULL)
goto err_out;

sch = qdisc_alloc(dev, dev_queue, ops);
sch = qdisc_alloc(dev_queue, ops);
if (IS_ERR(sch)) {
err = PTR_ERR(sch);
goto err_out2;
Expand Down Expand Up @@ -940,7 +940,7 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid,
tcm->tcm_family = AF_UNSPEC;
tcm->tcm__pad1 = 0;
tcm->tcm__pad2 = 0;
tcm->tcm_ifindex = q->dev->ifindex;
tcm->tcm_ifindex = qdisc_dev(q)->ifindex;
tcm->tcm_parent = clid;
tcm->tcm_handle = q->handle;
tcm->tcm_info = atomic_read(&q->refcnt);
Expand Down Expand Up @@ -1186,7 +1186,7 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q,
nlh = NLMSG_NEW(skb, pid, seq, event, sizeof(*tcm), flags);
tcm = NLMSG_DATA(nlh);
tcm->tcm_family = AF_UNSPEC;
tcm->tcm_ifindex = q->dev->ifindex;
tcm->tcm_ifindex = qdisc_dev(q)->ifindex;
tcm->tcm_parent = q->handle;
tcm->tcm_handle = q->handle;
tcm->tcm_info = 0;
Expand Down
4 changes: 2 additions & 2 deletions net/sched/sch_atm.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent,
goto err_out;
}
flow->filter_list = NULL;
flow->q = qdisc_create_dflt(sch->dev, sch->dev_queue,
flow->q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, classid);
if (!flow->q)
flow->q = &noop_qdisc;
Expand Down Expand Up @@ -556,7 +556,7 @@ static int atm_tc_init(struct Qdisc *sch, struct nlattr *opt)

pr_debug("atm_tc_init(sch %p,[qdisc %p],opt %p)\n", sch, p, opt);
p->flows = &p->link;
p->link.q = qdisc_create_dflt(sch->dev, sch->dev_queue,
p->link.q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, sch->handle);
if (!p->link.q)
p->link.q = &noop_qdisc;
Expand Down
22 changes: 11 additions & 11 deletions net/sched/sch_cbq.c
Original file line number Diff line number Diff line change
Expand Up @@ -650,7 +650,7 @@ static enum hrtimer_restart cbq_undelay(struct hrtimer *timer)
}

sch->flags &= ~TCQ_F_THROTTLED;
netif_schedule(sch->dev);
netif_schedule(qdisc_dev(sch));
return HRTIMER_NORESTART;
}

Expand Down Expand Up @@ -1077,9 +1077,9 @@ static void cbq_normalize_quanta(struct cbq_sched_data *q, int prio)
cl->quantum = (cl->weight*cl->allot*q->nclasses[prio])/
q->quanta[prio];
}
if (cl->quantum <= 0 || cl->quantum>32*cl->qdisc->dev->mtu) {
if (cl->quantum <= 0 || cl->quantum>32*qdisc_dev(cl->qdisc)->mtu) {
printk(KERN_WARNING "CBQ: class %08x has bad quantum==%ld, repaired.\n", cl->common.classid, cl->quantum);
cl->quantum = cl->qdisc->dev->mtu/2 + 1;
cl->quantum = qdisc_dev(cl->qdisc)->mtu/2 + 1;
}
}
}
Expand Down Expand Up @@ -1401,7 +1401,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt)
q->link.sibling = &q->link;
q->link.common.classid = sch->handle;
q->link.qdisc = sch;
if (!(q->link.q = qdisc_create_dflt(sch->dev, sch->dev_queue,
if (!(q->link.q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops,
sch->handle)))
q->link.q = &noop_qdisc;
Expand All @@ -1411,7 +1411,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt)
q->link.cpriority = TC_CBQ_MAXPRIO-1;
q->link.ovl_strategy = TC_CBQ_OVL_CLASSIC;
q->link.overlimit = cbq_ovl_classic;
q->link.allot = psched_mtu(sch->dev);
q->link.allot = psched_mtu(qdisc_dev(sch));
q->link.quantum = q->link.allot;
q->link.weight = q->link.R_tab->rate.rate;

Expand Down Expand Up @@ -1646,7 +1646,7 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,

if (cl) {
if (new == NULL) {
new = qdisc_create_dflt(sch->dev, sch->dev_queue,
new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops,
cl->common.classid);
if (new == NULL)
Expand Down Expand Up @@ -1746,10 +1746,10 @@ static void cbq_put(struct Qdisc *sch, unsigned long arg)
#ifdef CONFIG_NET_CLS_ACT
struct cbq_sched_data *q = qdisc_priv(sch);

spin_lock_bh(&sch->dev->queue_lock);
spin_lock_bh(&qdisc_dev(sch)->queue_lock);
if (q->rx_class == cl)
q->rx_class = NULL;
spin_unlock_bh(&sch->dev->queue_lock);
spin_unlock_bh(&qdisc_dev(sch)->queue_lock);
#endif

cbq_destroy_class(sch, cl);
Expand Down Expand Up @@ -1828,7 +1828,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t

if (tca[TCA_RATE])
gen_replace_estimator(&cl->bstats, &cl->rate_est,
&sch->dev->queue_lock,
&qdisc_dev(sch)->queue_lock,
tca[TCA_RATE]);
return 0;
}
Expand Down Expand Up @@ -1879,7 +1879,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
cl->R_tab = rtab;
rtab = NULL;
cl->refcnt = 1;
if (!(cl->q = qdisc_create_dflt(sch->dev, sch->dev_queue,
if (!(cl->q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, classid)))
cl->q = &noop_qdisc;
cl->common.classid = classid;
Expand Down Expand Up @@ -1919,7 +1919,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t

if (tca[TCA_RATE])
gen_new_estimator(&cl->bstats, &cl->rate_est,
&sch->dev->queue_lock, tca[TCA_RATE]);
&qdisc_dev(sch)->queue_lock, tca[TCA_RATE]);

*arg = (unsigned long)cl;
return 0;
Expand Down
4 changes: 2 additions & 2 deletions net/sched/sch_dsmark.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ static int dsmark_graft(struct Qdisc *sch, unsigned long arg,
sch, p, new, old);

if (new == NULL) {
new = qdisc_create_dflt(sch->dev, sch->dev_queue,
new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops,
sch->handle);
if (new == NULL)
Expand Down Expand Up @@ -391,7 +391,7 @@ static int dsmark_init(struct Qdisc *sch, struct nlattr *opt)
p->default_index = default_index;
p->set_tc_index = nla_get_flag(tb[TCA_DSMARK_SET_TC_INDEX]);

p->q = qdisc_create_dflt(sch->dev, sch->dev_queue,
p->q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, sch->handle);
if (p->q == NULL)
p->q = &noop_qdisc;
Expand Down
6 changes: 3 additions & 3 deletions net/sched/sch_fifo.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ static int fifo_init(struct Qdisc *sch, struct nlattr *opt)
struct fifo_sched_data *q = qdisc_priv(sch);

if (opt == NULL) {
u32 limit = sch->dev->tx_queue_len ? : 1;
u32 limit = qdisc_dev(sch)->tx_queue_len ? : 1;

if (sch->ops == &bfifo_qdisc_ops)
limit *= sch->dev->mtu;
limit *= qdisc_dev(sch)->mtu;

q->limit = limit;
} else {
Expand Down Expand Up @@ -137,7 +137,7 @@ struct Qdisc *fifo_create_dflt(struct Qdisc *sch, struct Qdisc_ops *ops,
struct Qdisc *q;
int err = -ENOMEM;

q = qdisc_create_dflt(sch->dev, sch->dev_queue,
q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
ops, TC_H_MAKE(sch->handle, 1));
if (q) {
err = fifo_set_limit(q, limit);
Expand Down
Loading

0 comments on commit 5ce2d48

Please sign in to comment.