Subject: Re: my first sparc64 panic :)
To: Eduardo Horvath <eeh@turbolinux.com>
From: Manuel Bouyer <bouyer@antioche.lip6.fr>
List: port-sparc
Date: 08/24/2000 19:28:57
On Thu, Aug 24, 2000 at 10:05:32AM -0700, Eduardo Horvath wrote:
> No, this one's new. The machine's trying to look up a PTE from some pmap
> but the pointer to the pmap is unaligned.
>
> > db> tr
> > pmap_enter_pv(f19e8000, 284000, 102ac000, 0, 101d0a00, a10) at pmap_enter_pv+0x1
> > 4c
> > pmap_enter(f19e8000, 284000, 102ac000, 2, f149ed68, 0) at pmap_enter+0x358
> > uvm_fault(f18e38a0, 4, f1499958, f5e5d500, 3, 27e000) at uvm_fault+0x1980
> > data_access_fault(68, 2840cd, 152528, f641ded0, 0, 2840cd) at data_access_fault+0x488
> > Ldatafault_internal(284000, 26dab0, 18, 284010, 267c00, 4) at Ldatafault_internal+0xe0
> > db>
>
> Since it's in pmap_enter_pv() it may be that the bad pmap came from the
> pv_list or from pmap_kernel(), or curproc->p_vmspace.
>
> Next time this happens could you:
No problems, I can get one in a few seconds when trying to make the tcsh
package (in fact, it seems to happen at fork/exec time).
===> Extracting for tcsh-6.09.00
trap type 0x34: pc=f12698ac npc=f1269884 pstate=ffffffff98580006<PRIV,IE>
kernel trap 34: mem address not aligned
Stopped in sh at pmap_enter_pv+0x19c: ldx [%o3 + 0x8], %o0
db> tr
pmap_enter(f19e8120, 27e000, 11d56000, 2, f149fcf0, 0) at pmap_enter+0x358
uvm_fault(f1933880, 4, f149a8f0, f64382b0, 3, 278000) at uvm_fault+0xf78
data_access_fault(6c, 27e13a, 10a688, f6445ed0, 0, 27e13a) at data_access_fault+
0x488
Ldatafault_internal(2868d0, 286310, 0, 0, 0, 0) at Ldatafault_internal+0xe0
db>
>
> 1) `mach tf' to get the trapframe of the fault.
db> mach tf
Trapframe 0xf146e9c0: tstate: 0x9858000603 pc: 0xf12698ac npc: 0xf1269884
y: 0 pil: 7 oldpil: 7 fault: 0x9858000603 kstack: 0x0 tt: 34 G
lobals:
0000000000000000 0000000011d4c000 0000000000000000 00000000f149af08
0000000000000000 0000000000000000 0000000000000021 0000000000000000
outs:
0000000300000006 ffffffffffffe000 0000000000008eab 0000000400000005
fffffffffffffff1 00000000f1000000 00000000f6445151 00000000f1267708
locals:
00000000f142dd68 00000000f1a5a008 00000000f142dc00 0000000000000000
00000000f141e2c4 00000000f12dba20 00000000f149a770 000000000027e000
ins:
00000000f19e8120 000000000027e000 0000000011d56000 0000000000000000
0000000011d509e0 00000000000009f8 00000000f6445211 00000000f1267288
db>
>
> 2) check curproc's p_vmstate to make sure it has a correct pmap pointer.
I assume you mean p_vmspace. Is this what we get from VMSPACE with
"show all proc /a" ?
db> show all proc /a
PID COMMAND STRUCT PROC * UAREA * VMSPACE/VM_MAP
321 sh 0xf642e290 0xf6454000 0xf5e469b0
320 sh 0xf642e510 0xf644c000 0xf5e47930
319 sh 0xf642e010 0xf6446000 0xf5e47170
>318 sh 0xf642e790 0xf6442000 0xf5e47740
317 sh 0xf642ec90 0xf643e000 0xf5e46f80
310 make 0xf642ea10 0xf643a000 0xf5e47b20
309 sh 0xf5e3db80 0xf6434000 0xf5e47360
292 make 0xf5e3cf00 0xf6430000 0xf5e46d90
291 sh 0xf5e3d900 0xf6428000 0xf5e47550
194 make 0xf5e3cc80 0xf6420000 0xf5e463e0
178 csh 0xf5e3ca00 0xf5e62000 0xf5e461f0
176 cron 0xf5e3d680 0xf6416000 0xf5e46ba0
173 inetd 0xf5e3d400 0xf6412000 0xf5e465d0
98 syslogd 0xf5e3d180 0xf63fc000 0xf5e467c0
4 ioflush 0xf5e3c780 0xf5e54000 0xf1472648
3 reaper 0xf5e3c500 0xf5e50000 0xf1472648
2 pagedaemon 0xf5e3c280 0xf5e4c000 0xf1472648
1 init 0xf5e3c000 0xf5e38000 0xf5e46000
0 swapper 0xf1472848 0xf1802000 0xf1472648
I assume curproc is PID 318
db> show map /f 0xf5e47740
MAP 0xf5e47740: [0x0->0xf1000000]
#ent=7, sz=269565952, ref=1, version=5, flags=0x1
pmap=0xf19e8120(resident=10)
- 0xf641ebb0: 0x100000->0x180000: obj=0xf5e49740/0x0, amap=0x0/0
submap=F, cow=T, nc=T, prot(max)=5/7, inh=1, wc=0, adv=0
- 0xf641efd0: 0x200000->0x280000: obj=0xf5e49740/0x0, amap=0xf64382b0/0
submap=F, cow=T, nc=F, prot(max)=3/7, inh=1, wc=0, adv=0
- 0xf641f9f0: 0x280000->0x288000: obj=0x0/0x0, amap=0xf5e5f9d0/0
submap=F, cow=T, nc=F, prot(max)=3/7, inh=1, wc=0, adv=0
- 0xf641f510: 0x288000->0x292000: obj=0x0/0x0, amap=0xf5e5fc00/0
submap=F, cow=T, nc=F, prot(max)=7/7, inh=1, wc=0, adv=0
- 0xf641ec10: 0x10200000->0x10202000: obj=0x0/0x0, amap=0xf64388d0/0
submap=F, cow=T, nc=F, prot(max)=3/7, inh=1, wc=0, adv=0
- 0xf641fbd0: 0xe1000000->0xf0f80000: obj=0x0/0x0, amap=0x0/0
submap=F, cow=T, nc=T, prot(max)=0/7, inh=1, wc=0, adv=0
- 0xf641e8b0: 0xf0f80000->0xf1000000: obj=0x0/0x0, amap=0xf5e5fce0/0
submap=F, cow=T, nc=F, prot(max)=7/7, inh=1, wc=0, adv=0
db>
>
> 3) if you can figure out the address of the original fault (possibly from
> `mach tf /u') you can use `mach pv <page>' to dump the pv_list for that
> page.
db> mach tf /u
Trapframe 0xf6445ed0: tstate: 0x800008206 pc: 0x10a688 npc: 0x10a68c
y: 0 pil: 0 oldpil: 0 fault: 0x27e13a kstack: 0x0 tt: 6c Globals:
0000000000000000 0000000000000002 0000000000000010 000000000017d86f
0000000000000000 0000000000000000 0000000000000000 0000000000000000
outs:
00000000002868d0 0000000000286310 0000000000000000 0000000000000000
0000000000000000 0000000000000000 00000000f0ffeaa1 0000000000000000
locals:
000000000027e978 000000000028e000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
ins:
0000000000286800 00000000002868d0 0000000000000000 0000000000000000
0000000000000000 0000000000000000 00000000f0ffeb61 000000000010a76c
Would the address be pc or npc ?
I don't know sparc64 well enouth for this.
--
Manuel Bouyer, LIP6, Universite Paris VI. Manuel.Bouyer@lip6.fr
--