how to map a vm_object the same vm address in user and kernel space?
- From: John Giacomoni <john.giacomoni@xxxxxxxxxxxx>
- Date: Fri, 25 Jan 2008 18:22:23 -0700
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@xxxxxxxxxxxx
University of Colorado at Boulder
Department of Computer Science
Engineering Center, ECCR 1B50
430 UCB
Boulder, CO 80303-0430
USA
_______________________________________________
freebsd-hackers@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@xxxxxxxxxxx"
- Prev by Date: Re: a new syscalls table
- Next by Date: HLA v1.100 is now available for FreeBSD
- Previous by thread: a new syscalls table
- Next by thread: HLA v1.100 is now available for FreeBSD
- Index(es):
Relevant Pages
|
|