copyin()/copyout() constraints ?
jhb at freebsd.org
Fri Jun 14 22:07:03 UTC 2013
On Friday, June 14, 2013 12:38:12 pm Luigi Rizzo wrote:
> On Fri, Jun 14, 2013 at 12:07:29PM -0400, John Baldwin wrote:
> > On Wednesday, June 12, 2013 2:36:52 pm Alfred Perlstein wrote:
> > > On 6/12/13 11:01 AM, Luigi Rizzo wrote:
> > > > hi,
> > > > is it possible to run copyin() or copyout() in one of these cases:
> > > > 1. while holding a spinlock
> > > > 2. while holding a regular mutex/lock
> > > > 3. while holding a read lock (on an RWLOCK or RMLOCK)
> > > > 4. while holding a write lock (on an RWLOCK or RMLOCK)
> > > >
> > > > I suspect #1 is forbidden, but am a bit unclear for the
> > > > other cases.
> > > No on all of the above unless the memory is wired.
> ok i suppose i'll move to an sx lock, which i have been told
> allows me to sleep ?
> My use case is that while i run the copyin(), and possibly take a
> page fault, nobody destroys the destination buffer. So i wanted
> to hold a read lock (sx_slock() ?) in the thread doing the copy
> (there may be several writers to different parts of the destination),
> and a write lock (sx_xlock() ?) for the other thread which may
> destroy the buffer.
Yep, that will work fine.
More information about the freebsd-current