PERFORCE change 124925 for review
Jesper Brix Rosenkilde
jbr at FreeBSD.org
Wed Aug 8 13:59:08 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=124925
Change 124925 by jbr at jbr_bob on 2007/08/08 20:58:34
fixed sysclt
Affected files ...
.. //depot/projects/soc2007/jbr-syscall/src/sys/kern/kern_exec.c#8 edit
.. //depot/projects/soc2007/jbr-syscall/src/sys/sys/sysctl.h#3 edit
.. //depot/projects/soc2007/jbr-syscall/src/sys/vm/vm_map.c#5 edit
.. //depot/projects/soc2007/jbr-syscall/src/sys/vm/vm_map.h#4 edit
Differences ...
==== //depot/projects/soc2007/jbr-syscall/src/sys/kern/kern_exec.c#8 (text+ko) ====
@@ -100,7 +100,7 @@
SYSCTL_PROC(_kern, KERN_USRSTACK, usrstack, CTLTYPE_ULONG|CTLFLAG_RD,
NULL, 0, sysctl_kern_usrstack, "LU", "");
-SYSCTL_PROC(_kern, KERN_USRSYSSHM, usrsysshm, CTLTYPE_ULONG|CTLFLAG_RD,
+SYSCTL_PROC(_kern, OID_AUTO, usrsysshm, CTLTYPE_ULONG|CTLFLAG_RD,
NULL, 0, sysctl_kern_usrsysshm, "LU", "");
SYSCTL_PROC(_kern, OID_AUTO, stackprot, CTLTYPE_INT|CTLFLAG_RD,
@@ -902,11 +902,6 @@
}
}
-struct test {
- unsigned int pid;
- char proctitle[256];
-};
-
/*
* Destroy old address space, and allocate a new stack
* The new stack is only SGROWSIZ large because it is grown
@@ -924,8 +919,6 @@
vm_map_t map;
u_long ssiz;
- struct test test_data = {42, "Humppa!"};
-
imgp->vmspace_destroyed = 1;
imgp->sysent = sv;
@@ -949,15 +942,6 @@
map = &vmspace->vm_map;
}
- sv->sv_sysshm = sv->sv_minuser;
-
- /* Allocate memory shared between process and kernel */
- error = vm_map_sysshm(map, sv->sv_sysshm, sizeof(struct test));
- if (error)
- return (error);
-
- copyout(&test_data, (void *) sv->sv_sysshm, sizeof(struct test));
-
/* Allocate a new stack */
if (sv->sv_maxssiz != NULL)
ssiz = *sv->sv_maxssiz;
@@ -985,6 +969,11 @@
vmspace->vm_ssize = sgrowsiz >> PAGE_SHIFT;
vmspace->vm_maxsaddr = (char *)sv->sv_usrstack - ssiz;
+ /* Allocate memory shared between process and kernel */
+ error = vm_map_sysshm(map, &(sv->sv_sysshm), 42);
+ if (error)
+ return (error);
+
return (0);
}
==== //depot/projects/soc2007/jbr-syscall/src/sys/sys/sysctl.h#3 (text+ko) ====
@@ -393,7 +393,6 @@
#define KERN_HOSTUUID 36 /* string: host UUID identifier */
#define KERN_ARND 37 /* int: from arc4rand() */
#define KERN_MAXID 38 /* number of valid kern ids */
-#define KERN_USRSYSSHM 39 /* int: address of sysshm page */
#define CTL_KERN_NAMES { \
{ 0, 0 }, \
@@ -432,7 +431,6 @@
{ "logsigexit", CTLTYPE_INT }, \
{ "iov_max", CTLTYPE_INT }, \
{ "hostuuid", CTLTYPE_STRING }, \
- { "usrsysshm", CTLTYPE_INT }, \
}
/*
==== //depot/projects/soc2007/jbr-syscall/src/sys/vm/vm_map.c#5 (text+ko) ====
@@ -2987,49 +2987,18 @@
* 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 *addr, vm_size_t size)
{
int error = 0;
- vm_offset_t osize;
- vm_map_entry_t new_entry, prev_entry;
- rlim_t vmemlim;
- PROC_LOCK(curthread->td_proc);
- vmemlim = lim_cur(curthread->td_proc, RLIMIT_VMEM);
- PROC_UNLOCK(curthread->td_proc);
+ size = round_page(size);
- vm_map_lock(map);
-
- /* if address is already mapped unlock and return with error */
- if (vm_map_lookup_entry(map, addr, &prev_entry)) {
- vm_map_unlock(map);
- return (KERN_NO_SPACE);
- }
+ *addr = round_page((vm_offset_t)
+ curthread->td_proc->p_vmspace->vm_daddr);
- osize = addr + round_page(size);
+/* error = vm_map_find(map, NULL, 0, addr, size, TRUE, VM_PROT_NONE, */
+/* VM_PROT_ALL, 0); */
- /* check that we are within vmlimit */
- if (map->size + osize > vmemlim) {
- vm_map_unlock(map);
- return (KERN_NO_SPACE);
- }
-
- error = vm_map_insert(map, NULL, 0, addr, osize,
- VM_PROT_EXECUTE, VM_PROT_ALL, MAP_NOFAULT);
-
- if (error) {
- if (prev_entry != &map->header)
- vm_map_clip_end(map, prev_entry, addr);
-
- new_entry = prev_entry->next;
-
- if (new_entry->end != osize || new_entry->start != addr)
- panic("Bad entry start/end for new sysshm");
-
- new_entry->avail_ssize = round_page(size) - round_page(size);
- }
-
- vm_map_unlock(map);
return (error);
}
==== //depot/projects/soc2007/jbr-syscall/src/sys/vm/vm_map.h#4 (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 *, 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