Skip site navigation (1)Skip section navigation (2)
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>