re: UltraSPARC III... Stability issue ?

matthew green <[email protected]>
Newsgroups gmane.os.netbsd.ports.sparc64
Message-ID <[email protected]>
> data error type 32 sfsr=808004 sfva=41818400 afsr=10100000000000 afva=13900000060 tf=0x2607efed0
> data fault: pc=1010234 addr=41818400 sfsr=0x808004<ASI=0x80,OW>

Dump of assembler code for function data_miss:
   [ ... ]
   0x0000000001010224 <+132>:   ldxa  [ %g5 ] #ASI_PHYS_USE_EC, %g4
   0x0000000001010228 <+136>:   sll  %g6, 3, %g6
   0x000000000101022c <+140>:   brz,pn   %g4, 0x1010278 <data_nfo>
   0x0000000001010230 <+144>:   add  %g6, %g4, %g6
   0x0000000001010234 <+148>:   ldxa  [ %g6 ] #ASI_PHYS_USE_EC, %g4

i'll need to consult the manual(s) and see why this is faulting.
up to this point, crashing has occured normally.

> kernel trap 32: data access error

but here, we're getting another fault trying to enter DDB.

> cpu1: data fault: pc=16068c8 rpc=10f5914 addr=ffffffffffff8000

Dump of assembler code for function memcpy:
   [ ... ]
   0x00000000016068bc <+348>:   brz  %l4, 0x1606a40 <memcpy+736>
   0x00000000016068c0 <+352>:   sllx  %l4, 3, %l4
   0x00000000016068c4 <+356>:   mov  0x40, %l3
   0x00000000016068c8 <+360>:   ldx  [ %l0 ], %o0

and

Dump of assembler code for function fill_ddb_regs_from_tf:
   [ ... ]
213             DDB_REGS->db_fr = *(struct frame64 *)(uintptr_t)tf->tf_out[6];
   0x00000000010f5904 <+68>:    ldx  [ %i5 + 0x1b0 ], %g1
   0x00000000010f5908 <+72>:    mov  0xb0, %o2
   0x00000000010f590c <+76>:    ldx  [ %i0 + 0xa0 ], %o1
   0x00000000010f5910 <+80>:    ldx  [ %g1 + 0x3e0 ], %o0
   0x00000000010f5914 <+84>:    call  0x1606760 <memcpy>
   0x00000000010f5918 <+88>:    add  %o0, 0x130, %o0

so this looks like we fault trying to read the faulting lwp's
registers to save them for DDB to access.  oops!

> kernel trap 30: data access exception
> Skipping crash dump on recursive panic
> panic: cpu0: ipi_send: couldn't send ipi to UPAID 1 (tried 10000 times)

this most likely happens because cpu1 is busy writing to the slow
console (serial or fb, either takes a Long time relatively.)  we
might be able to extend the limit from 10000 to more to avoid that,
or also have ipi_send notice when a remote CPU is panicking.

> cpu0: Begin traceback...
> cpu0: End traceback...

i suspect this is because we can't copy the faulting registers..

this is all likely related to the basic failure that triggers
the original fault in data_miss.

eeh, we've basically not touched data_miss etc since your original
code... any ideas what would be causing this?


.mrg.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.