kernel - Fix umtx (pthread_mutex etc) race in kernel
* The umtx code could still race a fork despite the wakeup
due to certain access paths leading into umtx_sleep() only
issuing reads, thus not triggering a COW operation post-fork.
This results in a loss of the interlock.
* Fix the issue by having umtx_sleep() fetch the user data
with a read-modify-write instead of a read. It now essentially
does a lock xadd, adding $0 to the memory to force a write
fault if necessary.
* Fixes 'go' tests and probably other situations that can arise
when heavily threaded programs use fork/exec.
Reported-by: Tim Darby (+testing)