diff options
author | James Hogan <james.hogan@imgtec.com> | 2014-05-29 05:16:38 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-05-30 07:02:54 -0400 |
commit | f74a8e224e32edccade63a23bc260b141b067b1d (patch) | |
tree | b79412e24fa3b7a059232871982f71bd1f8d2ff3 /arch/mips/kvm/kvm_mips.c | |
parent | f82393426afb7c82f7618b3b4e440d8dd2b40c08 (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.c | 3 |
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 | ||
551 | static int kvm_mips_get_reg(struct kvm_vcpu *vcpu, | 552 | static 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; |