Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 11 Nov 2001 11:44:50 +0100
From:      Arjan Knepper <arjan@jak.nl>
To:        Tor.Egge@cvsup.no.freebsd.org
Cc:        freebsd-stable@FreeBSD.ORG
Subject:   Re: FBSD4.4-STABLE SMP broken!
Message-ID:  <3BEE56A2.2000305@jak.nl>
References:  <20011110172005.J999-100000@klima.physik.uni-mainz.de> <20011111003641B.tegge@cvsup.no.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Dear Tor,

Do you think this is related to the problems below  with a dual PIII-933 
Mhz Dell PowerEdge 2550 (serverworks chipset)?

panic: rslock: cpu: 1, addr:0xc0307228, lock: 0x01000001
mp_lock = 01000002; cpuid =1; lapic.id = 00000000
boot() called on cpu#1



Thanks
Arjan

Tor.Egge@cvsup.no.freebsd.org wrote:

>>I did a cvsupdate today, the target machine was running
>>stable for the last four days.
>>
>>After the update and make world today, the system run a few minutes and then
>>get stuck ... no keyboard input, nothing, no network response.
>>
>
>Sleeping while holding a simplelock can be fatal on an SMP machine.
>If the other CPU tries to obtain the simplelock then you get a hang.
>If the same CPU tries to obtain the simplelock then you get a panic.
>
>One example is vinvalbuf() holding the vnode interlock while calling
>vm_object_page_remove() (which might block), cf. PR 26224.
>
>For 4.4-STABLE, it might make sense to just define some simplelock
>operations to nops also under SMP.  All relevant code is already
>serialized by mp_lock and further lock pushdown is unlikely to occur
>on that branch.  The only effect of these simplelock operations under
>4.4-STABLE SMP is a hang or panic when the locking protocol is
>violated.
>
>The enclosed patch will break 3rd party device drivers that use fast
>interrupts and simple_lock() to serialize access to shared resources.
>I don't know about any such device drivers.
>
>You'll need to add 
>
>       options SIMPLELOCK_NULL
>
>to the relevant kernel config file and recompile the kernel for the
>patch to have any effect.
>
>- Tor Egge
>
>
>------------------------------------------------------------------------
>
>Index: sys/conf/options
>===================================================================
>RCS file: /home/ncvs/src/sys/conf/options,v
>retrieving revision 1.191.2.37
>diff -u -r1.191.2.37 options
>--- sys/conf/options	3 Nov 2001 01:41:07 -0000	1.191.2.37
>+++ sys/conf/options	10 Nov 2001 23:29:19 -0000
>@@ -361,7 +363,8 @@
> INVARIANT_SUPPORT	opt_global.h
> INVARIANTS		opt_global.h
> SIMPLELOCK_DEBUG	opt_global.h
>+SIMPLELOCK_NULL		opt_global.h
> VFS_BIO_DEBUG		opt_global.h
> 
> # These are VM related options
> VM_KMEM_SIZE		opt_vm.h
>Index: sys/i386/include/lock.h
>===================================================================
>RCS file: /home/ncvs/src/sys/i386/include/Attic/lock.h,v
>retrieving revision 1.11.2.2
>diff -u -r1.11.2.2 lock.h
>--- sys/i386/include/lock.h	30 Sep 2000 02:49:34 -0000	1.11.2.2
>+++ sys/i386/include/lock.h	10 Nov 2001 23:29:19 -0000
>@@ -170,6 +170,18 @@
> extern struct simplelock	mcount_lock;
> 
> #if !defined(SIMPLELOCK_DEBUG) && MAXCPU > 1
>+
>+#ifdef SIMPLELOCK_NULL
>+
>+/* On SMP systems, mp_lock is used for the serialization */
>+
>+#define	NULL_SIMPLELOCKS
>+#define	simple_lock_init(alp)
>+#define	simple_lock(alp)
>+#define	simple_lock_try(alp)	(1)	/* always succeeds */
>+#define	simple_unlock(alp)
>+
>+#else
> /*
>  * This set of defines turns on the real functions in i386/isa/apic_ipl.s.
>  */
>@@ -177,6 +189,8 @@
> #define	simple_lock(alp)	s_lock(alp)
> #define	simple_lock_try(alp)	s_lock_try(alp)
> #define	simple_unlock(alp)	s_unlock(alp)
>+
>+#endif
> 
> #endif /* !SIMPLELOCK_DEBUG && MAXCPU > 1 */
> 
>



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3BEE56A2.2000305>