From owner-freebsd-current@FreeBSD.ORG Fri Jun 14 22:07:03 2013 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id C4084E90 for ; Fri, 14 Jun 2013 22:07:03 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) by mx1.freebsd.org (Postfix) with ESMTP id 9C7B71B15 for ; Fri, 14 Jun 2013 22:07:03 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 1DB0FB917; Fri, 14 Jun 2013 18:07:02 -0400 (EDT) From: John Baldwin To: Luigi Rizzo Subject: Re: copyin()/copyout() constraints ? Date: Fri, 14 Jun 2013 16:56:57 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p25; KDE/4.5.5; amd64; ; ) References: <20130612180115.GA27892@onelab2.iet.unipi.it> <201306141207.29779.jhb@freebsd.org> <20130614163812.GA50980@onelab2.iet.unipi.it> In-Reply-To: <20130614163812.GA50980@onelab2.iet.unipi.it> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201306141656.57827.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 14 Jun 2013 18:07:02 -0400 (EDT) Cc: freebsd-current@freebsd.org, Alfred Perlstein X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Jun 2013 22:07:03 -0000 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. -- John Baldwin