KVM: MIPS: Drop other CPU ASIDs on guest MMU changes
commit168e5ebbd63eaf2557b5e37be1afb8c143de2380
authorJames Hogan <james.hogan@imgtec.com>
Thu, 15 Sep 2016 16:20:06 +0000 (15 17:20 +0100)
committerJiri Slaby <jslaby@suse.cz>
Mon, 17 Oct 2016 07:46:19 +0000 (17 09:46 +0200)
treedbb91af39ede4608c9a5265ac703b8566da803f3
parent50b5e30e8111f88029dd0f6e922251f1839a1044
KVM: MIPS: Drop other CPU ASIDs on guest MMU changes

commit 91e4f1b6073dd680d86cdb7e42d7cccca9db39d8 upstream.

When a guest TLB entry is replaced by TLBWI or TLBWR, we only invalidate
TLB entries on the local CPU. This doesn't work correctly on an SMP host
when the guest is migrated to a different physical CPU, as it could pick
up stale TLB mappings from the last time the vCPU ran on that physical
CPU.

Therefore invalidate both user and kernel host ASIDs on other CPUs,
which will cause new ASIDs to be generated when it next runs on those
CPUs.

We're careful only to do this if the TLB entry was already valid, and
only for the kernel ASID where the virtual address it mapped is outside
of the guest user address range.

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: Jiri Slaby <jslaby@suse.cz>
arch/mips/kvm/kvm_mips_emul.c