Re: [PATCH] tasklets: simplify code in tasklet_action_common()

From: Mingzhe Yang
Date: Wed Aug 25 2021 - 06:09:37 EST


Hi tglx,
Thanks for your review!

Sorry, I didn't think carefully enough about this patch.

I want to simplify code in tasklet_action_common, because it has more
than 3 levels of indentation. Let me try again without any new functions.

diff --git a/kernel/softirq.c b/kernel/softirq.c
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -777,16 +777,16 @@ static void tasklet_action_common(struct
softirq_action *a,
list = list->next;

if (tasklet_trylock(t)) {
- if (!atomic_read(&t->count)) {
- if (tasklet_clear_sched(t)) {
- if (t->use_callback)
- t->callback(t);
- else
- t->func(t->data);
- }
+ if (atomic_read(&t->count) || !tasklet_clear_sched(t)) {
tasklet_unlock(t);
continue;
}
+
+ if (t->use_callback)
+ t->callback(t);
+ else
+ t->func(t->data);
+
tasklet_unlock(t);
}

--
Thanks,

Mingzhe Yang

On Tue, Aug 10, 2021 at 9:12 PM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
>
> On Fri, Apr 30 2021 at 20:25, Mingzhe Yang wrote:
>
> > Use tasklet_is_disabled() to simplify the code in
> > tasklet_action_common.
>
> This changelog is not really helpful. Use a new function does not tell
> anything. Neither does it explain why there need to be two new functions
> and worse
>
> > +static inline bool tasklet_is_enabled(struct tasklet_struct *t)
> > +{
> > + smp_rmb();
>
> why there is suddenly a new undocumented SMP barrier in the code.
>
> > + return !atomic_read(&t->count);
> > +}
> > +
> > +static inline bool tasklet_is_disabled(struct tasklet_struct *t)
> > +{
> > + return !tasklet_is_enabled(t);
> > +}
> > +
>
> Aside of that there is no point in exposing these functions in a global
> header.
>
> Thanks,
>
> tglx