aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2010-11-04 06:13:48 -0400
committerThomas Gleixner <tglx@linutronix.de>2010-11-10 04:21:22 -0500
commitf6cd24777513fcc673d432cc29ef59881d3e4df1 (patch)
tree93d08badf3a18e6bcdf2baf97532a8f54fec5a08
parent814ce2521121c2459e16cea8c7221e157edbeddd (diff)
irq: Better struct irqaction layout
We currently use kmalloc-96 slab for struct irqaction allocations on 64bit arches. This is unfortunate because of possible false sharing and two cache lines accesses. Move 'name' and 'dir' fields at the end of the structure, and force a suitable alignement. Hot path fields now use one cache line on x86_64. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Reviewed-by: Andi Kleen <andi@firstfloor.org> Cc: Peter Zijlstra <peterz@infradead.org> LKML-Reference: <1288865628.2659.69.camel@edumazet-laptop> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--include/linux/interrupt.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 79d0c4f6d071..55e0d4253e49 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -114,15 +114,15 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
114struct irqaction { 114struct irqaction {
115 irq_handler_t handler; 115 irq_handler_t handler;
116 unsigned long flags; 116 unsigned long flags;
117 const char *name;
118 void *dev_id; 117 void *dev_id;
119 struct irqaction *next; 118 struct irqaction *next;
120 int irq; 119 int irq;
121 struct proc_dir_entry *dir;
122 irq_handler_t thread_fn; 120 irq_handler_t thread_fn;
123 struct task_struct *thread; 121 struct task_struct *thread;
124 unsigned long thread_flags; 122 unsigned long thread_flags;
125}; 123 const char *name;
124 struct proc_dir_entry *dir;
125} ____cacheline_internodealigned_in_smp;
126 126
127extern irqreturn_t no_action(int cpl, void *dev_id); 127extern irqreturn_t no_action(int cpl, void *dev_id);
128 128