Re: [PATCH v5 21/28] x86/fpu/amx: Initialize child's AMX state

From: Andy Lutomirski
Date: Mon May 24 2021 - 23:45:03 EST




On Mon, May 24, 2021, at 11:21 AM, Len Brown wrote:
> On Mon, May 24, 2021 at 2:14 PM Andy Lutomirski <luto@xxxxxxxxxx> wrote:
>
> > What does VOLATILE mean in this context?
>
> Volatile means caller-saved.

Just like every other extended math register except some XMMs on Windows. (Thanks you so, so much, Microsoft, for screwing this up, and thank you Intel for indulging Microsoft.)

>
> Volatile registers can not be used for globals, static, or for
> parameter passing.
>
> ie. By the time the callee is running, they must be assumed to be invalid.

Callees can’t assume anything about any of the registers unless explicitly specified. TILE is no different from RBP or XMM in this regard.

>
> This means that any routine, including the target of a system call,
> such as fork/clone, can't assume that any data exists in these
> registers.
>

If we actually believe this, then we should clear xmm, ymm, zmm, etc on every system call. Barring that, let’s come up with reasonable semantics, document it, and implement it.