Module Name:    src
Committed By:   reinoud
Date:           Thu Dec 22 13:12:50 UTC 2011

Modified Files:
        src/sys/uvm: uvm_extern.h uvm_map.c uvm_mmap.c

Log Message:
Redo uvm_map_setattr() to never fail and remove the possible panic. The
possibility of failure was a C&P error.


To generate a diff of this commit:
cvs rdiff -u -r1.177 -r1.178 src/sys/uvm/uvm_extern.h
cvs rdiff -u -r1.308 -r1.309 src/sys/uvm/uvm_map.c
cvs rdiff -u -r1.141 -r1.142 src/sys/uvm/uvm_mmap.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/uvm/uvm_extern.h
diff -u src/sys/uvm/uvm_extern.h:1.177 src/sys/uvm/uvm_extern.h:1.178
--- src/sys/uvm/uvm_extern.h:1.177	Tue Dec 20 15:39:35 2011
+++ src/sys/uvm/uvm_extern.h	Thu Dec 22 13:12:50 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_extern.h,v 1.177 2011/12/20 15:39:35 reinoud Exp $	*/
+/*	$NetBSD: uvm_extern.h,v 1.178 2011/12/22 13:12:50 reinoud Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -680,7 +680,7 @@ void			uvmspace_unshare(struct lwp *);
 
 void			uvm_whatis(uintptr_t, void (*)(const char *, ...));
 
-bool			uvm_map_setattr(struct vm_map *, vaddr_t,
+void			uvm_map_setattr(struct vm_map *, vaddr_t,
 			    vaddr_t, uint32_t);
 bool			uvm_map_checkattr(struct vm_map *, vaddr_t,
 			    vaddr_t, uint32_t);

Index: src/sys/uvm/uvm_map.c
diff -u src/sys/uvm/uvm_map.c:1.308 src/sys/uvm/uvm_map.c:1.309
--- src/sys/uvm/uvm_map.c:1.308	Tue Dec 20 15:39:35 2011
+++ src/sys/uvm/uvm_map.c	Thu Dec 22 13:12:50 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_map.c,v 1.308 2011/12/20 15:39:35 reinoud Exp $	*/
+/*	$NetBSD: uvm_map.c,v 1.309 2011/12/22 13:12:50 reinoud Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.308 2011/12/20 15:39:35 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.309 2011/12/22 13:12:50 reinoud Exp $");
 
 #include "opt_ddb.h"
 #include "opt_uvmhist.h"
@@ -4127,38 +4127,28 @@ uvm_map_checkprot(struct vm_map *map, va
  * => map must be read or write locked by caller.
  */
 
-bool
+void
 uvm_map_setattr(struct vm_map *map, vaddr_t start, vaddr_t end,
     uint32_t map_attrib)
 {
 	struct vm_map_entry *entry;
 	struct vm_map_entry *tmp_entry;
 
-	if (!uvm_map_lookup_entry(map, start, &tmp_entry)) {
-		return (false);
-	}
+	/* safety */
+	if (!uvm_map_lookup_entry(map, start, &tmp_entry))
+		return;
 	entry = tmp_entry;
 	while (start < end) {
-		if (entry == &map->header) {
-			return (false);
-		}
-
-		/*
-		 * no holes allowed
-		 */
-
-		if (start < entry->start) {
-			return (false);
-		}
-
 		/* set attributes associated with entry */
-
 		entry->map_attrib = map_attrib;
 
+		/* empty one */
+		if (entry == &map->header)
+			return;
+
 		start = entry->end;
 		entry = entry->next;
 	}
-	return (true);
 }
 
 /*

Index: src/sys/uvm/uvm_mmap.c
diff -u src/sys/uvm/uvm_mmap.c:1.141 src/sys/uvm/uvm_mmap.c:1.142
--- src/sys/uvm/uvm_mmap.c:1.141	Tue Dec 20 19:49:36 2011
+++ src/sys/uvm/uvm_mmap.c	Thu Dec 22 13:12:50 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_mmap.c,v 1.141 2011/12/20 19:49:36 reinoud Exp $	*/
+/*	$NetBSD: uvm_mmap.c,v 1.142 2011/12/22 13:12:50 reinoud Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.141 2011/12/20 19:49:36 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_mmap.c,v 1.142 2011/12/22 13:12:50 reinoud Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_pax.h"
@@ -554,10 +554,9 @@ sys_mmap(struct lwp *l, const struct sys
 	 */
 	if (error == 0) {
 		if (flags & MAP_ATTRIB_MASK) {
-			if (!uvm_map_setattr(&p->p_vmspace->vm_map,
+			uvm_map_setattr(&p->p_vmspace->vm_map,
 					addr, addr + size,
-					flags & MAP_ATTRIB_MASK))
-				panic("uvm_setattr failed?");
+					flags & MAP_ATTRIB_MASK);
 		}
 		/* record if we need optimization for system call checking */
 		if ((flags & MAP_NOSYSCALLS) &&
@@ -567,7 +566,6 @@ sys_mmap(struct lwp *l, const struct sys
 			mutex_exit(p->p_lock);
 		}
 	}
-
      	if (fp != NULL)
 		fd_putfile(fd);
 

Reply via email to