OpenBSD/sgi on octane2 - mplock周りで落ちるバグについて#2

しかたがないので追っかけてみる事にした。
mplock.hを追っかけやすいようにデバッグprint追加:

static __inline void
__mp_lock_init(struct __mp_lock *lock)
{
	asm volatile("nop;nop;nop;");
	extern int printf(const char *, ...) __attribute__((__format__(__kprintf__,1,2)));
	printf("[%s:%s:%d] lock:%p ra:%p\n", __FILE__, __func__, __LINE__, lock, __builtin_return_address(0));
	__cpu_simple_lock_init(&lock->mpl_lock);
	lock->mpl_cpu = LK_NOCPU;
	lock->mpl_count = 0;
	asm volatile("nop;nop;nop;");
}

//#if defined(MP_LOCKDEBUG)
#ifndef DDB
#error "MP_LOCKDEBUG requires DDB"
#endif

extern void Debugger(void);
extern int db_printf(const char *, ...)
    __attribute__((__format__(__kprintf__,1,2)));

/* CPU-dependent timing, needs this to be settable from ddb. */
extern int __mp_lock_spinout;
//#endif

static __inline void
__mp_lock(struct __mp_lock *lock)
{
	asm volatile("nop;nop;nop;");
	int s = spllock();
	extern int printf(const char *, ...) __attribute__((__format__(__kprintf__,1,2)));
	printf("[%s:%s:%d] lock:%p ra:%p\n", __FILE__, __func__, __LINE__, lock, __builtin_return_address(0));
	if (lock->mpl_cpu != cpu_number()) {
#ifndef MP_LOCKDEBUG
		__cpu_simple_lock(&lock->mpl_lock);
#else
		{
			int got_it;
			do {
				int ticks = __mp_lock_spinout;

				do {
					got_it = __cpu_simple_lock_try(
					    &lock->mpl_lock);
				} while (!got_it && ticks-- > 0);
				if (!got_it) {
 					db_printf(
					    "__mp_lock(0x%x): lock spun out",
					    lock);
					Debugger();
				}
			} while (!got_it);
		}
		if (lock->mpl_lock != __SIMPLELOCK_LOCKED) 
			{
				db_printf("[%s:%s:%d] lock->mpl_lock != __SIMPLELOCK_LOCKED\n", __FILE__, __func__, __LINE__);
				Debugger();
			}
#endif
		lock->mpl_cpu = cpu_number();
	}
	lock->mpl_count++;
	splx(s);
	asm volatile("nop;nop;nop;");
}

/*
 * Try to acquire the lock, if another cpu has it, fill it in the
 * call-by-reference cpu parameter.  Return true if acquired.
 */
static __inline int
__mp_lock_try(struct __mp_lock *lock, cpuid_t *cpu)
{
	asm volatile("nop;nop;nop;");
	int s = spllock();

	extern int printf(const char *, ...) __attribute__((__format__(__kprintf__,1,2)));
	printf("[%s:%s:%d] lock:%p *cpu:%d ra:%p\n", __FILE__, __func__, __LINE__, lock, *cpu, __builtin_return_address(0));
	if (lock->mpl_cpu != cpu_number()) {
		if (!__cpu_simple_lock_try(&lock->mpl_lock)) {
			*cpu = lock->mpl_cpu;
			splx(s);
			return 0;
		}
		lock->mpl_cpu = cpu_number();
		if (lock->mpl_lock != __SIMPLELOCK_LOCKED) 
			{
				db_printf("[%s:%s:%d] lock->mpl_lock != __SIMPLELOCK_LOCKED\n", __FILE__, __func__, __LINE__);
				Debugger();
			}
	}
	lock->mpl_count++;
	splx(s);
	return 1;
	asm volatile("nop;nop;nop;");
}

static __inline void
__mp_unlock(struct __mp_lock *lock)
{
	asm volatile("nop;nop;nop;");
	int s = spllock();

	extern int printf(const char *, ...) __attribute__((__format__(__kprintf__,1,2)));
	printf("[%s:%s:%d] lock:%p ra:%p\n", __FILE__, __func__, __LINE__, lock, __builtin_return_address(0));
#ifdef MP_LOCKDEBUG
	if (lock->mpl_count == 0 || lock->mpl_cpu == LK_NOCPU) {
		db_printf("__mp_unlock(0x%x): releasing not locked lock\n",
		    lock);
		Debugger();
	}
#endif

	if (--lock->mpl_count == 0) {
		lock->mpl_cpu = LK_NOCPU;
		__cpu_simple_unlock(&lock->mpl_lock);
		if (lock->mpl_lock != __SIMPLELOCK_UNLOCKED)
			{
				db_printf("[%s:%s:%d] lock->mpl_lock != __SIMPLELOCK_UNLOCKED\n", __FILE__, __func__, __LINE__);
				Debugger();
			}
	}
	splx(s);
	asm volatile("nop;nop;nop;");
}

static __inline int
__mp_release_all(struct __mp_lock *lock) {
	asm volatile("nop;nop;nop;");
	int s = spllock();
	int rv = lock->mpl_count;

	extern int printf(const char *, ...) __attribute__((__format__(__kprintf__,1,2)));
	printf("[%s:%s:%d] lock:%p ra:%p\n", __FILE__, __func__, __LINE__, lock, __builtin_return_address(0));
#ifdef MP_LOCKDEBUG
	if (lock->mpl_count == 0 || lock->mpl_cpu == LK_NOCPU) {
		db_printf(
		    "__mp_release_all(0x%x): releasing not locked lock\n",
		    lock);
		Debugger();
	}
#endif

	lock->mpl_cpu = LK_NOCPU;
	lock->mpl_count = 0;
	__cpu_simple_unlock(&lock->mpl_lock);
	if (lock->mpl_lock != __SIMPLELOCK_UNLOCKED)
		{
			db_printf("[%s:%s:%d] lock->mpl_lock != __SIMPLELOCK_LOCKED\n", __FILE__, __func__, __LINE__);
			Debugger();
		}
	splx(s);
	return (rv);
	asm volatile("nop;nop;nop;");
}

static __inline int
__mp_release_all_but_one(struct __mp_lock *lock) {
	asm volatile("nop;nop;nop;");
	int s = spllock();
	int rv = lock->mpl_count - 1;

	extern int printf(const char *, ...) __attribute__((__format__(__kprintf__,1,2)));
	printf("[%s:%s:%d] lock:%p ra:%p\n", __FILE__, __func__, __LINE__, lock, __builtin_return_address(0));
#ifdef MP_LOCKDEBUG
	if (lock->mpl_count == 0 || lock->mpl_cpu == LK_NOCPU) {
		db_printf(
		    "__mp_release_all_but_one(0x%x): releasing not locked lock\n",
		    lock);
		Debugger();
	}
#endif

	lock->mpl_count = 1;
	splx(s);
	return (rv);
	asm volatile("nop;nop;nop;");
}

static __inline void
__mp_acquire_count(struct __mp_lock *lock, int count) {
	asm volatile("nop;nop;nop;");
	int s = spllock();

	extern int printf(const char *, ...) __attribute__((__format__(__kprintf__,1,2)));
	printf("[%s:%s:%d] lock:%p count:%d ra:%p\n", __FILE__, __func__, __LINE__, lock, count, __builtin_return_address(0));
	while (count--)
		__mp_lock(lock);
	splx(s);
	asm volatile("nop;nop;nop;");
}

static __inline int
__mp_lock_held(struct __mp_lock *lock) {
	asm volatile("nop;nop;nop;");
	extern int printf(const char *, ...) __attribute__((__format__(__kprintf__,1,2)));
	printf("[%s:%s:%d] lock:%p ra:%p\n", __FILE__, __func__, __LINE__, lock, __builtin_return_address(0));
	return lock->mpl_count && lock->mpl_cpu == cpu_number();
	asm volatile("nop;nop;nop;");
}

で、結果はこんな感じ:

Option? 5
Command Monitor.  Type "exit" to return to the menu.
>> bootp()192.168.3.1:bsd
Setting $netaddr to 192.168.3.2 (from server )
Obtaining bsd from server
5944752+492712 entry: 0xa800000020020000
ARCS64 Firmware Version 64.0
Found SGI-IP30, setting up.
Initial setup done, switching console.
cpu_id:0
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2009 OpenBSD. All rights reserved.  http://www.OpenBSD.org

[machine/mplock.h:__mp_lock_init:46] lock:0xa800000020617570 ra:0xa80000002004a850
OpenBSD 4.5-current (OCTANE_RAMDISK_MP) #8: Fri May  8 20:35:28 JST 2009
real mem = 1073741824 (1024MB)
rsvd mem = 1064960 (1MB)
avail mem = 1013731328 (966MB)
[machine/mplock.h:__mp_lock_init:46] lock:0xa80000002061f6a0 ra:0xa80000002004ae70
mainbus0 at root
cpu0 at mainbus0: MIPS R12000 CPU rev 3.5 400 MHz with R10000 FPU rev 0.0
cpu0: cache L1-I 32KB D 32KB 2 way, L2 2048KB 2 way
clock0 at mainbus0: ticker on int5 using count register
xbow0 at mainbus0: XBow revision 5
xheart0 at xbow0 widget 8: Heart revision 6
onewire0 at xheart0
owserial0 at onewire0 family 0x0b sn 0000004d74fa
owserial0: "PM20400MHZ" p/n 030-1476-001, serial KWL381
"Odyssey" revision 2 at xbow0 widget 11 not configured
xbridge0 at xbow0 widget 15: Bridge revision 4
pci0 at xbridge0 bus 0
isp0 at pci0 dev 0 function 0 "QLogic ISP1020" rev 0x05: irq 0
isp0: invalid NVRAM header
scsibus0 at isp0: 16 targets, initiator 7
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
sd0 at scsibus0 targ 1 lun 0: <QUANTUM, ATLAS_V__9_SCA, 0238> SCSI3 0/direct fixed
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
sd0: 8682MB, 512 bytes/sec, 17781964 sec total
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
isp1 at pci0 dev 1 function 0 "QLogic ISP1020" rev 0x05: irq 1
isp1: invalid NVRAM header
scsibus1 at isp1: 16 targets, initiator 7
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
ioc0 at pci0 dev 2 function 0 "SGI IOC3" rev 0x01
onewire1 at ioc0
owmac0 at onewire1 family 0x09 sn 000002d29696
owmac0: Ethernet Address 08:00:69:13:67:82
owserial1 at onewire1 family 0x0b sn 0000004d4ee4
owserial1: "FP1" p/n 030-0891-003, serial LMR447
owserial2 at onewire1 family 0x0b sn 0000004e12fb
owserial2: "PWR.SPPLY.ER" p/n 060-0035-002, serial AAE0420107
ioc0: superio irq 4, ethernet irq 2
com0 at ioc0 base 0x00020178: ns16550a, 16 byte fifo
com0: console
com1 at ioc0 base 0x00020170: ns16550a, 16 byte fifo
"SGI Rad1" rev 0xc0 at pci0 dev 3 function 0 not configured
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa80000002004aeec
[machine/mplock.h:__mp_lock:72] lock:0xa800000020617570 ra:0xa8000000200562bc
rd0: fixed, 8192 blocks
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa80000002006e44c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa80000002006c254
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa80000002006c2a0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
boot device: sd0
root on rd0a swap on rd0b dump on rd0b
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
WARNING: No TOD clock, believing file system.
WARNING: CHECK AND RESET THE DATE!
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa800000020054d5c
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020053f9c
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa800000020053fb0
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa8000000200663c4
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa800000020066aa0
[machine/mplock.h:__mp_release_all_but_one:204] lock:0xa80000002061f6a0 ra:0xa80000002006cfb4
[machine/mplock.h:__mp_release_all:174] lock:0xa800000020617570 ra:0xa80000002006da18
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa80000002006d1cc
[machine/mplock.h:__mp_lock_held:237] lock:0xa80000002061f6a0 ra:0xa80000002005d5fc
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_lock:72] lock:0xa80000002061f6a0 ra:0xa8000000200675dc
[machine/mplock.h:__mp_unlock:145] lock:0xa80000002061f6a0 ra:0xa8000000200671f4
[machine/mplock.h:__mp_unlock:145] lock:0xa800000020617570 ra:0xa800000020056070
__mp_unlock(0x20617570): releasing not locked lock
Stopped at      0xa80000002016768c:     jr      ra
0xa800000020167690:      nop
ddb{0}> trace
0xa800000020167688 (0,0,5,d) sp ffffffffcffa3ce8 ra a800000020056270, sz 0
0xa800000020056220 (0,0,5,d) sp ffffffffcffa3ce8 ra 0, sz 0
User-level: pid 1

releasing not locked lockになっているlock:0xa800000020617570への操作のみを抽出してみる:

[machine/mplock.h:__mp_lock_init:46] lock:0xa800000020617570 ra:0xa80000002004a850 (main -> _kernel_lock_init)
[machine/mplock.h:__mp_lock:72] lock:0xa800000020617570 ra:0xa8000000200562bc (__mp_lock)
[machine/mplock.h:__mp_release_all:174] lock:0xa800000020617570 ra:0xa80000002006da18(mi_switch)
[machine/mplock.h:__mp_unlock:145] lock:0xa800000020617570 ra:0xa800000020056070(_kernel_proc_unlock)

init→lock→release_all→unlockでエラー。となっている。
ロック機構が悪いというより、やっぱり呼ぶ側が間違ってる気がする。

では、コール元の_kernel_proc_unlockを見てみる。

void
_kernel_proc_unlock(struct proc *p)
{
	atomic_clearbits_int(&p->p_flag, P_BIGLOCK);
	__mp_unlock(&kernel_lock);
}

見事なジャイアントロックだ。
このkernel_lockってのは誰が触ってるんだろうと探してみたら、こんな感じだった:

$ gtags-cscope
>> 4kernel_lock
cscope: 43 lines
arch/amd64/amd64/intr.c <unknown> 630 __mp_lock(&kernel_lock);
arch/amd64/amd64/intr.c <unknown> 637 __mp_unlock(&kernel_lock);
arch/amd64/amd64/intr.c <unknown> 643 __mp_lock(&kernel_lock);
arch/amd64/amd64/intr.c <unknown> 649 __mp_unlock(&kernel_lock);
arch/i386/i386/machdep.c <unknown> 3720 __mp_lock(&kernel_lock);
arch/i386/i386/machdep.c <unknown> 3731 __mp_unlock(&kernel_lock);
arch/i386/i386/machdep.c <unknown> 3737 __mp_lock(&kernel_lock);
arch/i386/i386/machdep.c <unknown> 3745 __mp_unlock(&kernel_lock);
arch/m88k/m88k/m88k_machdep.c <unknown> 359 __mp_lock(&kernel_lock);
arch/m88k/m88k/m88k_machdep.c <unknown> 368 __mp_unlock(&kernel_lock);
arch/mvme88k/mvme88k/m187_machdep.c <unknown> 132 __mp_lock(&kernel_lock);
arch/mvme88k/mvme88k/m187_machdep.c <unknown> 196 __mp_unlock(&kernel_lock);
arch/mvme88k/mvme88k/m188_machdep.c <unknown> 563 __mp_lock(&kernel_lock);
arch/mvme88k/mvme88k/m188_machdep.c <unknown> 680 __mp_unlock(&kernel_lock);
arch/mvme88k/mvme88k/m197_machdep.c <unknown> 204 __mp_lock(&kernel_lock);
arch/mvme88k/mvme88k/m197_machdep.c <unknown> 257 __mp_unlock(&kernel_lock);
arch/mvme88k/mvme88k/m197_machdep.c <unknown> 700 __mp_lock(&kernel_lock);
arch/mvme88k/mvme88k/m197_machdep.c <unknown> 720 __mp_unlock(&kernel_lock);
arch/sparc64/sparc64/intr.c <unknown> 365 __mp_lock(&kernel_lock);
arch/sparc64/sparc64/intr.c <unknown> 372 __mp_unlock(&kernel_lock);
kern/kern_fork.c <unknown> 522 KASSERT(__mp_lock_held(&kernel_lock) == 0);
kern/kern_lock.c <unknown> 750 * Functions for manipulating the kernel_lock.  We put them here
kern/kern_lock.c <unknown> 754 struct __mp_lock kernel_lock;
kern/kern_lock.c <unknown> 757 _kernel_lock_init(void)
kern/kern_lock.c <unknown> 759 __mp_lock_init(&kernel_lock);
kern/kern_lock.c <unknown> 768 _kernel_lock(void)
kern/kern_lock.c <unknown> 771 __mp_lock(&kernel_lock);
kern/kern_lock.c <unknown> 777 __mp_unlock(&kernel_lock);
kern/kern_lock.c <unknown> 781 * Acquire/release the kernel_lock on behalf of a process.  Intended for
kern/kern_lock.c <unknown> 788 __mp_lock(&kernel_lock);
kern/kern_lock.c <unknown> 796 __mp_unlock(&kernel_lock);
kern/kern_sched.c <unknown> 184 KASSERT(__mp_lock_held(&kernel_lock) == 0);
kern/sched_bsd.c <unknown> 366 * Release the kernel_lock, as we are about to yield the CPU.
kern/sched_bsd.c <unknown> 370 hold_count = __mp_release_all(&kernel_lock);
kern/sched_bsd.c <unknown> 447 * Reacquire the kernel_lock now.  We do this after we've
kern/sched_bsd.c <unknown> 452 __mp_acquire_count(&kernel_lock, hold_count);
sys/mplock.h <unknown> 46 extern struct __mp_lock kernel_lock;
sys/systm.h <unknown> 320 void  _kernel_lock_init(void);
sys/systm.h <unknown> 321 void  _kernel_lock(void);
sys/systm.h <unknown> 326 #define       KERNEL_LOCK_INIT()              _kernel_lock_init()
sys/systm.h <unknown> 327 #define       KERNEL_LOCK()                   _kernel_lock()
xfs/xfs_config.h <unknown> 455 /* Define to 1 if you have the `kernel_lockmgr' function. */
xfs/xfs_config.h <unknown> 458 /* Define to 1 if you have the `kernel_lockstatus' function. */

結構ジャイアントロック使ってんだなぁ。
このカーネルはロック粒度を下げるって作業はあまり進んでないんだろうか。

_kernel_proc_unlock()はsys/systm.hで以下のようにマクロ経由で使われている:

#if defined(MULTIPROCESSOR)
void	_kernel_lock_init(void);
void	_kernel_lock(void);
void	_kernel_unlock(void);
void	_kernel_proc_lock(struct proc *);
void	_kernel_proc_unlock(struct proc *);

#define	KERNEL_LOCK_INIT()		_kernel_lock_init()
#define	KERNEL_LOCK()			_kernel_lock()
#define	KERNEL_UNLOCK()			_kernel_unlock()
#define	KERNEL_PROC_LOCK(p)		_kernel_proc_lock((p))
#define	KERNEL_PROC_UNLOCK(p)		_kernel_proc_unlock((p))

#else /* ! MULTIPROCESSOR */

#define	KERNEL_LOCK_INIT()		/* nothing */
#define	KERNEL_LOCK()			/* nothing */
#define	KERNEL_UNLOCK()			/* nothing */
#define	KERNEL_PROC_LOCK(p)		/* nothing */
#define	KERNEL_PROC_UNLOCK(p)		/* nothing */

#endif /* MULTIPROCESSOR */

このマクロを追ってみるのが良いかな。