In message: <[EMAIL PROTECTED]>
            Scott Long <[EMAIL PROTECTED]> writes:
: Dinesh Nair wrote:
: > 
: > carrying on this discussion, what would be a good locking mechanism to 
: > use to protect tsleep() and other sensitive areas in a driver in freebsd 
: > 4.x ?
: > 
: > the current code for the driver in 5.x uses mtx_lock and mtx_unlock with 
: > some parts even being protected by mtx_lock(&Giant).
: > 
: > would the use of simple_lock() or s_lock() do, given that 
: > SIMPLELOCK_DEBUG was defined in the 4.x kernel ?
: >
: > the mechanism is actually a pseudo device driver which communicates with 
: > the real device driver. the pseudo device driver creates a bunch of 
: > /dev/ devices which the userland reads/writes to, and the pseudo device 
: > driver then places data in a few buffers.
: > 
: > the real device driver then reads these buffers and uses busdma to send 
: > the data to the device. reading is done by using busdma to read from the 
: > device and then placing the data in these buffers for the pseudo device 
: > to return to the userland process.
: > 
: > locking in the real device driver uses splhigh/splx, but what locking 
: > should be used in the pseudo device driver ?
: > 
: 
: If you need to protect your pseudodriver from being interrupted by the
: real driver then you'll need to use the same spl() as the driver.  Note
: that you shouldn't be using splhigh() unless you really know what you
: are doing.  Other than that, there likely isn't anything that you need
: to do for 'locking' in 4.x.  The kernel is non-reentrant there, so you
: don't need to worry about synchronizing multiple threads.

One thing to also bear in mind is that in 4.x spl locking is a code
lock.  It keeps multiple 'threads' of execution from entering a block
of code.  mutexes in -current are data locks.  While usually one can
think of the two the same, it can trip the unweary up.

Locking in 4.x is indeed much simpler.

Warner
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to