struct uvm_map's .addr is protected by the map's lock and .{min,max}_offset
are immutable.
uvm_map_inherit() locks the VM map upon entry, sets the desired inheritance
mode for the given address range (validated outside the lock) and unlocks
the map itself.
fork(2), i.e. uvm_mapent_forkcopy(), first locks both old and new maps and
then copies entries over as per the inheritance type.
futex(2), another user of struct vm_map_entry's .inheritance member, also
locks the map accordingly.
I don't see a reason to grab the kernel lock here anymore.
This has been running fine through regress and daily usage on my X230 driver
for months, incl. selected ports builds.
Feedback? Objection? Tests? OK?
Index: syscalls.master
===================================================================
RCS file: /cvs/src/sys/kern/syscalls.master,v
retrieving revision 1.237
diff -u -p -r1.237 syscalls.master
--- syscalls.master 30 Nov 2022 10:20:37 -0000 1.237
+++ syscalls.master 30 Nov 2022 20:42:48 -0000
@@ -445,7 +445,7 @@
247 UNIMPL
248 UNIMPL
249 UNIMPL
-250 STD { int sys_minherit(void *addr, size_t len, \
+250 STD NOLOCK { int sys_minherit(void *addr, size_t len, \
int inherit); }
251 OBSOL rfork
252 STD { int sys_poll(struct pollfd *fds, \