On Wed, Nov 30, 2022 at 08:44:01PM +0000, Klemens Nanni wrote:
> 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?
Ping. No feedback except naddy's successful amd64 package bulk build.
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, \