Date: Thu, 04 Jan 2001 00:56:44 -0500 From: Jake Burkholder <jburkhol@home.com> To: "Thomas D. Dean" <tomdean@speakeasy.org> Cc: freebsd-smp@FreeBSD.ORG Subject: Re: Continuing Fatal Trap 12 Message-ID: <20010104055645.1D055BA7D@io.yi.org> In-Reply-To: Message from "Thomas D. Dean" <tomdean@speakeasy.org> of "Wed, 03 Jan 2001 19:08:00 PST." <200101040308.f04380L00892@celebris.tddhome>
next in thread | previous in thread | raw e-mail | index | archive | help
> I tried -current SMP as of early this AM, PST. > > I still have the fatal trap 12 problem. I can generate it with a max > of three transactions to lpd. > > The current process is (irq7: lpt0). trace shows only _end() and > fork_trampoline. I posted the output of DDB a week ago. > > I have: > options DDB > options INVARIANT_SUPPORT > options INVARIANTS > options WITNESS > options KTRACE > > How can I produce a stack trace, etc., so I can help find this problem? Hi, I don't own a printer so its difficult for me to help, but having browsed the driver source there are a couple things that might be useful. I think you said before you can print fine with a uni-processor kernel, is that correct? Please send me the output of dmesg. Sorry if you posted it before, I can't find it. If you have a serial console, please compile a kernel with LPT_DEBUG, save the console messages to a file and send them to me. Include everything from the initial boot messages. To turn on the debugging go into /sys/dev/ppbus/lpt.c and add the line #define LPT_DEBUG anywhere in the file. Compile a new kernel and print stuff till it crashes. It will probably generate huge amounts of output. A possible workaround is to try to force the driver to use polling mode, since its crashing in the interrupt thread. To do this go into lpt.c again and make the following changes: --- lpt.c Thu Dec 7 17:33:12 2000 +++ lpt.c.hack Thu Jan 4 00:46:41 2001 @@ -394,6 +394,7 @@ /* retrieve the ppbus irq */ BUS_READ_IVAR(ppbus, dev, PPBUS_IVAR_IRQ, &irq); +#if 0 if (irq > 0) { /* declare our interrupt handler */ sc->intr_resource = bus_alloc_resource(dev, SYS_RES_IRQ, @@ -403,9 +404,12 @@ sc->sc_irq = LP_HAS_IRQ | LP_USE_IRQ | LP_ENABLE_IRQ; device_printf(dev, "Interrupt-driven port\n"); } else { +#endif sc->sc_irq = 0; device_printf(dev, "Polled port\n"); +#if 0 } +#endif lprintf(("irq %x %x\n", irq, sc->sc_irq)); lpt_release_ppbus(dev); It should say "Polled port" in dmesg instead of "Interrupt-driven port". Compile a new kernel and print some more stuff. The console output of a print job in polled mode with LPT_DEBUG enabled would also be helpful. This should work, but as I said I can't test it. Thanks Jake To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-smp" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010104055645.1D055BA7D>