]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
10 years agoqemu_monitor: introduce new function to get QOM path
Pavel Hrdina [Tue, 9 Dec 2014 15:21:45 +0000 (16:21 +0100)]
qemu_monitor: introduce new function to get QOM path

The search is done recursively only through QOM object that has a type
prefixed with "child<" as this indicate that the QOM is a parent for
other QOM objects.

The usage is that you give known device name with starting path where to
search.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoqemu_driver: fix setting vcpus for offline domain
Pavel Hrdina [Tue, 13 Jan 2015 12:33:43 +0000 (13:33 +0100)]
qemu_driver: fix setting vcpus for offline domain

Commit e3435caf fixed hot-plugging of vcpus with strict memory pinning
on NUMA hosts, but unfortunately it also broke updating number of vcpus
for offline guests using our API.

The issue is that we try to create a cpu cgroup for non-running guest
which fails as there are no cgroups for that domain. We should create
cgroups and update cpuset.mems only if we are hot-plugging.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoqemu, lxc: Warn if setting QoS on unsupported vNIC types
Michal Privoznik [Wed, 7 Jan 2015 14:52:21 +0000 (15:52 +0100)]
qemu, lxc: Warn if setting QoS on unsupported vNIC types

https://bugzilla.redhat.com/show_bug.cgi?id=1165993

So, there are still plenty of vNIC types that we don't know how to set
bandwidth on. Let's warn explicitly in case user has requested it
instead of pretending everything was set.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu: snapshot: inactive external snapshot can't work after libvirtd restart
Shanzhi Yu [Sat, 6 Dec 2014 16:32:18 +0000 (00:32 +0800)]
qemu: snapshot: inactive external snapshot can't work after libvirtd restart

When create inactive external snapshot, after update disk definitions,
virDomainSaveConfig is needed, if not after restart libvirtd the new snapshot
file definitions in xml will be lost.

Reproduce steps:

1. prepare a shut off guest
$ virsh domstate rhel7 && virsh domblklist rhel7
shut off

Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/rhel7.img

2. create external disk snapshot
$ virsh snapshot-create rhel7 --disk-only && virsh domblklist rhel7
Domain snapshot 1417882967 created
Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/rhel7.1417882967

3. restart libvirtd then check guest source file
$ service  libvirtd restart && virsh domblklist rhel7
Redirecting to /bin/systemctl restart  libvirtd.service
Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/rhel7.img

This was first reported by Eric Blake
http://www.redhat.com/archives/libvir-list/2014-December/msg00369.html

Signed-off-by: Shanzhi Yu <shyu@redhat.com>
10 years agoconf: Increase virNetDevBandwidthParse intelligence
Michal Privoznik [Wed, 7 Jan 2015 16:53:04 +0000 (17:53 +0100)]
conf: Increase virNetDevBandwidthParse intelligence

There's this function virNetDevBandwidthParse which parses the
bandwidth XML snippet. But it's not clever much. For the
following XML it allocates the virNetDevBandwidth structure even
though it's completely empty:

    <bandwidth>
    </bandwidth>

Later in the code there are some places where we check if
bandwidth was set or not. And since we obtained pointer from the
parsing function we think that it is when in fact it isn't.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoGive virDomainDef parser & formatter their own flags
Daniel P. Berrange [Tue, 18 Nov 2014 16:44:00 +0000 (16:44 +0000)]
Give virDomainDef parser & formatter their own flags

The virDomainDefParse* and virDomainDefFormat* methods both
accept the VIR_DOMAIN_XML_* flags defined in the public API,
along with a set of other VIR_DOMAIN_XML_INTERNAL_* flags
defined in domain_conf.c.

This is seriously confusing & error prone for a number of
reasons:

 - VIR_DOMAIN_XML_SECURE, VIR_DOMAIN_XML_MIGRATABLE and
   VIR_DOMAIN_XML_UPDATE_CPU are only relevant for the
   formatting operation
 - Some of the VIR_DOMAIN_XML_INTERNAL_* flags only apply
   to parse or to format, but not both.

This patch cleanly separates out the flags. There are two
distint VIR_DOMAIN_DEF_PARSE_* and VIR_DOMAIN_DEF_FORMAT_*
flags that are used by the corresponding methods. The
VIR_DOMAIN_XML_* flags received via public API calls must
be converted to the VIR_DOMAIN_DEF_FORMAT_* flags where
needed.

The various calls to virDomainDefParse which hardcoded the
use of the VIR_DOMAIN_XML_INACTIVE flag change to use the
VIR_DOMAIN_DEF_PARSE_INACTIVE flag.

10 years agoDecouple CPU XML formatting from domain XML public API flags
Daniel P. Berrange [Tue, 6 Jan 2015 11:54:32 +0000 (11:54 +0000)]
Decouple CPU XML formatting from domain XML public API flags

The virCPUDefFormat* methods were relying on the VIR_DOMAIN_XML_*
flag definitions. It is not desirable for low level internal
functions to be coupled to flags for the public API, since they
may need to be called from several different contexts where the
flags would not be appropriate.

10 years agoformatdomaincaps: Correctly format API reference
Michal Privoznik [Tue, 13 Jan 2015 13:24:38 +0000 (14:24 +0100)]
formatdomaincaps: Correctly format API reference

Well, since the link to the virConnectGetDomainCapabilities API is in
<pre/> section we must take special care about the spaces around the
link.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
10 years agoqemu: forbid second blockcommit during active commit
Eric Blake [Mon, 12 Jan 2015 23:13:21 +0000 (16:13 -0700)]
qemu: forbid second blockcommit during active commit

https://bugzilla.redhat.com/show_bug.cgi?id=1135339 documents some
confusing behavior when a user tries to start an inactive block
commit in a second connection while there is already an on-going
active commit from a first connection.  Eventually, qemu will
support multiple simultaneous block jobs, but as of now, it does
not; furthermore, libvirt also needs an overhaul before we can
support simultaneous jobs.  So, the best way to avoid confusing
ourselves is to quit relying on qemu to tell us about the situation
(where we risk getting in weird states) and instead forbid a
duplicate block commit ourselves.

Note that we are still relying on qemu to diagnose attempts to
interrupt an inactive commit (since we only track XML of an active
commit), but as inactive commit is less confusing for libvirt to
manage, there is less that can go wrong by leaving that detection
up to qemu.

* src/qemu/qemu_driver.c (qemuDomainBlockCommit): Hoist check for
active commit to occur earlier outside of conditions.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoparallels: don't override error message when XML parsing fails
Daniel P. Berrange [Thu, 8 Jan 2015 14:55:39 +0000 (14:55 +0000)]
parallels: don't override error message when XML parsing fails

The virDomainDefParseString method will report a suitable error
on parsing fail, so don't replace that.

10 years agoFix flags passed to virDomainDefParseString by XenAPI driver
Daniel P. Berrange [Tue, 18 Nov 2014 16:02:11 +0000 (16:02 +0000)]
Fix flags passed to virDomainDefParseString by XenAPI driver

The XenAPI driver was passing the flags for
virDomainCreateXML straight into the virDomainDefParseString
method, even though they expect totally different sets of
flags. It should have been using VIR_DOMAIN_XML_INACTIVE

10 years agoDon't use VIR_DOMAIN_XML_SECURE when parsing XML
Daniel P. Berrange [Tue, 18 Nov 2014 15:37:00 +0000 (15:37 +0000)]
Don't use VIR_DOMAIN_XML_SECURE when parsing XML

The VIR_DOMAIN_XML_SECURE flag only has effect on the formatting
of XML so should not be passed to virDomainDefParseNode

10 years agoAdd stub virDomainDefineXMLFlags impls
Daniel P. Berrange [Tue, 18 Nov 2014 14:19:38 +0000 (14:19 +0000)]
Add stub virDomainDefineXMLFlags impls

Make sure every virt driver implements virDomainDefineXMLFlags
by adding a trivial passthrough from the existing impl with
no flags set.

10 years agoAdd new virDomainDefineXMLFlags public API
Daniel P. Berrange [Tue, 18 Nov 2014 13:56:20 +0000 (13:56 +0000)]
Add new virDomainDefineXMLFlags public API

The virDomainDefineXML method is one of the few that still lacks
an 'unsigned int flags' parameter. This will be needed for adding
XML validation to this API. virDomainCreateXML fortunately already
has flags.

10 years agoconf: fix crash when hotplug a channel chr device with no target
Luyao Huang [Tue, 13 Jan 2015 08:41:05 +0000 (16:41 +0800)]
conf: fix crash when hotplug a channel chr device with no target

https://bugzilla.redhat.com/show_bug.cgi?id=1181408

When we try to hotplug a channel chr device with no target, we
will get success (which should fail) in virDomainChrDefParseXML,
because we use goto cleanup this place and return an incomplete
definition (with no target). In qemuDomainAttachChrDevice,
we add it to the domain definition, but fail to remove it from
there when chardev-add fails, because virDomainChrRemove
matches chardevices according to the target name.
The device definition is then freed in qemuDomainAttachDeviceFlags,
leaving a stale pointer in the domain definition.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
10 years agoqemu: Allow enabling/disabling features with host-passthrough
Martin Kletzander [Mon, 5 Jan 2015 16:03:58 +0000 (17:03 +0100)]
qemu: Allow enabling/disabling features with host-passthrough

QEMU supports feature specification with -cpu host and we just skip
using that.  Since QEMU developers themselves would like to use this
feature, this patch modifies the code to work.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1178850

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoRevert "src/xenconfig: Xen-xl parser"
Jim Fehlig [Fri, 9 Jan 2015 22:33:11 +0000 (15:33 -0700)]
Revert "src/xenconfig: Xen-xl parser"

This reverts commit 2c78051a14acfb7aba078d569b1632dfe0ca0853.

Conflicts:
src/Makefile.am

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoRevert "tests: Tests for the xen-xl parser"
Jim Fehlig [Fri, 9 Jan 2015 22:29:07 +0000 (15:29 -0700)]
Revert "tests: Tests for the xen-xl parser"

This reverts commit 6b818d3b09f4e74ac2ea1d4020896be1e6871867.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoRevert "libxl: Add support for parsing/formating Xen XL config"
Jim Fehlig [Fri, 9 Jan 2015 22:28:53 +0000 (15:28 -0700)]
Revert "libxl: Add support for parsing/formating Xen XL config"

This reverts commit 4f524212ce614e1ca84b34dd8330a48957c8f823.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoRevert "src/Makefile.am: fix build breaker for xenconfig"
Jim Fehlig [Fri, 9 Jan 2015 22:28:39 +0000 (15:28 -0700)]
Revert "src/Makefile.am: fix build breaker for xenconfig"

This reverts commit 703ef9667abf016ef1040eac296a81792b366932.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoRevert "build: fix xenconfig VPATH builds"
Jim Fehlig [Fri, 9 Jan 2015 22:28:04 +0000 (15:28 -0700)]
Revert "build: fix xenconfig VPATH builds"

This reverts commit 1b21d300691a78f73d94446616a6d1f9fd88991e.

Conflicts:
src/Makefile.am

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoRevert "Revert "src/Makefile.am: fix build breaker for xenconfig""
Jim Fehlig [Fri, 9 Jan 2015 22:07:04 +0000 (15:07 -0700)]
Revert "Revert "src/Makefile.am: fix build breaker for xenconfig""

This reverts commit e662968fd980158e8f8d8990bb43378dbc3d036a.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoRevert "src/Makefile: move the new xen_xl_disk parser code at the correct place"
Jim Fehlig [Fri, 9 Jan 2015 22:06:52 +0000 (15:06 -0700)]
Revert "src/Makefile: move the new xen_xl_disk parser code at the correct place"

This reverts commit edacdb3d12256af4f6e31ec65c9dd4797fb3aa0d.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoRevert "src/Makefile: Fix parallel build after xen_xl_disk parser introduction"
Jim Fehlig [Fri, 9 Jan 2015 22:06:34 +0000 (15:06 -0700)]
Revert "src/Makefile: Fix parallel build after xen_xl_disk parser introduction"

This reverts commit 533349ff43ddf091026fbcb0d9a714d9cc570dc7.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agoRevert "bootstrap.conf: add check for flex"
Jim Fehlig [Fri, 9 Jan 2015 21:54:15 +0000 (14:54 -0700)]
Revert "bootstrap.conf: add check for flex"

This reverts commit cab767831f74ec72809dacd07cb782a88a097f21.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agolxc: Move setting ifname_guest_actual to virLXCSetupInterfaces
Guido Günther [Fri, 19 Dec 2014 09:08:38 +0000 (10:08 +0100)]
lxc: Move setting ifname_guest_actual to virLXCSetupInterfaces

so it applies to interfaces of type 'direct' too.

Reported and patch provided by Bastian Blank at

    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=769600

10 years agoqemuxml2argvtest: Fix test after change of qxl vgamem_mb default
Michal Privoznik [Mon, 12 Jan 2015 14:47:52 +0000 (15:47 +0100)]
qemuxml2argvtest: Fix test after change of qxl vgamem_mb default

Well, apparently it's possible for a patch to sneak in through
review process and break 'make check'. It happened just lately
with 0e502466acb84a which changed the default of vgamem_mb for
qxl device. However, there were left some domain XMLs within our
test suite relying on the old default. These should be updated to
match the change.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agocpu: Bugfix for s390 CPU driver to return a host CPU model
Daniel Hansel [Fri, 19 Dec 2014 14:49:35 +0000 (15:49 +0100)]
cpu: Bugfix for s390 CPU driver to return a host CPU model

The curent libvirt CPU driver for s390 does not return a host CPU model.
This patch returns 'host' according to the other platforms that would
not decode any CPU model.
This is an intermediate bugfix due to a discussion on OpenStack mailing
list. The final patch introducing the CPU model support for s390x will
exchange the hard-coded decode method.

Signed-off-by: Daniel Hansel <daniel.hansel@linux.vnet.ibm.com>
10 years agovirconf: Resolve a possible memory leak in virConfSetValue
John Ferlan [Fri, 9 Jan 2015 13:42:13 +0000 (08:42 -0500)]
virconf: Resolve a possible memory leak in virConfSetValue

Found this one by inspection... The API claims to "own" the input
value even in the case of error.  However, in the initial entry
to the API if the value exists, was STRING, but without a str value
it just returned without freeing the 'value' which it claims to now
own.  So I added the virConfFreeValue() call in order to resolve.

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agoopenvz: Check errors from virSocketAddrFormat
John Ferlan [Fri, 9 Jan 2015 15:48:37 +0000 (10:48 -0500)]
openvz: Check errors from virSocketAddrFormat

Commit id 'a4e86390' modified the command line to allow --ipadd multiple
times; however, it did not account for the condition where a NULL is
returned which will could lead to some interesting errors with multiple
--ipadd's without parameters.

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agoopenvz: Resolve Coverity RESOURCE_LEAK
John Ferlan [Fri, 9 Jan 2015 12:38:17 +0000 (07:38 -0500)]
openvz: Resolve Coverity RESOURCE_LEAK

Commit id 'a4e86390' modified the command line to allow --ipadd multiple
times, which caused Coverity to notice a latent memory leak with the
'ipAddr' string not being VIR_FREE()'d

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agoqxl: change the default value for vgamem_mb to 16 MiB
Pavel Hrdina [Mon, 12 Jan 2015 12:18:46 +0000 (13:18 +0100)]
qxl: change the default value for vgamem_mb to 16 MiB

The default value should be 16 MiB instead of 8 MiB. Only really old
version of upstream QEMU used the 8 MiB as default for vga framebuffer.

Without this change if you update your libvirt where we introduced the
"vgamem" attribute for QXL video device the value will be set to 8 MiB,
but previously your guest had 16 MiB because we didn't pass any value to
QEMU command line which means QEMU used its own 16 MiB as default.

This will affect all users with guest's display resolution higher than
1920x1080.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agodocs: Document some -boot option limitations on UEFI
Michal Privoznik [Tue, 6 Jan 2015 12:04:13 +0000 (13:04 +0100)]
docs: Document some -boot option limitations on UEFI

It was brought to my attention that some -boot options may not
work with UEFI. For instance, rebootTimeout is very SeaBIOS
specific,splash logo is not implemented yet on OVMF, and so on.
We should document this limitation at least.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agovirsh: Emit error for VSH_OT_DATA without VSH_OFLAG_REQ
Hao Liu [Thu, 11 Dec 2014 02:46:15 +0000 (10:46 +0800)]
virsh: Emit error for VSH_OT_DATA without VSH_OFLAG_REQ

Commit 6b9964 enforces checking invalid use of VSH_OT_STRING with
VSH_OFLAG_REQ. This commit tries to do the same thing to stop using
VSH_OT_DATA without VSH_OFLAG_REQ and also fix existing misuse.

Signed-off-by: Hao Liu <hliu@redhat.com>
10 years agolxc: Don't crash on NULL ifname_guest_actual
Guido Günther [Sun, 11 Jan 2015 12:51:29 +0000 (13:51 +0100)]
lxc: Don't crash on NULL ifname_guest_actual

Reported and patch provided by Bastian Blank at

    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=769600

10 years agoconf: Correctly format controller's driver
Luyao Huang [Wed, 7 Jan 2015 10:39:37 +0000 (18:39 +0800)]
conf: Correctly format controller's driver

https://bugzilla.redhat.com/show_bug.cgi?id=1179684

The way that we currently generate the <driver/> for <controller/> is
just madness:

    <controller type='scsi' index='0' model='virtio-scsi'>
      <driver queues='12'/>
      <driver cmd_per_lun='123'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>

It's obvious that we should be aiming at the following:

    <controller type='scsi' index='0' model='virtio-scsi'>
      <driver queues='12' cmd_per_lun='123'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>

Signed-off-by: Luyao Huang <lhuang@redhat.com>
10 years agosafezero: fall back to writing zeroes even when resizing
Ján Tomko [Wed, 7 Jan 2015 15:49:00 +0000 (16:49 +0100)]
safezero: fall back to writing zeroes even when resizing

Remove the resize flag and use the same code path for all callers.
This flag was added by commit 18f0316 to allow virStorageFileResize
use 'safezero' while preserving the behavior.

Explicitly return -2 when a fallback to a different method should
be done, to make the code path more obvious.

Fail immediately when ftruncate fails in the mmap method,
as we did before commit 18f0316.

10 years agovirsh.pod: Update description
John Ferlan [Fri, 9 Jan 2015 12:36:01 +0000 (07:36 -0500)]
virsh.pod: Update description

The 'pool-build' command description for --overwrite and --no-overwrite
indicated usage for only 'filesystem' pools; however, the 'disk' pool
also supports the flags as of commit id 'afa1029a'. So add a description
for that usage.

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agomaint: in src/Makefile.am, $(top_srcdir)/src is verbose
Eric Blake [Thu, 8 Jan 2015 00:05:36 +0000 (17:05 -0700)]
maint: in src/Makefile.am, $(top_srcdir)/src is verbose

I noticed this while working on a previous commit.  Why should
we be calling out '../src/' when it is sufficient to refer to just
'./'?  Blind copy-and-paste runs rampant in this file :)

* src/Makefile.am (INCLUDES, *_CFLAGS): Shorten to $(srcdir).

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agobootstrap.conf: add check for flex
Pavel Hrdina [Thu, 8 Jan 2015 15:58:25 +0000 (16:58 +0100)]
bootstrap.conf: add check for flex

We need the flex to generate new xen_xl_disk parser.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agosrc/Makefile: Fix parallel build after xen_xl_disk parser introduction
Pavel Hrdina [Thu, 8 Jan 2015 06:54:22 +0000 (07:54 +0100)]
src/Makefile: Fix parallel build after xen_xl_disk parser introduction

Well, the parallel build doesn't work as there are not dependencies
set correctly. When running 'make -j' I see this error:

make[2]: Entering directory '/home/zippy/work/libvirt/libvirt.git/src'
  GEN      util/virkeymaps.h
  GEN      locking/lock_protocol.h
make[2]: *** No rule to make target 'xenconfig/xen_xl_disk.h', needed by 'all'.  Stop.
make[2]: *** Waiting for unfinished jobs....
  GEN      lxc/lxc_controller_dispatch.h

The fix is to correctly set dependencies by letting make know that .c
and .h are to be generated from .l. Moreover, the section is moved
closer to the other section which uses it.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agosrc/Makefile: move the new xen_xl_disk parser code at the correct place
Pavel Hrdina [Thu, 8 Jan 2015 13:36:31 +0000 (14:36 +0100)]
src/Makefile: move the new xen_xl_disk parser code at the correct place

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoRevert "src/Makefile.am: fix build breaker for xenconfig"
Pavel Hrdina [Thu, 8 Jan 2015 13:34:32 +0000 (14:34 +0100)]
Revert "src/Makefile.am: fix build breaker for xenconfig"

This reverts commit 703ef9667abf016ef1040eac296a81792b366932.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agovmx: Fix a VMX parsing problem
Geoff Hickey [Wed, 7 Jan 2015 23:45:42 +0000 (18:45 -0500)]
vmx: Fix a VMX parsing problem

VMware ESX does not always set the "serialX.fileType" tag in VMX files. The
default value for this tag is "device", and when adding a new serial port
of this type VMware will omit the fileType tag. This caused libvirt to
fail to parse the VMX file. Fixed by making this tag optional and using
"device" as a default value. Also updated vmx2xmltest to test for this
case.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agobuild: fix xenconfig VPATH builds
Eric Blake [Wed, 7 Jan 2015 23:32:32 +0000 (16:32 -0700)]
build: fix xenconfig VPATH builds

Ever since commit 2c78051 split out a helper library for the sake of
changing CFLAGS, a VPATH build with xenconfig enabled has failed:

  CC       xenconfig/libvirt_xenxldiskparser_la-xen_xl_disk.lo
  ../../src/xenconfig/xen_xl_disk.l:37:21: fatal error: xen_xl.h: No such file or directory
   # include "xen_xl.h"
             ^
  compilation terminated.
  Makefile:9462: recipe for target 'xenconfig/libvirt_xenxldiskparser_la-xen_xl_disk.lo' failed

The solution is to tell the build to look for xen_xl.h relative
to $(srcdir), since we keep that file under version control.

[Not fixed here - the raw use of -Wno-unused-parameter in CFLAGS
is NOT portable; ideally, we should be doing a configure test
and only supplying that argument when we know the compiler supports
-Wunused-parameter; but that's a patch for another day]

[Not fixed here - there are still issues with parallel builds hitting
a race between generating the files and trying to compile/distribute
them]

* src/Makefile.am (libvirt_xenxldiskparser_la_CFLAGS): Add another
include directory.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoqemu: Fix system pages handling in <memoryBacking/>
Michal Privoznik [Wed, 7 Jan 2015 14:17:03 +0000 (15:17 +0100)]
qemu: Fix system pages handling in <memoryBacking/>

In one of my previous commits (311b4a67) I've tried to allow to
pass regular system pages to <hugepages>. However, there was a
little bug that wasn't caught. If domain has guest NUMA topology
defined, qemuBuildNumaArgStr() function takes care of generating
corresponding command line. The hugepages backing for guest NUMA
nodes is handled there too. And here comes the bug: the hugepages
setting from XML is stored in KiB internally, however, the system
pages size was queried and stored in Bytes. So the check whether
these two are equal was failing even if it shouldn't.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonwfilter: Add support for icmpv6 filtering
Stefan Berger [Wed, 7 Jan 2015 16:41:49 +0000 (11:41 -0500)]
nwfilter: Add support for icmpv6 filtering

Make use of the ebtables functionality to be able to filter certain
parameters of icmpv6 packets. Extend the XML parser for icmpv6 types,
type ranges, codes, and code ranges. Extend the nwfilter documentation,
schema, and test cases.

Being able to filter icmpv6 types and codes helps extending the DHCP
snooper for IPv6 and filtering at least some parameters of IPv6's NDP
(Neighbor Discovery Protocol) packets. However, the filtering will not
be as good as the filtering of ARP packets since we cannot
check on IP addresses in the payload of the NDP packets.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
10 years agoIndentation
Ján Tomko [Wed, 7 Jan 2015 11:27:07 +0000 (12:27 +0100)]
Indentation

10 years agoqemu: Don't unref domain after exit from nested async job
Peter Krempa [Wed, 7 Jan 2015 10:35:08 +0000 (11:35 +0100)]
qemu: Don't unref domain after exit from nested async job

In commit 540c339a2535ec30d79e5ef84d8f50a17bc60723 the whole domain
reference counting was refactored in the qemu driver. Domain jobs now
don't need to reference the domain object as they now expect the
reference from the calling function.

However, the patch forgot to remove the unref call in case we exit the
monitor when we were acquiring a nested job. This caused the daemon to
crash on a subsequent access to the domain object once we've done an
operation requiring a nested job for a monitor access.

An easy reproducer case:

1) Start a vm with qcow disks
2) virsh snapshot-create-as DOMNAME
3) virsh dumpxml DOMNAME
4) daemon crashes in a semi-random spot while accessing a now-removed VM
object.

Fortunately, the commit wasn't released yet, so there are no security
implications.

Reported-by: Shanzi Yu <shyu@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
10 years agoconf: Don't format actual network definition in migratable XML
Luyao Huang [Thu, 25 Dec 2014 03:38:00 +0000 (11:38 +0800)]
conf: Don't format actual network definition in migratable XML

https://bugzilla.redhat.com/show_bug.cgi?id=1177194

When migrate a vm, we will generate a xml via qemuDomainDefFormatLive and
pass this xml to target libvirtd. Libvirt will use the current network
state in def->data.network.actual to generate the xml, this will make
migrate failed when we set a network type guest interface use a macvtap
network as a source in a vm then migrate vm to another host(which has the
different macvtap network settings: different interface name, bridge name...)

Add a flag check in virDomainNetDefFormat, if we set a VIR_DOMAIN_XML_MIGRATABLE
flag when call virDomainNetDefFormat, we won't get the current vm interface
state.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
10 years agoParallels: Add VNC hostname setup
Alexander Burluka [Fri, 19 Dec 2014 13:41:03 +0000 (16:41 +0300)]
Parallels: Add VNC hostname setup

Add missing VNC setup via Parallels SDK.
Parallels Cloud Server starts one VNC server per domain,
so we could process only one VNC server definition.
Network-based listening currently is unimplemented.

Signed-off-by: Alexander Burluka <aburluka@parallels.com>
10 years agoqemu: Restore old bandwidth rules when setting new fails
Luyao Huang [Wed, 31 Dec 2014 01:34:39 +0000 (09:34 +0800)]
qemu: Restore old bandwidth rules when setting new fails

https://bugzilla.redhat.com/show_bug.cgi?id=1177723

When setting new bandwidth limits via
virDomainSetInterfaceParameters, the old ones are cleared first.
However, if setting the new ones fails, the old are already gone
and interface is left in inconsistent state.  Therefore, right
before failing we ought to try to restore the old bandwidth.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
10 years agoqemu: fix miss goto cleanup in qemuDomainAttachNetDevice
Luyao Huang [Tue, 6 Jan 2015 09:20:30 +0000 (17:20 +0800)]
qemu: fix miss goto cleanup in qemuDomainAttachNetDevice

This place have a wrong logic, maybe forget goto cleanup.
Also fix some small things.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
10 years agonetworkGetDHCPLeases: Remove unnecessary error reporting
Nehal J Wani [Mon, 5 Jan 2015 17:49:24 +0000 (23:19 +0530)]
networkGetDHCPLeases: Remove unnecessary error reporting

Lack of a lease (whether mac is given or not) is a normal expected
scenario, since we are already filling in rv with nleases (which is
okay as 0 if there is no lease).  There is no need to raise an error.

This fixes:

> virsh # net-dhcp-leases --mac 00:50:56:c0:00:01  default
> error: Failed to get leases info for default
> error: internal error: no lease with matching MAC address: 00:50:56:c0:00:01

Signed-off-by: Nehal J Wani <nehaljw.kkd1@gmail.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoqemu: use a wrong name for guest panic status
Luyao Huang [Mon, 5 Jan 2015 09:09:33 +0000 (17:09 +0800)]
qemu: use a wrong name for guest panic status

https://bugzilla.redhat.com/show_bug.cgi?id=1178652

We will get a warning when we have a guest in paused
status (caused by kernel panic) and restart libvirtd,
warning message like this:

Qemu reported unknown VM status: 'guest-panicked'

and this seems because we set a wrong status name in
qemu_monitor.c, and from qemu qapi-schema.json file
we know this status should named 'guest-panicked'.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agomaint: update to latest gnulib
Eric Blake [Mon, 5 Jan 2015 23:38:50 +0000 (16:38 -0700)]
maint: update to latest gnulib

Another update is required to pick up today's gnulib fix for mingw
builds (now that gnulib turns on mingw's replacement printf that
understands %lld, it must also tell the compiler to respect the
improved definition of PRIdMAX and friends).

* .gnulib: Update to latest.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agovirnetlink: fix build on non-Linux
Eric Blake [Mon, 5 Jan 2015 22:08:08 +0000 (15:08 -0700)]
virnetlink: fix build on non-Linux

Commit 4dc04d3a added virNetlinkGetErrorCode, but forgot to provide
a fallback, which kills the build on mingw (among others):

  CCLD     libvirt.la
  Cannot export virNetlinkGetErrorCode: symbol not defined
  collect2: error: ld returned 1 exit status

* src/util/virnetlink.c (virNetlinkGetErrorCode): Provide fallback.

Signed-off-by: Eric Blake <eblake@redhat.com>
10 years agoReport error if a driver can't handle multiple IP addresses
Cédric Bosdonnat [Wed, 12 Nov 2014 15:58:38 +0000 (16:58 +0100)]
Report error if a driver can't handle multiple IP addresses

Drivers supporting one and only one IP address raise an error if more IP
addresses are configured.

10 years agoOpenvz --ipadd can be provided multiple times
Cédric Bosdonnat [Wed, 12 Nov 2014 08:30:09 +0000 (09:30 +0100)]
Openvz --ipadd can be provided multiple times

Vzctl man page says that --ipadd can be provided multiple times to add
several IP addresses. Looping over the configured ip addresses to add
one --ipadd for each. This would even handle the multiple IPs handled
by openvz_conf.c

10 years agoLXC: honour network devices link state
Cédric Bosdonnat [Fri, 25 Jul 2014 13:24:29 +0000 (15:24 +0200)]
LXC: honour network devices link state

Don't activate LXC network device if <link state='down'/> has been set
in its configuration.

10 years agoLXC: use the new net devices routes definition
Cédric Bosdonnat [Thu, 24 Jul 2014 13:20:27 +0000 (15:20 +0200)]
LXC: use the new net devices routes definition

Actually set routes in lxc containers if there are defined ones.

10 years agolxc conf2xml: convert lxc.network.ipv[46].gateway
Cédric Bosdonnat [Thu, 24 Jul 2014 11:40:32 +0000 (13:40 +0200)]
lxc conf2xml: convert lxc.network.ipv[46].gateway

10 years agoDomain network devices can now have a <route> element
Cédric Bosdonnat [Thu, 24 Jul 2014 10:16:28 +0000 (12:16 +0200)]
Domain network devices can now have a <route> element

Network interfaces devices and host devices with net capabilities can
now have IPv4 and/or an IPv6 routes configured.

10 years agolxc conf2xml: convert ip addresses for hostdev NICs
Cédric Bosdonnat [Wed, 23 Jul 2014 16:00:12 +0000 (18:00 +0200)]
lxc conf2xml: convert ip addresses for hostdev NICs

10 years agoAllow network capabilities hostdev to configure IP addresses
Cédric Bosdonnat [Wed, 23 Jul 2014 15:14:00 +0000 (17:14 +0200)]
Allow network capabilities hostdev to configure IP addresses

10 years agolxc conf2xml: convert IP addresses
Cédric Bosdonnat [Wed, 23 Jul 2014 09:26:21 +0000 (11:26 +0200)]
lxc conf2xml: convert IP addresses

10 years agoLXC: set IP addresses to veth devices in the container
Cédric Bosdonnat [Tue, 22 Jul 2014 11:35:48 +0000 (13:35 +0200)]
LXC: set IP addresses to veth devices in the container

Uses the new virDomainNetDef ips to set the IP addresses on the network
interfaces in the container.

10 years agoDomain conf: allow more than one IP address for net devices
Cédric Bosdonnat [Tue, 22 Jul 2014 09:09:48 +0000 (11:09 +0200)]
Domain conf: allow more than one IP address for net devices

Add the possibility to have more than one IP address configured for a
domain network interface. IP addresses can also have a prefix to define
the corresponding netmask.

10 years agoRenamed virNetDevClearIPv4Address to virNetDevClearIPAddress
Cédric Bosdonnat [Wed, 6 Aug 2014 12:18:31 +0000 (14:18 +0200)]
Renamed virNetDevClearIPv4Address to virNetDevClearIPAddress

Make clear that virNetDevClearIPv4Address can also handle IPv6
addresses by changing the name

10 years agovirNetDevClearIPv4Address: netlink implementation
Cédric Bosdonnat [Wed, 6 Aug 2014 12:11:13 +0000 (14:11 +0200)]
virNetDevClearIPv4Address: netlink implementation

10 years agovirNetDevAddRoute: implementation using netlink
Cédric Bosdonnat [Wed, 6 Aug 2014 14:46:24 +0000 (16:46 +0200)]
virNetDevAddRoute: implementation using netlink

10 years agoRenamed virNetDevSetIPv4Address to virNetDevSetIPAddress
Cédric Bosdonnat [Tue, 5 Aug 2014 17:25:40 +0000 (19:25 +0200)]
Renamed virNetDevSetIPv4Address to virNetDevSetIPAddress

Renamed virNetDevSetIPv4Address as it also handles IPv6 addresses.

10 years agovirNetDevSetIPv4Address: libnl implementation
Cédric Bosdonnat [Tue, 5 Aug 2014 17:15:11 +0000 (19:15 +0200)]
virNetDevSetIPv4Address: libnl implementation

Add a default implementation of virNetDevSetIPv4Address using netlink
and libnl. This avoids requiring /usr/sbin/ip or /usr/sbin/ifconfig
external binaries.

10 years agoForgot to cleanup ifname_guest* in domain network def parsing
Cédric Bosdonnat [Thu, 24 Jul 2014 11:51:02 +0000 (13:51 +0200)]
Forgot to cleanup ifname_guest* in domain network def parsing

10 years agoFix error when starting a container after an error
Cédric Bosdonnat [Thu, 18 Dec 2014 14:42:06 +0000 (15:42 +0100)]
Fix error when starting a container after an error

The typical case for the problem is starting a domain needing a network
that isn't started. Even after starting the network, we get an unknown error
when starting the container.

This is due to dynamic security label not being removed.

10 years agomaint: fix date in local gnulib patch
Daniel P. Berrange [Mon, 5 Jan 2015 16:43:07 +0000 (16:43 +0000)]
maint: fix date in local gnulib patch

The local gnulib ssize_t.m4.diff patch no longer applied due to
changed context from the date change.

10 years agomaint: update to latest gnulib
Daniel P. Berrange [Mon, 5 Jan 2015 16:04:13 +0000 (16:04 +0000)]
maint: update to latest gnulib

Sync to latest gnulib to get files updated with 2015 copyright
date to fix syntax-check

* .gnulib: update to latest
* bootstrap: Regenerate from upstream

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
10 years agoTeach AppArmor, that /usr/lib64 may exist.
Cedric Bosdonnat [Mon, 15 Dec 2014 14:14:48 +0000 (15:14 +0100)]
Teach AppArmor, that /usr/lib64 may exist.

The apparmor profiles forgot about /usr/lib64 folders, just add lib64
as a possible alternative to lib in the paths

10 years agosrc/Makefile.am: fix build breaker for xenconfig
Pavel Hrdina [Mon, 5 Jan 2015 07:23:28 +0000 (08:23 +0100)]
src/Makefile.am: fix build breaker for xenconfig

Commit 2c78051a introduced build breaker with type in Makefile.am by
specifying wrong header file.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoAdd tests to xmconfigtest
Chunyan Liu [Tue, 23 Dec 2014 06:36:05 +0000 (14:36 +0800)]
Add tests to xmconfigtest

Add tests to testing HVM default features (pae, acpi, apic)
conversion from xm config to libvirt xml. If no pae|acpi|apic
specified in xm config, after conversion, libvirt xml should
by default include:
 <features>
   <pae/>
   <apic/>
   <acpi/>
 </features>

Signed-off-by: Chunyan Liu <cyliu@suse.com>
10 years agoxenconfig: set HVM pae/apic/acpi/ default to 1
Chunyan Liu [Tue, 23 Dec 2014 06:36:04 +0000 (14:36 +0800)]
xenconfig: set HVM pae/apic/acpi/ default to 1

According to xm.config manual, HVM pae|apic|acpi feature default
is 1 (enabled). But in conversion from xm config to libvirt xml,
if xm config doesn't contain pae|apic|acpi, it sets default value
to 0, this causes some problems in HVM guest.

Update parser codes to set HVM pae|apic|acpi default value to 1
to match xm config convension.

Signed-off-by: Chunyan Liu <cyliu@suse.com>
10 years agolibxl: Add support for parsing/formating Xen XL config
Kiarie Kahurani [Thu, 11 Sep 2014 04:10:34 +0000 (07:10 +0300)]
libxl: Add support for parsing/formating Xen XL config

Now that xenconfig supports parsing and formatting Xen's
XL config format, integrate it into the libxl driver's
connectDomainXML{From,To}Native functions.

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agotests: Tests for the xen-xl parser
Kiarie Kahurani [Thu, 11 Sep 2014 04:10:35 +0000 (07:10 +0300)]
tests: Tests for the xen-xl parser

add tests for the xen_xl config parser

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agosrc/xenconfig: Xen-xl parser
Kiarie Kahurani [Thu, 11 Sep 2014 04:10:33 +0000 (07:10 +0300)]
src/xenconfig: Xen-xl parser

Introduce a Xen xl parser

This parser allows for users to convert the new xl disk format and
spice graphics config to libvirt xml format and vice versa. Regarding
the spice graphics config, the code is pretty much straight forward.
For the disk {formating, parsing}, this parser takes care of the new
xl format which include positional parameters and key/value parameters.
In xl format disk config a <diskspec> consists of parameters separated by
commas. If the parameters do not contain an '=' they are automatically
assigned to certain options following the order below

   target, format, vdev, access

The above are the only mandatory parameters in the <diskspec> but there
are many more disk config options. These options can be specified as
key=value pairs. This takes care of the rest of the options such as

  devtype, backend, backendtype, script, direct-io-safe,

The positional paramters can also be specified in key/value form
for example

    /dev/vg/guest-volume,,hda
    /dev/vg/guest-volume,raw,hda,rw
    format=raw, vdev=hda, access=rw, target=/dev/vg/guest-volume

are interpleted to one config.

In xm format, the above diskspec would be written as

phy:/dev/vg/guest-volume,hda,w

The disk parser is based on the same parser used successfully by
the Xen project for several years now.  Ian Jackson authored the
scanner, which is used by this commit with mimimal changes.  Only
the PREFIX option is changed, to produce function and file names
more consistent with libvirt's convention.

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agosrc/xenconfig: Export helper functions
Kiarie Kahurani [Thu, 11 Sep 2014 04:10:32 +0000 (07:10 +0300)]
src/xenconfig: Export helper functions

Export helper functions for reuse in getting values
from a virConfPtr object

Signed-off-by: Kiarie Kahurani <davidkiarie4@gmail.com>
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
10 years agocapabilities: Format <domain/> properly
Michal Privoznik [Thu, 11 Dec 2014 15:11:49 +0000 (16:11 +0100)]
capabilities: Format <domain/> properly

The <domain/> element under /capabilities/guest/arch/ can have no
child elements. If that's the case we format:

        <domain type='xen'>
        </domain>

instead of simpler:

        <domain type='xen'/>

This commit fixes that.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoparallels: report, that cdrom image is raw
Dmitry Guryanov [Tue, 23 Dec 2014 13:23:34 +0000 (16:23 +0300)]
parallels: report, that cdrom image is raw

VIR_STORAGE_FILE_AUTO should be used only in xml provided to
libvirt by user, if I understood correctly. Driver should
set storage source format to specific disk format in
*DomainGetXMLDesc.

CDROMs in PCS use raw image format.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
10 years agotests: Set up two more overrides for root builders
Martin Kletzander [Tue, 23 Dec 2014 05:10:55 +0000 (06:10 +0100)]
tests: Set up two more overrides for root builders

There are two more places after commit 3865941b that need to be adapted
in order to get rid of some test failures when building as root.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoqemu: Fix coverity issues after refcount refactoring
Martin Kletzander [Tue, 23 Dec 2014 04:32:45 +0000 (05:32 +0100)]
qemu: Fix coverity issues after refcount refactoring

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agotest: fix nwfilter tests following changes in virfirewall.c
Stefan Berger [Mon, 22 Dec 2014 21:57:21 +0000 (16:57 -0500)]
test: fix nwfilter tests following changes in virfirewall.c

Some of the nwfilter tests are now failing since --concurrent shows
up in the ebtables command. To avoid this, implement a function
preventing the probing for lock support in the eb/iptables tools
and use it in the tests.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
10 years agoqemu: completely rework reference counting
Martin Kletzander [Thu, 4 Dec 2014 13:41:36 +0000 (14:41 +0100)]
qemu: completely rework reference counting

There is one problem that causes various errors in the daemon.  When
domain is waiting for a job, it is unlocked while waiting on the
condition.  However, if that domain is for example transient and being
removed in another API (e.g. cancelling incoming migration), it get's
unref'd.  If the first call, that was waiting, fails to get the job, it
unref's the domain object, and because it was the last reference, it
causes clearing of the whole domain object.  However, when finishing the
call, the domain must be unlocked, but there is no way for the API to
know whether it was cleaned or not (unless there is some ugly temporary
variable, but let's scratch that).

The root cause is that our APIs don't ref the objects they are using and
all use the implicit reference that the object has when it is in the
domain list.  That reference can be removed when the API is waiting for
a job.  And because each domain doesn't do its ref'ing, it results in
the ugly checking of the return value of virObjectUnref() that we have
everywhere.

This patch changes qemuDomObjFromDomain() to ref the domain (using
virDomainObjListFindByUUIDRef()) and adds qemuDomObjEndAPI() which
should be the only function in which the return value of
virObjectUnref() is checked.  This makes all reference counting
deterministic and makes the code a bit clearer.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agoutil: Fix possible NULL dereference
Martin Kletzander [Fri, 19 Dec 2014 16:40:41 +0000 (17:40 +0100)]
util: Fix possible NULL dereference

Commit 1a80b97d, which added the virCgroupHasEmptyTasks() function
forgot that the parameter @cgroup may be NULL and did not check that.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agomaint: update .mailmap
Claudio Bley [Sat, 20 Dec 2014 23:12:00 +0000 (00:12 +0100)]
maint: update .mailmap

Add an email alias after updating my email address in commit 738a2ae.

10 years agoFix typo s/interpetation/interpretation/
Claudio Bley [Sat, 20 Dec 2014 21:02:19 +0000 (22:02 +0100)]
Fix typo s/interpetation/interpretation/

Fix the typo in struct virSecurityModel's comment for its doi field.

10 years agoUpdate my email address in AUTHORS.in
Claudio Bley [Fri, 19 Dec 2014 21:29:54 +0000 (22:29 +0100)]
Update my email address in AUTHORS.in

10 years agodocs: split typedef and struct definition for apibuild.py
Claudio Bley [Thu, 18 Dec 2014 20:50:20 +0000 (21:50 +0100)]
docs: split typedef and struct definition for apibuild.py

The members of struct virSecurityLabel and struct virSecurityModel
were not shown in the libvirt API docs because the corresponding
<field> elements were missing from the libvirt-api.xml.

The reason is that apibuild.py does not cope well with typedef's
using inline struct definitions. It fails to associate the comment
with the typedef and because of this refuses to write out the
field of the struct.

10 years agodisable vCPU pinning with TCG mode
Daniel P. Berrange [Thu, 18 Dec 2014 16:34:48 +0000 (16:34 +0000)]
disable vCPU pinning with TCG mode

Although QMP returns info about vCPU threads in TCG mode, the
data it returns is mostly lies. Only the first vCPU has a valid
thread_id returned. The thread_id given for the other vCPUs is
in fact the main emulator thread. All vCPUs actually run under
the same thread in TCG mode.

Our vCPU pinning code is not at all able to cope with this
so if you try to set CPU affinity per-vCPU you end up with
wierd errors

error: Failed to start domain instance-00000007
error: cannot set CPU affinity on process 24365: Invalid argument

Since few people will care about the performance of TCG with
strict CPU pinning, lets just disable that for now, so we get
a clear error message

error: Failed to start domain instance-00000007
error: Requested operation is not valid: cpu affinity is not supported

10 years agoDon't setup fake CPU pids for old QEMU
Daniel P. Berrange [Thu, 18 Dec 2014 16:34:39 +0000 (16:34 +0000)]
Don't setup fake CPU pids for old QEMU

The code assumes that def->vcpus == nvcpupids, so when we setup
fake CPU pids for old QEMU with nvcpupids == 1, we cause the
later code to read off the end of the array. This has fun results
like sche_setaffinity(0, ...) which changes libvirtd's own CPU
affinity, or even better sched_setaffinity($RANDOM, ...) which
changes the affinity of a random OS process.

10 years agoqemu: Create memory-backend-{ram,file} iff needed
Michal Privoznik [Thu, 18 Dec 2014 11:36:48 +0000 (12:36 +0100)]
qemu: Create memory-backend-{ram,file} iff needed

Libvirt BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1175397
QEMU BZ:    https://bugzilla.redhat.com/show_bug.cgi?id=1170093

In qemu there are two interesting arguments:

1) -numa to create a guest NUMA node
2) -object memory-backend-{ram,file} to tell qemu which memory
region on which host's NUMA node it should allocate the guest
memory from.

Combining these two together we can instruct qemu to create a
guest NUMA node that is tied to a host NUMA node. And it works
just fine. However, depending on machine type used, there might
be some issued during migration when OVMF is enabled (see QEMU
BZ). While this truly is a QEMU bug, we can help avoiding it. The
problem lies within the memory backend objects somewhere. Having
said that, fix on our side consists on putting those objects on
the command line if and only if needed. For instance, while
previously we would construct this (in all ways correct) command
line:

    -object memory-backend-ram,size=256M,id=ram-node0 \
    -numa node,nodeid=0,cpus=0,memdev=ram-node0

now we create just:

    -numa node,nodeid=0,cpus=0,mem=256

because the backend object is obviously not tied to any specific
host NUMA node.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoRemove redundant cleanup in qemuDomainAttachVirtioDiskDevice
Ján Tomko [Thu, 18 Dec 2014 11:45:04 +0000 (12:45 +0100)]
Remove redundant cleanup in qemuDomainAttachVirtioDiskDevice

Commit ca91ba7 moved these into the qemuDomainPrepareDisk helper,
but forgot to remove them from here as well.