svn commit: r355048 - stable/12/sys/vm
Doug Moore
dougm at FreeBSD.org
Sun Nov 24 06:46:49 UTC 2019
Author: dougm
Date: Sun Nov 24 06:46:49 2019
New Revision: 355048
URL: https://svnweb.freebsd.org/changeset/base/355048
Log:
MFC r354785
The loop in vm_map_protect that verifies that all transition map
entries are stabilized, repeatedly verifies the same entry. Check each
entry in turn.
Modified:
stable/12/sys/vm/vm_map.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/vm/vm_map.c
==============================================================================
--- stable/12/sys/vm/vm_map.c Sun Nov 24 06:43:03 2019 (r355047)
+++ stable/12/sys/vm/vm_map.c Sun Nov 24 06:46:49 2019 (r355048)
@@ -2496,17 +2496,16 @@ again:
vm_map_unlock(map);
return (KERN_PROTECTION_FAILURE);
}
- if ((entry->eflags & MAP_ENTRY_IN_TRANSITION) != 0)
- in_tran = entry;
+ if ((current->eflags & MAP_ENTRY_IN_TRANSITION) != 0)
+ in_tran = current;
}
/*
- * Postpone the operation until all in transition map entries
- * are stabilized. In-transition entry might already have its
- * pages wired and wired_count incremented, but
- * MAP_ENTRY_USER_WIRED flag not yet set, and visible to other
- * threads because the map lock is dropped. In this case we
- * would miss our call to vm_fault_copy_entry().
+ * Postpone the operation until all in-transition map entries have
+ * stabilized. An in-transition entry might already have its pages
+ * wired and wired_count incremented, but not yet have its
+ * MAP_ENTRY_USER_WIRED flag set. In which case, we would fail to call
+ * vm_fault_copy_entry() in the final loop below.
*/
if (in_tran != NULL) {
in_tran->eflags |= MAP_ENTRY_NEEDS_WAKEUP;
More information about the svn-src-stable-12
mailing list