Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Jan 2020 16:45:10 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r357052 - head/sys/vm
Message-ID:  <202001231645.00NGjArH086143@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Thu Jan 23 16:45:10 2020
New Revision: 357052
URL: https://svnweb.freebsd.org/changeset/base/357052

Log:
  vm_map_submap(): Avoid unnecessary clipping.
  
  A submap can only be created from an entry spanning the entire request
  range.  In particular, if vm_map_lookup_entry() returns false or the
  returned entry contains "end".
  
  Since the only use of submaps in FreeBSD is for the static pipe and
  execve argument KVA maps, this has no functional effect.
  
  Github PR:	https://github.com/freebsd/freebsd/pull/420
  Submitted by:	Wuyang Chung <wuyang.chung1@gmail.com> (original)
  Reviewed by:	dougm, kib
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D23299

Modified:
  head/sys/vm/vm_map.c

Modified: head/sys/vm/vm_map.c
==============================================================================
--- head/sys/vm/vm_map.c	Thu Jan 23 16:36:58 2020	(r357051)
+++ head/sys/vm/vm_map.c	Thu Jan 23 16:45:10 2020	(r357052)
@@ -2477,19 +2477,12 @@ vm_map_submap(
 	vm_map_unlock(submap);
 
 	vm_map_lock(map);
-
 	VM_MAP_RANGE_CHECK(map, start, end);
-
-	if (vm_map_lookup_entry(map, start, &entry)) {
+	if (vm_map_lookup_entry(map, start, &entry) && entry->end >= end &&
+	    (entry->eflags & MAP_ENTRY_COW) == 0 &&
+	    entry->object.vm_object == NULL) {
 		vm_map_clip_start(map, entry, start);
-	} else
-		entry = vm_map_entry_succ(entry);
-
-	vm_map_clip_end(map, entry, end);
-
-	if ((entry->start == start) && (entry->end == end) &&
-	    ((entry->eflags & MAP_ENTRY_COW) == 0) &&
-	    (entry->object.vm_object == NULL)) {
+		vm_map_clip_end(map, entry, end);
 		entry->object.sub_map = submap;
 		entry->eflags |= MAP_ENTRY_IS_SUB_MAP;
 		result = KERN_SUCCESS;



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