aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kvm/kvm_mips.c
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2014-05-29 05:16:38 -0400
committerPaolo Bonzini <pbonzini@redhat.com>2014-05-30 07:02:54 -0400
commitf74a8e224e32edccade63a23bc260b141b067b1d (patch)
treeb79412e24fa3b7a059232871982f71bd1f8d2ff3 /arch/mips/kvm/kvm_mips.c
parentf82393426afb7c82f7618b3b4e440d8dd2b40c08 (diff)
MIPS: KVM: Add count frequency KVM register
Expose the KVM guest CP0_Count frequency to userland via a new KVM_REG_MIPS_COUNT_HZ register accessible with the KVM_{GET,SET}_ONE_REG ioctls. When the frequency is altered the bias is adjusted such that the guest CP0_Count doesn't jump discontinuously or lose any timer interrupts. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Gleb Natapov <gleb@kernel.org> Cc: kvm@vger.kernel.org Cc: Ralf Baechle <ralf@linux-mips.org> Cc: linux-mips@linux-mips.org Cc: David Daney <david.daney@cavium.com> Cc: Sanjay Lal <sanjayl@kymasys.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/mips/kvm/kvm_mips.c')
-rw-r--r--arch/mips/kvm/kvm_mips.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/mips/kvm/kvm_mips.c b/arch/mips/kvm/kvm_mips.c
index a2d5d4243f51..7ccb7a532c55 100644
--- a/arch/mips/kvm/kvm_mips.c
+++ b/arch/mips/kvm/kvm_mips.c
@@ -546,6 +546,7 @@ static u64 kvm_mips_get_one_regs[] = {
546 546
547 KVM_REG_MIPS_COUNT_CTL, 547 KVM_REG_MIPS_COUNT_CTL,
548 KVM_REG_MIPS_COUNT_RESUME, 548 KVM_REG_MIPS_COUNT_RESUME,
549 KVM_REG_MIPS_COUNT_HZ,
549}; 550};
550 551
551static int kvm_mips_get_reg(struct kvm_vcpu *vcpu, 552static int kvm_mips_get_reg(struct kvm_vcpu *vcpu,
@@ -627,6 +628,7 @@ static int kvm_mips_get_reg(struct kvm_vcpu *vcpu,
627 case KVM_REG_MIPS_CP0_COUNT: 628 case KVM_REG_MIPS_CP0_COUNT:
628 case KVM_REG_MIPS_COUNT_CTL: 629 case KVM_REG_MIPS_COUNT_CTL:
629 case KVM_REG_MIPS_COUNT_RESUME: 630 case KVM_REG_MIPS_COUNT_RESUME:
631 case KVM_REG_MIPS_COUNT_HZ:
630 ret = kvm_mips_callbacks->get_one_reg(vcpu, reg, &v); 632 ret = kvm_mips_callbacks->get_one_reg(vcpu, reg, &v);
631 if (ret) 633 if (ret)
632 return ret; 634 return ret;
@@ -724,6 +726,7 @@ static int kvm_mips_set_reg(struct kvm_vcpu *vcpu,
724 case KVM_REG_MIPS_CP0_CAUSE: 726 case KVM_REG_MIPS_CP0_CAUSE:
725 case KVM_REG_MIPS_COUNT_CTL: 727 case KVM_REG_MIPS_COUNT_CTL:
726 case KVM_REG_MIPS_COUNT_RESUME: 728 case KVM_REG_MIPS_COUNT_RESUME:
729 case KVM_REG_MIPS_COUNT_HZ:
727 return kvm_mips_callbacks->set_one_reg(vcpu, reg, v); 730 return kvm_mips_callbacks->set_one_reg(vcpu, reg, v);
728 default: 731 default:
729 return -EINVAL; 732 return -EINVAL;