MIPS: asm/tlb.h: Add UNIQUE_GUEST_ENTRYHI() macro
authorJames Hogan <[email protected]>
Tue, 14 Mar 2017 10:15:13 +0000 (10:15 +0000)
committerJames Hogan <[email protected]>
Tue, 28 Mar 2017 13:49:30 +0000 (14:49 +0100)
Add a distinct UNIQUE_GUEST_ENTRYHI() macro for invalidation of guest
TLB entries by KVM, using addresses in KSeg1 rather than KSeg0. This
avoids conflicts with guest invalidation routines when there is no EHINV
bit to mark the whole entry as invalid, avoiding guest machine check
exceptions on Cavium Octeon III.

Signed-off-by: James Hogan <[email protected]>
Acked-by: Ralf Baechle <[email protected]>
Cc: Paolo Bonzini <[email protected]>
Cc: "Radim Krčmář" <[email protected]>
Cc: [email protected]
Cc: [email protected]
arch/mips/include/asm/tlb.h

index dd179fd8acdac4a6e9f47257f79263f4a6432c46..939734de435908cf5a37d04dc904900943e72a93 100644 (file)
  */
 #define tlb_flush(tlb) flush_tlb_mm((tlb)->mm)
 
-#define UNIQUE_ENTRYHI(idx)                                            \
-               ((CKSEG0 + ((idx) << (PAGE_SHIFT + 1))) |               \
+#define _UNIQUE_ENTRYHI(base, idx)                                     \
+               (((base) + ((idx) << (PAGE_SHIFT + 1))) |               \
                 (cpu_has_tlbinv ? MIPS_ENTRYHI_EHINV : 0))
+#define UNIQUE_ENTRYHI(idx)            _UNIQUE_ENTRYHI(CKSEG0, idx)
+#define UNIQUE_GUEST_ENTRYHI(idx)      _UNIQUE_ENTRYHI(CKSEG1, idx)
 
 static inline unsigned int num_wired_entries(void)
 {