mirror of https://gitee.com/openkylin/linux.git
arm64/x86: KVM: Introduce steal-time cap
arm64 requires a vcpu fd (KVM_HAS_DEVICE_ATTR vcpu ioctl) to probe support for steal-time. However this is unnecessary, as only a KVM fd is required, and it complicates userspace (userspace may prefer delaying vcpu creation until after feature probing). Introduce a cap that can be checked instead. While x86 can already probe steal-time support with a kvm fd (KVM_GET_SUPPORTED_CPUID), we add the cap there too for consistency. Signed-off-by: Andrew Jones <drjones@redhat.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Steven Price <steven.price@arm.com> Link: https://lore.kernel.org/r/20200804170604.42662-7-drjones@redhat.com
This commit is contained in:
parent
739c7af7da
commit
004a01241c
|
@ -6160,3 +6160,16 @@ KVM can therefore start protected VMs.
|
||||||
This capability governs the KVM_S390_PV_COMMAND ioctl and the
|
This capability governs the KVM_S390_PV_COMMAND ioctl and the
|
||||||
KVM_MP_STATE_LOAD MP_STATE. KVM_SET_MP_STATE can fail for protected
|
KVM_MP_STATE_LOAD MP_STATE. KVM_SET_MP_STATE can fail for protected
|
||||||
guests when the state change is invalid.
|
guests when the state change is invalid.
|
||||||
|
|
||||||
|
8.24 KVM_CAP_STEAL_TIME
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
:Architectures: arm64, x86
|
||||||
|
|
||||||
|
This capability indicates that KVM supports steal time accounting.
|
||||||
|
When steal time accounting is supported it may be enabled with
|
||||||
|
architecture-specific interfaces. This capability and the architecture-
|
||||||
|
specific interfaces must be consistent, i.e. if one says the feature
|
||||||
|
is supported, than the other should as well and vice versa. For arm64
|
||||||
|
see Documentation/virt/kvm/devices/vcpu.rst "KVM_ARM_VCPU_PVTIME_CTRL".
|
||||||
|
For x86 see Documentation/virt/kvm/msr.rst "MSR_KVM_STEAL_TIME".
|
||||||
|
|
|
@ -543,6 +543,7 @@ long kvm_hypercall_pv_features(struct kvm_vcpu *vcpu);
|
||||||
gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu);
|
gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu);
|
||||||
void kvm_update_stolen_time(struct kvm_vcpu *vcpu);
|
void kvm_update_stolen_time(struct kvm_vcpu *vcpu);
|
||||||
|
|
||||||
|
bool kvm_arm_pvtime_supported(void);
|
||||||
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);
|
||||||
int kvm_arm_pvtime_get_attr(struct kvm_vcpu *vcpu,
|
int kvm_arm_pvtime_get_attr(struct kvm_vcpu *vcpu,
|
||||||
|
|
|
@ -206,6 +206,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
||||||
*/
|
*/
|
||||||
r = 1;
|
r = 1;
|
||||||
break;
|
break;
|
||||||
|
case KVM_CAP_STEAL_TIME:
|
||||||
|
r = kvm_arm_pvtime_supported();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
r = kvm_arch_vm_ioctl_check_extension(kvm, ext);
|
r = kvm_arch_vm_ioctl_check_extension(kvm, ext);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -71,7 +71,7 @@ gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu)
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool kvm_arm_pvtime_supported(void)
|
bool kvm_arm_pvtime_supported(void)
|
||||||
{
|
{
|
||||||
return !!sched_info_on();
|
return !!sched_info_on();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3581,6 +3581,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
||||||
case KVM_CAP_SMALLER_MAXPHYADDR:
|
case KVM_CAP_SMALLER_MAXPHYADDR:
|
||||||
r = (int) allow_smaller_maxphyaddr;
|
r = (int) allow_smaller_maxphyaddr;
|
||||||
break;
|
break;
|
||||||
|
case KVM_CAP_STEAL_TIME:
|
||||||
|
r = sched_info_on();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1035,6 +1035,7 @@ struct kvm_ppc_resize_hpt {
|
||||||
#define KVM_CAP_LAST_CPU 184
|
#define KVM_CAP_LAST_CPU 184
|
||||||
#define KVM_CAP_SMALLER_MAXPHYADDR 185
|
#define KVM_CAP_SMALLER_MAXPHYADDR 185
|
||||||
#define KVM_CAP_S390_DIAG318 186
|
#define KVM_CAP_S390_DIAG318 186
|
||||||
|
#define KVM_CAP_STEAL_TIME 187
|
||||||
|
|
||||||
#ifdef KVM_CAP_IRQ_ROUTING
|
#ifdef KVM_CAP_IRQ_ROUTING
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue