Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Oct 2005 19:24:30 +0800
From:      Dinesh Nair <dinesh@alphaque.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-hackers@freebsd.org, Scott Long <scottl@samsco.org>
Subject:   locking in a device driver (was:  use of bus_dmamap_sync)
Message-ID:  <4360B8EE.4070605@alphaque.com>
In-Reply-To: <200510261324.03790.jhb@freebsd.org>
References:  <435EEC56.9080708@samsco.org> <200510261130.45506.jhb@freebsd.org> <435FA6A9.4000600@samsco.org> <200510261324.03790.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

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 ?

-- 
Regards,                           /\_/\   "All dogs go to heaven."
dinesh@alphaque.com                (0 0)    http://www.alphaque.com/
+==========================----oOO--(_)--OOo----==========================+
| for a in past present future; do                                        |
|   for b in clients employers associates relatives neighbours pets; do   |
|   echo "The opinions here in no way reflect the opinions of my $a $b."  |
| done; done                                                              |
+=========================================================================+



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