OSDN Git Service

KVM: x86/mmu: Replace UNMAPPED_GVA with INVALID_GPA for gva_to_gpa()
authorHou Wenlong <houwenlong.hwl@antgroup.com>
Fri, 1 Jul 2022 09:24:13 +0000 (17:24 +0800)
committerSean Christopherson <seanjc@google.com>
Tue, 12 Jul 2022 22:31:12 +0000 (22:31 +0000)
The result of gva_to_gpa() is physical address not virtual address,
it is odd that UNMAPPED_GVA macro is used as the result for physical
address. Replace UNMAPPED_GVA with INVALID_GPA and drop UNMAPPED_GVA
macro.

No functional change intended.

Signed-off-by: Hou Wenlong <houwenlong.hwl@antgroup.com>
Reviewed-by: Sean Christopherson <seanjc@google.com>
Link: https://lore.kernel.org/r/6104978956449467d3c68f1ad7f2c2f6d771d0ee.1656667239.git.houwenlong.hwl@antgroup.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/mmu/paging_tmpl.h
arch/x86/kvm/vmx/sgx.c
arch/x86/kvm/x86.c

index de5a149..dd6a26f 100644 (file)
 #define INVALID_PAGE (~(hpa_t)0)
 #define VALID_PAGE(x) ((x) != INVALID_PAGE)
 
-#define UNMAPPED_GVA (~(gpa_t)0)
 #define INVALID_GPA (~(gpa_t)0)
 
 /* KVM Hugepage definitions for x86 */
index 2448fa8..94bfd5f 100644 (file)
@@ -378,7 +378,7 @@ retry_walk:
                 * information to fix the exit_qualification or exit_info_1
                 * fields.
                 */
-               if (unlikely(real_gpa == UNMAPPED_GVA))
+               if (unlikely(real_gpa == INVALID_GPA))
                        return 0;
 
                host_addr = kvm_vcpu_gfn_to_hva_prot(vcpu, gpa_to_gfn(real_gpa),
@@ -431,7 +431,7 @@ retry_walk:
 #endif
 
        real_gpa = kvm_translate_gpa(vcpu, mmu, gfn_to_gpa(gfn), access, &walker->fault);
-       if (real_gpa == UNMAPPED_GVA)
+       if (real_gpa == INVALID_GPA)
                return 0;
 
        walker->gfn = real_gpa >> PAGE_SHIFT;
@@ -962,7 +962,7 @@ static gpa_t FNAME(gva_to_gpa)(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
                               struct x86_exception *exception)
 {
        struct guest_walker walker;
-       gpa_t gpa = UNMAPPED_GVA;
+       gpa_t gpa = INVALID_GPA;
        int r;
 
 #ifndef CONFIG_X86_64
index 35e7ec9..7ae8aa7 100644 (file)
@@ -79,7 +79,7 @@ static int sgx_gva_to_gpa(struct kvm_vcpu *vcpu, gva_t gva, bool write,
        else
                *gpa = kvm_mmu_gva_to_gpa_read(vcpu, gva, &ex);
 
-       if (*gpa == UNMAPPED_GVA) {
+       if (*gpa == INVALID_GPA) {
                kvm_inject_emulated_page_fault(vcpu, &ex);
                return -EFAULT;
        }
index 759bcc0..67dcaa6 100644 (file)
@@ -849,7 +849,7 @@ int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3)
         */
        real_gpa = kvm_translate_gpa(vcpu, mmu, gfn_to_gpa(pdpt_gfn),
                                     PFERR_USER_MASK | PFERR_WRITE_MASK, NULL);
-       if (real_gpa == UNMAPPED_GVA)
+       if (real_gpa == INVALID_GPA)
                return 0;
 
        /* Note the offset, PDPTRs are 32 byte aligned when using PAE paging. */
@@ -7072,7 +7072,7 @@ static int kvm_read_guest_virt_helper(gva_t addr, void *val, unsigned int bytes,
                unsigned toread = min(bytes, (unsigned)PAGE_SIZE - offset);
                int ret;
 
-               if (gpa == UNMAPPED_GVA)
+               if (gpa == INVALID_GPA)
                        return X86EMUL_PROPAGATE_FAULT;
                ret = kvm_vcpu_read_guest_page(vcpu, gpa >> PAGE_SHIFT, data,
                                               offset, toread);
@@ -7103,7 +7103,7 @@ static int kvm_fetch_guest_virt(struct x86_emulate_ctxt *ctxt,
        /* Inline kvm_read_guest_virt_helper for speed.  */
        gpa_t gpa = mmu->gva_to_gpa(vcpu, mmu, addr, access|PFERR_FETCH_MASK,
                                    exception);
-       if (unlikely(gpa == UNMAPPED_GVA))
+       if (unlikely(gpa == INVALID_GPA))
                return X86EMUL_PROPAGATE_FAULT;
 
        offset = addr & (PAGE_SIZE-1);
@@ -7173,7 +7173,7 @@ static int kvm_write_guest_virt_helper(gva_t addr, void *val, unsigned int bytes
                unsigned towrite = min(bytes, (unsigned)PAGE_SIZE - offset);
                int ret;
 
-               if (gpa == UNMAPPED_GVA)
+               if (gpa == INVALID_GPA)
                        return X86EMUL_PROPAGATE_FAULT;
                ret = kvm_vcpu_write_guest(vcpu, gpa, data, towrite);
                if (ret < 0) {
@@ -7284,7 +7284,7 @@ static int vcpu_mmio_gva_to_gpa(struct kvm_vcpu *vcpu, unsigned long gva,
 
        *gpa = mmu->gva_to_gpa(vcpu, mmu, gva, access, exception);
 
-       if (*gpa == UNMAPPED_GVA)
+       if (*gpa == INVALID_GPA)
                return -1;
 
        return vcpu_is_mmio_gpa(vcpu, gva, *gpa, write);
@@ -7521,7 +7521,7 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
 
        gpa = kvm_mmu_gva_to_gpa_write(vcpu, addr, NULL);
 
-       if (gpa == UNMAPPED_GVA ||
+       if (gpa == INVALID_GPA ||
            (gpa & PAGE_MASK) == APIC_DEFAULT_PHYS_BASE)
                goto emul_write;
 
@@ -8338,7 +8338,7 @@ static bool reexecute_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
                 * If the mapping is invalid in guest, let cpu retry
                 * it to generate fault.
                 */
-               if (gpa == UNMAPPED_GVA)
+               if (gpa == INVALID_GPA)
                        return true;
        }
 
@@ -11378,7 +11378,7 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
        gpa = kvm_mmu_gva_to_gpa_system(vcpu, vaddr, NULL);
        srcu_read_unlock(&vcpu->kvm->srcu, idx);
        tr->physical_address = gpa;
-       tr->valid = gpa != UNMAPPED_GVA;
+       tr->valid = gpa != INVALID_GPA;
        tr->writeable = 1;
        tr->usermode = 0;
 
@@ -12983,7 +12983,7 @@ void kvm_fixup_and_inject_pf_error(struct kvm_vcpu *vcpu, gva_t gva, u16 error_c
                (PFERR_WRITE_MASK | PFERR_FETCH_MASK | PFERR_USER_MASK);
 
        if (!(error_code & PFERR_PRESENT_MASK) ||
-           mmu->gva_to_gpa(vcpu, mmu, gva, access, &fault) != UNMAPPED_GVA) {
+           mmu->gva_to_gpa(vcpu, mmu, gva, access, &fault) != INVALID_GPA) {
                /*
                 * If vcpu->arch.walk_mmu->gva_to_gpa succeeded, the page
                 * tables probably do not match the TLB.  Just proceed