KVM_GET_SUPPORTED_CPUID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Can someone explain this ioctl to me? The more I look at it, the less
sense it makes to me.

Let's start with leaf 0. If I see 0xd in EAX, does that indicate the
*maximum* supported value in EAX? Or does that mean that only a value
of 0xd is supported for EAX? If I see "AuthenticAMD" in EBX/EDX/ECX,
does that mean that "GenuineIntel" is *not* supported? I thought
people were having reasonable success with cross-vendor migration.

What about leaf 7 EBX? If a bit is clear, does that mean setting the
bit is unsupported? If a bit is set, does that mean clearing the bit
is unsupported? Do those answers still apply for bits 6 and 13, where
a '1' indicates the absence of a feature?

What about leaf 0xa? Kvm's api.txt says, "Note that certain
capabilities, such as KVM_CAP_X86_DISABLE_EXITS, may expose cpuid
features (e.g. MONITOR) which are not supported by kvm in its default
configuration. If userspace enables such capabilities, it is
responsible for modifying the results of this ioctl appropriately."
However, it appears that the vPMU is enabled not by such a capability,
but by filling in leaf 0xa. How does userspace know what leaf 0xa
values are supported by both the hardware and kvm?

And as for KVM_CAP_X86_DISABLE_EXITS, in particular, how is userspace
supposed to know what the appropriate modification to
KVM_GET_SUPPORTED_CPUID is? Is this documented somewhere else?

And as for the "certain capabilities" clause above, should I assume
that any capability enabled by userspace may require modifications to
KVM_GET_SUPPORTED_CPUID?  What might those required modifications be?
Has anyone thought to document them, or better yet, provide an API to
get them?

What about the processor brand string in leaves 0x80000000-0x80000004?
Is a string of NULs really the only supported value?

And just a nit, but why does this ioctl bother returning explicitly
zeroed leaves for unsupported leaves in range?

It would really be nice if I could use this ioctl to write a
"HostSupportsGuest" function based in part on an existing guest's
CPUID information, but that doesn't seem all that feasible, without
intimate knowledge of how the host's implementation of kvm works.



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux