Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Jul 2000 10:43:23 -0700 (PDT)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Doug Rabson <dfr@nlsystems.com>
Cc:        Greg Lehey <grog@lemis.com>, Chuck Paterson <cp@bsdi.com>, David Greenman <dg@root.com>, freebsd-smp@FreeBSD.ORG
Subject:   Re: SMP progress (was: Stepping on Toes)
Message-ID:  <200007061743.KAA94534@apollo.backplane.com>
References:   <Pine.BSF.4.21.0007060925340.6058-100000@salmon.nlsystems.com>

next in thread | previous in thread | raw e-mail | index | archive | help
:
:A spin lock which is used from both top and bottom halves *must* disable
:interrupts, surely. Since we will only really end up with approximately
:one of these (sched_lock) I don't think there is a real problem.
:
:-- 
:Doug Rabson				Mail:  dfr@nlsystems.com

    Read the document I wrote a month ago that's sitting on 
    apollo.backplane.com/FreeBSDSmp/

    There are two ways to do this:

    (1) (The way I implemented it)

	For the schedular mutex, which is the only spin mutex in the
	system, interrupts are left enabled.

	If an interrupt occurs the interrupt vector code will test to
	see if the current cpu holds the schedular mutex.  If it does,
	the code will set the appropriate ipending bit and return
	immediately.

	Pending interrupts are tested and run when the schedular mutex
	is released.

	Advantages:

	    * Removes sti/cli from the critical mutex path, which is
	      executed far more often then interrupts are.

	    * Allows interrupts to be forwarded if we wanted to forward
	      them, rather then blocking (at some point in the future)

	    * Allows passive pickups of interrupts by idle processors
	      (at some point in the future)

	    * Allows us to implement a separate interrupt scheduler, if
	      we want to (at some point in the future).

	    * Allows us to implement a parallel spl mechanism (though
	      apparently nobody is interested in doing that).

	Disadvantages:

	     None.


    (2) (The way BSDI implemented it)

	When the schedular mutex is obtained interrupts are disabled,
	blocking interrupts from occuring.   When the schedular mutex
	is released, interrupts are reenabled.

	An interrupt thus cannot occur while the schedular mutex is being
	held by the current process.

	Advantages:

	    * Slightly less complex code.

	Disadvantages:

	    * Does not allow any manipulation of pending interrupts to
	      occur while the schedular lock is held.

	    * Causes sti/cli to be run quite often, which slows down the
	      critical path for spin mutexes.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>
   




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-smp" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200007061743.KAA94534>