So I bisected a userspace corruption regression down to commit: commit a8e654f01cb725d0bfd741ebca1bf4c9337969cc Author: Nitin Gupta <nitin.m.gu...@oracle.com> Date: Wed Jan 31 16:18:09 2018 -0800 sparc64: update pmdp_invalidate() to return old pmd value
The transformation is basically from a set_pte_at() call into an atomic cmpxchg64() loop to set the pmd. The problem is that set_pmd_at() does more than just assign the pmd entry. It also does some accounting and also queues up a batch TLB flush entry. So the side effect of this change is that the TLB is never flushed for these changed PMDs, and thus the userland memory corruption I was seeing.