Re: [PATCH v3 6/7] x86/alternatives: use temporary mm for text poking

From: Peter Zijlstra
Date: Mon Nov 05 2018 - 08:30:57 EST


On Fri, Nov 02, 2018 at 04:29:45PM -0700, Nadav Amit wrote:
> + unuse_temporary_mm(prev);
> +
> + pte_unmap_unlock(ptep, ptl);

That; that does kunmap_atomic() on 32bit.

I've been thinking that the whole kmap_atomic thing on x86_32 is
terminally broken, and with that most of x86_32 is.

kmap_atomic does the per-cpu fixmap pte fun-and-games we're here saying
is broken. Yes, only the one CPU will (explicitly) use those fixmap PTEs
and thus the local invalidate _should_ work. However nothing prohibits
speculation on another CPU from using our fixmap addresses. Which can
lead to the remote CPU populating its TLBs for our fixmap entry.

And, as we've found, there are AMD parts that #MC when there are
mis-matched TLB entries.

So what do we do? mark x86_32 SMP broken?