MIPS: KVM: Simplify even/odd TLB handling
authorJames Hogan <james.hogan@imgtec.com>
Thu, 9 Jun 2016 13:19:12 +0000 (14:19 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 14 Jun 2016 09:02:43 +0000 (11:02 +0200)
When handling TLB faults in the guest KSeg0 region, a pair of physical
addresses are read from the guest physical address map. However that
process is rather convoluted with an if/then/else statement. Simplify it
to just clear the lowest bit for the even entry and set the lowest bit
for the odd entry.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/mips/kvm/mmu.c

index d5ada83ec55cf4cb9ca06de797dd5b8d6d58370a..9924c1d253a7c655ba0e41928ac2c9126ac4cb21 100644 (file)
@@ -87,7 +87,6 @@ int kvm_mips_handle_kseg0_tlb_fault(unsigned long badvaddr,
        kvm_pfn_t pfn0, pfn1;
        unsigned long vaddr = 0;
        unsigned long entryhi = 0, entrylo0 = 0, entrylo1 = 0;
-       int even;
        struct kvm *kvm = vcpu->kvm;
        const int flush_dcache_mask = 0;
        int ret;
@@ -105,7 +104,6 @@ int kvm_mips_handle_kseg0_tlb_fault(unsigned long badvaddr,
                kvm_mips_dump_host_tlbs();
                return -1;
        }
-       even = !(gfn & 0x1);
        vaddr = badvaddr & (PAGE_MASK << 1);
 
        if (kvm_mips_map_page(vcpu->kvm, gfn) < 0)
@@ -114,13 +112,8 @@ int kvm_mips_handle_kseg0_tlb_fault(unsigned long badvaddr,
        if (kvm_mips_map_page(vcpu->kvm, gfn ^ 0x1) < 0)
                return -1;
 
-       if (even) {
-               pfn0 = kvm->arch.guest_pmap[gfn];
-               pfn1 = kvm->arch.guest_pmap[gfn ^ 0x1];
-       } else {
-               pfn0 = kvm->arch.guest_pmap[gfn ^ 0x1];
-               pfn1 = kvm->arch.guest_pmap[gfn];
-       }
+       pfn0 = kvm->arch.guest_pmap[gfn & ~0x1];
+       pfn1 = kvm->arch.guest_pmap[gfn | 0x1];
 
        entrylo0 = mips3_paddr_to_tlbpfn(pfn0 << PAGE_SHIFT) | (0x3 << 3) |
                   (1 << 2) | (0x1 << 1);