Re: Simplified Steps for Building a Loadable module on -CURRENT

From: John Baldwin <jhb_at_freebsd.org>
Date: Thu, 31 Aug 2006 15:28:13 -0400
On Thursday 31 August 2006 06:22, Pyun YongHyeon wrote:
> On Thu, Aug 31, 2006 at 05:32:13PM +0800, LI Xin wrote:
>  > Pyun YongHyeon wrote:
>  > > On Wed, Aug 30, 2006 at 03:12:59PM -0700, David Christensen wrote:
>  > >  > I've been able to successfully build drivers in the past as
>  > >  > loadable modules but I'm getting some kernel panics with -CURRENT
>  > >  > when installing a module using kldload now where things used to 
>  > > 
>  > > I wonder you encountered the same panic I have been seeing on CURRENT.
>  > > I get "Fatal trap 30" message when I load em(4) module with kldload.
>  > 
>  > What does Fatal trap 30 mean in these places?  I get some strange fatal
>  > trap 30's in acpi_cpi_idle, but I can not imagine how can these 
happen :-(
>  > 
> 
> Don't know what's cause of the panic since it used to work ok.
> See 
http://lists.freebsd.org/pipermail/freebsd-current/2006-August/065243.html

Trap 30 means an IDT vector fired that we didn't expect.  In this case, I 
think it may only happen on SMP, and it maybe that the interrupt gets sent to 
a CPU that hasn't seen the update to the IDT yet.  Try this patch:

Index: amd64/amd64/local_apic.c
===================================================================
RCS file: /usr/cvs/src/sys/amd64/amd64/local_apic.c,v
retrieving revision 1.26
diff -u -r1.26 local_apic.c
--- amd64/amd64/local_apic.c	12 Jul 2006 21:22:42 -0000	1.26
+++ amd64/amd64/local_apic.c	31 Aug 2006 19:27:12 -0000
_at__at_ -721,6 +721,7 _at__at_
 	KASSERT(ioint_handlers[vector / 32] != NULL,
 	    ("No ISR handler for vector %u", vector));
 	setidt(vector, ioint_handlers[vector / 32], SDT_SYSIGT, SEL_KPL, 0);
+	smp_rendezvous(NULL, NULL, NULL, NULL);
 }
 
 /* Release an APIC vector when it's no longer in use. */
Index: i386/i386/local_apic.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/i386/local_apic.c,v
retrieving revision 1.28
diff -u -r1.28 local_apic.c
--- i386/i386/local_apic.c	12 Jul 2006 21:22:43 -0000	1.28
+++ i386/i386/local_apic.c	31 Aug 2006 19:26:54 -0000
_at__at_ -724,6 +724,7 _at__at_
 	    ("No ISR handler for vector %u", vector));
 	setidt(vector, ioint_handlers[vector / 32], SDT_SYS386IGT, SEL_KPL,
 	    GSEL(GCODE_SEL, SEL_KPL));
+	smp_rendezvous(NULL, NULL, NULL, NULL);
 }
 
 /* Release an APIC vector when it's no longer in use. */


-- 
John Baldwin
Received on Thu Aug 31 2006 - 17:39:39 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:59 UTC