[RFC PATCH v2 00/10] Virtualize architectural LBRs

Tu Dinh posted 10 patches 10 months ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20250102084413.102-1-ngoc-tu.dinh@vates.tech
tools/libs/light/libxl_cpuid.c              |   3 +
tools/misc/xen-cpuid.c                      |   3 +
tools/tests/x86_emulator/x86-emulate.h      |   2 +
xen/arch/x86/cpu-policy.c                   |  28 +++
xen/arch/x86/cpu/common.c                   |   7 +
xen/arch/x86/domain.c                       |   7 +
xen/arch/x86/hvm/emulate.c                  |  11 +
xen/arch/x86/hvm/hvm.c                      |  70 +++++-
xen/arch/x86/hvm/vmx/vmcs.c                 |  11 +-
xen/arch/x86/hvm/vmx/vmx.c                  | 203 +++++++++++++--
xen/arch/x86/include/asm/cpufeature.h       |   5 +
xen/arch/x86/include/asm/domain.h           |   1 +
xen/arch/x86/include/asm/hvm/hvm.h          |   3 +
xen/arch/x86/include/asm/hvm/vmx/vmcs.h     |  11 +
xen/arch/x86/include/asm/msr-index.h        |  12 +
xen/arch/x86/include/asm/msr.h              |   5 +
xen/arch/x86/include/asm/xstate.h           |  22 +-
xen/arch/x86/msr.c                          |  89 ++++++-
xen/arch/x86/x86_emulate/0fc7.c             | 260 ++++++++++++++------
xen/arch/x86/x86_emulate/blk.c              | 142 +++++++++++
xen/arch/x86/x86_emulate/private.h          |   8 +
xen/arch/x86/x86_emulate/util-xen.c         |  14 ++
xen/arch/x86/x86_emulate/x86_emulate.c      |  19 ++
xen/arch/x86/x86_emulate/x86_emulate.h      |  33 +++
xen/arch/x86/xstate.c                       |  83 +++++--
xen/include/public/arch-x86/cpufeatureset.h |  28 ++-
xen/include/public/arch-x86/hvm/save.h      |   4 +-
xen/include/xen/lib/x86/cpu-policy.h        |  51 +++-
xen/lib/x86/cpuid.c                         |   6 +
29 files changed, 1013 insertions(+), 128 deletions(-)
[RFC PATCH v2 00/10] Virtualize architectural LBRs
Posted by Tu Dinh 10 months ago
Intel model-specific last branch records (LBRs) were replaced by
architectural LBRs (see Chapter 20 of Intel SDM volume 3B). This
patchset implements virtual LBRs for HVM guests using Intel's "load
guest IA32_LBR_CTL" and "clear IA32_LBR_CTL" VMX controls. It
dynamically intercepts accesses to LBR state to translate between linear
and effective IP depending on the current host CPU core type.

The v2 patchset implements LBR state support in Xen's xstate handling.
Additionally, it adds XSAVES/XRSTORS support to the x86 emulator.
Finally, migration is handled by adding a new HVM save code
CPU_XSAVES_CODE containing a vCPU's compacted xstates as written by
XSAVES.

I'm looking for feedback on emulator handling of XSAVES/XRSTORS,
especially concerning FPU bits as it's not clear to me what should be
done in these cases.

Tu Dinh (10):
  x86: Add architectural LBR definitions
  x86: Define arch LBR feature bits
  tools: Add arch LBR feature bits
  x86: Calculate arch LBR CPUID policies
  x86: Keep a copy of XSAVE area size
  x86: Enable XSTATE save/restore for arch LBR
  x86/hvm: Don't count XSS bits in XSAVE size
  x86/emulate: Implement XSAVES/XRSTORS for arch LBR
  x86/vmx: Implement arch LBR
  x86/hvm: Enable XSAVES LBR save/restore

 tools/libs/light/libxl_cpuid.c              |   3 +
 tools/misc/xen-cpuid.c                      |   3 +
 tools/tests/x86_emulator/x86-emulate.h      |   2 +
 xen/arch/x86/cpu-policy.c                   |  28 +++
 xen/arch/x86/cpu/common.c                   |   7 +
 xen/arch/x86/domain.c                       |   7 +
 xen/arch/x86/hvm/emulate.c                  |  11 +
 xen/arch/x86/hvm/hvm.c                      |  70 +++++-
 xen/arch/x86/hvm/vmx/vmcs.c                 |  11 +-
 xen/arch/x86/hvm/vmx/vmx.c                  | 203 +++++++++++++--
 xen/arch/x86/include/asm/cpufeature.h       |   5 +
 xen/arch/x86/include/asm/domain.h           |   1 +
 xen/arch/x86/include/asm/hvm/hvm.h          |   3 +
 xen/arch/x86/include/asm/hvm/vmx/vmcs.h     |  11 +
 xen/arch/x86/include/asm/msr-index.h        |  12 +
 xen/arch/x86/include/asm/msr.h              |   5 +
 xen/arch/x86/include/asm/xstate.h           |  22 +-
 xen/arch/x86/msr.c                          |  89 ++++++-
 xen/arch/x86/x86_emulate/0fc7.c             | 260 ++++++++++++++------
 xen/arch/x86/x86_emulate/blk.c              | 142 +++++++++++
 xen/arch/x86/x86_emulate/private.h          |   8 +
 xen/arch/x86/x86_emulate/util-xen.c         |  14 ++
 xen/arch/x86/x86_emulate/x86_emulate.c      |  19 ++
 xen/arch/x86/x86_emulate/x86_emulate.h      |  33 +++
 xen/arch/x86/xstate.c                       |  83 +++++--
 xen/include/public/arch-x86/cpufeatureset.h |  28 ++-
 xen/include/public/arch-x86/hvm/save.h      |   4 +-
 xen/include/xen/lib/x86/cpu-policy.h        |  51 +++-
 xen/lib/x86/cpuid.c                         |   6 +
 29 files changed, 1013 insertions(+), 128 deletions(-)

-- 
2.43.0



Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech