KVM: Document KVM_GET_SUPPORTED_CPUID2 ioctl
Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
c0e0608cb9
commit
d153513dde
|
@ -968,6 +968,70 @@ struct kvm_xcrs {
|
|||
|
||||
This ioctl would set vcpu's xcr to the value userspace specified.
|
||||
|
||||
4.45 KVM_GET_SUPPORTED_CPUID
|
||||
|
||||
Capability: KVM_CAP_EXT_CPUID
|
||||
Architectures: x86
|
||||
Type: system ioctl
|
||||
Parameters: struct kvm_cpuid2 (in/out)
|
||||
Returns: 0 on success, -1 on error
|
||||
|
||||
struct kvm_cpuid2 {
|
||||
__u32 nent;
|
||||
__u32 padding;
|
||||
struct kvm_cpuid_entry2 entries[0];
|
||||
};
|
||||
|
||||
#define KVM_CPUID_FLAG_SIGNIFCANT_INDEX 1
|
||||
#define KVM_CPUID_FLAG_STATEFUL_FUNC 2
|
||||
#define KVM_CPUID_FLAG_STATE_READ_NEXT 4
|
||||
|
||||
struct kvm_cpuid_entry2 {
|
||||
__u32 function;
|
||||
__u32 index;
|
||||
__u32 flags;
|
||||
__u32 eax;
|
||||
__u32 ebx;
|
||||
__u32 ecx;
|
||||
__u32 edx;
|
||||
__u32 padding[3];
|
||||
};
|
||||
|
||||
This ioctl returns x86 cpuid features which are supported by both the hardware
|
||||
and kvm. Userspace can use the information returned by this ioctl to
|
||||
construct cpuid information (for KVM_SET_CPUID2) that is consistent with
|
||||
hardware, kernel, and userspace capabilities, and with user requirements (for
|
||||
example, the user may wish to constrain cpuid to emulate older hardware,
|
||||
or for feature consistency across a cluster).
|
||||
|
||||
Userspace invokes KVM_GET_SUPPORTED_CPUID by passing a kvm_cpuid2 structure
|
||||
with the 'nent' field indicating the number of entries in the variable-size
|
||||
array 'entries'. If the number of entries is too low to describe the cpu
|
||||
capabilities, an error (E2BIG) is returned. If the number is too high,
|
||||
the 'nent' field is adjusted and an error (ENOMEM) is returned. If the
|
||||
number is just right, the 'nent' field is adjusted to the number of valid
|
||||
entries in the 'entries' array, which is then filled.
|
||||
|
||||
The entries returned are the host cpuid as returned by the cpuid instruction,
|
||||
with unknown or unsupported features masked out. The fields in each entry
|
||||
are defined as follows:
|
||||
|
||||
function: the eax value used to obtain the entry
|
||||
index: the ecx value used to obtain the entry (for entries that are
|
||||
affected by ecx)
|
||||
flags: an OR of zero or more of the following:
|
||||
KVM_CPUID_FLAG_SIGNIFCANT_INDEX:
|
||||
if the index field is valid
|
||||
KVM_CPUID_FLAG_STATEFUL_FUNC:
|
||||
if cpuid for this function returns different values for successive
|
||||
invocations; there will be several entries with the same function,
|
||||
all with this flag set
|
||||
KVM_CPUID_FLAG_STATE_READ_NEXT:
|
||||
for KVM_CPUID_FLAG_STATEFUL_FUNC entries, set if this entry is
|
||||
the first entry to be read by a cpu
|
||||
eax, ebx, ecx, edx: the values returned by the cpuid instruction for
|
||||
this function/index combination
|
||||
|
||||
5. The kvm_run structure
|
||||
|
||||
Application code obtains a pointer to the kvm_run structure by
|
||||
|
|
Loading…
Reference in New Issue