OpenCloudOS-Kernel/arch/mips/kvm
James Hogan a700434d80 MIPS: KVM: Reset CP0_PageMask during host TLB flush
KVM sometimes flushes host TLB entries, reading each one to check if it
corresponds to a guest KSeg0 address. In the absence of EntryHi.EHInv
bits to invalidate the whole entry, the entries will be set to unique
virtual addresses in KSeg0 (which is not TLB mapped), spaced 2*PAGE_SIZE
apart.

The TLB read however will clobber the CP0_PageMask register with
whatever page size that TLB entry had, and that same page size will be
written back into the TLB entry along with the unique address.

This would cause breakage when transparent huge pages are enabled on
64-bit host kernels, since huge page entries will overlap other nearby
entries when separated by only 2*PAGE_SIZE, causing a machine check
exception.

Fix this by restoring the old CP0_PageMask value (which should be set to
the normal page size) after reading the TLB entry if we're going to go
ahead and invalidate it.

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>
2016-08-01 18:42:27 +02:00
..
00README.txt KVM/MIPS32: Release notes and KVM module Makefile 2013-05-08 03:55:35 +02:00
Kconfig MIPS; KVM: Convert exception entry to uasm 2016-07-05 16:08:46 +02:00
Makefile MIPS; KVM: Convert exception entry to uasm 2016-07-05 16:08:46 +02:00
callback.c MIPS: KVM: Convert EXPORT_SYMBOL to _GPL 2016-01-24 03:13:24 +01:00
commpage.c MIPS: KVM: Move commpage so 0x0 is unmapped 2016-06-15 23:58:36 +02:00
commpage.h MIPS: KVM: Rename files to remove the prefix "kvm_" and "kvm_mips_" 2014-06-30 16:52:03 +02:00
dyntrans.c MIPS: KVM: Fix ptr->int cast via KVM_GUEST_KSEGX() 2016-08-01 18:42:26 +02:00
emulate.c MIPS: KVM: Sign extend MFC0/RDHWR results 2016-08-01 18:42:25 +02:00
entry.c MIPS: KVM: Use 64-bit CP0_EBase when appropriate 2016-08-01 18:42:24 +02:00
fpu.S MIPS: KVM: Fix fpu.S misassembly with r6 2016-07-05 16:09:11 +02:00
interrupt.c MIPS: KVM: Convert code to kernel sized types 2016-06-14 11:02:41 +02:00
interrupt.h MIPS; KVM: Convert exception entry to uasm 2016-07-05 16:08:46 +02:00
mips.c MIPS: KVM: Fail if ebase doesn't fit in CP0_EBase 2016-08-01 18:42:24 +02:00
mmu.c MIPS: KVM: Use kmap instead of CKSEG0ADDR() 2016-08-01 18:42:22 +02:00
msa.S MIPS: KVM: Add base guest MSA support 2015-03-27 21:25:19 +00:00
stats.c MIPS: KVM: Clean up kvm_exit trace event 2016-06-14 11:16:23 +02:00
tlb.c MIPS: KVM: Reset CP0_PageMask during host TLB flush 2016-08-01 18:42:27 +02:00
trace.h MIPS: KVM: Combine entry trace events into class 2016-06-23 19:17:30 +02:00
trap_emul.c MIPS: KVM: Emulate generic QEMU machine on r6 T&E 2016-07-05 16:09:20 +02:00