Message ID | 20201103070947.577831-7-allen.lkml@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: convert tasklets to use new tasklet_setup API | expand |
On Tue, Nov 3, 2020 at 8:10 AM Allen Pais <allen.lkml@gmail.com> wrote: > > From: Allen Pais <apais@linux.microsoft.com> > > In preparation for unconditionally passing the > struct tasklet_struct pointer to all tasklet > callbacks, switch to using the new tasklet_setup() > and from_tasklet() to pass the tasklet pointer explicitly. > > Signed-off-by: Romain Perier <romain.perier@gmail.com> > Signed-off-by: Allen Pais <apais@linux.microsoft.com> > --- > net/sched/sch_atm.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c > index 1c281cc81f57..390d972bb2f0 100644 > --- a/net/sched/sch_atm.c > +++ b/net/sched/sch_atm.c > @@ -466,10 +466,10 @@ drop: __maybe_unused > * non-ATM interfaces. > */ > > -static void sch_atm_dequeue(unsigned long data) > +static void sch_atm_dequeue(struct tasklet_struct *t) > { > - struct Qdisc *sch = (struct Qdisc *)data; > - struct atm_qdisc_data *p = qdisc_priv(sch); > + struct atm_qdisc_data *p = from_tasklet(p, t, task); > + struct Qdisc *sch = (struct Qdisc *)((char *)p - sizeof(struct Qdisc)); Hmm... I think I prefer not burying implementation details in net/sched/sch_atm.c and instead define a helper in include/net/pkt_sched.h diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h index 4ed32e6b020145afb015c3c07d2ec3a613f1311d..15b1b30f454e4837cd1fc07bb3ff6b4f178b1d39 100644 --- a/include/net/pkt_sched.h +++ b/include/net/pkt_sched.h @@ -24,6 +24,11 @@ static inline void *qdisc_priv(struct Qdisc *q) return &q->privdata; } +static inline struct Qdisc *qdisc_from_priv(void *priv) +{ + return container_of(priv, struct Qdisc, privdata); +} + /* Timer resolution MUST BE < 10% of min_schedulable_packet_size/bandwidth
>> >> In preparation for unconditionally passing the >> struct tasklet_struct pointer to all tasklet >> callbacks, switch to using the new tasklet_setup() >> and from_tasklet() to pass the tasklet pointer explicitly. >> >> Signed-off-by: Romain Perier <romain.perier@gmail.com> >> Signed-off-by: Allen Pais <apais@linux.microsoft.com> >> --- >> net/sched/sch_atm.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c >> index 1c281cc81f57..390d972bb2f0 100644 >> --- a/net/sched/sch_atm.c >> +++ b/net/sched/sch_atm.c >> @@ -466,10 +466,10 @@ drop: __maybe_unused >> * non-ATM interfaces. >> */ >> >> -static void sch_atm_dequeue(unsigned long data) >> +static void sch_atm_dequeue(struct tasklet_struct *t) >> { >> - struct Qdisc *sch = (struct Qdisc *)data; >> - struct atm_qdisc_data *p = qdisc_priv(sch); >> + struct atm_qdisc_data *p = from_tasklet(p, t, task); >> + struct Qdisc *sch = (struct Qdisc *)((char *)p - sizeof(struct Qdisc)); > > Hmm... I think I prefer not burying implementation details in > net/sched/sch_atm.c and instead > define a helper in include/net/pkt_sched.h > > diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h > index 4ed32e6b020145afb015c3c07d2ec3a613f1311d..15b1b30f454e4837cd1fc07bb3ff6b4f178b1d39 > 100644 > --- a/include/net/pkt_sched.h > +++ b/include/net/pkt_sched.h > @@ -24,6 +24,11 @@ static inline void *qdisc_priv(struct Qdisc *q) > return &q->privdata; > } > > +static inline struct Qdisc *qdisc_from_priv(void *priv) > +{ > + return container_of(priv, struct Qdisc, privdata); > +} > + > /* > Timer resolution MUST BE < 10% of min_schedulable_packet_size/bandwidth > Sure, I will have it updated and resent. Thanks.
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index 1c281cc81f57..390d972bb2f0 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c @@ -466,10 +466,10 @@ drop: __maybe_unused * non-ATM interfaces. */ -static void sch_atm_dequeue(unsigned long data) +static void sch_atm_dequeue(struct tasklet_struct *t) { - struct Qdisc *sch = (struct Qdisc *)data; - struct atm_qdisc_data *p = qdisc_priv(sch); + struct atm_qdisc_data *p = from_tasklet(p, t, task); + struct Qdisc *sch = (struct Qdisc *)((char *)p - sizeof(struct Qdisc)); struct atm_flow_data *flow; struct sk_buff *skb; @@ -563,7 +563,7 @@ static int atm_tc_init(struct Qdisc *sch, struct nlattr *opt, if (err) return err; - tasklet_init(&p->task, sch_atm_dequeue, (unsigned long)sch); + tasklet_setup(&p->task, sch_atm_dequeue); return 0; }