Simplified Steps for Building a Loadable module on -CURRENT
John Baldwin
jhb at freebsd.org
Thu Aug 31 19:39:40 UTC 2006
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
@@ -721,6 +721,7 @@
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
@@ -724,6 +724,7 @@
("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
More information about the freebsd-current
mailing list