Problems mapping an vm_object to a process memory space

Pekka Nikander pekka.nikander at nomadiclab.com
Fri Mar 13 14:20:00 PDT 2009


Hi Alexej,

The actual mapping code is now at http://pastebin.com/m56a949a5   The  
objects in question are allocated through vm_pager_allocate with  
OBJT_SWAP.  Note that I'm not sure when OBJ_ONEMAPPING clearing  
actually helps and when not -- I've more sprinkled it around the code  
in the hope of circumventing what I suspect is a bug.  (But I also  
have to confess that I don't understand the internals of  
vm_object_deallocate well enough to really say where the bug might be,  
if there is one.)  The code around lines 110-117 is my latest attempt  
to fix.  The earlier version simply wired the pages.

--Pekka


On 13 Mar 2009, at 20:18, Alexej Sokolov wrote:

> hi ,
> I had a problem with remapping too. Could I see your code?
> here is my code, that some times on AMD64 runs wrong :
> http://pastebin.com/m78da0b37
>
> And now I solved the problem with remapping by using /dev/mem  
> device. It has mmap syscal. And it seems to be working without  
> problem.
>
> Alexej
> <
>
> 2009/3/13 Pekka Nikander <pekka.nikander at nomadiclab.com>
> As a part of a research project, I'm trying to build publish/ 
> subscribe shared memory semantics where the idea is to first map an  
> vm_object as read/write to a publisher's memory space, and then a  
> COW shadow of that later to the subscriber processes' memory space.
>
> I've got to the point where the code works most of the time, but at  
> certain scenarios (which are hard to classify and seem slightly  
> random) the mapping goes wrong, and either the subscriber process  
> has no physical mapping at the supposed address or there appears  
> some random page.   To me it appears as if the vm_object, vm_map etc  
> data structures are OK, but somehow the pmaps don't get right.  I'm  
> currently using 7.1 RELEASE on amd64, but I'm planning to try the  
> same on -CURRENT as soon as I get it properly ported.  I even tried  
> calling pmap_enter_object explicitly before returning to the user  
> space, but it doesn't seem to help.
>
> Another thing is that there may be some bugs related  
> OBJ_ONEMAPPING.  We need to explicitly clear it at places, and  
> sometimes artificially bump up the vm_object reference count to  
> avoid code related to ONEMAPPING from trashing the object's  
> mappings.  Is this a known issue?
>
> Any advice?
>
> --Pekka Nikander
>
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org 
> "
>



More information about the freebsd-hackers mailing list