On Tue, Jul 21, 2009 at 05:28:27PM -0400, Jim Paris wrote:
Daniel P. Berrange wrote:
> On Tue, Jul 21, 2009 at 09:46:17AM -0400, Jim Paris wrote:
> > Speaking of this, I've noticed that
> >
> > <domain type='qemu'>
> > <os>
> > <type arch='i686' machine='pc'>hvm</type>
> > </os>
> > </domain>
> >
> > runs WITH kvm on an x86_64 system. Is that intended?
>
> No, its not intended !
...
> I'm actually wondering why we bother with #1 at all. If the
> binary has '-no-kvm' and the domain is 'qemu', then it should
> be used no matter what arch.
Agreed. Below is a patch which should fix the oversight (lightly
tested).
However, this is going to be a user-visible change and may cause
people to complain that their existing 32-bit domains are unexpectedly
running with -no-kvm. Is that OK? Technically it's a misconfiguration.
Counterpoint: people complaining that they requested 'qemu' and
got 'kvm' which they didn't want :-) As you say anyone relying on
this using KVM has mis-configured their VM.
For the record, I think we've already broken this area once when
0.6.2 came out -- previous to that, even my 64-bit VMs had domain type
"qemu", and libvirt ran my specified kvm binary without -no-kvm.
Yep, one or two people got tripped up by this, but its trivial
for them to fix it & we didn't get any large number of bug
reports.
>From f7edd4c887512e4fc7c97b12a4f2409244af9eb3 Mon Sep 17 00:00:00
2001
From: Jim Paris <jim(a)jtan.com>
Date: Tue, 21 Jul 2009 17:07:51 -0400
Subject: [PATCH] Always add -no-kvm and -no-kqemu, if available, for "qemu"
domains.
If the qemu binary supports "-no-kvm" and/or "-no-kqemu", they
should
always be added for plain "qemu" domains. Previously, we omitted them
whenever the host and guest architectures implied that they would be
disabled automatically, but that logic was flawed in some cases
(such as i686 and x86_64).
Signed-off-by: Jim Paris <jim(a)jtan.com>
---
src/qemu_conf.c | 12 ++++--------
1 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index 4043d70..f146598 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -977,22 +977,18 @@ int qemudBuildCommandLine(virConnectPtr conn,
emulator = def->emulator;
/* Need to explicitly disable KQEMU if
- * 1. Arch matches host arch
- * 2. Guest domain is 'qemu'
- * 3. The qemu binary has the -no-kqemu flag
+ * 1. Guest domain is 'qemu'
+ * 2. The qemu binary has the -no-kqemu flag
*/
if ((qemuCmdFlags & QEMUD_CMD_FLAG_KQEMU) &&
- STREQ(ut.machine, def->os.arch) &&
def->virtType == VIR_DOMAIN_VIRT_QEMU)
disableKQEMU = 1;
/* Need to explicitly disable KVM if
- * 1. Arch matches host arch
- * 2. Guest domain is 'qemu'
- * 3. The qemu binary has the -no-kvm flag
+ * 1. Guest domain is 'qemu'
+ * 2. The qemu binary has the -no-kvm flag
*/
if ((qemuCmdFlags & QEMUD_CMD_FLAG_KVM) &&
- STREQ(ut.machine, def->os.arch) &&
def->virtType == VIR_DOMAIN_VIRT_QEMU)
disableKVM = 1;
ACK, this looks fine.
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|