NET : move Qdisc_class_ops and Qdisc_ops in appropriate sections
Subsystems (5)
PATCH 1/1 NET : move Qdisc_class_ops and Qdisc_ops in appropriate sections
Hi David
Please find this patch against net-2.6.25
Thank you
[PATCH] NET : move Qdisc_class_ops and Qdisc_ops in appropriate sections
Qdisc_class_ops are const, and Qdisc_ops are mostly read.
Using "const" and "__read_mostly" qualifiers helps to reduce false sharing.
Signed-off-by Eric Dumazet <[email protected]>
include/net/sch_generic.h | 2 +- net/mac80211/wme.c | 4 ++-- net/sched/cls_api.c | 4 ++-- net/sched/sch_api.c | 12 ++++++------ net/sched/sch_atm.c | 4 ++-- net/sched/sch_blackhole.c | 2 +- net/sched/sch_cbq.c | 4 ++-- net/sched/sch_dsmark.c | 4 ++-- net/sched/sch_fifo.c | 4 ++-- net/sched/sch_generic.c | 10 +++++----- net/sched/sch_gred.c | 2 +- net/sched/sch_hfsc.c | 4 ++-- net/sched/sch_htb.c | 4 ++-- net/sched/sch_ingress.c | 4 ++-- net/sched/sch_netem.c | 6 +++--- net/sched/sch_prio.c | 6 +++--- net/sched/sch_red.c | 4 ++-- net/sched/sch_sfq.c | 2 +- net/sched/sch_tbf.c | 4 ++-- 19 files changed, 43 insertions(+), 43 deletions(-)
include/net/sch_generic.h +1 -1
@@ -86,7 +86,7 @@ struct Qdisc_class_opsstruct Qdisc_ops {struct Qdisc_ops *next; -struct Qdisc_class_ops *cl_ops; +const struct Qdisc_class_ops *cl_ops;char id[IFNAMSIZ ];int priv_size;
net/mac80211/wme.c +2 -2
@@ -527,7 +527,7 @@ static struct tcf_proto ** wme_classop_find_tcf(struct Qdisc *qd,/* this qdisc is classful (i.e. has classes, some of which may have leaf qdiscs attached) * - these are the operations on the classes */ -static struct Qdisc_class_ops class_ops = +static const struct Qdisc_class_ops class_ops = { .graft = wme_classop_graft, .leaf = wme_classop_leaf,
@@ -547,7 +547,7 @@ static struct Qdisc_class_ops class_ops =/* queueing discipline operations */ -static struct Qdisc_ops wme_qdisc_ops = +static struct Qdisc_ops wme_qdisc_ops__read_mostly = { .next =NULL , .cl_ops = &class_ops,
net/sched/cls_api.c +2 -2
@@ -130,7 +130,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n, void *arg)struct tcf_proto **back, **chain;struct tcf_proto *tp;struct tcf_proto_ops *tp_ops; -struct Qdisc_class_ops *cops; +const struct Qdisc_class_ops *cops;unsigned long cl;unsigned long fh;int err;
@@ -382,7 +382,7 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)struct tcf_proto *tp, **chain;struct tcmsg *tcm = (struct tcmsg *)NLMSG_DATA (cb->nlh);unsigned long cl =0 ; -struct Qdisc_class_ops *cops; +const struct Qdisc_class_ops *cops;struct tcf_dump_args arg;if (cb->nlh->nlmsg_len <NLMSG_LENGTH (sizeof (*tcm)))
net/sched/sch_api.c +6 -6
@@ -195,7 +195,7 @@ static struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid) {unsigned long cl;struct Qdisc *leaf; -struct Qdisc_class_ops *cops = p->ops->cl_ops; +const struct Qdisc_class_ops *cops = p->ops->cl_ops;if (cops ==NULL )return NULL ;
@@ -373,7 +373,7 @@ dev_graft_qdisc(struct net_device *dev, struct Qdisc *qdisc)void qdisc_tree_decrease_qlen (struct Qdisc *sch,unsigned int n) { -struct Qdisc_class_ops *cops; +const struct Qdisc_class_ops *cops;unsigned long cl;u32 parentid;
@@ -417,7 +417,7 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent, *old =dev_graft_qdisc (dev, new); } }else { -struct Qdisc_class_ops *cops = parent->ops->cl_ops; +const struct Qdisc_class_ops *cops = parent->ops->cl_ops; err = -EINVAL ;
@@ -581,7 +581,7 @@ static int check_loop_fn(struct Qdisc *q, unsigned long cl, struct qdisc_walker *w) { struct Qdisc *leaf; -struct Qdisc_class_ops *cops = q->ops->cl_ops; +const struct Qdisc_class_ops *cops = q->ops->cl_ops;struct check_loop_arg *arg = (struct check_loop_arg *)w; leaf = cops->leaf (q, cl);
@@ -924,7 +924,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n, void *arg)struct rtattr **tca = arg;struct net_device *dev;struct Qdisc *q =NULL ; -struct Qdisc_class_ops *cops; +const struct Qdisc_class_ops *cops;unsigned long cl =0 ;unsigned long new_cl;u32 pid = tcm->tcm_parent;
@@ -1039,7 +1039,7 @@ static int tc_fill_tclass(struct sk_buff *skb, struct Qdisc *q,struct nlmsghdr *nlh;unsigned char *b =skb_tail_pointer (skb);struct gnet_dump d; -struct Qdisc_class_ops *cl_ops = q->ops->cl_ops; +const struct Qdisc_class_ops *cl_ops = q->ops->cl_ops; nlh =NLMSG_NEW (skb, pid, seq, event,sizeof (*tcm), flags); tcm =NLMSG_DATA (nlh);
net/sched/sch_atm.c +2 -2
@@ -668,7 +668,7 @@ static int atm_tc_dump(struct Qdisc *sch, struct sk_buff *skb)return 0 ; } -static struct Qdisc_class_ops atm_class_ops = { +static const struct Qdisc_class_ops atm_class_ops = { .graft = atm_tc_graft, .leaf = atm_tc_leaf, .get = atm_tc_get,
@@ -683,7 +683,7 @@ static struct Qdisc_class_ops atm_class_ops = { .dump_stats = atm_tc_dump_class_stats, }; -static struct Qdisc_ops atm_qdisc_ops = { +static struct Qdisc_ops atm_qdisc_ops__read_mostly = { .cl_ops = &atm_class_ops, .id ="atm" , .priv_size =sizeof (struct atm_qdisc_data ),
net/sched/sch_blackhole.c +1 -1
@@ -28,7 +28,7 @@ static struct sk_buff *blackhole_dequeue(struct Qdisc *sch)return NULL ; } -static struct Qdisc_ops blackhole_qdisc_ops = { +static struct Qdisc_ops blackhole_qdisc_ops__read_mostly = { .id ="blackhole" , .priv_size =0 , .enqueue = blackhole_enqueue,
net/sched/sch_cbq.c +2 -2
@@ -2045,7 +2045,7 @@ static void cbq_walk(struct Qdisc *sch, struct qdisc_walker *arg) } } -static struct Qdisc_class_ops cbq_class_ops = { +static const struct Qdisc_class_ops cbq_class_ops = { .graft = cbq_graft, .leaf = cbq_leaf, .qlen_notify = cbq_qlen_notify,
@@ -2061,7 +2061,7 @@ static struct Qdisc_class_ops cbq_class_ops = { .dump_stats = cbq_dump_class_stats, }; -static struct Qdisc_ops cbq_qdisc_ops = { +static struct Qdisc_ops cbq_qdisc_ops__read_mostly = { .next =NULL , .cl_ops = &cbq_class_ops, .id ="cbq" ,
net/sched/sch_dsmark.c +2 -2
@@ -461,7 +461,7 @@ rtattr_failure:return RTA_NEST_CANCEL (skb, opts); } -static struct Qdisc_class_ops dsmark_class_ops = { +static const struct Qdisc_class_ops dsmark_class_ops = { .graft = dsmark_graft, .leaf = dsmark_leaf, .get = dsmark_get,
@@ -475,7 +475,7 @@ static struct Qdisc_class_ops dsmark_class_ops = { .dump = dsmark_dump_class, }; -static struct Qdisc_ops dsmark_qdisc_ops = { +static struct Qdisc_ops dsmark_qdisc_ops__read_mostly = { .next =NULL , .cl_ops = &dsmark_class_ops, .id ="dsmark" ,
net/sched/sch_fifo.c +2 -2
@@ -78,7 +78,7 @@ rtattr_failure:return -1 ; } -struct Qdisc_ops pfifo_qdisc_ops = { +struct Qdisc_ops pfifo_qdisc_ops__read_mostly = { .id ="pfifo" , .priv_size =sizeof (struct fifo_sched_data ), .enqueue = pfifo_enqueue,
@@ -92,7 +92,7 @@ struct Qdisc_ops pfifo_qdisc_ops = { .owner = THIS_MODULE, }; -struct Qdisc_ops bfifo_qdisc_ops = { +struct Qdisc_ops bfifo_qdisc_ops__read_mostly = { .id ="bfifo" , .priv_size =sizeof (struct fifo_sched_data ), .enqueue = bfifo_enqueue,
net/sched/sch_generic.c +5 -5
@@ -286,7 +286,7 @@ static int noop_requeue(struct sk_buff *skb, struct Qdisc* qdisc)return NET_XMIT_CN ; } -struct Qdisc_ops noop_qdisc_ops = { +struct Qdisc_ops noop_qdisc_ops__read_mostly = { .id ="noop" , .priv_size =0 , .enqueue = noop_enqueue,
@@ -303,7 +303,7 @@ struct Qdisc noop_qdisc = { .list = LIST_HEAD_INIT(noop_qdisc.list), }; -static struct Qdisc_ops noqueue_qdisc_ops = { +static struct Qdisc_ops noqueue_qdisc_ops__read_mostly = { .id ="noqueue" , .priv_size =0 , .enqueue = noop_enqueue,
@@ -405,7 +405,7 @@ static int pfifo_fast_init(struct Qdisc *qdisc, struct rtattr *opt)return 0 ; } -static struct Qdisc_ops pfifo_fast_ops = { +static struct Qdisc_ops pfifo_fast_ops__read_mostly = { .id ="pfifo_fast" , .priv_size =PFIFO_FAST_BANDS *sizeof (struct sk_buff_head ), .enqueue = pfifo_fast_enqueue,
@@ -471,7 +471,7 @@ errout:void qdisc_reset (struct Qdisc *qdisc) { -struct Qdisc_ops *ops = qdisc->ops; +const struct Qdisc_ops *ops = qdisc->ops;if (ops->reset) ops->reset (qdisc);
@@ -490,7 +490,7 @@ static void __qdisc_destroy(struct rcu_head *head)void qdisc_destroy (struct Qdisc *qdisc) { -struct Qdisc_ops *ops = qdisc->ops; +const struct Qdisc_ops *ops = qdisc->ops;if (qdisc->flags &TCQ_F_BUILTIN || !atomic_dec_and_test (&qdisc->refcnt))
net/sched/sch_gred.c +1 -1
@@ -577,7 +577,7 @@ static void gred_destroy(struct Qdisc *sch) } } -static struct Qdisc_ops gred_qdisc_ops = { +static struct Qdisc_ops gred_qdisc_ops__read_mostly = { .id ="gred" , .priv_size =sizeof (struct gred_sched ), .enqueue = gred_enqueue,
net/sched/sch_hfsc.c +2 -2
@@ -1698,7 +1698,7 @@ hfsc_drop(struct Qdisc *sch)return 0 ; } -static struct Qdisc_class_ops hfsc_class_ops = { +static const struct Qdisc_class_ops hfsc_class_ops = { .change = hfsc_change_class, .delete = hfsc_delete_class, .graft = hfsc_graft_class,
@@ -1714,7 +1714,7 @@ static struct Qdisc_class_ops hfsc_class_ops = { .walk = hfsc_walk }; -static struct Qdisc_ops hfsc_qdisc_ops = { +static struct Qdisc_ops hfsc_qdisc_ops__read_mostly = { .id ="hfsc" , .init = hfsc_init_qdisc, .change = hfsc_change_qdisc,
net/sched/sch_htb.c +2 -2
@@ -1529,7 +1529,7 @@ static void htb_walk(struct Qdisc *sch, struct qdisc_walker *arg) } } -static struct Qdisc_class_ops htb_class_ops = { +static const struct Qdisc_class_ops htb_class_ops = { .graft = htb_graft, .leaf = htb_leaf, .qlen_notify = htb_qlen_notify,
@@ -1545,7 +1545,7 @@ static struct Qdisc_class_ops htb_class_ops = { .dump_stats = htb_dump_class_stats, }; -static struct Qdisc_ops htb_qdisc_ops = { +static struct Qdisc_ops htb_qdisc_ops__read_mostly = { .next =NULL , .cl_ops = &htb_class_ops, .id ="htb" ,
net/sched/sch_ingress.c +2 -2
@@ -338,7 +338,7 @@ rtattr_failure:return -1 ; } -static struct Qdisc_class_ops ingress_class_ops = { +static const struct Qdisc_class_ops ingress_class_ops = { .graft = ingress_graft, .leaf = ingress_leaf, .get = ingress_get,
@@ -352,7 +352,7 @@ static struct Qdisc_class_ops ingress_class_ops = { .dump = NULL, }; -static struct Qdisc_ops ingress_qdisc_ops = { +static struct Qdisc_ops ingress_qdisc_ops__read_mostly = { .next =NULL , .cl_ops = &ingress_class_ops, .id ="ingress" ,
net/sched/sch_netem.c +3 -3
@@ -544,7 +544,7 @@ rtattr_failure:return -1 ; } -static struct Qdisc_ops tfifo_qdisc_ops = { +static struct Qdisc_ops tfifo_qdisc_ops__read_mostly = { .id ="tfifo" , .priv_size =sizeof (struct fifo_sched_data ), .enqueue = tfifo_enqueue,
@@ -705,7 +705,7 @@ static struct tcf_proto **netem_find_tcf(struct Qdisc *sch, unsigned long cl)return NULL ; } -static struct Qdisc_class_ops netem_class_ops = { +static const struct Qdisc_class_ops netem_class_ops = { .graft = netem_graft, .leaf = netem_leaf, .get = netem_get,
@@ -717,7 +717,7 @@ static struct Qdisc_class_ops netem_class_ops = { .dump = netem_dump_class, }; -static struct Qdisc_ops netem_qdisc_ops = { +static struct Qdisc_ops netem_qdisc_ops__read_mostly = { .id ="netem" , .cl_ops = &netem_class_ops, .priv_size =sizeof (struct netem_sched_data ),
net/sched/sch_prio.c +3 -3
@@ -468,7 +468,7 @@ static struct tcf_proto ** prio_find_tcf(struct Qdisc *sch, unsigned long cl)return &q->filter_list; } -static struct Qdisc_class_ops prio_class_ops = { +static const struct Qdisc_class_ops prio_class_ops = { .graft = prio_graft, .leaf = prio_leaf, .get = prio_get,
@@ -483,7 +483,7 @@ static struct Qdisc_class_ops prio_class_ops = { .dump_stats = prio_dump_class_stats, }; -static struct Qdisc_ops prio_qdisc_ops = { +static struct Qdisc_ops prio_qdisc_ops__read_mostly = { .next =NULL , .cl_ops = &prio_class_ops, .id ="prio" ,
@@ -500,7 +500,7 @@ static struct Qdisc_ops prio_qdisc_ops = { .owner = THIS_MODULE, }; -static struct Qdisc_ops rr_qdisc_ops = { +static struct Qdisc_ops rr_qdisc_ops__read_mostly = { .next =NULL , .cl_ops = &prio_class_ops, .id ="rr" ,
net/sched/sch_red.c +2 -2
@@ -359,7 +359,7 @@ static struct tcf_proto **red_find_tcf(struct Qdisc *sch, unsigned long cl)return NULL ; } -static struct Qdisc_class_ops red_class_ops = { +static const struct Qdisc_class_ops red_class_ops = { .graft = red_graft, .leaf = red_leaf, .get = red_get,
@@ -371,7 +371,7 @@ static struct Qdisc_class_ops red_class_ops = { .dump = red_dump_class, }; -static struct Qdisc_ops red_qdisc_ops = { +static struct Qdisc_ops red_qdisc_ops__read_mostly = { .id ="red" , .priv_size =sizeof (struct red_sched_data ), .cl_ops = &red_class_ops,
net/sched/sch_sfq.c +1 -1
@@ -480,7 +480,7 @@ rtattr_failure:return -1 ; } -static struct Qdisc_ops sfq_qdisc_ops = { +static struct Qdisc_ops sfq_qdisc_ops__read_mostly = { .next =NULL , .cl_ops =NULL , .id ="sfq" ,
net/sched/sch_tbf.c +2 -2
@@ -469,7 +469,7 @@ static struct tcf_proto **tbf_find_tcf(struct Qdisc *sch, unsigned long cl)return NULL ; } -static struct Qdisc_class_ops tbf_class_ops = +static const struct Qdisc_class_ops tbf_class_ops = { .graft = tbf_graft, .leaf = tbf_leaf,
@@ -482,7 +482,7 @@ static struct Qdisc_class_ops tbf_class_ops = .dump = tbf_dump_class, }; -static struct Qdisc_ops tbf_qdisc_ops = { +static struct Qdisc_ops tbf_qdisc_ops__read_mostly = { .next =NULL , .cl_ops = &tbf_class_ops, .id ="tbf" ,
From: Eric Dumazet <[email protected]>
Date: Wed, 14 Nov 2007 08:39:24 +0100
Quoted 7 lines
[PATCH] NET : move
Qdisc_class_opsandQdisc_opsin appropriate sections
Qdisc_class_opsare const, andQdisc_opsare mostly read.Using "const" and "
__read_mostly" qualifiers helps to reduce false sharing.Signed-off-by Eric Dumazet <[email protected]>
Applied to net-2.6.25, thanks Eric.
Keep up the good work.