Various fixes and improvements to xsave image size calculations.
* Skip redundant xcr0 writes
* Don't reconfigure xcr0 to query hardware when we can trivially calculate
the answer ourselves.
* Fix latent bug with CPUID.0xD[0].ebx.
* Rework CPUID.0xD[1].ebx to behave correctly when supervisor states are in
use.
Results from AMD Milan with some prototype CET handling, as well as the debug
cross checks, in place:
(d1) xstates 0x0001, uncomp 0x240, comp 0x240
(d1) xstates 0x0003, uncomp 0x240, comp 0x240
(d1) xstates 0x0007, uncomp 0x340, comp 0x340
(d1) xstates 0x0207, uncomp 0x988, comp 0x348
(d1) xstates 0x0a07, uncomp 0x988, comp 0x358
(d1) xstates 0x1a07, uncomp 0x988, comp 0x370
Andrew Cooper (5):
x86/xstate: Elide redundant writes in set_xcr0()
x86/xstate: Rename _xstate_ctxt_size() to hw_uncompressed_size()
x86/xstate: Rework xstate_ctxt_size() as xstate_uncompressed_size()
x86/cpuid: Simplify recalculate_xstate()
x86/cpuid: Fix handling of xsave dynamic leaves
xen/arch/x86/cpuid.c | 75 +++++++++------------------
xen/arch/x86/domain.c | 4 +-
xen/arch/x86/domctl.c | 2 +-
xen/arch/x86/hvm/hvm.c | 2 +-
xen/arch/x86/xstate.c | 117 +++++++++++++++++++++++++++++++++++--------
xen/include/asm-x86/xstate.h | 3 +-
6 files changed, 126 insertions(+), 77 deletions(-)
--
2.11.0