Skip site navigation (1)Skip section navigation (2)
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>