[NET_SCHED]: Remove unnecessary stats_lock pointers
Remove stats_lock pointers from qdisc-internal structures, in all cases it points to dev->queue_lock. The only case where it is necessary is for top-level qdiscs, where it might also point to dev->ingress_lock in case of the ingress qdisc. Also remove it from actions completely, it always points to the actions internal lock. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
876d48aabf
commit
4bdf39911e
|
@ -19,7 +19,6 @@ struct tcf_common {
|
||||||
struct gnet_stats_basic tcfc_bstats;
|
struct gnet_stats_basic tcfc_bstats;
|
||||||
struct gnet_stats_queue tcfc_qstats;
|
struct gnet_stats_queue tcfc_qstats;
|
||||||
struct gnet_stats_rate_est tcfc_rate_est;
|
struct gnet_stats_rate_est tcfc_rate_est;
|
||||||
spinlock_t *tcfc_stats_lock;
|
|
||||||
spinlock_t tcfc_lock;
|
spinlock_t tcfc_lock;
|
||||||
};
|
};
|
||||||
#define tcf_next common.tcfc_next
|
#define tcf_next common.tcfc_next
|
||||||
|
@ -32,7 +31,6 @@ struct tcf_common {
|
||||||
#define tcf_bstats common.tcfc_bstats
|
#define tcf_bstats common.tcfc_bstats
|
||||||
#define tcf_qstats common.tcfc_qstats
|
#define tcf_qstats common.tcfc_qstats
|
||||||
#define tcf_rate_est common.tcfc_rate_est
|
#define tcf_rate_est common.tcfc_rate_est
|
||||||
#define tcf_stats_lock common.tcfc_stats_lock
|
|
||||||
#define tcf_lock common.tcfc_lock
|
#define tcf_lock common.tcfc_lock
|
||||||
|
|
||||||
struct tcf_police {
|
struct tcf_police {
|
||||||
|
|
|
@ -230,13 +230,12 @@ struct tcf_common *tcf_hash_create(u32 index, struct rtattr *est, struct tc_acti
|
||||||
p->tcfc_bindcnt = 1;
|
p->tcfc_bindcnt = 1;
|
||||||
|
|
||||||
spin_lock_init(&p->tcfc_lock);
|
spin_lock_init(&p->tcfc_lock);
|
||||||
p->tcfc_stats_lock = &p->tcfc_lock;
|
|
||||||
p->tcfc_index = index ? index : tcf_hash_new_index(idx_gen, hinfo);
|
p->tcfc_index = index ? index : tcf_hash_new_index(idx_gen, hinfo);
|
||||||
p->tcfc_tm.install = jiffies;
|
p->tcfc_tm.install = jiffies;
|
||||||
p->tcfc_tm.lastuse = jiffies;
|
p->tcfc_tm.lastuse = jiffies;
|
||||||
if (est)
|
if (est)
|
||||||
gen_new_estimator(&p->tcfc_bstats, &p->tcfc_rate_est,
|
gen_new_estimator(&p->tcfc_bstats, &p->tcfc_rate_est,
|
||||||
p->tcfc_stats_lock, est);
|
&p->tcfc_lock, est);
|
||||||
a->priv = (void *) p;
|
a->priv = (void *) p;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
@ -595,12 +594,12 @@ int tcf_action_copy_stats(struct sk_buff *skb, struct tc_action *a,
|
||||||
if (compat_mode) {
|
if (compat_mode) {
|
||||||
if (a->type == TCA_OLD_COMPAT)
|
if (a->type == TCA_OLD_COMPAT)
|
||||||
err = gnet_stats_start_copy_compat(skb, 0,
|
err = gnet_stats_start_copy_compat(skb, 0,
|
||||||
TCA_STATS, TCA_XSTATS, h->tcf_stats_lock, &d);
|
TCA_STATS, TCA_XSTATS, &h->tcf_lock, &d);
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
} else
|
} else
|
||||||
err = gnet_stats_start_copy(skb, TCA_ACT_STATS,
|
err = gnet_stats_start_copy(skb, TCA_ACT_STATS,
|
||||||
h->tcf_stats_lock, &d);
|
&h->tcf_lock, &d);
|
||||||
|
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto errout;
|
goto errout;
|
||||||
|
|
|
@ -183,7 +183,6 @@ static int tcf_act_police_locate(struct rtattr *rta, struct rtattr *est,
|
||||||
ret = ACT_P_CREATED;
|
ret = ACT_P_CREATED;
|
||||||
police->tcf_refcnt = 1;
|
police->tcf_refcnt = 1;
|
||||||
spin_lock_init(&police->tcf_lock);
|
spin_lock_init(&police->tcf_lock);
|
||||||
police->tcf_stats_lock = &police->tcf_lock;
|
|
||||||
if (bind)
|
if (bind)
|
||||||
police->tcf_bindcnt = 1;
|
police->tcf_bindcnt = 1;
|
||||||
override:
|
override:
|
||||||
|
@ -231,7 +230,7 @@ override:
|
||||||
if (est)
|
if (est)
|
||||||
gen_replace_estimator(&police->tcf_bstats,
|
gen_replace_estimator(&police->tcf_bstats,
|
||||||
&police->tcf_rate_est,
|
&police->tcf_rate_est,
|
||||||
police->tcf_stats_lock, est);
|
&police->tcf_lock, est);
|
||||||
|
|
||||||
spin_unlock_bh(&police->tcf_lock);
|
spin_unlock_bh(&police->tcf_lock);
|
||||||
if (ret != ACT_P_CREATED)
|
if (ret != ACT_P_CREATED)
|
||||||
|
@ -450,7 +449,6 @@ struct tcf_police *tcf_police_locate(struct rtattr *rta, struct rtattr *est)
|
||||||
|
|
||||||
police->tcf_refcnt = 1;
|
police->tcf_refcnt = 1;
|
||||||
spin_lock_init(&police->tcf_lock);
|
spin_lock_init(&police->tcf_lock);
|
||||||
police->tcf_stats_lock = &police->tcf_lock;
|
|
||||||
if (parm->rate.rate) {
|
if (parm->rate.rate) {
|
||||||
police->tcfp_R_tab =
|
police->tcfp_R_tab =
|
||||||
qdisc_get_rtab(&parm->rate, tb[TCA_POLICE_RATE-1]);
|
qdisc_get_rtab(&parm->rate, tb[TCA_POLICE_RATE-1]);
|
||||||
|
@ -490,7 +488,7 @@ struct tcf_police *tcf_police_locate(struct rtattr *rta, struct rtattr *est)
|
||||||
police->tcf_action = parm->action;
|
police->tcf_action = parm->action;
|
||||||
if (est)
|
if (est)
|
||||||
gen_new_estimator(&police->tcf_bstats, &police->tcf_rate_est,
|
gen_new_estimator(&police->tcf_bstats, &police->tcf_rate_est,
|
||||||
police->tcf_stats_lock, est);
|
&police->tcf_lock, est);
|
||||||
h = tcf_hash(police->tcf_index, POL_TAB_MASK);
|
h = tcf_hash(police->tcf_index, POL_TAB_MASK);
|
||||||
write_lock_bh(&police_lock);
|
write_lock_bh(&police_lock);
|
||||||
police->tcf_next = tcf_police_ht[h];
|
police->tcf_next = tcf_police_ht[h];
|
||||||
|
@ -591,7 +589,7 @@ int tcf_police_dump_stats(struct sk_buff *skb, struct tcf_police *police)
|
||||||
struct gnet_dump d;
|
struct gnet_dump d;
|
||||||
|
|
||||||
if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS,
|
if (gnet_stats_start_copy_compat(skb, TCA_STATS2, TCA_STATS,
|
||||||
TCA_XSTATS, police->tcf_stats_lock,
|
TCA_XSTATS, &police->tcf_lock,
|
||||||
&d) < 0)
|
&d) < 0)
|
||||||
goto errout;
|
goto errout;
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,6 @@ struct atm_flow_data {
|
||||||
int ref; /* reference count */
|
int ref; /* reference count */
|
||||||
struct gnet_stats_basic bstats;
|
struct gnet_stats_basic bstats;
|
||||||
struct gnet_stats_queue qstats;
|
struct gnet_stats_queue qstats;
|
||||||
spinlock_t *stats_lock;
|
|
||||||
struct atm_flow_data *next;
|
struct atm_flow_data *next;
|
||||||
struct atm_flow_data *excess; /* flow for excess traffic;
|
struct atm_flow_data *excess; /* flow for excess traffic;
|
||||||
NULL to set CLP instead */
|
NULL to set CLP instead */
|
||||||
|
|
|
@ -148,7 +148,6 @@ struct cbq_class
|
||||||
struct gnet_stats_basic bstats;
|
struct gnet_stats_basic bstats;
|
||||||
struct gnet_stats_queue qstats;
|
struct gnet_stats_queue qstats;
|
||||||
struct gnet_stats_rate_est rate_est;
|
struct gnet_stats_rate_est rate_est;
|
||||||
spinlock_t *stats_lock;
|
|
||||||
struct tc_cbq_xstats xstats;
|
struct tc_cbq_xstats xstats;
|
||||||
|
|
||||||
struct tcf_proto *filter_list;
|
struct tcf_proto *filter_list;
|
||||||
|
@ -1442,7 +1441,6 @@ static int cbq_init(struct Qdisc *sch, struct rtattr *opt)
|
||||||
q->link.ewma_log = TC_CBQ_DEF_EWMA;
|
q->link.ewma_log = TC_CBQ_DEF_EWMA;
|
||||||
q->link.avpkt = q->link.allot/2;
|
q->link.avpkt = q->link.allot/2;
|
||||||
q->link.minidle = -0x7FFFFFFF;
|
q->link.minidle = -0x7FFFFFFF;
|
||||||
q->link.stats_lock = &sch->dev->queue_lock;
|
|
||||||
|
|
||||||
qdisc_watchdog_init(&q->watchdog, sch);
|
qdisc_watchdog_init(&q->watchdog, sch);
|
||||||
hrtimer_init(&q->delay_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
|
hrtimer_init(&q->delay_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
|
||||||
|
@ -1871,7 +1869,8 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct rtattr **t
|
||||||
|
|
||||||
if (tca[TCA_RATE-1])
|
if (tca[TCA_RATE-1])
|
||||||
gen_replace_estimator(&cl->bstats, &cl->rate_est,
|
gen_replace_estimator(&cl->bstats, &cl->rate_est,
|
||||||
cl->stats_lock, tca[TCA_RATE-1]);
|
&sch->dev->queue_lock,
|
||||||
|
tca[TCA_RATE-1]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1929,7 +1928,6 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct rtattr **t
|
||||||
cl->allot = parent->allot;
|
cl->allot = parent->allot;
|
||||||
cl->quantum = cl->allot;
|
cl->quantum = cl->allot;
|
||||||
cl->weight = cl->R_tab->rate.rate;
|
cl->weight = cl->R_tab->rate.rate;
|
||||||
cl->stats_lock = &sch->dev->queue_lock;
|
|
||||||
|
|
||||||
sch_tree_lock(sch);
|
sch_tree_lock(sch);
|
||||||
cbq_link_class(cl);
|
cbq_link_class(cl);
|
||||||
|
@ -1959,7 +1957,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct rtattr **t
|
||||||
|
|
||||||
if (tca[TCA_RATE-1])
|
if (tca[TCA_RATE-1])
|
||||||
gen_new_estimator(&cl->bstats, &cl->rate_est,
|
gen_new_estimator(&cl->bstats, &cl->rate_est,
|
||||||
cl->stats_lock, tca[TCA_RATE-1]);
|
&sch->dev->queue_lock, tca[TCA_RATE-1]);
|
||||||
|
|
||||||
*arg = (unsigned long)cl;
|
*arg = (unsigned long)cl;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -122,7 +122,6 @@ struct hfsc_class
|
||||||
struct gnet_stats_basic bstats;
|
struct gnet_stats_basic bstats;
|
||||||
struct gnet_stats_queue qstats;
|
struct gnet_stats_queue qstats;
|
||||||
struct gnet_stats_rate_est rate_est;
|
struct gnet_stats_rate_est rate_est;
|
||||||
spinlock_t *stats_lock;
|
|
||||||
unsigned int level; /* class level in hierarchy */
|
unsigned int level; /* class level in hierarchy */
|
||||||
struct tcf_proto *filter_list; /* filter list */
|
struct tcf_proto *filter_list; /* filter list */
|
||||||
unsigned int filter_cnt; /* filter count */
|
unsigned int filter_cnt; /* filter count */
|
||||||
|
@ -1056,7 +1055,8 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
||||||
|
|
||||||
if (tca[TCA_RATE-1])
|
if (tca[TCA_RATE-1])
|
||||||
gen_replace_estimator(&cl->bstats, &cl->rate_est,
|
gen_replace_estimator(&cl->bstats, &cl->rate_est,
|
||||||
cl->stats_lock, tca[TCA_RATE-1]);
|
&sch->dev->queue_lock,
|
||||||
|
tca[TCA_RATE-1]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1096,7 +1096,6 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
||||||
cl->qdisc = qdisc_create_dflt(sch->dev, &pfifo_qdisc_ops, classid);
|
cl->qdisc = qdisc_create_dflt(sch->dev, &pfifo_qdisc_ops, classid);
|
||||||
if (cl->qdisc == NULL)
|
if (cl->qdisc == NULL)
|
||||||
cl->qdisc = &noop_qdisc;
|
cl->qdisc = &noop_qdisc;
|
||||||
cl->stats_lock = &sch->dev->queue_lock;
|
|
||||||
INIT_LIST_HEAD(&cl->children);
|
INIT_LIST_HEAD(&cl->children);
|
||||||
cl->vt_tree = RB_ROOT;
|
cl->vt_tree = RB_ROOT;
|
||||||
cl->cf_tree = RB_ROOT;
|
cl->cf_tree = RB_ROOT;
|
||||||
|
@ -1112,7 +1111,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
||||||
|
|
||||||
if (tca[TCA_RATE-1])
|
if (tca[TCA_RATE-1])
|
||||||
gen_new_estimator(&cl->bstats, &cl->rate_est,
|
gen_new_estimator(&cl->bstats, &cl->rate_est,
|
||||||
cl->stats_lock, tca[TCA_RATE-1]);
|
&sch->dev->queue_lock, tca[TCA_RATE-1]);
|
||||||
*arg = (unsigned long)cl;
|
*arg = (unsigned long)cl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1440,8 +1439,6 @@ hfsc_init_qdisc(struct Qdisc *sch, struct rtattr *opt)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
qopt = RTA_DATA(opt);
|
qopt = RTA_DATA(opt);
|
||||||
|
|
||||||
sch->stats_lock = &sch->dev->queue_lock;
|
|
||||||
|
|
||||||
q->defcls = qopt->defcls;
|
q->defcls = qopt->defcls;
|
||||||
for (i = 0; i < HFSC_HSIZE; i++)
|
for (i = 0; i < HFSC_HSIZE; i++)
|
||||||
INIT_LIST_HEAD(&q->clhash[i]);
|
INIT_LIST_HEAD(&q->clhash[i]);
|
||||||
|
@ -1456,7 +1453,6 @@ hfsc_init_qdisc(struct Qdisc *sch, struct rtattr *opt)
|
||||||
sch->handle);
|
sch->handle);
|
||||||
if (q->root.qdisc == NULL)
|
if (q->root.qdisc == NULL)
|
||||||
q->root.qdisc = &noop_qdisc;
|
q->root.qdisc = &noop_qdisc;
|
||||||
q->root.stats_lock = &sch->dev->queue_lock;
|
|
||||||
INIT_LIST_HEAD(&q->root.children);
|
INIT_LIST_HEAD(&q->root.children);
|
||||||
q->root.vt_tree = RB_ROOT;
|
q->root.vt_tree = RB_ROOT;
|
||||||
q->root.cf_tree = RB_ROOT;
|
q->root.cf_tree = RB_ROOT;
|
||||||
|
|
Loading…
Reference in New Issue