[libvirt] [PATCH] tools: virt-host-validate: fix KVM check on s390

Daniel P. Berrange berrange at redhat.com
Tue Mar 29 13:01:34 UTC 2016


On Mon, Mar 28, 2016 at 02:45:18PM -0400, John Ferlan wrote:
> 
> 
> On 03/21/2016 07:55 AM, Bjoern Walk wrote:
> > Since kernel version 4.5, s390 has the 'sie' flag to declare its
> > hardware virtualization support. Let's make virt-host-validate aware so
> > this check is passed correctly.
> > 
> > Signed-off-by: Bjoern Walk <bwalk at linux.vnet.ibm.com>
> > Reviewed-by: Boris Fiuczynski <fiuczy at linux.vnet.ibm.com>
> > ---
> >  tools/virt-host-validate-qemu.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> 
> I've never seen the output of /proc/cpuinfo on an S390, but looking at
> the source code I found it does seem to print with the "features" for a
> cpuinfo on an s390 machine (as opposed the "flags" for a vmx/svm machine).
> 
> The virHostValidateHasCPUFlag doesn't really distinguish "flags" or
> "features" field being specified as a label (although I imagine that
> could have internationalization impact if we tried to limit that more).
> 
> Anyway, before I push this - I wanted to see if there were any "other"
> thoughts regarding letting this be a bit more generic. My one concern is
> some field name some day has "sie" added (e.g. "easier" or "transient"
> would match).
> 
> One change that may help with that would be to check "sie " instead of
> "sie" (similarly "svm" could be "svm " and "vmx" could be "vmx ").  The
> source code prints the output as "..."%s ", int_hwcap_str[i]..."

Yes this is a good point, but also its a pre-existing problem with the
virHostValidateHasCPUFlag method, so not a reason to block this patch.
It can be fixed separately as desired.

> > diff --git a/tools/virt-host-validate-qemu.c b/tools/virt-host-validate-qemu.c
> > index a9f6c1e..01fb24b 100644
> > --- a/tools/virt-host-validate-qemu.c
> > +++ b/tools/virt-host-validate-qemu.c
> > @@ -31,7 +31,8 @@ int virHostValidateQEMU(void)
> >  
> >      virHostMsgCheck("QEMU", "%s", ("for hardware virtualization"));
> >      if (virHostValidateHasCPUFlag("svm") ||
> > -        virHostValidateHasCPUFlag("vmx")) {
> > +        virHostValidateHasCPUFlag("vmx") ||
> > +        virHostValidateHasCPUFlag("sie")) {
> >          virHostMsgPass();
> >          if (virHostValidateDeviceExists("QEMU", "/dev/kvm",
> >                                          VIR_HOST_VALIDATE_FAIL,
> >

What we should do here though is check the host architecture before
checking CPU flags.

eg you'll want to make this code do something like this

       bool hasHWVirt = false;
       switch (virArchFromHost()) {
           case VIR_ARCH_I686:
           case VIR_ARCH_X86_64:
             if (virHostValidateHasCPUFlag("svm") ||
                 virHostValidateHasCPUFlag("vmx"))
		 hasHWVirt = true;
             break;
           case VIR_ARCH_S390:
           case VIR_ARCH_S390X:
             if (virHostValidateHasCPUFlag("sie"))
	         hasHWVirt = true;
       }
       if (hasHWVirt) {
       ....do the /dev/kvm check...
       }

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list