sio: lots of silo overflows on Asus K8V with Moxa Smartio
C104H/PCI
Bruce Evans
bde at zeta.org.au
Sun May 2 20:36:11 PDT 2004
On Sun, 2 May 2004, M. Warner Losh wrote:
> In message: <20040502130027.O1806 at gamplex.bde.org>
> Bruce Evans <bde at zeta.org.au> writes:
> : No, but siointr() doesn't go near the tty layer or almost any other
> : layer. It uses pseudo-dma and schedules a SWI to transfer data between
> : its buffers and the tty layer. Fast interrupt handlers cannot call
> : other layers because they cannot reasonable lock other layers or
> : vice versa. (Even the call to the scheduler to schedule a SWI in the
> : current implementation is a layering violation.)
>
> So it is also safe to call the tty layer w/o giant held from the SWI?
> I guess that was my question. Or is the SWI wrapped in Giant when I
> wasn't looking...
Unsafe. SWIs are wrapped by Giant unless they are created using
swi_add(... INTR_MPSAFE ...). There are 26 calls to swi_add() in the
tree, and the slow progress of Giant removal is shown by only 3 of
these using INTR_MPSAFE. The ones in sio are not in the 3. The 3
are all just for multiplexors that push down deciding whether to use
Giant to lower layers:
- softclock: handles timeout. CALLOUT_MPSAFE specifies that Giant
is not needed (or has been pushed down further) for individual
timeouts.
- swi_net: calls netisrs. NETISR_MPSAFE specifies that Giant is not
needed (or ...) for individual netisrs.
- taskqueue_swi_run: calls queued MPSAFE tasks. Non-MPSAFE tasks are
on another queue.
Bruce
More information about the freebsd-current
mailing list