copyin()/copyout() constraints ?
John Baldwin
jhb at freebsd.org
Fri Jun 14 16:14:54 UTC 2013
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.
If the memory is wired you can hold anything you want since it's basically a
memcpy at that point. Various sysctl handlers that need to hold locks while
writing things out use sysctl_wire_old_buffer() for exactly this reason.
--
John Baldwin
More information about the freebsd-current
mailing list