KVM: PPC: Book3S HV: Add capability to report possible virtual SMT modes
Now that userspace can set the virtual SMT mode by enabling the KVM_CAP_PPC_SMT capability, it is useful for userspace to be able to query the set of possible virtual SMT modes. This provides a new capability, KVM_CAP_PPC_SMT_POSSIBLE, to provide this information. The return value is a bitmap of possible modes, with bit N set if virtual SMT mode 2^N is available. That is, 1 indicates SMT1 is available, 2 indicates that SMT2 is available, 3 indicates that both SMT1 and SMT2 are available, and so on. Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
This commit is contained in:
Родитель
e20bbd3d8d
Коммит
2ed4f9dd19
|
@ -4010,6 +4010,8 @@ be 0. A successful call to enable this capability will result in
|
|||
vsmt_mode being returned when the KVM_CAP_PPC_SMT capability is
|
||||
subsequently queried for the VM. This capability is only supported by
|
||||
HV KVM, and can only be set before any VCPUs have been created.
|
||||
The KVM_CAP_PPC_SMT_POSSIBLE capability indicates which virtual SMT
|
||||
modes are available.
|
||||
|
||||
7.12 KVM_CAP_PPC_FWNMI
|
||||
|
||||
|
@ -4183,3 +4185,12 @@ Currently the following bits are defined for the device_irq_level bitmap:
|
|||
Future versions of kvm may implement additional events. These will get
|
||||
indicated by returning a higher number from KVM_CHECK_EXTENSION and will be
|
||||
listed above.
|
||||
|
||||
8.10 KVM_CAP_PPC_SMT_POSSIBLE
|
||||
|
||||
Architectures: ppc
|
||||
|
||||
Querying this capability returns a bitmap indicating the possible
|
||||
virtual SMT modes that can be set using KVM_CAP_PPC_SMT. If bit N
|
||||
(counting from the right) is set, then a virtual SMT mode of 2^N is
|
||||
available.
|
||||
|
|
|
@ -566,6 +566,16 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
|||
r = threads_per_subcore;
|
||||
}
|
||||
break;
|
||||
case KVM_CAP_PPC_SMT_POSSIBLE:
|
||||
r = 1;
|
||||
if (hv_enabled) {
|
||||
if (!cpu_has_feature(CPU_FTR_ARCH_300))
|
||||
r = ((threads_per_subcore << 1) - 1);
|
||||
else
|
||||
/* P9 can emulate dbells, so allow any mode */
|
||||
r = 8 | 4 | 2 | 1;
|
||||
}
|
||||
break;
|
||||
case KVM_CAP_PPC_RMA:
|
||||
r = 0;
|
||||
break;
|
||||
|
|
|
@ -896,6 +896,7 @@ struct kvm_ppc_resize_hpt {
|
|||
#define KVM_CAP_X86_GUEST_MWAIT 143
|
||||
#define KVM_CAP_ARM_USER_IRQ 144
|
||||
#define KVM_CAP_PPC_FWNMI 145
|
||||
#define KVM_CAP_PPC_SMT_POSSIBLE 146
|
||||
|
||||
#ifdef KVM_CAP_IRQ_ROUTING
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче