Subject: port-alpha/26384: pmap "simple_lock: locking against myself" crash on on alpha MP
To: None <gnats-bugs@gnats.netbsd.org>
From: Greg A. Woods <woods@weird.com>
List: netbsd-bugs
Date: 07/20/2004 18:37:47
>Number:         26384
>Category:       port-alpha
>Synopsis:       pmap "simple_lock: locking against myself" crash on on alpha MP
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-alpha-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jul 20 22:38:00 UTC 2004
>Closed-Date:
>Last-Modified:
>Originator:     Greg A. Woods
>Release:        NetBSD 1.6.2_STABLE
>Organization:
Planix, Inc.; Toronto, Ontario; Canada
>Environment:
System: NetBSD 1.6.2_STABLE
Architecture: alpha
Machine: alpha
>Description:

	Jason says this is yet another separate pmap locking bug...

	Finally here's the PR for it.  :-)

	from a MULTIPROCESSOR kernel with "options LOCKDEBUG"

simple_lock: locking against myself
lock: 0xfffffc00007ee938, currently at: /proven/work/woods/m-NetBSD-1.6/sys/arch/alpha/alpha/pmap.c:2140
on cpu 0
last locked: /proven/work/woods/m-NetBSD-1.6/sys/arch/alpha/alpha/pmap.c:2721
last unlocked: /proven/work/woods/m-NetBSD-1.6/sys/arch/alpha/alpha/pmap.c:2734
alpha trace requires known PC =eject=
Stopped in pid 8 (ioflush) at   cpu_Debugger+0x4:       ret     zero,(ra)
db{0}> trace
cpu_Debugger() at cpu_Debugger+0x4
_simple_lock() at _simple_lock+0x128
pmap_extract() at pmap_extract+0x84
uvm_km_pgremove_intrsafe() at uvm_km_pgremove_intrsafe+0x48
uvm_unmap_remove() at uvm_unmap_remove+0x1a8
uvm_unmap() at uvm_unmap+0x174
uvm_km_free() at uvm_km_free+0x34
free() at free+0x254
softdep_disk_write_complete() at softdep_disk_write_complete+0x2f0
biodone() at biodone+0xa0
lddone() at lddone+0xb4
ld_mlx_handler() at ld_mlx_handler+0x114
mlx_intr() at mlx_intr+0xec
alpha_shared_intr_dispatch() at alpha_shared_intr_dispatch+0x6c
kn300_iointr() at kn300_iointr+0x50
interrupt() at interrupt+0x32c
XentInt() at XentInt+0x1c
--- interrupt (from ipl 0) ---
pmap_tlb_shootdown() at pmap_tlb_shootdown+0x248
pmap_changebit() at pmap_changebit+0x148
pmap_clear_modify() at pmap_clear_modify+0xd4
uvn_findpage() at uvn_findpage+0x118
uvn_findpages() at uvn_findpages+0x130
genfs_putpages() at genfs_putpages+0x930
end() at 0xfffffc00017e1b40
prologue botch: displacement 16384
frame size botch: adjust register offsets?
prologue botch: displacement 8192
frame size botch: adjust register offsets?
prologue botch: displacement 16384
frame size botch: adjust register offsets?
prologue botch: displacement 24576
frame size botch: adjust register offsets?
frame size botch: adjust register offsets?
frame size botch: adjust register offsets?
frame size botch: adjust register offsets?
frame size botch: adjust register offsets?
--- root of call graph ---
db{0}> 

db{0}> sync
syncing disks... tlp0: receive ring overrun
panic: lockmgr: locking against myself
Stopped in pid 8 (ioflush) at   cpu_Debugger+0x4:       ret     zero,(ra)
db{0}> reboot
rebooting...


>How-To-Repeat:

	unknown

>Fix:

	unknown

>Release-Note:
>Audit-Trail:
>Unformatted: