diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-03 12:42:52 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-03 12:42:52 -0700 |
commit | a7e1e001f432d5960b929787a2a261cf5a7ddac5 (patch) | |
tree | b340cb74237427dbdbdacf618c42e8b0bd8d21d5 /include/asm-x86 | |
parent | 21806261b6cc1068197ea6c8891b857f16260fee (diff) | |
parent | 17aacfb9cdf9a8329a6ece9c437551a29c93e47b (diff) |
Merge branch 'v2.6.24-rc1-lockdep' of git://git.kernel.org/pub/scm/linux/kernel/git/peterz/linux-2.6-lockdep
* 'v2.6.24-rc1-lockdep' of git://git.kernel.org/pub/scm/linux/kernel/git/peterz/linux-2.6-lockdep:
lockdep: fix a typo in the __lock_acquire comment
sched: fix unconditional irq lock
lockdep: fixup irq tracing
Diffstat (limited to 'include/asm-x86')
-rw-r--r-- | include/asm-x86/irqflags_32.h | 21 | ||||
-rw-r--r-- | include/asm-x86/irqflags_64.h | 20 |
2 files changed, 41 insertions, 0 deletions
diff --git a/include/asm-x86/irqflags_32.h b/include/asm-x86/irqflags_32.h index d058b04e0083..4c7720089cb5 100644 --- a/include/asm-x86/irqflags_32.h +++ b/include/asm-x86/irqflags_32.h @@ -129,6 +129,27 @@ static inline int raw_irqs_disabled(void) return raw_irqs_disabled_flags(flags); } + +/* + * makes the traced hardirq state match with the machine state + * + * should be a rarely used function, only in places where its + * otherwise impossible to know the irq state, like in traps. + */ +static inline void trace_hardirqs_fixup_flags(unsigned long flags) +{ + if (raw_irqs_disabled_flags(flags)) + trace_hardirqs_off(); + else + trace_hardirqs_on(); +} + +static inline void trace_hardirqs_fixup(void) +{ + unsigned long flags = __raw_local_save_flags(); + + trace_hardirqs_fixup_flags(flags); +} #endif /* __ASSEMBLY__ */ /* diff --git a/include/asm-x86/irqflags_64.h b/include/asm-x86/irqflags_64.h index 5341ea1f815a..bb9163bb29d1 100644 --- a/include/asm-x86/irqflags_64.h +++ b/include/asm-x86/irqflags_64.h @@ -112,6 +112,26 @@ static inline int raw_irqs_disabled(void) } /* + * makes the traced hardirq state match with the machine state + * + * should be a rarely used function, only in places where its + * otherwise impossible to know the irq state, like in traps. + */ +static inline void trace_hardirqs_fixup_flags(unsigned long flags) +{ + if (raw_irqs_disabled_flags(flags)) + trace_hardirqs_off(); + else + trace_hardirqs_on(); +} + +static inline void trace_hardirqs_fixup(void) +{ + unsigned long flags = __raw_local_save_flags(); + + trace_hardirqs_fixup_flags(flags); +} +/* * Used in the idle loop; sti takes one instruction cycle * to complete: */ |