diff options
author | James Hogan <james.hogan@imgtec.com> | 2017-03-14 10:25:50 +0000 |
---|---|---|
committer | James Hogan <james.hogan@imgtec.com> | 2017-03-28 15:36:20 +0100 |
commit | 1f48f9be4df2fd82e3bea0c4d452299c9b3df792 (patch) | |
tree | 540ecd97549d524fbd0bbb69bcfda445b8939698 /arch/mips/kvm | |
parent | 3ba731daf09a2dd9515713e2428ef859bb50957b (diff) | |
download | linux-1f48f9be4df2fd82e3bea0c4d452299c9b3df792.tar.gz linux-1f48f9be4df2fd82e3bea0c4d452299c9b3df792.tar.bz2 linux-1f48f9be4df2fd82e3bea0c4d452299c9b3df792.zip |
KVM: MIPS/VZ: Handle Octeon III guest.PRid register
Octeon III implements a read-only guest CP0_PRid register, so add cases
to the KVM register access API for Octeon to ensure the correct value is
read and writes are ignored.
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: David Daney <david.daney@cavium.com>
Cc: Andreas Herrmann <andreas.herrmann@caviumnetworks.com>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
Diffstat (limited to 'arch/mips/kvm')
-rw-r--r-- | arch/mips/kvm/vz.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c index 5c495277bf44..71d8856ade64 100644 --- a/arch/mips/kvm/vz.c +++ b/arch/mips/kvm/vz.c @@ -1938,7 +1938,15 @@ static int kvm_vz_get_one_reg(struct kvm_vcpu *vcpu, *v = (long)read_gc0_epc(); break; case KVM_REG_MIPS_CP0_PRID: - *v = (long)kvm_read_c0_guest_prid(cop0); + switch (boot_cpu_type()) { + case CPU_CAVIUM_OCTEON3: + /* Octeon III has a read-only guest.PRid */ + *v = read_gc0_prid(); + break; + default: + *v = (long)kvm_read_c0_guest_prid(cop0); + break; + }; break; case KVM_REG_MIPS_CP0_EBASE: *v = kvm_vz_read_gc0_ebase(); @@ -2170,7 +2178,14 @@ static int kvm_vz_set_one_reg(struct kvm_vcpu *vcpu, write_gc0_epc(v); break; case KVM_REG_MIPS_CP0_PRID: - kvm_write_c0_guest_prid(cop0, v); + switch (boot_cpu_type()) { + case CPU_CAVIUM_OCTEON3: + /* Octeon III has a guest.PRid, but its read-only */ + break; + default: + kvm_write_c0_guest_prid(cop0, v); + break; + }; break; case KVM_REG_MIPS_CP0_EBASE: kvm_vz_write_gc0_ebase(v); |