From 4d3d012d82cf8cbd1798e878f2fa8b768b2ca77e Mon Sep 17 00:00:00 2001 From: David Gibson Date: Fri, 9 Jul 2010 15:32:30 +1000 Subject: [PATCH] --- yaml --- r: 204713 b: refs/heads/master c: 0e37d25950f4fd5a7d74723e6ce608aaa972d24c h: refs/heads/master i: 204711: 91f0190a07fa4c1fec97838ffc690b84102168a9 v: v3 --- [refs] | 2 +- trunk/arch/powerpc/kernel/dbell.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 8317ea7c8688..4ef907530c05 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 89c81797d4a0779a957f4ea1f0c676cda203615b +refs/heads/master: 0e37d25950f4fd5a7d74723e6ce608aaa972d24c diff --git a/trunk/arch/powerpc/kernel/dbell.c b/trunk/arch/powerpc/kernel/dbell.c index 1c7a94580c3f..f7b518894c80 100644 --- a/trunk/arch/powerpc/kernel/dbell.c +++ b/trunk/arch/powerpc/kernel/dbell.c @@ -16,6 +16,7 @@ #include #include +#include #ifdef CONFIG_SMP struct doorbell_cpu_info { @@ -63,17 +64,21 @@ void doorbell_message_pass(int target, int msg) void doorbell_exception(struct pt_regs *regs) { + struct pt_regs *old_regs = set_irq_regs(regs); struct doorbell_cpu_info *info = &__get_cpu_var(doorbell_cpu_info); int msg; /* Warning: regs can be NULL when called from irq enable */ if (!info->messages || (num_online_cpus() < 2)) - return; + goto out; for (msg = 0; msg < 4; msg++) if (test_and_clear_bit(msg, &info->messages)) smp_message_recv(msg); + +out: + set_irq_regs(old_regs); } #else /* CONFIG_SMP */