Date: Sat, 21 Feb 1998 11:19:59 -0500 (EST) From: "John S. Dyson" <dyson@FreeBSD.ORG> To: toasty@home.dragondata.com (Kevin Day) Cc: toasty@home.dragondata.com, current@FreeBSD.ORG Subject: Re: panic: rslock: cpu: 1 during boot on current kernel (was: panic: vm_page_unwire: invalid wire count: 0) Message-ID: <199802211619.LAA00694@dyson.iquest.net> In-Reply-To: <199802211612.KAA14359@home.dragondata.com> from Kevin Day at "Feb 21, 98 10:12:35 am"
next in thread | previous in thread | raw e-mail | index | archive | help
Kevin Day said:
> One final thing, I cvsupped today's kernel, and I get:
>
> APIC_IO: routing 8254 via 8259 on pin 0
> Considering FFS root f/s.
> SMP: AP CPU #1 Launched!
> SMP: CPU1 apic_initialize():
> lint0: 0x00010700 lint1: 0x00010400 TPR: 0x00000000 SVR: 0x0000001ff
> panic: rslock: cpu 1, addr: 0xf021e8d0, lock: 0x01000001
> mp_lock = 01000002; cpuid = 1; lapic.id = 01000000
> Debugger("panic")
>
> It then locks up.
>
> I've tried changing the PCI video card back to an ISA one(mentioned below),
> no help with either problem.
>
> Going back to a 02/15/98 kernel stops this panic: rslock from happening.
> Somewhere between those dates something broke SMP on my motherboard.
>
I had the same problem. There is a bug in clock.c (or nearby) where the
clock_lock simplelock is gained recursively. I don't know how to
officially fix it (since I am not in the SMP loop), but below makes
the problem go-away until whomever broke it can fix it:
Index: clock.c
===================================================================
RCS file: /local/home/ncvs/src/sys/i386/isa/clock.c,v
retrieving revision 1.111
diff -C2 -r1.111 clock.c
*** clock.c 1998/02/20 16:35:37 1.111
--- clock.c 1998/02/21 10:32:11
***************
*** 1055,1059 ****
ef = read_eflags();
! disable_intr();
/* Select timer0 and latch counter value. */
--- 1055,1059 ----
ef = read_eflags();
! __asm __volatile("cli" : : : "memory");
/* Select timer0 and latch counter value. */
***************
*** 1071,1074 ****
--- 1071,1075 ----
i8254_lastcount = count;
count += i8254_offset;
+
write_eflags(ef);
return (count);
--
John | Never try to teach a pig to sing,
dyson@freebsd.org | it just makes you look stupid,
jdyson@nc.com | and it irritates the pig.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802211619.LAA00694>
