aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2007-01-01 13:45:34 -0500
committerPaul Mackerras <paulus@samba.org>2007-01-09 01:03:02 -0500
commit007d88d042d7b71aa2c9fc615aef97888e20ddf3 (patch)
treea379db67a9ed8c0c118ccf6d394637c9010c9a2c /arch
parent673aeb76d07f49f2b07792f813bc2a9fee212ab7 (diff)
[POWERPC] Fix manual assembly WARN_ON() in enter_rtas().
When we switched over to the generic BUG mechanism we forgot to change the assembly code which open-codes a WARN_ON() in enter_rtas(), so the bug table got corrupted. This patch provides an EMIT_BUG_ENTRY macro for use in assembly code, and uses it in entry_64.S. Tested with CONFIG_DEBUG_BUGVERBOSE on ppc64 but not without -- I tried to turn it off but it wouldn't go away; I suspect Aunt Tillie probably needed it. This version gets __FILE__ and __LINE__ right in the assembly version -- rather than saying include/asm-powerpc/bug.h line 21 every time which is a little suboptimal. Signed-off-by: David Woodhouse <dwmw2@infradead.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/kernel/asm-offsets.c3
-rw-r--r--arch/powerpc/kernel/entry_64.S13
2 files changed, 8 insertions, 8 deletions
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index e96521530d21..030d300cd71c 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -303,5 +303,8 @@ int main(void)
303 DEFINE(NSEC_PER_SEC, NSEC_PER_SEC); 303 DEFINE(NSEC_PER_SEC, NSEC_PER_SEC);
304 DEFINE(CLOCK_REALTIME_RES, TICK_NSEC); 304 DEFINE(CLOCK_REALTIME_RES, TICK_NSEC);
305 305
306#ifdef CONFIG_BUG
307 DEFINE(BUG_ENTRY_SIZE, sizeof(struct bug_entry));
308#endif
306 return 0; 309 return 0;
307} 310}
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 1a3d4de197d2..2551c0884afc 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -28,6 +28,7 @@
28#include <asm/asm-offsets.h> 28#include <asm/asm-offsets.h>
29#include <asm/cputable.h> 29#include <asm/cputable.h>
30#include <asm/firmware.h> 30#include <asm/firmware.h>
31#include <asm/bug.h>
31 32
32/* 33/*
33 * System calls. 34 * System calls.
@@ -634,19 +635,15 @@ _GLOBAL(enter_rtas)
634 li r0,0 635 li r0,0
635 mtcr r0 636 mtcr r0
636 637
638#ifdef CONFIG_BUG
637 /* There is no way it is acceptable to get here with interrupts enabled, 639 /* There is no way it is acceptable to get here with interrupts enabled,
638 * check it with the asm equivalent of WARN_ON 640 * check it with the asm equivalent of WARN_ON
639 */ 641 */
640 lbz r0,PACASOFTIRQEN(r13) 642 lbz r0,PACASOFTIRQEN(r13)
6411: tdnei r0,0 6431: tdnei r0,0
642.section __bug_table,"a" 644 EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING
643 .llong 1b,__LINE__ + 0x1000000, 1f, 2f 645#endif
644.previous 646
645.section .rodata,"a"
6461: .asciz __FILE__
6472: .asciz "enter_rtas"
648.previous
649
650 /* Hard-disable interrupts */ 647 /* Hard-disable interrupts */
651 mfmsr r6 648 mfmsr r6
652 rldicl r7,r6,48,1 649 rldicl r7,r6,48,1