Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 8 Aug 2007 20:59:07 GMT
From:      Jesper Brix Rosenkilde <jbr@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 124925 for review
Message-ID:  <200708082059.l78Kx7jQ027821@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=124925

Change 124925 by jbr@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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200708082059.l78Kx7jQ027821>