UML: Enable CONFIG_TRACE_IRQFLAGS_SUPPORT Signed-off-by: Paul Menage <men...@google.com>
--- arch/um/Kconfig.common | 2 +- arch/um/include/asm/system.h | 39 ++++++++++++++++++++++----------------- arch/um/kernel/irq.c | 1 + arch/um/kernel/process.c | 1 - arch/um/kernel/skas/process.c | 2 +- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common index 0d207e7..8a54ae4 100644 --- a/arch/um/Kconfig.common +++ b/arch/um/Kconfig.common @@ -36,7 +36,7 @@ config PCMCIA # Yet to do! config TRACE_IRQFLAGS_SUPPORT bool - default n + default y config LOCKDEP_SUPPORT bool diff --git a/arch/um/include/asm/system.h b/arch/um/include/asm/system.h index 753346e..dd76c29 100644 --- a/arch/um/include/asm/system.h +++ b/arch/um/include/asm/system.h @@ -11,23 +11,28 @@ extern int get_signals(void); extern void block_signals(void); extern void unblock_signals(void); -#define local_save_flags(flags) do { typecheck(unsigned long, flags); \ - (flags) = get_signals(); } while(0) -#define local_irq_restore(flags) do { typecheck(unsigned long, flags); \ - set_signals(flags); } while(0) - -#define local_irq_save(flags) do { local_save_flags(flags); \ - local_irq_disable(); } while(0) - -#define local_irq_enable() unblock_signals() -#define local_irq_disable() block_signals() - -#define irqs_disabled() \ -({ \ - unsigned long flags; \ - local_save_flags(flags); \ - (flags == 0); \ -}) +#define raw_local_save_flags(flags) do { typecheck(unsigned long, flags); \ + (flags) = get_signals(); } while (0) +#define raw_local_irq_restore(flags) do { typecheck(unsigned long, flags); \ + set_signals(flags); } while (0) + +#define raw_local_irq_save(flags) do { raw_local_save_flags(flags); \ + raw_local_irq_disable(); } while (0) + +#define raw_local_irq_enable() unblock_signals() +#define raw_local_irq_disable() block_signals() + +static inline int raw_irqs_disabled_flags(unsigned long flags) +{ + return (flags == 0); +} + +static inline int raw_irqs_disabled(void) +{ + unsigned long flags; + raw_local_save_flags(flags); + return raw_irqs_disabled_flags(flags); +} extern void *_switch_to(void *prev, void *next, void *last); #define switch_to(prev, next, last) prev = _switch_to(prev, next, last) diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c index 454cdb4..f7374a2 100644 --- a/arch/um/kernel/irq.c +++ b/arch/um/kernel/irq.c @@ -80,6 +80,7 @@ void sigio_handler(int sig, struct uml_pt_regs *regs) if (smp_sigio_handler()) return; + trace_hardirqs_off(); while (1) { n = os_waiting_for_events(active_fds); if (n <= 0) { diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c index 4a28a15..c55debf 100644 --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c @@ -450,4 +450,3 @@ int elf_core_copy_fpregs(struct task_struct *t, elf_fpregset_t *fpu) return save_fp_registers(userspace_pid[cpu], (unsigned long *) fpu); } - diff --git a/arch/um/kernel/skas/process.c b/arch/um/kernel/skas/process.c index 2e9852c..4a21c5c 100644 --- a/arch/um/kernel/skas/process.c +++ b/arch/um/kernel/skas/process.c @@ -35,7 +35,7 @@ static int __init start_kernel_proc(void *unused) { int pid; - block_signals(); + local_irq_disable(); pid = os_getpid(); cpu_tasks[0].pid = pid; ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects _______________________________________________ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel