PERFORCE change 125223 for review
Jesper Brix Rosenkilde
jbr at FreeBSD.org
Thu Aug 16 10:33:07 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=125223
Change 125223 by jbr at jbr_bob on 2007/08/16 17:32:20
backup
Affected files ...
.. //depot/projects/soc2007/jbr-syscall/src/sys/kern/kern_exec.c#14 edit
.. //depot/projects/soc2007/jbr-syscall/src/sys/vm/vm_map.c#9 edit
.. //depot/projects/soc2007/jbr-syscall/src/sys/vm/vm_map.h#5 edit
Differences ...
==== //depot/projects/soc2007/jbr-syscall/src/sys/kern/kern_exec.c#14 (text+ko) ====
@@ -917,11 +917,15 @@
struct proc *p = imgp->proc;
vm_map_t map = &imgp->proc->p_vmspace->vm_map;
vm_offset_t *addr = &imgp->proc->p_usrsysshm;
+ struct sf_buf *kern_buf = p->p_kernsysshm;;
+ int test = 42;
if (p->p_kernsysshm != NULL)
exec_unmap_sysshm(imgp);
- error = vm_map_sysshm(map, addr, 42);
+ error = vm_map_sysshm(map, addr, kern_buf, 42);
+
+ copyout((caddr_t) &test, (caddr_t) *addr, sizeof(int));
return(error);
}
==== //depot/projects/soc2007/jbr-syscall/src/sys/vm/vm_map.c#9 (text+ko) ====
@@ -76,6 +76,7 @@
#include <sys/vnode.h>
#include <sys/resourcevar.h>
#include <sys/file.h>
+#include <sys/sf_buf.h>
#include <sys/sysent.h>
#include <sys/shm.h>
@@ -2987,7 +2988,8 @@
* process.
*/
int
-vm_map_sysshm(vm_map_t map, vm_offset_t *addr, vm_size_t size)
+vm_map_sysshm(vm_map_t map, vm_offset_t *usr_addr, struct sf_buf *kern_buf,
+ vm_size_t size)
{
vm_object_t object;
vm_page_t sysshm_page;
@@ -2995,16 +2997,11 @@
size = round_page(size);
PROC_LOCK(curthread->td_proc);
- *addr = round_page((vm_offset_t)
+ *usr_addr = round_page((vm_offset_t)
curthread->td_proc->p_vmspace->vm_daddr) +
lim_cur(curthread->td_proc, RLIMIT_DATA);
PROC_UNLOCK(curthread->td_proc);
- /*
- error = vm_map_find(map, NULL, 0, addr, size, TRUE, VM_PROT_RW,
- VM_PROT_RW, MAP_NOFAULT);
- */
-
object = vm_object_allocate(OBJT_DEFAULT, 1);
if (!object)
panic("vm_map_sysshm: cannot allocate object");
@@ -3017,22 +3014,27 @@
sysshm_page->valid = VM_PAGE_BITS_ALL;
VM_OBJECT_UNLOCK(object);
- if (vm_map_findspace(map, *addr, size, addr))
+ if (vm_map_findspace(map, *usr_addr, size, usr_addr))
return (1);
- if (vm_map_insert(map, object, 0, *addr, *addr + size, VM_PROT_RW,
- VM_PROT_RW, 0))
+ if (vm_map_insert(map, object, 0, *usr_addr, *usr_addr + size,
+ VM_PROT_RW, VM_PROT_RW, 0))
panic("vm_map_sysshm: cannot insert object into vm_map.");
- pmap_enter(map->pmap, *addr, sysshm_page, VM_PROT_RW, TRUE);
+ pmap_enter(map->pmap, *usr_addr, sysshm_page, VM_PROT_RW, TRUE);
VM_OBJECT_LOCK(object);
vm_page_lock_queues();
+ vm_page_wire(sysshm_page);
vm_page_activate(sysshm_page);
vm_page_unlock_queues();
vm_page_wakeup(sysshm_page);
VM_OBJECT_UNLOCK(object);
+ kern_buf = sf_buf_alloc(sysshm_page, SFB_NOWAIT);
+ if (!kern_buf)
+ return 1;
+
return (0);
}
==== //depot/projects/soc2007/jbr-syscall/src/sys/vm/vm_map.h#5 (text+ko) ====
@@ -354,7 +354,7 @@
void vm_map_simplify_entry (vm_map_t, vm_map_entry_t);
void vm_init2 (void);
int vm_map_stack (vm_map_t, vm_offset_t, vm_size_t, vm_prot_t, vm_prot_t, int);
-int vm_map_sysshm(vm_map_t, vm_offset_t *, vm_size_t);
+int vm_map_sysshm(vm_map_t, vm_offset_t *, struct sf_buf *, vm_size_t);
int vm_map_growstack (struct proc *p, vm_offset_t addr);
int vm_map_unwire(vm_map_t map, vm_offset_t start, vm_offset_t end,
int flags);
More information about the p4-projects
mailing list