From: Olaf Hering <olh@suse.de>
To: linuxppc-dev@ozlabs.org
Subject: Re: pseries softreset on cpus in 32bit mode
Date: Mon, 22 May 2006 20:46:12 +0200 [thread overview]
Message-ID: <20060522184612.GA15282@suse.de> (raw)
In-Reply-To: <20060522164111.GA14462@suse.de>
On Mon, May 22, Olaf Hering wrote:
>
> Consider a simple app like this, which is placed as '/init' in an initrd
> cpio archive:
>
> hello32.c
>
> #include <stdio.h>
> int main(void) {
> printf("foobar\n");
> asm("li 31,0; b .\n");
> return 0;
> }
Modified the userland app to init some registers with a fixed value, and
ran a kernel with the debug patch below. It gets into bad_stack from
decrementer_common = c000000000003400. 3200 is coming from
c000000000003200 <system_reset_common>:
So what does that mean? Should a softreset disable interrupts?
Linux version 2.6.17-rc4-g353b28ba-dirty (olaf@pomegranate) (gcc version 4.1.0 (SUSE Linux)) #13 SMP Mon May 22 20:38:56 CEST 2006
[boot]0012 Setup Arch
Top of RAM: 0x1e000000, Total RAM: 0x1e000000
Memory hole size: 0MB
PPC64 nvram contains 16384 bytes
Using default idle loop
[boot]0015 Setup Done
Built 1 zonelists
Kernel command line: root=/dev/hda2 xmon=on quiet
foobar
Bad kernel stack pointer ffad3ad0 at 3200
cpu 0x1: Vector: c000000007a5ef10 at [c000000007a5ed40]
pc: 0000000000003200
lr: 0000000010000338
sp: ffad3ad0
msr: 40001032
current = 0xc00000000ffc67e0
paca = 0xc00000000053a100
pid = 1, comm = init
enter ? for help
1:mon> r
R00 = 0000000010000338 R16 = c0000000004470e8
R01 = 00000000ffad3ad0 R17 = 0000000000000000
R02 = 000000001009c470 R18 = 00000000000413cd
R03 = 0000000007aceff8 R19 = 0000000000507ab8
R04 = 000000001002489c R20 = 0000000000000042
R05 = 0000000040000042 R21 = 0000000000000042
R06 = 0000000000004000 R22 = 0000000000000042
R07 = 000000001000b100 R23 = 0000000000000042
R08 = 000000000000f932 R24 = 0000000000000042
R09 = 0000000000000000 R25 = 0000000000000042
R10 = 0000000000000000 R26 = 0000000000000042
R11 = 0000000000000000 R27 = 0000000000000042
R12 = 00000000200fffff R28 = 0000000000000042
R13 = c00000000053a100 R29 = 0000000000003420
R14 = c000000000448a38 R30 = 0000000000003200
R15 = 4000000002010000 R31 = 0000000010000368
pc = 0000000000003200
lr = 0000000010000338
msr = 0000000040001032 cr = 20000042
ctr = 0000000000032ddc xer = 00000000200fffff trap = c000000007a5ef10
1:mon>
Index: linux-2.6/arch/powerpc/kernel/head_64.S
===================================================================
--- linux-2.6.orig/arch/powerpc/kernel/head_64.S
+++ linux-2.6/arch/powerpc/kernel/head_64.S
@@ -269,7 +269,12 @@ exception_marker:
subi r1,r1,INT_FRAME_SIZE; /* alloc frame on kernel stack */ \
beq- 1f; \
ld r1,PACAKSAVE(r13); /* kernel stack to use */ \
-1: cmpdi cr1,r1,0; /* check if r1 is in userspace */ \
+1: \
+ cmpdi cr1,r29,0x42; \
+ bne cr1,2f; \
+ li r29,2f@l; \
+2: \
+ cmpdi cr1,r1,0; /* check if r1 is in userspace */ \
bge- cr1,bad_stack; /* abort if it is */ \
std r9,_CCR(r1); /* save CR in stackframe */ \
std r11,_NIP(r1); /* save SRR0 in stackframe */ \
@@ -600,6 +605,7 @@ slb_miss_user_pseries:
system_reset_fwnmi:
HMT_MEDIUM
mtspr SPRN_SPRG1,r13 /* save r13 */
+ mfspr r31,SPRN_SRR0
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common)
.globl machine_check_fwnmi
@@ -842,6 +848,7 @@ bad_stack:
std r9,_CCR(r1)
std r10,GPR1(r1)
std r11,_NIP(r1)
+ mr r30,r11
std r12,_MSR(r1)
mfspr r11,SPRN_DAR
mfspr r12,SPRN_DSISR
next prev parent reply other threads:[~2006-05-22 18:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-22 16:41 pseries softreset on cpus in 32bit mode Olaf Hering
2006-05-22 18:46 ` Olaf Hering [this message]
2006-05-23 13:07 ` [PATCH] force 64bit mode in system_reset_fwnmi for broken POWER4 firmware Olaf Hering
2006-05-26 11:30 ` Paul Mackerras
2006-05-26 12:33 ` Olaf Hering
2006-05-26 12:40 ` Paul Mackerras
2006-05-26 12:48 ` Olaf Hering
2006-05-27 11:34 ` Olaf Hering
2006-06-09 8:11 ` Paul Mackerras
2006-06-09 9:04 ` Olaf Hering
2006-07-19 8:34 ` [PATCH] force 64bit mode in fwnmi handlers to workaround firmware bugs Olaf Hering
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060522184612.GA15282@suse.de \
--to=olh@suse.de \
--cc=linuxppc-dev@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).