Re: [PATCH 23/35] x86/fpu: Add helpers for modifying supervisor xstate

From: Edgecombe, Rick P
Date: Wed Feb 09 2022 - 14:55:43 EST


On Tue, 2022-02-08 at 09:51 +0100, Thomas Gleixner wrote:
> I like the approach in principle, but you still expose the xstate
> internals via the void pointer. It's just a question of time that
> this
> is type casted and abused in interesting ways.

Thanks for taking a look. I have to say though, these changes are
making me scratch my head a bit. Should we really design around callers
digging into mysterious pointers with magic offsets instead of using
easy helpers full of warnings about pitfalls? It should look odd in a
code review too I would think.

>
> Something like the below untested (on top of the whole series)
> preserves
> the encapsulation and reduces the code at the call sites.
>
>
It loses the ability to know which MSR write actually failed. It also
loses the ability to perform read/write logic under a single
transaction. The latter is not needed for this series, but this snippet
from the IBT series does it:

int ibt_get_clear_wait_endbr(void)
{
void *xstate;
u64 msr_val = 0;

if (!current->thread.shstk.ibt)
return 0;

xstate = start_update_xsave_msrs(XFEATURE_CET_USER);
if (!xsave_rdmsrl(xstate, MSR_IA32_U_CET, &msr_val))
xsave_wrmsrl(xstate, MSR_IA32_U_CET, msr_val &
~CET_WAIT_ENDBR);
end_update_xsave_msrs();

return msr_val & CET_WAIT_ENDBR;
}

I suppose we could just add a new function to do that logic in a single
transaction when the time comes. But inventing data structures to
describe work to be passed off to some executor always seems to break
at the first new requirement. What I usually wanted was a programming
language, and I already had it.

Not to bikeshed though, it will still get the job done.