:> The critical section stuff currently in current is part of the original
:> preemption patches I wrote at Usenix last year.  They aren't in the tree
:> because they aren't stable yet.  We still have problems on the alpha and
:> problems with IPI deadlocks on SMP machines that need to be worked out.  Since
:> this API is still very much in flux I'd prefer to keep it simple for now and
:> not make the code overly complex with optimizations until after we have settled
:> on the design.
:The change is mostly part of the design change needed to un-break fast
:interrupt handlers.  critical_enter() mask not mask hardware
:interrupts for the same reason than splhigh() must not mask them:
:there is too much MI code that thinks it is critical and short but
:really isn't (e.g., everything under spinlocks in -current).  Changing
:cpu_critical_enter() to a null version to prevent spinlocks masking
:interrupts doesn't work very well because it is used for other things
:that really do need to mask interrupts.  Having 2 levels for
:cpu_critical_enter() (on that masks normal interrupts and one that
:masks fast interrupts) would work but I think there are already too
:many levels of critical_enter()s.

    Not to mention the fact that this will lead to an ability to break
    into the debugger via the serial concsole even if the code is stuck
    in a spin mutex or in the middle of the scheduler.  Not with this
    commit or the followup cleanup commit, not quite, but maybe the one
    after.  It puts us on the right road.

                                        Matthew Dillon 
                                        <[EMAIL PROTECTED]>

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to