On Thu, 15 Feb 2018 18:20:42 +0100 Sebastian Andrzej Siewior <bige...@linutronix.de> wrote:
> From: Ingo Molnar <mi...@elte.hu> > > tasklet_action() + tasklet_hi_action() are almost identical. > Move the common code from both function into __tasklet_schedule_common() > and let both functions invoke it with different arguments. > > Signed-off-by: Ingo Molnar <mi...@elte.hu> > Signed-off-by: Steven Rostedt <rost...@goodmis.org> > Signed-off-by: Thomas Gleixner <t...@linutronix.de> > [bigeasy: splitted out from RT's "tasklet: Prevent tasklets from going > into infinite spin in RT" and added commit message] > Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de> > --- > kernel/softirq.c | 54 +++++++++++++++--------------------------------------- > 1 file changed, 15 insertions(+), 39 deletions(-) > > diff --git a/kernel/softirq.c b/kernel/softirq.c > index 145cf6a2e7c9..fa7ed89a9fcf 100644 > --- a/kernel/softirq.c > +++ b/kernel/softirq.c > @@ -488,14 +488,16 @@ void __tasklet_hi_schedule(struct tasklet_struct *t) > } > EXPORT_SYMBOL(__tasklet_hi_schedule); > > -static __latent_entropy void tasklet_action(struct softirq_action *a) > +static void tasklet_action_common(struct softirq_action *a, > + struct tasklet_head *tl_head, > + unsigned int softirq_nr) > { > struct tasklet_struct *list; > > local_irq_disable(); Same issues with this code. -- Steve > - list = __this_cpu_read(tasklet_vec.head); > - __this_cpu_write(tasklet_vec.head, NULL); > - __this_cpu_write(tasklet_vec.tail, this_cpu_ptr(&tasklet_vec.head)); > + list = tl_head->head; > + tl_head->head = NULL; > + tl_head->tail = &tl_head->head; > local_irq_enable(); > >