summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohamed Mediouni <mohamed@unpredictable.fr>2026-08-12 10:28:12 +0200
committerMichael Tokarev <mjt@tls.msk.ru>2026-08-24 10:51:38 +0300
commita4049cf86901cfd05a214e244d78f11032be12ee (patch)
tree8d2c401b7d57e38f9d9f1bce4b83b85b06942298
parent5c16e7ad5dc8d262ad522145a29c8d9dace48308 (diff)
downloadqemu-a4049cf86901cfd05a214e244d78f11032be12ee.tar.gz
qemu-a4049cf86901cfd05a214e244d78f11032be12ee.zip
whpx: i386: synchronise PAT too
https://github.com/cmspam/winq-emu hints that this might be wanted for some use-cases and it's a step towards full state sync: > Linux uses PAT to mark virtio-gpu / Venus shared memory as > Write-Combining. Previously the partition's PAT was not > synchronised with the guest, so the guest's MTRR/PAT cache-type > computation could fall back to UC for memory that should be WC. Signed-off-by: Mohamed Mediouni <mohamed@unpredictable.fr> Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Link: https://lore.kernel.org/r/20260812082814.27217-5-mohamed@unpredictable.fr Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> (cherry picked from commit 7b0516912e44e73ba0859e91aed848d5be26f05e) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
-rw-r--r--target/i386/whpx/whpx-all.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c
index 1800ba8eb1..2739a80da3 100644
--- a/target/i386/whpx/whpx-all.c
+++ b/target/i386/whpx/whpx-all.c
@@ -115,7 +115,7 @@ static const WHV_REGISTER_NAME whpx_register_names[] = {
#ifdef TARGET_X86_64
WHvX64RegisterKernelGsBase,
#endif
- /* WHvX64RegisterPat, */
+ WHvX64RegisterPat,
WHvX64RegisterSysenterCs,
WHvX64RegisterSysenterEip,
WHvX64RegisterSysenterEsp,
@@ -624,9 +624,8 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel level)
assert(whpx_register_names[idx] == WHvX64RegisterKernelGsBase);
vcxt.values[idx++].Reg64 = env->kernelgsbase;
#endif
-
- /* WHvX64RegisterPat - Skipped */
-
+ assert(whpx_register_names[idx] == WHvX64RegisterPat);
+ vcxt.values[idx++].Reg64 = env->pat;
assert(whpx_register_names[idx] == WHvX64RegisterSysenterCs);
vcxt.values[idx++].Reg64 = env->sysenter_cs;
assert(whpx_register_names[idx] == WHvX64RegisterSysenterEip);
@@ -962,9 +961,8 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel level)
assert(whpx_register_names[idx] == WHvX64RegisterKernelGsBase);
env->kernelgsbase = vcxt.values[idx++].Reg64;
#endif
-
- /* WHvX64RegisterPat - Skipped */
-
+ assert(whpx_register_names[idx] == WHvX64RegisterPat);
+ env->pat = vcxt.values[idx++].Reg64;
assert(whpx_register_names[idx] == WHvX64RegisterSysenterCs);
env->sysenter_cs = vcxt.values[idx++].Reg64;
assert(whpx_register_names[idx] == WHvX64RegisterSysenterEip);