Date: Thu, 15 May 2008 15:33:00 +0300 From: Teemu Rinta-aho <teemu@rinta-aho.org> To: Kostik Belousov <kostikbel@gmail.com> Cc: freebsd-hackers@freebsd.org Subject: Re: copy-on-write anonymous memory? Message-ID: <482C2D7C.5070703@rinta-aho.org> In-Reply-To: <20080515111847.GX18958@deviant.kiev.zoral.com.ua> References: <482C0E70.4020305@rinta-aho.org> <20080515111847.GX18958@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?482C2D7C.5070703>