From: Michael Jeanson Date: Tue, 11 Feb 2020 19:41:29 +0000 (-0500) Subject: fix: KVM: x86: Use gpa_t for cr2/gpa to fix TDP support on 32-bit (v5.6) X-Git-Tag: v2.11.2~7 X-Git-Url: http://git.lttng.org/?a=commitdiff_plain;h=175c0c3c2ee8aae7a1185f591988f02e0e3be103;hp=175c0c3c2ee8aae7a1185f591988f02e0e3be103;p=lttng-modules.git fix: KVM: x86: Use gpa_t for cr2/gpa to fix TDP support on 32-bit (v5.6) See upstream commit : commit 736c291c9f36b07f8889c61764c28edce20e715d Author: Sean Christopherson Date: Fri Dec 6 15:57:14 2019 -0800 KVM: x86: Use gpa_t for cr2/gpa to fix TDP support on 32-bit KVM Convert a plethora of parameters and variables in the MMU and page fault flows from type gva_t to gpa_t to properly handle TDP on 32-bit KVM. Thanks to PSE and PAE paging, 32-bit kernels can access 64-bit physical addresses. When TDP is enabled, the fault address is a guest physical address and thus can be a 64-bit value, even when both KVM and its guest are using 32-bit virtual addressing, e.g. VMX's VMCS.GUEST_PHYSICAL is a 64-bit field, not a natural width field. Using a gva_t for the fault address means KVM will incorrectly drop the upper 32-bits of the GPA. Ditto for gva_to_gpa() when it is used to translate L2 GPAs to L1 GPAs. Opportunistically rename variables and parameters to better reflect the dual address modes, e.g. use "cr2_or_gpa" for fault addresses and plain "addr" instead of "vaddr" when the address may be either a GVA or an L2 GPA. Similarly, use "gpa" in the nonpaging_page_fault() flows to avoid a confusing "gpa_t gva" declaration; this also sets the stage for a future patch to combing nonpaging_page_fault() and tdp_page_fault() with minimal churn. Sprinkle in a few comments to document flows where an address is known to be a GVA and thus can be safely truncated to a 32-bit value. Add WARNs in kvm_handle_page_fault() and FNAME(gva_to_gpa_nested)() to help document such cases and detect bugs. Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers ---