On Wed, Jun 29, 2011 at 01:56:16PM +0200, Alexander Graf wrote: > >On 29.06.2011, at 13:53, Josh Boyer wrote: > >> On Wed, Jun 29, 2011 at 08:41:03PM +1000, Paul Mackerras wrote: >>> Documentation/virtual/kvm/api.txt | 35 +++++++++++++++++++++++++++++++++++ >>> arch/powerpc/include/asm/kvm.h | 15 +++++++++++++++ >>> arch/powerpc/include/asm/kvm_host.h | 1 + >>> arch/powerpc/kvm/powerpc.c | 28 ++++++++++++++++++++++++++++ >>> include/linux/kvm.h | 1 + >>> 5 files changed, 80 insertions(+), 0 deletions(-) >>> >>> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt >>> index b0e4b9c..3ab012c 100644 >>> --- a/Documentation/virtual/kvm/api.txt >>> +++ b/Documentation/virtual/kvm/api.txt >>> @@ -1430,6 +1430,41 @@ is supported; 2 if the processor requires all virtual machines to have >>> an RMA, or 1 if the processor can use an RMA but doesn't require it, >>> because it supports the Virtual RMA (VRMA) facility. >>> >>> +4.64 KVM_PPC_SET_PLATFORM >>> + >>> +Capability: none >>> +Architectures: powerpc >>> +Type: vm ioctl >>> +Parameters: struct kvm_ppc_set_platform (in) >>> +Returns: 0, or -1 on error >>> + >>> +This is used by userspace to tell KVM what sort of platform it should >>> +emulate. The return value of the ioctl tells userspace whether the >>> +emulation it is requesting is supported by KVM. >>> + >>> +struct kvm_ppc_set_platform { >>> + __u16 platform; /* defines the OS/hypervisor ABI */ >>> + __u16 guest_arch; /* e.g. decimal 206 for v2.06 */ >>> + __u32 flags; >>> +}; >>> + >>> +/* Values for platform */ >>> +#define KVM_PPC_PV_NONE 0 /* bare-metal, non-paravirtualized */ >>> +#define KVM_PPC_PV_KVM 1 /* as defined in kvm_para.h */ >>> +#define KVM_PPC_PV_SPAPR 2 /* IBM Server PAPR (a la PowerVM) */ >>> + >>> +/* Values for flags */ >>> +#define KVM_PPC_CROSS_ARCH 1 /* guest architecture != host */ >>> + >>> +The KVM_PPC_CROSS_ARCH bit being 1 indicates that the guest is of a >>> +sufficiently different architecture to the host that the guest cannot >>> +be permitted to use supervisor mode. For example, if the host is a >>> +64-bit machine and the guest is a 32-bit machine, then this bit should >>> +be set. >> >> This makes me wonder if a similar thing might eventually be usable for >> running an i686 or x32 guest on an x86_64 KVM host. I have no idea if >> that is even theoretically possible, but if it is it might be better to >> rename the ioctl to be architecture agnostic. > >On x86 this is not required unless we want to "virtualize" pre-CPUID CPUs. Everything as of Pentium has a full bitmap of feature capabilities that KVM gets from user space, including information such as "Can we do 64-bit mode?". Ah. Thank you for the explanation. josh -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html