net: sched: Convert timers to use timer_setup()
Subsystems (3)
PATCH 1/1 net: sched: Convert timers to use timer_setup()
In preparation for unconditionally passing the struct timer_list pointer to all timer callbacks, switch to using the new timer_setup() and from_timer() to pass the timer pointer explicitly. Add pointer back to Qdisc.
Cc Jamal Hadi Salim <[email protected]>
Cc Cong Wang <[email protected]>
Cc Jiri Pirko <[email protected]>
Cc "David S. Miller" <[email protected]>
Cc Thomas Gleixner <[email protected]>
Signed-off-by Kees Cook <[email protected]>
---
This requires commit 686fef928bba ("timer: Prepare to change timer callback argument type") in v4.14-rc3, but should be otherwise stand-alone.
--- net/sched/sch_pie.c | 10 ++++++---- net/sched/sch_red.c | 10 ++++++---- net/sched/sch_sfq.c | 10 +++++----- 3 files changed, 17 insertions(+), 13 deletions(-)
net/sched/sch_pie.c +6 -4
@@ -74,6 +74,7 @@ struct pie_sched_data {struct pie_vars vars;struct pie_stats stats;struct timer_list adapt_timer; +struct Qdisc *sch; };static void pie_params_init (struct pie_params *params)
@@ -422,10 +423,10 @@ static void calculate_probability(struct Qdisc *sch)pie_vars_init (&q->vars); } -static void pie_timer (unsigned long arg) +static void pie_timer (struct timer_list *t) { -struct Qdisc *sch = (struct Qdisc *)arg; -struct pie_sched_data *q =qdisc_priv (sch); +struct pie_sched_data *q =from_timer (q, t, adapt_timer); +struct Qdisc *sch = q->sch;spinlock_t *root_lock =qdisc_lock (qdisc_root_sleeping (sch));spin_lock (root_lock);
@@ -446,7 +447,8 @@ static int pie_init(struct Qdisc *sch, struct nlattr *opt)pie_vars_init (&q->vars); sch->limit = q->params.limit; -setup_timer (&q->adapt_timer, pie_timer, (unsigned long )sch); + q->sch = sch; +timer_setup (&q->adapt_timer, pie_timer,0 );if (opt) {int err =pie_change (sch, opt);
net/sched/sch_red.c +6 -4
@@ -40,6 +40,7 @@ struct red_sched_data {u32 limit;/* HARD maximal queue length */ unsigned char flags;struct timer_list adapt_timer; +struct Qdisc *sch;struct red_parms parms;struct red_vars vars;struct red_stats stats;
@@ -221,10 +222,10 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt)return 0 ; } -static inline void red_adaptative_timer (unsigned long arg) +static inline void red_adaptative_timer (struct timer_list *t) { -struct Qdisc *sch = (struct Qdisc *)arg; -struct red_sched_data *q =qdisc_priv (sch); +struct red_sched_data *q =from_timer (q, t, adapt_timer); +struct Qdisc *sch = q->sch;spinlock_t *root_lock =qdisc_lock (qdisc_root_sleeping (sch));spin_lock (root_lock);
@@ -238,7 +239,8 @@ static int red_init(struct Qdisc *sch, struct nlattr *opt)struct red_sched_data *q =qdisc_priv (sch); q->qdisc = &noop_qdisc; -setup_timer (&q->adapt_timer, red_adaptative_timer, (unsigned long )sch); + q->sch = sch; +timer_setup (&q->adapt_timer, red_adaptative_timer,0 );return red_change (sch, opt); }
net/sched/sch_sfq.c +5 -5
@@ -145,6 +145,7 @@ struct sfq_sched_data {int perturb_period;unsigned int quantum;/* Allotment per round: MUST BE >= MTU */ struct timer_list perturb_timer; +struct Qdisc *sch; };/*
@@ -604,10 +605,10 @@ static void sfq_rehash(struct Qdisc *sch)qdisc_tree_reduce_backlog (sch, dropped, drop_len); } -static void sfq_perturbation (unsigned long arg) +static void sfq_perturbation (struct timer_list *t) { -struct Qdisc *sch = (struct Qdisc *)arg; -struct sfq_sched_data *q =qdisc_priv (sch); +struct sfq_sched_data *q =from_timer (q, t, perturb_timer); +struct Qdisc *sch = q->sch;spinlock_t *root_lock =qdisc_lock (qdisc_root_sleeping (sch));spin_lock (root_lock);
@@ -722,8 +723,7 @@ static int sfq_init(struct Qdisc *sch, struct nlattr *opt)int i;int err; -setup_deferrable_timer (&q->perturb_timer, sfq_perturbation, - (unsigned long )sch); +timer_setup (&q->perturb_timer, sfq_perturbation,TIMER_DEFERRABLE ); err =tcf_block_get (&q->block, &q->filter_list);if (err)
Signature · 6 lines
2.7.4 -- Kees Cook Pixel Security