diff mbox series

[net-next,V3,6/8] net: sched: convert tasklets to use new tasklet_setup() API

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

Commit Message

Allen Nov. 3, 2020, 7:09 a.m. UTC
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(-)

Comments

Eric Dumazet Nov. 3, 2020, 8:18 a.m. UTC | #1
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
Allen Pais Nov. 3, 2020, 8:20 a.m. UTC | #2
>>
>> 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 mbox series

Patch

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;
 }