diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2010-07-09 15:34:00 +1000 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2010-07-09 16:11:19 +1000 |
commit | 850f22d5688941ea51628f3f8f8dcf3baff409ff (patch) | |
tree | 99e3ea43035a7d96b7f7bea81428186dea6ad000 /arch/powerpc/kernel/dbell.c | |
parent | 0e37d25950f4fd5a7d74723e6ce608aaa972d24c (diff) | |
download | linux-stable-850f22d5688941ea51628f3f8f8dcf3baff409ff.tar.gz linux-stable-850f22d5688941ea51628f3f8f8dcf3baff409ff.tar.bz2 linux-stable-850f22d5688941ea51628f3f8f8dcf3baff409ff.zip |
powerpc/book3e: Resend doorbell exceptions to ourself
If we are soft disabled and receive a doorbell exception we don't process
it immediately. This means we need to check on the way out of irq restore
if there are any doorbell exceptions to process.
The problem is at that point we don't know what our regs are, and that
in turn makes xmon unhappy. To workaround the problem, instead of checking
for and processing doorbells, we check for any doorbells and if there were
any we send ourselves another.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/dbell.c')
-rw-r--r-- | arch/powerpc/kernel/dbell.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/dbell.c b/arch/powerpc/kernel/dbell.c index f7b518894c80..3307a52d797f 100644 --- a/arch/powerpc/kernel/dbell.c +++ b/arch/powerpc/kernel/dbell.c @@ -81,6 +81,16 @@ out: set_irq_regs(old_regs); } +void doorbell_check_self(void) +{ + struct doorbell_cpu_info *info = &__get_cpu_var(doorbell_cpu_info); + + if (!info->messages) + return; + + ppc_msgsnd(PPC_DBELL, 0, info->tag); +} + #else /* CONFIG_SMP */ void doorbell_exception(struct pt_regs *regs) { |