Commit 5ce2d488 authored by David S. Miller's avatar David S. Miller

pkt_sched: Remove 'dev' member of struct Qdisc.

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: default avatarDavid S. Miller <davem@davemloft.net>
parent bb949fbd
...@@ -38,7 +38,6 @@ struct Qdisc ...@@ -38,7 +38,6 @@ struct Qdisc
atomic_t refcnt; atomic_t refcnt;
struct sk_buff_head q; struct sk_buff_head q;
struct netdev_queue *dev_queue; struct netdev_queue *dev_queue;
struct net_device *dev;
struct list_head list; struct list_head list;
struct gnet_stats_basic bstats; struct gnet_stats_basic bstats;
...@@ -156,14 +155,18 @@ struct tcf_proto ...@@ -156,14 +155,18 @@ struct tcf_proto
struct tcf_proto_ops *ops; 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_lock_tree(struct net_device *dev);
extern void qdisc_unlock_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_lock(q) qdisc_lock_tree(qdisc_dev(q))
#define sch_tree_unlock(q) qdisc_unlock_tree((q)->dev) #define sch_tree_unlock(q) qdisc_unlock_tree(qdisc_dev(q))
#define tcf_tree_lock(tp) qdisc_lock_tree((tp)->q->dev) #define tcf_tree_lock(tp) qdisc_lock_tree(qdisc_dev((tp)->q))
#define tcf_tree_unlock(tp) qdisc_unlock_tree((tp)->q->dev) #define tcf_tree_unlock(tp) qdisc_unlock_tree(qdisc_dev((tp)->q))
extern struct Qdisc noop_qdisc; extern struct Qdisc noop_qdisc;
extern struct Qdisc_ops noop_qdisc_ops; extern struct Qdisc_ops noop_qdisc_ops;
...@@ -217,8 +220,7 @@ extern void dev_deactivate(struct net_device *dev); ...@@ -217,8 +220,7 @@ extern void dev_deactivate(struct net_device *dev);
extern void qdisc_reset(struct Qdisc *qdisc); extern void qdisc_reset(struct Qdisc *qdisc);
extern void qdisc_destroy(struct Qdisc *qdisc); extern void qdisc_destroy(struct Qdisc *qdisc);
extern void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n); extern void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n);
extern struct Qdisc *qdisc_alloc(struct net_device *dev, extern struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
struct netdev_queue *dev_queue,
struct Qdisc_ops *ops); struct Qdisc_ops *ops);
extern struct Qdisc *qdisc_create_dflt(struct net_device *dev, extern struct Qdisc *qdisc_create_dflt(struct net_device *dev,
struct netdev_queue *dev_queue, struct netdev_queue *dev_queue,
......
...@@ -103,7 +103,7 @@ static inline int wme_downgrade_ac(struct sk_buff *skb) ...@@ -103,7 +103,7 @@ static inline int wme_downgrade_ac(struct sk_buff *skb)
* negative return value indicates to drop the frame */ * negative return value indicates to drop the frame */
static int classify80211(struct sk_buff *skb, struct Qdisc *qd) 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; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
if (!ieee80211_is_data(hdr->frame_control)) { if (!ieee80211_is_data(hdr->frame_control)) {
...@@ -140,7 +140,7 @@ static int classify80211(struct sk_buff *skb, struct Qdisc *qd) ...@@ -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) 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_hw *hw = &local->hw;
struct ieee80211_sched_data *q = qdisc_priv(qd); struct ieee80211_sched_data *q = qdisc_priv(qd);
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
...@@ -249,7 +249,7 @@ static int wme_qdiscop_requeue(struct sk_buff *skb, struct Qdisc* qd) ...@@ -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) static struct sk_buff *wme_qdiscop_dequeue(struct Qdisc* qd)
{ {
struct ieee80211_sched_data *q = qdisc_priv(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_local *local = wdev_priv(dev->ieee80211_ptr);
struct ieee80211_hw *hw = &local->hw; struct ieee80211_hw *hw = &local->hw;
struct sk_buff *skb; struct sk_buff *skb;
...@@ -286,7 +286,7 @@ static struct sk_buff *wme_qdiscop_dequeue(struct Qdisc* qd) ...@@ -286,7 +286,7 @@ static struct sk_buff *wme_qdiscop_dequeue(struct Qdisc* qd)
static void wme_qdiscop_reset(struct Qdisc* qd) static void wme_qdiscop_reset(struct Qdisc* qd)
{ {
struct ieee80211_sched_data *q = qdisc_priv(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; struct ieee80211_hw *hw = &local->hw;
int queue; int queue;
...@@ -303,7 +303,7 @@ static void wme_qdiscop_reset(struct Qdisc* qd) ...@@ -303,7 +303,7 @@ static void wme_qdiscop_reset(struct Qdisc* qd)
static void wme_qdiscop_destroy(struct Qdisc* qd) static void wme_qdiscop_destroy(struct Qdisc* qd)
{ {
struct ieee80211_sched_data *q = qdisc_priv(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; struct ieee80211_hw *hw = &local->hw;
int queue; int queue;
...@@ -328,7 +328,7 @@ static int wme_qdiscop_tune(struct Qdisc *qd, struct nlattr *opt) ...@@ -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) static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
{ {
struct ieee80211_sched_data *q = qdisc_priv(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; struct ieee80211_local *local;
struct ieee80211_hw *hw; struct ieee80211_hw *hw;
int err = 0, i; int err = 0, i;
...@@ -359,7 +359,7 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt) ...@@ -359,7 +359,7 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct nlattr *opt)
/* create child queues */ /* create child queues */
for (i = 0; i < QD_NUM(hw); i++) { for (i = 0; i < QD_NUM(hw); i++) {
skb_queue_head_init(&q->requeued[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, &pfifo_qdisc_ops,
qd->handle); qd->handle);
if (!q->queues[i]) { if (!q->queues[i]) {
...@@ -386,7 +386,7 @@ static int wme_classop_graft(struct Qdisc *qd, unsigned long arg, ...@@ -386,7 +386,7 @@ static int wme_classop_graft(struct Qdisc *qd, unsigned long arg,
struct Qdisc *new, struct Qdisc **old) struct Qdisc *new, struct Qdisc **old)
{ {
struct ieee80211_sched_data *q = qdisc_priv(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; struct ieee80211_hw *hw = &local->hw;
unsigned long queue = arg - 1; unsigned long queue = arg - 1;
...@@ -410,7 +410,7 @@ static struct Qdisc * ...@@ -410,7 +410,7 @@ static struct Qdisc *
wme_classop_leaf(struct Qdisc *qd, unsigned long arg) wme_classop_leaf(struct Qdisc *qd, unsigned long arg)
{ {
struct ieee80211_sched_data *q = qdisc_priv(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; struct ieee80211_hw *hw = &local->hw;
unsigned long queue = arg - 1; unsigned long queue = arg - 1;
...@@ -423,7 +423,7 @@ wme_classop_leaf(struct Qdisc *qd, unsigned long arg) ...@@ -423,7 +423,7 @@ wme_classop_leaf(struct Qdisc *qd, unsigned long arg)
static unsigned long wme_classop_get(struct Qdisc *qd, u32 classid) 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; struct ieee80211_hw *hw = &local->hw;
unsigned long queue = TC_H_MIN(classid); unsigned long queue = TC_H_MIN(classid);
...@@ -450,7 +450,7 @@ static int wme_classop_change(struct Qdisc *qd, u32 handle, u32 parent, ...@@ -450,7 +450,7 @@ static int wme_classop_change(struct Qdisc *qd, u32 handle, u32 parent,
struct nlattr **tca, unsigned long *arg) struct nlattr **tca, unsigned long *arg)
{ {
unsigned long cl = *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; struct ieee80211_hw *hw = &local->hw;
if (cl - 1 > QD_NUM(hw)) if (cl - 1 > QD_NUM(hw))
...@@ -467,7 +467,7 @@ static int wme_classop_change(struct Qdisc *qd, u32 handle, u32 parent, ...@@ -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 */ * when we add WMM-SA support - TSPECs may be deleted here */
static int wme_classop_delete(struct Qdisc *qd, unsigned long cl) 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; struct ieee80211_hw *hw = &local->hw;
if (cl - 1 > QD_NUM(hw)) if (cl - 1 > QD_NUM(hw))
...@@ -480,7 +480,7 @@ static int wme_classop_dump_class(struct Qdisc *qd, unsigned long cl, ...@@ -480,7 +480,7 @@ static int wme_classop_dump_class(struct Qdisc *qd, unsigned long cl,
struct sk_buff *skb, struct tcmsg *tcm) struct sk_buff *skb, struct tcmsg *tcm)
{ {
struct ieee80211_sched_data *q = qdisc_priv(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; struct ieee80211_hw *hw = &local->hw;
if (cl - 1 > QD_NUM(hw)) if (cl - 1 > QD_NUM(hw))
...@@ -494,7 +494,7 @@ static int wme_classop_dump_class(struct Qdisc *qd, unsigned long cl, ...@@ -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) 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; struct ieee80211_hw *hw = &local->hw;
int queue; int queue;
......
...@@ -334,7 +334,7 @@ static int tcf_fill_node(struct sk_buff *skb, struct tcf_proto *tp, ...@@ -334,7 +334,7 @@ static int tcf_fill_node(struct sk_buff *skb, struct tcf_proto *tp,
tcm->tcm_family = AF_UNSPEC; tcm->tcm_family = AF_UNSPEC;
tcm->tcm__pad1 = 0; tcm->tcm__pad1 = 0;
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_parent = tp->classid;
tcm->tcm_info = TC_H_MAKE(tp->prio, tp->protocol); tcm->tcm_info = TC_H_MAKE(tp->prio, tp->protocol);
NLA_PUT_STRING(skb, TCA_KIND, tp->ops->kind); NLA_PUT_STRING(skb, TCA_KIND, tp->ops->kind);
......
...@@ -302,7 +302,7 @@ static int route4_delete(struct tcf_proto *tp, unsigned long arg) ...@@ -302,7 +302,7 @@ static int route4_delete(struct tcf_proto *tp, unsigned long arg)
*fp = f->next; *fp = f->next;
tcf_tree_unlock(tp); 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); route4_delete_filter(tp, f);
/* Strip tree */ /* Strip tree */
...@@ -500,7 +500,7 @@ static int route4_change(struct tcf_proto *tp, unsigned long base, ...@@ -500,7 +500,7 @@ static int route4_change(struct tcf_proto *tp, unsigned long base,
} }
tcf_tree_unlock(tp); 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; *arg = (unsigned long)f;
return 0; return 0;
......
...@@ -281,7 +281,7 @@ static enum hrtimer_restart qdisc_watchdog(struct hrtimer *timer) ...@@ -281,7 +281,7 @@ static enum hrtimer_restart qdisc_watchdog(struct hrtimer *timer)
{ {
struct qdisc_watchdog *wd = container_of(timer, struct qdisc_watchdog, struct qdisc_watchdog *wd = container_of(timer, struct qdisc_watchdog,
timer); timer);
struct net_device *dev = wd->qdisc->dev; struct net_device *dev = qdisc_dev(wd->qdisc);
wd->qdisc->flags &= ~TCQ_F_THROTTLED; wd->qdisc->flags &= ~TCQ_F_THROTTLED;
smp_wmb(); smp_wmb();
...@@ -493,7 +493,7 @@ void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n) ...@@ -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)) if (TC_H_MAJ(parentid) == TC_H_MAJ(TC_H_INGRESS))
return; return;
sch = qdisc_lookup(sch->dev, TC_H_MAJ(parentid)); sch = qdisc_lookup(qdisc_dev(sch), TC_H_MAJ(parentid));
if (sch == NULL) { if (sch == NULL) {
WARN_ON(parentid != TC_H_ROOT); WARN_ON(parentid != TC_H_ROOT);
return; return;
...@@ -593,7 +593,7 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue, ...@@ -593,7 +593,7 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
if (ops == NULL) if (ops == NULL)
goto err_out; goto err_out;
sch = qdisc_alloc(dev, dev_queue, ops); sch = qdisc_alloc(dev_queue, ops);
if (IS_ERR(sch)) { if (IS_ERR(sch)) {
err = PTR_ERR(sch); err = PTR_ERR(sch);
goto err_out2; goto err_out2;
...@@ -940,7 +940,7 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, ...@@ -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_family = AF_UNSPEC;
tcm->tcm__pad1 = 0; tcm->tcm__pad1 = 0;
tcm->tcm__pad2 = 0; tcm->tcm__pad2 = 0;
tcm->tcm_ifindex = q->dev->ifindex; tcm->tcm_ifindex = qdisc_dev(q)->ifindex;
tcm->tcm_parent = clid; tcm->tcm_parent = clid;
tcm->tcm_handle = q->handle; tcm->tcm_handle = q->handle;
tcm->tcm_info = atomic_read(&q->refcnt); tcm->tcm_info = atomic_read(&q->refcnt);
...@@ -1186,7 +1186,7 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q, ...@@ -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); nlh = NLMSG_NEW(skb, pid, seq, event, sizeof(*tcm), flags);
tcm = NLMSG_DATA(nlh); tcm = NLMSG_DATA(nlh);
tcm->tcm_family = AF_UNSPEC; 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_parent = q->handle;
tcm->tcm_handle = q->handle; tcm->tcm_handle = q->handle;
tcm->tcm_info = 0; tcm->tcm_info = 0;
......
...@@ -296,7 +296,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent, ...@@ -296,7 +296,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent,
goto err_out; goto err_out;
} }
flow->filter_list = NULL; 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); &pfifo_qdisc_ops, classid);
if (!flow->q) if (!flow->q)
flow->q = &noop_qdisc; flow->q = &noop_qdisc;
...@@ -556,7 +556,7 @@ static int atm_tc_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -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); pr_debug("atm_tc_init(sch %p,[qdisc %p],opt %p)\n", sch, p, opt);
p->flows = &p->link; 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); &pfifo_qdisc_ops, sch->handle);
if (!p->link.q) if (!p->link.q)
p->link.q = &noop_qdisc; p->link.q = &noop_qdisc;
......
...@@ -650,7 +650,7 @@ static enum hrtimer_restart cbq_undelay(struct hrtimer *timer) ...@@ -650,7 +650,7 @@ static enum hrtimer_restart cbq_undelay(struct hrtimer *timer)
} }
sch->flags &= ~TCQ_F_THROTTLED; sch->flags &= ~TCQ_F_THROTTLED;
netif_schedule(sch->dev); netif_schedule(qdisc_dev(sch));
return HRTIMER_NORESTART; return HRTIMER_NORESTART;
} }
...@@ -1077,9 +1077,9 @@ static void cbq_normalize_quanta(struct cbq_sched_data *q, int prio) ...@@ -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])/ cl->quantum = (cl->weight*cl->allot*q->nclasses[prio])/
q->quanta[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); 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;
} }
} }
} }
...@@ -1401,7 +1401,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -1401,7 +1401,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt)
q->link.sibling = &q->link; q->link.sibling = &q->link;
q->link.common.classid = sch->handle; q->link.common.classid = sch->handle;
q->link.qdisc = sch; 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, &pfifo_qdisc_ops,
sch->handle))) sch->handle)))
q->link.q = &noop_qdisc; q->link.q = &noop_qdisc;
...@@ -1411,7 +1411,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -1411,7 +1411,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt)
q->link.cpriority = TC_CBQ_MAXPRIO-1; q->link.cpriority = TC_CBQ_MAXPRIO-1;
q->link.ovl_strategy = TC_CBQ_OVL_CLASSIC; q->link.ovl_strategy = TC_CBQ_OVL_CLASSIC;
q->link.overlimit = 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.quantum = q->link.allot;
q->link.weight = q->link.R_tab->rate.rate; q->link.weight = q->link.R_tab->rate.rate;
...@@ -1646,7 +1646,7 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, ...@@ -1646,7 +1646,7 @@ static int cbq_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
if (cl) { if (cl) {
if (new == NULL) { 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, &pfifo_qdisc_ops,
cl->common.classid); cl->common.classid);
if (new == NULL) if (new == NULL)
...@@ -1746,10 +1746,10 @@ static void cbq_put(struct Qdisc *sch, unsigned long arg) ...@@ -1746,10 +1746,10 @@ static void cbq_put(struct Qdisc *sch, unsigned long arg)
#ifdef CONFIG_NET_CLS_ACT #ifdef CONFIG_NET_CLS_ACT
struct cbq_sched_data *q = qdisc_priv(sch); 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) if (q->rx_class == cl)
q->rx_class = NULL; q->rx_class = NULL;
spin_unlock_bh(&sch->dev->queue_lock); spin_unlock_bh(&qdisc_dev(sch)->queue_lock);
#endif #endif
cbq_destroy_class(sch, cl); cbq_destroy_class(sch, cl);
...@@ -1828,7 +1828,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t ...@@ -1828,7 +1828,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
if (tca[TCA_RATE]) if (tca[TCA_RATE])
gen_replace_estimator(&cl->bstats, &cl->rate_est, gen_replace_estimator(&cl->bstats, &cl->rate_est,
&sch->dev->queue_lock, &qdisc_dev(sch)->queue_lock,
tca[TCA_RATE]); tca[TCA_RATE]);
return 0; return 0;
} }
...@@ -1879,7 +1879,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t ...@@ -1879,7 +1879,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
cl->R_tab = rtab; cl->R_tab = rtab;
rtab = NULL; rtab = NULL;
cl->refcnt = 1; 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))) &pfifo_qdisc_ops, classid)))
cl->q = &noop_qdisc; cl->q = &noop_qdisc;
cl->common.classid = classid; cl->common.classid = classid;
...@@ -1919,7 +1919,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t ...@@ -1919,7 +1919,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
if (tca[TCA_RATE]) if (tca[TCA_RATE])
gen_new_estimator(&cl->bstats, &cl->rate_est, 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; *arg = (unsigned long)cl;
return 0; return 0;
......
...@@ -60,7 +60,7 @@ static int dsmark_graft(struct Qdisc *sch, unsigned long arg, ...@@ -60,7 +60,7 @@ static int dsmark_graft(struct Qdisc *sch, unsigned long arg,
sch, p, new, old); sch, p, new, old);
if (new == NULL) { 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, &pfifo_qdisc_ops,
sch->handle); sch->handle);
if (new == NULL) if (new == NULL)
...@@ -391,7 +391,7 @@ static int dsmark_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -391,7 +391,7 @@ static int dsmark_init(struct Qdisc *sch, struct nlattr *opt)
p->default_index = default_index; p->default_index = default_index;
p->set_tc_index = nla_get_flag(tb[TCA_DSMARK_SET_TC_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); &pfifo_qdisc_ops, sch->handle);
if (p->q == NULL) if (p->q == NULL)
p->q = &noop_qdisc; p->q = &noop_qdisc;
......
...@@ -48,10 +48,10 @@ static int fifo_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -48,10 +48,10 @@ static int fifo_init(struct Qdisc *sch, struct nlattr *opt)
struct fifo_sched_data *q = qdisc_priv(sch); struct fifo_sched_data *q = qdisc_priv(sch);
if (opt == NULL) { 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) if (sch->ops == &bfifo_qdisc_ops)
limit *= sch->dev->mtu; limit *= qdisc_dev(sch)->mtu;
q->limit = limit; q->limit = limit;
} else { } else {
...@@ -137,7 +137,7 @@ struct Qdisc *fifo_create_dflt(struct Qdisc *sch, struct Qdisc_ops *ops, ...@@ -137,7 +137,7 @@ struct Qdisc *fifo_create_dflt(struct Qdisc *sch, struct Qdisc_ops *ops,
struct Qdisc *q; struct Qdisc *q;
int err = -ENOMEM; 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)); ops, TC_H_MAKE(sch->handle, 1));
if (q) { if (q) {
err = fifo_set_limit(q, limit); err = fifo_set_limit(q, limit);
......
...@@ -364,7 +364,7 @@ static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc) ...@@ -364,7 +364,7 @@ static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
{ {
struct sk_buff_head *list = prio2list(skb, qdisc); struct sk_buff_head *list = prio2list(skb, qdisc);
if (skb_queue_len(list) < qdisc->dev->tx_queue_len) { if (skb_queue_len(list) < qdisc_dev(qdisc)->tx_queue_len) {
qdisc->q.qlen++; qdisc->q.qlen++;
return __qdisc_enqueue_tail(skb, qdisc, list); return __qdisc_enqueue_tail(skb, qdisc, list);
} }
...@@ -440,8 +440,7 @@ static struct Qdisc_ops pfifo_fast_ops __read_mostly = { ...@@ -440,8 +440,7 @@ static struct Qdisc_ops pfifo_fast_ops __read_mostly = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
struct Qdisc *qdisc_alloc(struct net_device *dev, struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
struct netdev_queue *dev_queue,
struct Qdisc_ops *ops) struct Qdisc_ops *ops)
{ {
void *p; void *p;
...@@ -465,8 +464,7 @@ struct Qdisc *qdisc_alloc(struct net_device *dev, ...@@ -465,8 +464,7 @@ struct Qdisc *qdisc_alloc(struct net_device *dev,
sch->enqueue = ops->enqueue; sch->enqueue = ops->enqueue;
sch->dequeue = ops->dequeue; sch->dequeue = ops->dequeue;
sch->dev_queue = dev_queue; sch->dev_queue = dev_queue;
sch->dev = dev; dev_hold(qdisc_dev(sch));
dev_hold(dev);
atomic_set(&sch->refcnt, 1); atomic_set(&sch->refcnt, 1);
return sch; return sch;
...@@ -481,7 +479,7 @@ struct Qdisc * qdisc_create_dflt(struct net_device *dev, ...@@ -481,7 +479,7 @@ struct Qdisc * qdisc_create_dflt(struct net_device *dev,
{ {
struct Qdisc *sch; struct Qdisc *sch;
sch = qdisc_alloc(dev, dev_queue, ops); sch = qdisc_alloc(dev_queue, ops);
if (IS_ERR(sch)) if (IS_ERR(sch))
goto errout; goto errout;
sch->stats_lock = &dev->queue_lock; sch->stats_lock = &dev->queue_lock;
...@@ -534,7 +532,7 @@ void qdisc_destroy(struct Qdisc *qdisc) ...@@ -534,7 +532,7 @@ void qdisc_destroy(struct Qdisc *qdisc)
ops->destroy(qdisc); ops->destroy(qdisc);
module_put(ops->owner); module_put(ops->owner);
dev_put(qdisc->dev); dev_put(qdisc_dev(qdisc));
call_rcu(&qdisc->q_rcu, __qdisc_destroy); call_rcu(&qdisc->q_rcu, __qdisc_destroy);
} }
EXPORT_SYMBOL(qdisc_destroy); EXPORT_SYMBOL(qdisc_destroy);
......
...@@ -164,7 +164,7 @@ static int gred_enqueue(struct sk_buff *skb, struct Qdisc* sch) ...@@ -164,7 +164,7 @@ static int gred_enqueue(struct sk_buff *skb, struct Qdisc* sch)
* if no default DP has been configured. This * if no default DP has been configured. This
* allows for DP flows to be left untouched. * allows for DP flows to be left untouched.
*/ */
if (skb_queue_len(&sch->q) < sch->dev->tx_queue_len) if (skb_queue_len(&sch->q) < qdisc_dev(sch)->tx_queue_len)
return qdisc_enqueue_tail(skb, sch); return qdisc_enqueue_tail(skb, sch);
else else
goto drop; goto drop;
......
...@@ -1045,7 +1045,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, ...@@ -1045,7 +1045,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
if (tca[TCA_RATE]) if (tca[TCA_RATE])
gen_replace_estimator(&cl->bstats, &cl->rate_est, gen_replace_estimator(&cl->bstats, &cl->rate_est,
&sch->dev->queue_lock, &qdisc_dev(sch)->queue_lock,
tca[TCA_RATE]); tca[TCA_RATE]);
return 0; return 0;
} }
...@@ -1083,7 +1083,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, ...@@ -1083,7 +1083,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
cl->refcnt = 1; cl->refcnt = 1;
cl->sched = q; cl->sched = q;
cl->cl_parent = parent; cl->cl_parent = parent;
cl->qdisc = qdisc_create_dflt(sch->dev, sch->dev_queue, cl->qdisc = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, classid); &pfifo_qdisc_ops, classid);
if (cl->qdisc == NULL) if (cl->qdisc == NULL)
cl->qdisc = &noop_qdisc; cl->qdisc = &noop_qdisc;
...@@ -1104,7 +1104,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, ...@@ -1104,7 +1104,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
if (tca[TCA_RATE]) if (tca[TCA_RATE])
gen_new_estimator(&cl->bstats, &cl->rate_est, 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; *arg = (unsigned long)cl;
return 0; return 0;
} }
...@@ -1202,7 +1202,7 @@ hfsc_graft_class(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, ...@@ -1202,7 +1202,7 @@ hfsc_graft_class(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
if (cl->level > 0) if (cl->level > 0)
return -EINVAL; return -EINVAL;
if (new == NULL) { 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, &pfifo_qdisc_ops,
cl->cl_common.classid); cl->cl_common.classid);
if (new == NULL) if (new == NULL)
...@@ -1445,7 +1445,7 @@ hfsc_init_qdisc(struct Qdisc *sch, struct nlattr *opt) ...@@ -1445,7 +1445,7 @@ hfsc_init_qdisc(struct Qdisc *sch, struct nlattr *opt)
q->root.cl_common.classid = sch->handle; q->root.cl_common.classid = sch->handle;
q->root.refcnt = 1; q->root.refcnt = 1;
q->root.sched = q; q->root.sched = q;
q->root.qdisc = qdisc_create_dflt(sch->dev, sch->dev_queue, q->root.qdisc = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, &pfifo_qdisc_ops,
sch->handle); sch->handle);
if (q->root.qdisc == NULL) if (q->root.qdisc == NULL)
......
...@@ -1026,7 +1026,7 @@ static int htb_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -1026,7 +1026,7 @@ static int htb_init(struct Qdisc *sch, struct nlattr *opt)
qdisc_watchdog_init(&q->watchdog, sch); qdisc_watchdog_init(&q->watchdog, sch);
skb_queue_head_init(&q->direct_queue); skb_queue_head_init(&q->direct_queue);
q->direct_qlen = sch->dev->tx_queue_len; q->direct_qlen = qdisc_dev(sch)->tx_queue_len;
if (q->direct_qlen < 2) /* some devices have zero tx_queue_len */ if (q->direct_qlen < 2) /* some devices have zero tx_queue_len */
q->direct_qlen = 2; q->direct_qlen = 2;
...@@ -1043,7 +1043,7 @@ static int htb_dump(struct Qdisc *sch, struct sk_buff *skb) ...@@ -1043,7 +1043,7 @@ static int htb_dump(struct Qdisc *sch, struct sk_buff *skb)
struct nlattr *nest; struct nlattr *nest;
struct tc_htb_glob gopt; struct tc_htb_glob gopt;
spin_lock_bh(&sch->dev->queue_lock); spin_lock_bh(&qdisc_dev(sch)->queue_lock);
gopt.direct_pkts = q->direct_pkts; gopt.direct_pkts = q->direct_pkts;
gopt.version = HTB_VER; gopt.version = HTB_VER;
...@@ -1057,11 +1057,11 @@ static int htb_dump(struct Qdisc *sch, struct sk_buff *skb) ...@@ -1057,11 +1057,11 @@ static int htb_dump(struct Qdisc *sch, struct sk_buff *skb)
NLA_PUT(skb, TCA_HTB_INIT, sizeof(gopt), &gopt); NLA_PUT(skb, TCA_HTB_INIT, sizeof(gopt), &gopt);
nla_nest_end(skb, nest); nla_nest_end(skb, nest);
spin_unlock_bh(&sch->dev->queue_lock); spin_unlock_bh(&qdisc_dev(sch)->queue_lock);
return skb->len; return skb->len;
nla_put_failure: nla_put_failure:
spin_unlock_bh(&sch->dev->queue_lock); spin_unlock_bh(&qdisc_dev(sch)->queue_lock);
nla_nest_cancel(skb, nest); nla_nest_cancel(skb, nest);
return -1; return -1;
} }
...@@ -1073,7 +1073,7 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg, ...@@ -1073,7 +1073,7 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg,
struct nlattr *nest; struct nlattr *nest;
struct tc_htb_opt opt; struct tc_htb_opt opt;
spin_lock_bh(&sch->dev->queue_lock); spin_lock_bh(&qdisc_dev(sch)->queue_lock);
tcm->tcm_parent = cl->parent ? cl->parent->common.classid : TC_H_ROOT; tcm->tcm_parent = cl->parent ? cl->parent->common.classid : TC_H_ROOT;
tcm->tcm_handle = cl->common.classid; tcm->tcm_handle = cl->common.classid;
if (!cl->level && cl->un.leaf.q) if (!cl->level && cl->un.leaf.q)
...@@ -1095,11 +1095,11 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg, ...@@ -1095,11 +1095,11 @@ static int htb_dump_class(struct Qdisc *sch, unsigned long arg,
NLA_PUT(skb, TCA_HTB_PARMS, sizeof(opt), &opt); NLA_PUT(skb, TCA_HTB_PARMS, sizeof(opt), &opt);
nla_nest_end(skb, nest); nla_nest_end(skb, nest);
spin_unlock_bh(&sch->dev->queue_lock); spin_unlock_bh(&qdisc_dev(sch)->queue_lock);
return skb->len; return skb->len;
nla_put_failure: nla_put_failure:
spin_unlock_bh(&sch->dev->queue_lock); spin_unlock_bh(&qdisc_dev(sch)->queue_lock);
nla_nest_cancel(skb, nest); nla_nest_cancel(skb, nest);
return -1; return -1;
} }
...@@ -1129,7 +1129,7 @@ static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new, ...@@ -1129,7 +1129,7 @@ static int htb_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
if (cl && !cl->level) { if (cl && !cl->level) {
if (new == NULL && 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, &pfifo_qdisc_ops,
cl->common.classid)) cl->common.classid))
== NULL) == NULL)
...@@ -1257,7 +1257,7 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg) ...@@ -1257,7 +1257,7 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg)
return -EBUSY; return -EBUSY;
if (!cl->level && htb_parent_last_child(cl)) { if (!cl->level && htb_parent_last_child(cl)) {
new_q = qdisc_create_dflt(sch->dev, sch->dev_queue, new_q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, &pfifo_qdisc_ops,
cl->parent->common.classid); cl->parent->common.classid);
last_child = 1; last_child = 1;
...@@ -1365,7 +1365,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, ...@@ -1365,7 +1365,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
goto failure; goto failure;
gen_new_estimator(&cl->bstats, &cl->rate_est, gen_new_estimator(&cl->bstats, &cl->rate_est,
&sch->dev->queue_lock, &qdisc_dev(sch)->queue_lock,
tca[TCA_RATE] ? : &est.nla); tca[TCA_RATE] ? : &est.nla);
cl->refcnt = 1; cl->refcnt = 1;
cl->children = 0; cl->children = 0;
...@@ -1378,7 +1378,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, ...@@ -1378,7 +1378,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
/* create leaf qdisc early because it uses kmalloc(GFP_KERNEL) /* create leaf qdisc early because it uses kmalloc(GFP_KERNEL)
so that can't be used inside of sch_tree_lock so that can't be used inside of sch_tree_lock
-- thanks to Karlis Peisenieks */ -- thanks to Karlis Peisenieks */
new_q = qdisc_create_dflt(sch->dev, sch->dev_queue, new_q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, classid); &pfifo_qdisc_ops, classid);
sch_tree_lock(sch); sch_tree_lock(sch);
if (parent && !parent->level) { if (parent && !parent->level) {
...@@ -1420,7 +1420,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, ...@@ -1420,7 +1420,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
} else { } else {
if (tca[TCA_RATE]) if (tca[TCA_RATE])
gen_replace_estimator(&cl->bstats, &cl->rate_est, gen_replace_estimator(&cl->bstats, &cl->rate_est,
&sch->dev->queue_lock, &qdisc_dev(sch)->queue_lock,
tca[TCA_RATE]); tca[TCA_RATE]);
sch_tree_lock(sch); sch_tree_lock(sch);
} }
......
...@@ -180,7 +180,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch) ...@@ -180,7 +180,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)
* skb will be queued. * skb will be queued.
*/ */
if (count > 1 && (skb2 = skb_clone(skb, GFP_ATOMIC)) != NULL) { if (count > 1 && (skb2 = skb_clone(skb, GFP_ATOMIC)) != NULL) {
struct Qdisc *rootq = sch->dev->qdisc; struct Qdisc *rootq = qdisc_dev(sch)->qdisc;
u32 dupsave = q->duplicate; /* prevent duplicating a dup... */ u32 dupsave = q->duplicate; /* prevent duplicating a dup... */
q->duplicate = 0; q->duplicate = 0;
...@@ -333,9 +333,9 @@ static int get_dist_table(struct Qdisc *sch, const struct nlattr *attr) ...@@ -333,9 +333,9 @@ static int get_dist_table(struct Qdisc *sch, const struct nlattr *attr)
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
d->table[i] = data[i]; d->table[i] = data[i];
spin_lock_bh(&sch->dev->queue_lock); spin_lock_bh(&qdisc_dev(sch)->queue_lock);
d = xchg(&q->delay_dist, d); d = xchg(&q->delay_dist, d);
spin_unlock_bh(&sch->dev->queue_lock); spin_unlock_bh(&qdisc_dev(sch)->queue_lock);
kfree(d); kfree(d);
return 0; return 0;
...@@ -495,7 +495,7 @@ static int tfifo_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -495,7 +495,7 @@ static int tfifo_init(struct Qdisc *sch, struct nlattr *opt)
q->limit = ctl->limit; q->limit = ctl->limit;
} else } else
q->limit = max_t(u32, sch->dev->tx_queue_len, 1); q->limit = max_t(u32, qdisc_dev(sch)->tx_queue_len, 1);
q->oldest = PSCHED_PASTPERFECT; q->oldest = PSCHED_PASTPERFECT;
return 0; return 0;
...@@ -536,7 +536,7 @@ static int netem_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -536,7 +536,7 @@ static int netem_init(struct Qdisc *sch, struct nlattr *opt)
qdisc_watchdog_init(&q->watchdog, sch); qdisc_watchdog_init(&q->watchdog, sch);
q->qdisc = qdisc_create_dflt(sch->dev, sch->dev_queue, q->qdisc = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&tfifo_qdisc_ops, &tfifo_qdisc_ops,
TC_H_MAKE(sch->handle, 1)); TC_H_MAKE(sch->handle, 1));
if (!q->qdisc) { if (!q->qdisc) {
......
...@@ -136,7 +136,8 @@ prio_dequeue(struct Qdisc* sch) ...@@ -136,7 +136,8 @@ prio_dequeue(struct Qdisc* sch)
* pulling an skb. This way we avoid excessive requeues * pulling an skb. This way we avoid excessive requeues
* for slower queues. * for slower queues.
*/ */
if (!__netif_subqueue_stopped(sch->dev, (q->mq ? prio : 0))) { if (!__netif_subqueue_stopped(qdisc_dev(sch),
(q->mq ? prio : 0))) {
qdisc = q->queues[prio]; qdisc = q->queues[prio];
skb = qdisc->dequeue(qdisc); skb = qdisc->dequeue(qdisc);
if (skb) { if (skb) {
...@@ -165,8 +166,8 @@ static struct sk_buff *rr_dequeue(struct Qdisc* sch) ...@@ -165,8 +166,8 @@ static struct sk_buff *rr_dequeue(struct Qdisc* sch)
* for slower queues. If the queue is stopped, try the * for slower queues. If the queue is stopped, try the
* next queue. * next queue.
*/ */
if (!__netif_subqueue_stopped(sch->dev, if (!__netif_subqueue_stopped(qdisc_dev(sch),
(q->mq ? q->curband : 0))) { (q->mq ? q->curband : 0))) {
qdisc = q->queues[q->curband]; qdisc = q->queues[q->curband];
skb = qdisc->dequeue(qdisc); skb = qdisc->dequeue(qdisc);
if (skb) { if (skb) {
...@@ -249,10 +250,10 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt) ...@@ -249,10 +250,10 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt)
if (q->mq) { if (q->mq) {
if (sch->parent != TC_H_ROOT) if (sch->parent != TC_H_ROOT)
return -EINVAL; return -EINVAL;
if (netif_is_multiqueue(sch->dev)) { if (netif_is_multiqueue(qdisc_dev(sch))) {
if (q->bands == 0) if (q->bands == 0)
q->bands = sch->dev->egress_subqueue_count; q->bands = qdisc_dev(sch)->egress_subqueue_count;
else if (q->bands != sch->dev->egress_subqueue_count) else if (q->bands != qdisc_dev(sch)->egress_subqueue_count)
return -EINVAL; return -EINVAL;
} else } else
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -281,7 +282,7 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt) ...@@ -281,7 +282,7 @@ static int prio_tune(struct Qdisc *sch, struct nlattr *opt)
for (i=0; i<q->bands; i++) { for (i=0; i<q->bands; i++) {
if (q->queues[i] == &noop_qdisc) { if (q->queues[i] == &noop_qdisc) {
struct Qdisc *child; struct Qdisc *child;
child = qdisc_create_dflt(sch->dev, sch->dev_queue, child = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
&pfifo_qdisc_ops, &pfifo_qdisc_ops,
TC_H_MAKE(sch->handle, i + 1)); TC_H_MAKE(sch->handle, i + 1));
if (child) { if (child) {
......
...@@ -461,7 +461,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt) ...@@ -461,7 +461,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
return -EINVAL; return -EINVAL;
sch_tree_lock(sch); sch_tree_lock(sch);
q->quantum = ctl->quantum ? : psched_mtu(sch->dev); q->quantum = ctl->quantum ? : psched_mtu(qdisc_dev(sch));
q->perturb_period = ctl->perturb_period * HZ; q->perturb_period = ctl->perturb_period * HZ;
if (ctl->limit) if (ctl->limit)
q->limit = min_t(u32, ctl->limit, SFQ_DEPTH - 1); q->limit = min_t(u32, ctl->limit, SFQ_DEPTH - 1);
...@@ -502,7 +502,7 @@ static int sfq_init(struct Qdisc *sch, struct nlattr *opt) ...@@ -502,7 +502,7 @@ static int sfq_init(struct Qdisc *sch, struct nlattr *opt)
q->max_depth = 0; q->max_depth = 0;
q->tail = SFQ_DEPTH; q->tail = SFQ_DEPTH;
if (opt == NULL) { if (opt == NULL) {
q->quantum = psched_mtu(sch->dev); q->quantum = psched_mtu(qdisc_dev(sch));
q->perturb_period = 0; q->perturb_period = 0;
q->perturbation = net_random(); q->perturbation = net_random();
} else { } else {
......
...@@ -78,7 +78,7 @@ struct teql_sched_data ...@@ -78,7 +78,7 @@ struct teql_sched_data
static int static int
teql_enqueue(struct sk_buff *skb, struct Qdisc* sch) teql_enqueue(struct sk_buff *skb, struct Qdisc* sch)
{ {
struct net_device *dev = sch->dev; struct net_device *dev = qdisc_dev(sch);
struct teql_sched_data *q = qdisc_priv(sch); struct teql_sched_data *q = qdisc_priv(sch);
if (q->q.qlen < dev->tx_queue_len) { if (q->q.qlen < dev->tx_queue_len) {
...@@ -111,7 +111,7 @@ teql_dequeue(struct Qdisc* sch) ...@@ -111,7 +111,7 @@ teql_dequeue(struct Qdisc* sch)
skb = __skb_dequeue(&dat->q); skb = __skb_dequeue(&dat->q);
if (skb == NULL) { if (skb == NULL) {
struct net_device *m = dat->m->dev->qdisc->dev; struct net_device *m = qdisc_dev(dat->m->dev->qdisc);
if (m) { if (m) {
dat->m->slaves = sch; dat->m->slaves = sch;
netif_wake_queue(m); netif_wake_queue(m);
...@@ -170,7 +170,7 @@ teql_destroy(struct Qdisc* sch) ...@@ -170,7 +170,7 @@ teql_destroy(struct Qdisc* sch)
static int teql_qdisc_init(struct Qdisc *sch, struct nlattr *opt) static int teql_qdisc_init(struct Qdisc *sch, struct nlattr *opt)
{ {
struct net_device *dev = sch->dev; struct net_device *dev = qdisc_dev(sch);
struct teql_master *m = (struct teql_master*)sch->ops; struct teql_master *m = (struct teql_master*)sch->ops;
struct teql_sched_data *q = qdisc_priv(sch); struct teql_sched_data *q = qdisc_priv(sch);
...@@ -282,7 +282,7 @@ static int teql_master_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -282,7 +282,7 @@ static int teql_master_xmit(struct sk_buff *skb, struct net_device *dev)
goto drop; goto drop;
do { do {
struct net_device *slave = q->dev; struct net_device *slave = qdisc_dev(q);
if (slave->qdisc_sleeping != q) if (slave->qdisc_sleeping != q)
continue; continue;
...@@ -352,7 +352,7 @@ static int teql_master_open(struct net_device *dev) ...@@ -352,7 +352,7 @@ static int teql_master_open(struct net_device *dev)
q = m->slaves; q = m->slaves;
do { do {
struct net_device *slave = q->dev; struct net_device *slave = qdisc_dev(q);
if (slave == NULL) if (slave == NULL)
return -EUNATCH; return -EUNATCH;
...@@ -403,7 +403,7 @@ static int teql_master_mtu(struct net_device *dev, int new_mtu) ...@@ -403,7 +403,7 @@ static int teql_master_mtu(struct net_device *dev, int new_mtu)
q = m->slaves; q = m->slaves;
if (q) { if (q) {
do { do {
if (new_mtu > q->dev->mtu) if (new_mtu > qdisc_dev(q)->mtu)
return -EINVAL; return -EINVAL;
} while ((q=NEXT_SLAVE(q)) != m->slaves); } while ((q=NEXT_SLAVE(q)) != m->slaves);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment