diff options
| author | Yosry Ahmed <yosry@kernel.org> | 2026-07-28 17:42:22 +0000 |
|---|---|---|
| committer | Sean Christopherson <seanjc@google.com> | 2026-07-29 05:45:26 -0700 |
| commit | 546455d9c724bd2c927e4902f240a6ceb66ca5e4 (patch) | |
| tree | e5b8bb97c55cc4bae787de1a2d8c3c2cee02d0a5 /tools/perf/scripts/python | |
| parent | 53f4ad49d76b516f5d235ea10b727b2d548b0218 (diff) | |
KVM: selftests: Rework GPR registers switching for SVM (and fix offsets)
The assembly code defined by SAVE_GPR_C uses the wrong offsets for some
registers in guest_regs. For example, the offset of RCX should be 0x08
not 0x10. Also, the last offset in the struct (R15) is 0x78, not 0x80,
so the code actually saves and restore beyond the end of gpr64_regs.
Eliminate hardcoded offsets by dynamically generating offsets using
offset_of() and using macros to pass the offsets to assembly as asm
constraints.
To avoid register conflicts in inline assembly (since almost all GPRs are
context-switched), access guest_regs via absolute symbol addressing
(guest_regs + offset) rather than using a base register which could
get overwritten mid-assembly.
While at it, rename SAVE_GPR_C and LOAD_GPR_C to a single macro,
SVM_SWITCH_GPRS_ASM, rename gpr64_regs to guest_regs, and expose it in
processor.h (in preparation for reusing it for VMX).
Assisted-by: Gemini:Gemini-Next
Signed-off-by: Yosry Ahmed <yosry@kernel.org>
Link: https://patch.msgid.link/20260728174232.2423257-4-yosry@kernel.org
Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to 'tools/perf/scripts/python')
0 files changed, 0 insertions, 0 deletions
