User per-cpu data in softirq.c
PATCH 1/1 User per-cpu data in softirq.c
Linus, please apply.
This makes tasklet_vec and tasklet_hi_vec static inside softirq.c (the only place they are accessed), and makes them __per_cpu_data.
Thanks,
Rusty.
include/linux/interrupt.h +0 -8
@@ -124,14 +124,6 @@TASKLET_STATE_RUN /* Tasklet is running (SMP only) */ }; -struct tasklet_head -{ -struct tasklet_struct *list; -} __attribute__ ((__aligned__ (SMP_CACHE_BYTES ))); - -extern struct tasklet_head tasklet_vec[NR_CPUS ]; -extern struct tasklet_head tasklet_hi_vec[NR_CPUS ]; -#ifdef CONFIG_SMP static inline int tasklet_trylock (struct tasklet_struct *t) {
kernel/ksyms.c +0 -2
@@ -542,8 +542,6 @@EXPORT_SYMBOL (strsep);/* software interrupts */ -EXPORT_SYMBOL (tasklet_hi_vec); -EXPORT_SYMBOL (tasklet_vec);EXPORT_SYMBOL (bh_task_vec);EXPORT_SYMBOL (init_bh);EXPORT_SYMBOL (remove_bh);
kernel/softirq.c +18 -14
@@ -145,9 +145,13 @@/* Tasklets */ +struct tasklet_head +{ +struct tasklet_struct *list; +}; -struct tasklet_head tasklet_vec[NR_CPUS] __cacheline_aligned_in_smp; -struct tasklet_head tasklet_hi_vec[NR_CPUS] __cacheline_aligned_in_smp; +static struct tasklet_head tasklet_vec __per_cpu_data; +static struct tasklet_head tasklet_hi_vec __per_cpu_data;void __tasklet_schedule (struct tasklet_struct *t) {
@@ -155,8 +159,8 @@unsigned long flags;local_irq_save (flags); - t->next = tasklet_vec[cpu].list; - tasklet_vec[cpu].list = t; + t->next =per_cpu (tasklet_vec, cpu).list; +per_cpu (tasklet_vec, cpu).list = t;cpu_raise_softirq (cpu,TASKLET_SOFTIRQ );local_irq_restore (flags); }
@@ -167,8 +171,8 @@unsigned long flags;local_irq_save (flags); - t->next = tasklet_hi_vec[cpu].list; - tasklet_hi_vec[cpu].list = t; + t->next =per_cpu (tasklet_hi_vec, cpu).list; +per_cpu (tasklet_hi_vec, cpu).list = t;cpu_raise_softirq (cpu,HI_SOFTIRQ );local_irq_restore (flags); }
@@ -179,8 +183,8 @@struct tasklet_struct *list;local_irq_disable (); - list = tasklet_vec[cpu].list; - tasklet_vec[cpu].list =NULL ; + list =per_cpu (tasklet_vec, cpu).list; +per_cpu (tasklet_vec, cpu).list =NULL ;local_irq_enable ();while (list) {
@@ -200,8 +204,8 @@ }local_irq_disable (); - t->next = tasklet_vec[cpu].list; - tasklet_vec[cpu].list = t; + t->next =per_cpu (tasklet_vec, cpu).list; +per_cpu (tasklet_vec, cpu).list = t;__cpu_raise_softirq (cpu,TASKLET_SOFTIRQ );local_irq_enable (); }
@@ -213,8 +217,8 @@struct tasklet_struct *list;local_irq_disable (); - list = tasklet_hi_vec[cpu].list; - tasklet_hi_vec[cpu].list =NULL ; + list =per_cpu (tasklet_hi_vec, cpu).list; +per_cpu (tasklet_hi_vec, cpu).list =NULL ;local_irq_enable ();while (list) {
@@ -234,8 +238,8 @@ }local_irq_disable (); - t->next = tasklet_hi_vec[cpu].list; - tasklet_hi_vec[cpu].list = t; + t->next =per_cpu (tasklet_hi_vec, cpu).list; +per_cpu (tasklet_hi_vec, cpu).list = t;__cpu_raise_softirq (cpu,HI_SOFTIRQ );local_irq_enable (); }
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.