diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-08-19 23:50:37 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-16 10:52:54 -0400 |
commit | e955b5398b660a204854bdff059d050b44090879 (patch) | |
tree | 6c12159e98d47166541d00daff0ab07382a2c2de /kernel/irq/handle.c | |
parent | efa2559f65167989f1893cb065e3126d4f13ba60 (diff) |
sparseirq: fix lockdep
-tip testing found this lockdep splat:
[ 0.000000] Initializing CPU#0
[ 0.000000] found new irq_desc for irq 0
[ 0.000000] INFO: trying to register non-static key.
[ 0.000000] the code is fine but needs lockdep annotation.
[ 0.000000] turning off the locking correctness validator.
[ 0.000000] Pid: 0, comm: swapper Not tainted 2.6.27-rc3-tip-00191-g98ccb89-dirty #1
[ 0.000000] [<c0153c22>] register_lock_class+0x3d2/0x400
[ 0.000000] [<c0104d87>] ? mcount_call+0x5/0xa
[ 0.000000] [<c0154f3a>] __lock_acquire+0x22a/0x5d0
[ 0.000000] [<c0104d87>] ? mcount_call+0x5/0xa
[ 0.000000] [<c0155351>] lock_acquire+0x71/0xa0
[ 0.000000] [<c016d61f>] ? set_irq_chip+0x3f/0x90
[ 0.000000] [<c070f148>] _spin_lock_irqsave+0x58/0x90
[ 0.000000] [<c016d61f>] ? set_irq_chip+0x3f/0x90
[ 0.000000] [<c016d61f>] set_irq_chip+0x3f/0x90
[ 0.000000] [<c016d7e0>] ? handle_level_irq+0x0/0xe0
[ 0.000000] [<c016da1a>] set_irq_chip_and_handler_name+0x1a/0x40
[ 0.000000] [<c0a396c1>] init_ISA_irqs+0x51/0xa0
[ 0.000000] [<c0a4a365>] pre_intr_init_hook+0x25/0x30
[ 0.000000] [<c0a39723>] native_init_IRQ+0x13/0x370
[ 0.000000] [<c015569c>] ? lock_release+0xcc/0x1d0
[ 0.000000] [<c0104d87>] ? mcount_call+0x5/0xa
[ 0.000000] [<c070dc22>] ? __mutex_unlock_slowpath+0x92/0x110
[ 0.000000] [<c070dcad>] ? mutex_unlock+0xd/0x10
[ 0.000000] [<c0135f62>] ? cpu_maps_update_done+0x12/0x20
[ 0.000000] [<c06c6743>] ? register_cpu_notifier+0x23/0x30
[ 0.000000] [<c011e8ae>] init_IRQ+0xe/0x10
[ 0.000000] [<c0a357a5>] start_kernel+0x1c5/0x340
[ 0.000000] [<c0a35280>] ? unknown_bootoption+0x0/0x210
[ 0.000000] [<c0a3506b>] i386_start_kernel+0x6b/0x80
[ 0.000000] =======================
[ 0.000000] found new irq_desc for irq 1
[ 0.000000] found new irq_desc for irq 2
[ 0.000000] found new irq_desc for irq 3
this:
static void init_one_irq_desc(struct irq_desc *desc)
{
memcpy(desc, &irq_desc_init, sizeof(struct irq_desc));
#ifdef CONFIG_TRACE_IRQFLAGS
lockdep_set_class(&desc->lock, &irq_desc_lock_class);
#endif
}
should be unconditional.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/irq/handle.c')
-rw-r--r-- | kernel/irq/handle.c | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c index 6d174390f3a0..24c83a3cee4d 100644 --- a/kernel/irq/handle.c +++ b/kernel/irq/handle.c | |||
@@ -18,13 +18,10 @@ | |||
18 | 18 | ||
19 | #include "internals.h" | 19 | #include "internals.h" |
20 | 20 | ||
21 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
22 | |||
23 | /* | 21 | /* |
24 | * lockdep: we want to handle all irq_desc locks as a single lock-class: | 22 | * lockdep: we want to handle all irq_desc locks as a single lock-class: |
25 | */ | 23 | */ |
26 | static struct lock_class_key irq_desc_lock_class; | 24 | static struct lock_class_key irq_desc_lock_class; |
27 | #endif | ||
28 | 25 | ||
29 | /** | 26 | /** |
30 | * handle_bad_irq - handle spurious and unhandled irqs | 27 | * handle_bad_irq - handle spurious and unhandled irqs |
@@ -75,9 +72,7 @@ static struct irq_desc irq_desc_init = { | |||
75 | static void init_one_irq_desc(struct irq_desc *desc) | 72 | static void init_one_irq_desc(struct irq_desc *desc) |
76 | { | 73 | { |
77 | memcpy(desc, &irq_desc_init, sizeof(struct irq_desc)); | 74 | memcpy(desc, &irq_desc_init, sizeof(struct irq_desc)); |
78 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
79 | lockdep_set_class(&desc->lock, &irq_desc_lock_class); | 75 | lockdep_set_class(&desc->lock, &irq_desc_lock_class); |
80 | #endif | ||
81 | } | 76 | } |
82 | 77 | ||
83 | extern int after_bootmem; | 78 | extern int after_bootmem; |