net: sched: Convert timers to use timer_setup()
[linux-2.6-microblaze.git] / net / sched / sch_red.c
index 93b9d70..fdfdb56 100644 (file)
@@ -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);
 }