DragonFly BSD
DragonFly kernel List (threaded) for 2006-05
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: splz still ?

From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 15 May 2006 09:08:12 -0700 (PDT)

:On Mon, May 15, 2006 at 04:31:29PM +0200, Simon 'corecode' Schubert wrote:
:> On 15.05.2006, at 15:51, Terry Tree wrote:
:> [splz remove]
:> i think splz() does something else (thread switch stuff?) so it may not 
:> replaced with crit_*()
:It checks for currently pending interrupts and delivers them. *Very*
:nasty, but not easy to fix without carefully why the code needed it.

    It looks like CAM wants to run any pending interrupts while potentially
    in a critical section.  My guess is that it is trying to avoid too many
    unprocessed events building up while it is looping on a queue.

    In anycase, you can't just replace a splz() call with a crit_exit().
    crit_enter()'s and crit_exit()'s have to match up.  So unless that
    bit of code was a bug before, the patch won't work.

    splz() still serves a vital function on the system.  It is used to
    run pending interrupts after the last critical section is exited,
    and used to run pending interrupts if a thread switch occurs (e.g.
    between two threads which are both holding a critical section).
    So it can't be removed in general.  CAMs use of splz() is rather odd,
    but not illegal.

					Matthew Dillon 

[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]