A preliminary BGL patch is now on my site, relative to RELENG_4.

        http://www.backplane.com/FreeBSD4/

    It is the smp-patch-03.diff item at the end of the first section.

    My test box successfully built the world.  I know I'm probably missing
    something, but so far I can't tell what it might be because nothing
    is failing :-)

    This is considered very alpha and has been made available mainly to
    endgender discussion.  You know, things like "Matt, you've really gone
    off the deep end this time! You cannot *DO* that to the syscall 
    interface!".

    My primary assumption is that read access to fields in curproc plus any
    structural references that are 'static'-like (e.g. like ucred) are legal
    without having to hold the BGL.  So getuid() can be made BGL safe
    but getppid() cannot (nor can getpid() because compatibility mode also
    returns the ppid).  Obviously there are other fine-grained solutions.

    The biggest assumption in the patch is that doreti does not have to be
    called for system calls.  Being able to get rid of it for syscalls means
    being able to do an end-run around doreti's extremely SMP-unsafe code.

    I can categorize the system calls as follows:

        * SMP safe trivially (getuid())

        * SMP safe trivially through fine-grained structural locks 
          (e.g. getppid()).  The case where the code has no potential to 
          block beyond obtaining a single fine-grained lock.

        * SMP safe through the use of nested locks (e.g. VM, buffer cache).
          Less trivial because we have to utilize the spl*() mechanisms
          to prevent interrupts from interfering and deadlocking us.

        * SMP safe but with potential nested blocking conditions

                                                -Matt




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

Reply via email to