PREEMPTION vs ndisulator

John Baldwin jhb at freebsd.org
Mon Dec 19 11:46:30 PST 2005


On Friday 16 December 2005 05:12 pm, Andrew Gallatin wrote:
> John Baldwin writes:
>  > On Friday 16 December 2005 03:52 pm, Andrew Gallatin wrote:
>  > > John Baldwin writes:
>  > >  > On Friday 16 December 2005 11:34 am, Andrew Gallatin wrote:
>  > >  > Looks like an ithread has preempted your driver's start routine. 
>  > >  > If you let it run some more and then break into ddb is the same
>  > >  > thread (pid 11) still running?  Also, which process is pid 11?
>
> It looks like the ithread is looping:
>
> db> show intrcnt
> irq4: sio0              1007
> irq14: ata0             33
> irq17: fwohci0          1
> irq18: ndis0            757379
> irq21: ohci0+           382
> cpu0: timer             1254872
> db> c
> [halt - sent]
> KDB: enter: Line break on console
> [thread pid 76 tid 100049 ]
> Stopped at      kdb_enter+0x2f: nop
> db> show intrcnt
> irq4: sio0              1009
> irq14: ata0             33
> irq17: fwohci0          1
> irq18: ndis0            992263
> irq21: ohci0+           382
> cpu0: timer             1259314
>
>
> I know the interrupt is actually disabled in the DPC, and
> not in the interrupt handler.  That's probably the problem.
> The DPC is just never getting scheduled, so the interrupt
> line is never lowered.
>
> Thanks!

Yeah, given my recent experience with WDM that approach sounds very 
problematic since your DPC doesn't run at DIRQL in Windows either, and you 
really should be shutting your hardware up in your ISR rather than your DPC.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-current mailing list