mirror of https://gitee.com/openkylin/linux.git
[PATCH] lockdep: annotate genirq
Teach special (recursive) locking code to the lock validator. Has no effect on non-lockdep kernels. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
8b8f319fc7
commit
243c7621aa
|
@ -270,6 +270,12 @@ static inline int lockdep_internal(void)
|
|||
struct lock_class_key { };
|
||||
#endif /* !LOCKDEP */
|
||||
|
||||
#if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_GENERIC_HARDIRQS)
|
||||
extern void early_init_irq_lock_class(void);
|
||||
#else
|
||||
# define early_init_irq_lock_class() do { } while (0)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
extern void early_boot_irqs_off(void);
|
||||
extern void early_boot_irqs_on(void);
|
||||
|
|
|
@ -466,6 +466,7 @@ asmlinkage void __init start_kernel(void)
|
|||
|
||||
local_irq_disable();
|
||||
early_boot_irqs_off();
|
||||
early_init_irq_lock_class();
|
||||
|
||||
/*
|
||||
* Interrupts are still disabled. Do necessary setups, then
|
||||
|
|
|
@ -249,3 +249,19 @@ fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs)
|
|||
return 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
|
||||
/*
|
||||
* lockdep: we want to handle all irq_desc locks as a single lock-class:
|
||||
*/
|
||||
static struct lock_class_key irq_desc_lock_class;
|
||||
|
||||
void early_init_irq_lock_class(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < NR_IRQS; i++)
|
||||
lockdep_set_class(&irq_desc[i].lock, &irq_desc_lock_class);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue