Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Jan 2008 18:22:23 -0700
From:      John Giacomoni <john.giacomoni@colorado.edu>
To:        freebsd-hackers@freebsd.org
Subject:   how to map a vm_object the same vm address in user and kernel space?
Message-ID:  <50CFFC1C-1831-442A-A430-79E99D54B2EF@colorado.edu>

next in thread | raw e-mail | index | archive | help

--Apple-Mail-123--334955921
Content-Type: text/plain;
	charset=US-ASCII;
	format=flowed;
	delsp=yes
Content-Transfer-Encoding: 7bit


I'm trying to share memory between the kernel and userspace so that I  
can communicate between kernel threads and userspace threads with  
concurrent lock-free data structures.  I can do this if I use  
different virtual addresses in the kernel and addresses in userspace.   
However, this requires that I swizzle any pointers stored in the  
shared memory region.

Is there a way to fix the virtual address as a kernel address but  
permit userspace threads to dereference it without triggering a  
segmentation fault?

This is a sketch of the code that I'm trying to use to map the object  
into userspace addresses.


struct proc     *p = td->td_proc;
vm_map_t         map = &p->p_vmspace->vm_map;

// setup *addr to bind to the premapped kernel address space
*addr = kernel_addr_for_obj

// circumvent the address range checks *ugly and probably wrong*
map->max_offset = kernel_map->max_offset;

vm_object_reference(obj);
err = vm_map_find(map,obj,0,(vm_offset_t*)addr, size, 0, prot, prot, 0);
err = vm_map_wire(map, (vm_offset_t) *addr, (vm_offset_t) *addr +  
size, VM_MAP_WIRE_USER);

At this point the virtual addresses are the same and the virtual  
address points to the same physical address.
pmap_extract(map->pmap, (vm_offset_t)*addr)


However, when the userspace thread attempt to dereference the first  
page, it causes a segfault.

looking at the U/S bit in the PTE for the first page, the U bit is  
cleared.
pte = pmap_pte(map->pmap, (vm_offset_t) *addr);

How do I set this cleanly for all the pages used to back the object?

Thanks

John Giacomoni


--

John.Giacomoni@colorado.edu
University of Colorado at Boulder
Department of Computer Science
Engineering Center, ECCR 1B50
430 UCB
Boulder, CO 80303-0430
USA


--Apple-Mail-123--334955921
Content-Type: text/plain;
	charset=US-ASCII;
	format=flowed
Content-Transfer-Encoding: 7bit





--Apple-Mail-123--334955921--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50CFFC1C-1831-442A-A430-79E99D54B2EF>