From 717f88507446b3ece2a2345469e174453d431d01 Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Wed, 2 Jun 2004 18:22:08 -0700 Subject: [PATCH] [PATCH] ppc32: Fix preemptible check Ben H added a check in a couple of places to make sure that we had preemption disabled when we call enable_kernel_{fp,altivec}. Unfortunately the check he used trips in the case when CONFIG_PREEMPT=n. This patch fixes it by defining a preemptible() macro (which reduces to 0 when CONFIG_PREEMPT=n) and doing WARN_ON(preemptible()). Signed-off-by: Paul Mackerras Signed-off-by: Linus Torvalds --- arch/ppc/kernel/process.c | 4 ++-- include/asm-ppc/hardirq.h | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/arch/ppc/kernel/process.c b/arch/ppc/kernel/process.c index 19515a1f9734f..b82a2009e83f9 100644 --- a/arch/ppc/kernel/process.c +++ b/arch/ppc/kernel/process.c @@ -163,7 +163,7 @@ dump_altivec(struct pt_regs *regs, elf_vrregset_t *vrregs) void enable_kernel_altivec(void) { - WARN_ON(current_thread_info()->preempt_count == 0 && !irqs_disabled()); + WARN_ON(preemptible()); #ifdef CONFIG_SMP if (current->thread.regs && (current->thread.regs->msr & MSR_VEC)) @@ -180,7 +180,7 @@ EXPORT_SYMBOL(enable_kernel_altivec); void enable_kernel_fp(void) { - WARN_ON(current_thread_info()->preempt_count == 0 && !irqs_disabled()); + WARN_ON(preemptible()); #ifdef CONFIG_SMP if (current->thread.regs && (current->thread.regs->msr & MSR_FP)) diff --git a/include/asm-ppc/hardirq.h b/include/asm-ppc/hardirq.h index 8f4f12a46f743..2531c3bdb5bfa 100644 --- a/include/asm-ppc/hardirq.h +++ b/include/asm-ppc/hardirq.h @@ -83,11 +83,15 @@ typedef struct { #ifdef CONFIG_PREEMPT # define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked()) +# define preemptible() (preempt_count() == 0 && !irqs_disabled()) # define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1) + #else # define in_atomic() (preempt_count() != 0) +# define preemptible() 0 # define IRQ_EXIT_OFFSET HARDIRQ_OFFSET #endif + #define irq_exit() \ do { \ preempt_count() -= IRQ_EXIT_OFFSET; \ -- 2.53.0