The uvm_wxabort path within uvm_wxcheck() looks not MP-safe.
> On 31 Dec 2021, at 12:14, Klemens Nanni <k...@openbsd.org> wrote:
>
> Now that mpi has unlocked uvm's fault handler, we can unlock the mmap
> syscall to handle MAP_ANON without the big lock.
>
> sys_mmap() still protects the !MAP_ANON case, i.e. file based mappings,
> with the KERNEL_LOCK() itself, which is why unlocking the syscall will
> only change locking behaviour for anonymous mappings.
>
> A previous to unlock file based mappings was reverted, see the following
> from https://marc.info/?l=openbsd-tech&m=160155434212888&w=2 :
>
> commit 38802bc07455f2a4f8cdde272850a5eab5dfa6c8
> from: mpi <m...@openbsd.org>
> date: Wed Oct 7 12:26:20 2020 UTC
>
> Do not release the KERNEL_LOCK() when mmap(2)ing files.
>
> Previous attempt to unlock amap & anon exposed a race in vnode reference
> counting. So be conservative with the code paths that we're not fully
> moving
> out of the KERNEL_LOCK() to allow us to concentrate on one area at a
> time.
> ...
>
>
> So here's a first small step. I've been running with this for months
> on a few amd64, arm64 and sparc64 boxes without problems; they've been
> daily drivers and/or have been building releases and ports.
>
> Feedback? Objections? OK?
>
>
> Index: sys/kern/syscalls.master
> ===================================================================
> RCS file: /cvs/src/sys/kern/syscalls.master,v
> retrieving revision 1.221
> diff -u -p -r1.221 syscalls.master
> --- sys/kern/syscalls.master 23 Dec 2021 18:50:31 -0000 1.221
> +++ sys/kern/syscalls.master 31 Dec 2021 09:14:00 -0000
> @@ -126,7 +126,7 @@
> struct sigaction *osa); }
> 47 STD NOLOCK { gid_t sys_getgid(void); }
> 48 STD NOLOCK { int sys_sigprocmask(int how, sigset_t mask); }
> -49 STD { void *sys_mmap(void *addr, size_t len, int prot, \
> +49 STD NOLOCK { void *sys_mmap(void *addr, size_t len, int prot, \
> int flags, int fd, off_t pos); }
> 50 STD { int sys_setlogin(const char *namebuf); }
> #ifdef ACCOUNTING
>