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.chu...@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;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to