Commit a25e9102 authored by Andrew Jones's avatar Andrew Jones Committed by Marc Zyngier

KVM: arm64: pvtime: Ensure task delay accounting is enabled

Ensure we're actually accounting run_delay before we claim that we'll
expose it to the guest. If we're not, then we just pretend like steal
time isn't supported in order to avoid any confusion.
Signed-off-by: default avatarAndrew Jones <drjones@redhat.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200622142710.18677-1-drjones@redhat.com
parent 66b7e05d
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <linux/arm-smccc.h> #include <linux/arm-smccc.h>
#include <linux/kvm_host.h> #include <linux/kvm_host.h>
#include <linux/sched/stat.h>
#include <asm/kvm_mmu.h> #include <asm/kvm_mmu.h>
#include <asm/pvclock-abi.h> #include <asm/pvclock-abi.h>
...@@ -73,6 +74,11 @@ gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu) ...@@ -73,6 +74,11 @@ gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu)
return base; return base;
} }
static bool kvm_arm_pvtime_supported(void)
{
return !!sched_info_on();
}
int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu, int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu,
struct kvm_device_attr *attr) struct kvm_device_attr *attr)
{ {
...@@ -82,7 +88,8 @@ int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu, ...@@ -82,7 +88,8 @@ int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu,
int ret = 0; int ret = 0;
int idx; int idx;
if (attr->attr != KVM_ARM_VCPU_PVTIME_IPA) if (!kvm_arm_pvtime_supported() ||
attr->attr != KVM_ARM_VCPU_PVTIME_IPA)
return -ENXIO; return -ENXIO;
if (get_user(ipa, user)) if (get_user(ipa, user))
...@@ -110,7 +117,8 @@ int kvm_arm_pvtime_get_attr(struct kvm_vcpu *vcpu, ...@@ -110,7 +117,8 @@ int kvm_arm_pvtime_get_attr(struct kvm_vcpu *vcpu,
u64 __user *user = (u64 __user *)attr->addr; u64 __user *user = (u64 __user *)attr->addr;
u64 ipa; u64 ipa;
if (attr->attr != KVM_ARM_VCPU_PVTIME_IPA) if (!kvm_arm_pvtime_supported() ||
attr->attr != KVM_ARM_VCPU_PVTIME_IPA)
return -ENXIO; return -ENXIO;
ipa = vcpu->arch.steal.base; ipa = vcpu->arch.steal.base;
...@@ -125,7 +133,8 @@ int kvm_arm_pvtime_has_attr(struct kvm_vcpu *vcpu, ...@@ -125,7 +133,8 @@ int kvm_arm_pvtime_has_attr(struct kvm_vcpu *vcpu,
{ {
switch (attr->attr) { switch (attr->attr) {
case KVM_ARM_VCPU_PVTIME_IPA: case KVM_ARM_VCPU_PVTIME_IPA:
return 0; if (kvm_arm_pvtime_supported())
return 0;
} }
return -ENXIO; return -ENXIO;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment