From owner-freebsd-hackers@FreeBSD.ORG Thu May 15 12:33:02 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D37EF1065673 for ; Thu, 15 May 2008 12:33:02 +0000 (UTC) (envelope-from teemu@rinta-aho.org) Received: from smtp.piuha.net (p130.piuha.net [IPv6:2001:14b8:400::130]) by mx1.freebsd.org (Postfix) with ESMTP id 5E4758FC18 for ; Thu, 15 May 2008 12:33:02 +0000 (UTC) (envelope-from teemu@rinta-aho.org) Received: from smtp.piuha.net (localhost [127.0.0.1]) by smtp.piuha.net (Postfix) with ESMTP id B85C21987F0; Thu, 15 May 2008 15:33:00 +0300 (EEST) Received: from [127.0.0.1] (unknown [IPv6:2001:14b8:400::130]) by smtp.piuha.net (Postfix) with ESMTP id 80AF0198665; Thu, 15 May 2008 15:33:00 +0300 (EEST) Message-ID: <482C2D7C.5070703@rinta-aho.org> Date: Thu, 15 May 2008 15:33:00 +0300 From: Teemu Rinta-aho User-Agent: Thunderbird 2.0.0.14 (X11/20080505) MIME-Version: 1.0 To: Kostik Belousov References: <482C0E70.4020305@rinta-aho.org> <20080515111847.GX18958@deviant.kiev.zoral.com.ua> In-Reply-To: <20080515111847.GX18958@deviant.kiev.zoral.com.ua> X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV using ClamSMTP Cc: freebsd-hackers@freebsd.org Subject: Re: copy-on-write anonymous memory? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 May 2008 12:33:02 -0000 Kostik Belousov wrote: > On Thu, May 15, 2008 at 01:20:32PM +0300, Teemu Rinta-aho wrote: >> Hi all, >> >> is it possible to create a memory object that represents >> anonymous memory pages *and* is copy-on-write? >> >> I have this code in a kernel module: >> >> object = vm_object_allocate(OBJT_DEFAULT, 1); >> >> result = vm_map_find(vmmap_proc, >> object, >> 0, >> &addr, >> len, >> TRUE, >> VM_PROT_ALL, >> VM_PROT_ALL, >> MAP_COPY_ON_WRITE); >> >> Then I pass the addr to the user space, but when >> I write to the addr, I see no shadow objects created, >> i.e. the changes are written to the original memory >> pages no matter if I have the map entry set as >> copy-on-write or not... I am assuming a write fault would >> create a new page and hang it to a shadow object thus >> leaving the original memory untouched. >> >> I'd appreciate any kind of help here. > > I cannot get a complete handle on your problem without full code, but > I guess that you have only one reference to the backing object through > the vm map entry. If this is the case, then the shadow copying actually > does not make sense since no other users of the object need it. > > Look at the vm_object_shadow(), check at the start of the function. Hi Kostik, thanks, that was a good point. Adding a reference helps! :-) Thanks for your quick reply, Teemu