29 hours agodocs: bhyve: document recent changes master v1.2.7-rc2
Roman Bogorodskiy [Thu, 24 Jul 2014 15:52:11 +0000]
docs: bhyve: document recent changes

 - mention that one disk and one network limitation
   is no longer current for 1.2.6 and newer
 - add 'cdrom' device to the sample domain XML

31 hours agoblockcommit: turn on active commit
Eric Blake [Wed, 18 Jun 2014 23:16:27 +0000]
blockcommit: turn on active commit

With this in place, I can (finally!) now do:

virsh blockcommit $dom vda --shallow --verbose --pivot

and watch qemu shorten the backing chain by one, followed by
libvirt automatically updating the dumpxml output, effectively
undoing the work of virsh snapshot-commit --no-metadata --disk-only.
Commit is SOOOO much faster than blockpull, when I'm still fairly
close in time to when the temporary qcow2 wrapper file was created
via a snapshot operation!

* src/qemu/qemu_driver.c (qemuDomainBlockCommit): Implement live

Signed-off-by: Eric Blake <>

31 hours agoblockcommit: track job type in xml
Eric Blake [Tue, 29 Jul 2014 03:46:44 +0000]
blockcommit: track job type in xml

A future patch is going to wire up qemu active block commit jobs;
but as they have similar events and are canceled/pivoted in the
same way as block copy jobs, it is easiest to track all bookkeeping
for the commit job by reusing the <mirror> element.  This patch
adds domain XML to track which job was responsible for creating a
mirroring situation, and adds a job='copy' attribute to all
existing uses of <mirror>.  Along the way, it also massages the
qemu monitor backend to read the new field in order to generate
the correct type of libvirt job (even though it requires a
future patch to actually cause a qemu event that can be reported
as an active commit).  It also prepares to update persistent XML
to match changes made to live XML when a copy completes.

* docs/schemas/domaincommon.rng: Enhance schema.
* docs/ Document it.
* src/conf/domain_conf.h (_virDomainDiskDef): Add a field.
* src/conf/domain_conf.c (virDomainBlockJobType): String conversion.
(virDomainDiskDefParseXML): Parse job type.
(virDomainDiskDefFormat): Output job type.
* src/qemu/qemu_process.c (qemuProcessHandleBlockJob): Distinguish
active from regular commit.
* src/qemu/qemu_driver.c (qemuDomainBlockCopy): Set job type.
(qemuDomainBlockPivot, qemuDomainBlockJobImpl): Clean up job type
on completion.
* tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-mirror-old.xml:
Update tests.
* tests/qemuxml2argvdata/qemuxml2argv-disk-mirror.xml: Likewise.
* tests/qemuxml2argvdata/qemuxml2argv-disk-active-commit.xml: New
* tests/qemuxml2xmltest.c (mymain): Drive new test.

Signed-off-by: Eric Blake <>

31 hours agoDomain config: write <features/> if some capabilities are set.
Cédric Bosdonnat [Wed, 30 Jul 2014 09:20:59 +0000]
Domain config: write <features/> if some capabilities are set.

If all features are set to default (including the capabilities policy),
but some capabilities are toggled, we need to output the <features>
element when formatting the config.

39 hours agodocs: fix an incorrect example for memoryBacking
Chen Hanxiao [Wed, 30 Jul 2014 03:03:15 +0000]
docs: fix an incorrect example for memoryBacking

commit 136ad49740f017aabcac48d02d2df6ab7b0195e9
forgot to add an end-tags for hugepages.

Signed-off-by: Chen Hanxiao <>

45 hours agoblockjob: properly track blockcopy xml changes on disk
Eric Blake [Tue, 29 Jul 2014 20:42:45 +0000]
blockjob: properly track blockcopy xml changes on disk

We were not directly saving the domain XML to file after starting
or finishing a blockcopy.  Without the startup write, a libvirtd
restart in the middle of a copy job would forget that the job was
underway.  Then at pivot, we were indirectly writing new XML in
reaction to events that occur as we stop and restart the guest CPUs.
But there was a race: since pivot is an async action, it is possible
that libvirtd is restarted before the pivot completes, so if XML
changes during the event, that change was not written.  The original
blockcopy code cleared out the <mirror> element prior to restarting
the CPUs, but this is also a race, observed if a user does an async
pivot and a dumpxml before the event occurs.  Furthermore, this race
will interfere with active commit in a future patch, because that
code will rely on the <mirror> element at the time of the qemu event
to determine whether to inform the user of a normal commit or an
active commit.

Fix things by saving state any time we modify live XML, while
delaying XML disk modifications until after the event completes.  We
still need a to teach libvirtd restarts to examine all existing
<mirror> elements to see if the job completed in the meantime (that
is, if libvirtd misses the event, the updated state still needs to be
updated in live XML), but that will be a later patch, in part because
we also need to to start taking advantage of newer qemu's ability to
keep the job around after completion rather than the current usage
where the job disappears both on error and on success.

* src/qemu/qemu_driver.c (qemuDomainBlockCopy): Track XML change
on disk.
(qemuDomainBlockJobImpl, qemuDomainBlockPivot): Move job-end XML
* src/qemu/qemu_process.c (qemuProcessHandleBlockJob):

Signed-off-by: Eric Blake <>

45 hours agoblockcopy: add more XML for state tracking
Eric Blake [Mon, 28 Jul 2014 22:25:28 +0000]
blockcopy: add more XML for state tracking

Doing a blockcopy operation across a libvirtd restart is not very
robust at the moment.  In particular, we are clearing the <mirror>
element prior to telling qemu to finish the job.  Also, thanks to the
ability to request async completion, the user can easily regain
control prior to qemu actually finishing the effort, and they should
be able to poll the domain XML to see if the job is still going.

A future patch will fix things to actually wait until qemu is done
before modifying the XML to reflect the job completion.  But since
qemu issues identical BLOCK_JOB_COMPLETE events regardless of whether
the job was cancelled (kept the original disk) or completed (pivoted
to the new disk), we have to track which of the two operations were
used to end the job.  Furthermore, we'd like to avoid attempts to
end a job where we are already waiting on an earlier request to qemu
to end the job.  Likewise, if we miss the qemu event (perhaps because
it arrived during a libvirtd restart), we still need enough state
recorded to be able to determine how to modify the domain XML once
we reconnect to qemu and manually learn whether the job still exists.

Although this patch doesn't actually fix the problem, it is a
preliminary step that makes it possible to track whether a job
has already begun steps towards completion.

* src/conf/domain_conf.h (virDomainDiskMirrorState): New enum.
(_virDomainDiskDef): Convert bool mirroring to new enum.
* src/conf/domain_conf.c (virDomainDiskDefParseXML)
(virDomainDiskDefFormat): Handle new values.
* src/qemu/qemu_process.c (qemuProcessHandleBlockJob): Adjust
* src/qemu/qemu_driver.c (qemuDomainBlockPivot)
(qemuDomainBlockJobImpl): Likewise.
* docs/schemas/domaincommon.rng (diskMirror): Expose new values.
* docs/ (elementsDisks): Document it.
* tests/qemuxml2argvdata/qemuxml2argv-disk-mirror.xml: Test it.

Signed-off-by: Eric Blake <>

2 days agoqemu: error out if PCI passthrough type is not supported
Hu Tao [Mon, 28 Jul 2014 08:45:23 +0000]
qemu: error out if PCI passthrough type is not supported

If PCI passthrough type is not supported, we should error out rather than
continue building the command line.

When starting a domain, the type has been already checked by
qemuPrepareHostdevPCICheckSupport() before building qemu command line,
so the problem doesn't emerge.

But when coverting a domain xml without specifying passthrough type explictly
to qemu arg, we will get a malformed command line.

the xml:

    <hostdev mode='subsystem' type='pci' managed='yes'>
        <address domain='0x0001' bus='0x03' slot='0x00' function='0x0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>

the converted command line:

  -device ,host=0001:03:00.0,id=hostdev0,bus=pci.0,addr=0x5

After this patch, virsh gives an error message:

  virsh domxml-to-native qemu-argv /tmp/tmp.xml
  error: internal error: invalid PCI passthrough type 'default'

Signed-off-by: Hu Tao <>

2 days agoqemu: Implement ./hugepages/page/[@size, @unit, @nodeset]
Michal Privoznik [Wed, 23 Jul 2014 15:37:21 +0000]
qemu: Implement ./hugepages/page/[@size, @unit, @nodeset]

Signed-off-by: Michal Privoznik <>

2 days agodomain: Introduce ./hugepages/page/[@size, @unit, @nodeset]
Michal Privoznik [Wed, 23 Jul 2014 15:37:20 +0000]
domain: Introduce ./hugepages/page/[@size, @unit, @nodeset]

      <page size="1" unit="G" nodeset="0-3,5"/>
      <page size="2" unit="M" nodeset="4"/>

Signed-off-by: Michal Privoznik <>

2 days agovirbitmap: Introduce virBitmapOverlaps
Michal Privoznik [Wed, 23 Jul 2014 15:37:19 +0000]
virbitmap: Introduce virBitmapOverlaps

This internal API just checks if two bitmaps intersect or not.

Signed-off-by: Michal Privoznik <>

2 days agoqemu: Utilize virFileFindHugeTLBFS
Michal Privoznik [Wed, 23 Jul 2014 15:37:18 +0000]
qemu: Utilize virFileFindHugeTLBFS

Use better detection of hugetlbfs mount points. Yes, there can be
multiple mount points each serving different huge page size.

Since we already have ability to override the mount point in the
qemu.conf file, this crazy backward compatibility code is brought in.
Now we allow multiple mount points, so the "hugetlbfs_mount" option
must take an list of strings (mount points). But previously, it was
just a string, so we must accept both types now.

Signed-off-by: Michal Privoznik <>

2 days agoIntroduce virFileFindHugeTLBFS
Michal Privoznik [Wed, 23 Jul 2014 15:37:17 +0000]
Introduce virFileFindHugeTLBFS

This should iterate over mount tab and search for hugetlbfs among with
looking for the default value of huge pages.

Signed-off-by: Michal Privoznik <>

2 days agostorage: create: Create files with correct mode
Peter Krempa [Mon, 28 Jul 2014 14:09:39 +0000]
storage: create: Create files with correct mode

Use correct mode when pre-creating files (for snapshots). The refactor
changing to storage driver usage caused a regression as some systems
created the file with 000 permissions forbidding qemu to write the file.

Pass mode to the creating functions to avoid the problem.

Regression since 185e07a5f82bc0692324f3ee13b4816d71b653c1.

2 days agoschema: bhyve and nmdm updates
Roman Bogorodskiy [Fri, 25 Jul 2014 16:43:49 +0000]
schema: bhyve and nmdm updates

* docs/schemas/domaincommon.rng: Add bhyve domain type, nmdm
  serial type and master and slave optional attributes for
  serial that are used by nmdm
* tests/domainschematest: Add bhyvexml2argvdata directory
  to validate bhyve XMLs

2 days agonodedev: fix a uninitialized variable build failure
Chen Hanxiao [Tue, 29 Jul 2014 02:05:08 +0000]
nodedev: fix a uninitialized variable build failure

Fix a -Werror=maybe-uninitialized warning

Signed-off-by: Chen Hanxiao <>
Signed-off-by: Eric Blake <>

2 days agonodedev: fix pci express memory leak
Eric Blake [Wed, 23 Jul 2014 04:38:30 +0000]
nodedev: fix pci express memory leak

Leak introduced in commit 16ebf10f (v1.2.6), detected by valgrind:

==9816== 216 (96 direct, 120 indirect) bytes in 6 blocks are definitely lost in loss record 665 of 821
==9816==    at 0x4A081D4: calloc (in /usr/lib64/valgrind/
==9816==    by 0x50836FB: virAlloc (viralloc.c:144)
==9816==    by 0x1DBDBE27: udevProcessPCI (node_device_udev.c:546)
==9816==    by 0x1DBDD79D: udevGetDeviceDetails (node_device_udev.c:1293)

* src/util/virpci.h (virPCIEDeviceInfoFree): New prototype.
* src/util/virpci.c (virPCIEDeviceInfoFree): New function.
* src/conf/node_device_conf.c (virNodeDevCapsDefFree): Clear
pci_express under pci case.
(virNodeDevCapPCIDevParseXML): Avoid leak.
* src/node_device/node_device_udev.c (udevProcessPCI): Likewise.
* src/libvirt_private.syms (virpci.h): Export it.

Signed-off-by: Eric Blake <>

2 days agonodedev: move pci express types to virpci.h
Eric Blake [Thu, 24 Jul 2014 01:52:22 +0000]
nodedev: move pci express types to virpci.h

Finding virPCIE* code is more intuitive if located in virpci.h
instead of node_device_conf.h.

* src/conf/node_device_conf.h (virPCIELinkSpeed, virPCIELink)
(virPCIEDeviceInfo): Move...
* src/util/virpci.h:
* src/conf/node_device_conf.c (virPCIELinkSpeed): Likewise.

Signed-off-by: Eric Blake <>

2 days agonodedev: let compiler help us on switches
Eric Blake [Thu, 24 Jul 2014 02:20:22 +0000]
nodedev: let compiler help us on switches

The compiler can alert us to places where we need to expand switch
statements because we add a new enum value, but only if we don't
have a default case.

* src/conf/node_device_conf.c (virNodeDeviceDefFormat)
(virNodeDevCapsDefParseXML, virNodeDevCapsDefFree): Drop default

Signed-off-by: Eric Blake <>

3 days agoqemu: sound: Fix uninitialized model string
Peter Krempa [Mon, 28 Jul 2014 09:38:35 +0000]
qemu: sound: Fix uninitialized model string

Commit e5f36698e3efc3d258b2996c7423c47e05ec52b2 introduces a
false-positive build failure in the sound card model handling switch.
Initialize the model to NULL although the value should never be used.

3 days agoqemu: sound: Handle all possible sound cards in switch statement
Peter Krempa [Fri, 25 Jul 2014 08:24:40 +0000]
qemu: sound: Handle all possible sound cards in switch statement

Use correct type in the switch and handle all sound card models in it so
that the compiler tracks additions.

3 days agoconf: RNG: Always fill in default random source path for default backend
Peter Krempa [Fri, 25 Jul 2014 08:00:49 +0000]
conf: RNG: Always fill in default random source path for default backend

Libvirt documents that the default entropy source for the 'random'
backend of a RNG device is /dev/random. Instead of storing and
propagating NULL across our code and checking it in multiple places fill
the default in the post parse callback and use that in the other places.

6 days agospec: arm and aarch64 have kvm support with F20+ v1.2.7-rc1
Cole Robinson [Fri, 18 Jul 2014 17:16:35 +0000]
spec: arm and aarch64 have kvm support with F20+

6 days agospec: Use power64 macro
Cole Robinson [Fri, 18 Jul 2014 17:15:45 +0000]
spec: Use power64 macro

Covers the whole ppc64 family. Example bug for binutils:

6 days agoqemu: Fix starting of VMs with empty CDROM drives
Peter Krempa [Fri, 25 Jul 2014 11:15:47 +0000]
qemu: Fix starting of VMs with empty CDROM drives

Since 24e5cafba6dbc2722e05f92dc0ae31b0f938f9f0 (thankfully unreleased)
when a VM with an empty disk drive would be started the code would call
stat() on NULL path as a check was missing from the callback rendering
machines unstartable.

Report success when the path is empty (denoting an empty drive).

6 days agolibvirt-guests: fix some typos in a comment
Martin Kletzander [Fri, 25 Jul 2014 09:46:10 +0000]
libvirt-guests: fix some typos in a comment

Signed-off-by: Martin Kletzander <>

6 days agoutil: virTimeFieldsThenRaw never returns negative
James [Fri, 25 Jul 2014 08:13:57 +0000]
util: virTimeFieldsThenRaw never returns negative

virTimeFieldsThenRaw will never return negative result, so I clean up
the related meaningless judgements to make it better.

Signed-off-by: James <>
Signed-off-by: Martin Kletzander <>

6 days agolibvirt: Fix 'quest' typo in comment
Li Yang [Fri, 25 Jul 2014 07:53:45 +0000]
libvirt: Fix 'quest' typo in comment

Signed-off-by: Li Yang <>

6 days agotest: qemu: Add tests for multiple virtio-rng devices
Peter Krempa [Thu, 24 Jul 2014 13:15:20 +0000]
test: qemu: Add tests for multiple virtio-rng devices

6 days agovirtio-rng: allow multiple RNG devices
Peter Krempa [Mon, 25 Feb 2013 22:31:11 +0000]
virtio-rng: allow multiple RNG devices

qemu supports adding multiple RNG devices. This patch allows libvirt to
support this.

6 days agoqemu: cgroup: Don't use NULL path on default backed RNGs
Peter Krempa [Thu, 24 Jul 2014 13:47:39 +0000]
qemu: cgroup: Don't use NULL path on default backed RNGs

The "random" backend for virtio-rng can be started with no path
specified which equals to /dev/random. The cgroup code didn't consider
this and called few of the functions with NULL resulting into:

 $ virsh start rng-vm
 error: Failed to start domain rng-vm
 error: Path '(null)' is not accessible: Bad address

Problem introduced by commit c6320d34637a9883e31c4081d418fc33a4277cf2

7 days agoqemuConnectGetDomainCapabilities: Report error on unknown arch
Michal Privoznik [Thu, 24 Jul 2014 14:40:01 +0000]
qemuConnectGetDomainCapabilities: Report error on unknown arch

If user hasn't provided any @emulatorbin, the qemuCaps are
searched by @arch provided (which in fact can be guessed from the
host). However, there's no guarantee that the qemu binary for
@arch will exist.  Therefore qemu capabilities may be nonexistent
too. If that's the case, we should throw an error message prior
jumping onto 'cleanup' label as the helper lookup function
remains silent on no search result.

Signed-off-by: Michal Privoznik <>

7 days agoremove range checking for blkiotune weight
Martin Kletzander [Thu, 24 Jul 2014 11:43:47 +0000]
remove range checking for blkiotune weight

This was changed before:

but not everywhere in the code.


Signed-off-by: Martin Kletzander <>

7 days agobhyve: cdrom support
Roman Bogorodskiy [Sat, 19 Jul 2014 15:15:26 +0000]
bhyve: cdrom support

Add support for CDROM devices for bhyve driver using
bhyve(8)'s 'ahci-cd' device type.

As bhyve currently does not support media insertion at runtime,
disallow to start a domain with an empty source path for cdrom

7 days agovirsh: add option for selecting domdisplay type
Martin Kletzander [Thu, 24 Jul 2014 12:23:12 +0000]
virsh: add option for selecting domdisplay type


Signed-off-by: Martin Kletzander <>

7 days agovirsh: add error message when no graphical display is found
Martin Kletzander [Thu, 24 Jul 2014 12:18:23 +0000]
virsh: add error message when no graphical display is found

Signed-off-by: Martin Kletzander <>

7 days agohostdev: Introduce virDomainHostdevSubsysSCSIiSCSI
John Ferlan [Wed, 9 Jul 2014 13:31:38 +0000]
hostdev: Introduce virDomainHostdevSubsysSCSIiSCSI

Create the structures and API's to hold and manage the iSCSI host device.
This extends the 'scsi_host' definitions added in commit id '5c811dce'.
A future patch will add the XML parsing, but that code requires some
infrastructure to be in place first in order to handle the differences
between a 'scsi_host' and an 'iSCSI host' device.

7 days agoAdd virConnectPtr for qemuBuildSCSIHostdevDrvStr
John Ferlan [Thu, 10 Jul 2014 15:16:15 +0000]
Add virConnectPtr for qemuBuildSCSIHostdevDrvStr

Add a conn for future patches to be able to grab the secret when
authenticating an iSCSI host device

7 days agohostdev: Introduce virDomainHostdevSubsysSCSIHost
John Ferlan [Fri, 20 Jun 2014 15:35:46 +0000]
hostdev: Introduce virDomainHostdevSubsysSCSIHost

Split virDomainHostdevSubsysSCSI further. In preparation for having
either SCSI or iSCSI data, create a union in virDomainHostdevSubsysSCSI
to contain just a virDomainHostdevSubsysSCSIHost to describe the
'scsi_host' host device

7 days agohostdev: Introduce virDomainHostdevSubsysSCSI
John Ferlan [Thu, 3 Jul 2014 21:01:10 +0000]
hostdev: Introduce virDomainHostdevSubsysSCSI

Create a separate typedef for the hostdev union data describing SCSI
Then adjust the code to use the new pointer

7 days agohostdev: Introduce virDomainHostdevSubsysPCI
John Ferlan [Thu, 3 Jul 2014 20:31:39 +0000]
hostdev: Introduce virDomainHostdevSubsysPCI

Create a separate typedef for the hostdev union data describing PCI.
Then adjust the code to use the new pointer

7 days agohostdev: Introduce virDomainHostdevSubsysUSB
John Ferlan [Thu, 3 Jul 2014 19:43:05 +0000]
hostdev: Introduce virDomainHostdevSubsysUSB

Create a separate typedef for the hostdev union data describing USB.
Then adjust the code to use the new pointer

7 days agoqemu: snapshot: Use storage driver to pre-create snapshot file
Peter Krempa [Mon, 30 Jun 2014 14:46:00 +0000]
qemu: snapshot: Use storage driver to pre-create snapshot file

Move the last operation done on local files to the storage driver API.

7 days agostorage: Implement virStorageFileCreate for local and gluster files
Peter Krempa [Mon, 30 Jun 2014 13:05:07 +0000]
storage: Implement virStorageFileCreate for local and gluster files

Add backends for this frontend function so that we can use it in the
snapshot creation code.

7 days agoqemu: Implement DAC driver chown callback to co-operate with storage drv
Peter Krempa [Thu, 10 Jul 2014 13:46:01 +0000]
qemu: Implement DAC driver chown callback to co-operate with storage drv

Use the storage driver to chown remote images.

7 days agosecurity: DAC: Plumb usage of chown callback
Peter Krempa [Thu, 10 Jul 2014 14:05:07 +0000]
security: DAC: Plumb usage of chown callback

Use the callback to set disk and storage image labels by modifying the
existing functions and adding wrappers to avoid refactoring a lot of the

7 days agosecurity: DAC: Introduce callback to perform image chown
Peter Krempa [Thu, 10 Jul 2014 12:17:24 +0000]
security: DAC: Introduce callback to perform image chown

To integrate the security driver with the storage driver we need to
pass a callback for a function that will chown storage volumes.

Introduce and document the callback prototype.

7 days agosecurity: DAC: Remove superfluous link resolution
Peter Krempa [Thu, 10 Jul 2014 13:20:24 +0000]
security: DAC: Remove superfluous link resolution

When restoring security labels in the dac driver the code would resolve
the file path and use the resolved one to be chown-ed. The setting code
doesn't do that. Remove the unnecessary code.

7 days agostorage: Add witness for checking storage volume use in security driver
Peter Krempa [Wed, 9 Jul 2014 14:52:06 +0000]
storage: Add witness for checking storage volume use in security driver

With my intended use of storage driver assist to chown files on remote
storage we will need a witness that will tell us whether the given
storage volume supports operations needed by the storage driver.

7 days agostorage: Implement storage driver helper to chown disk images
Peter Krempa [Wed, 9 Jul 2014 14:42:10 +0000]
storage: Implement storage driver helper to chown disk images

Gluster storage works on a similar principle to NFS where it takes the
uid and gid of the actual process and uses it to access the storage
volume on the remote server. This introduces a need to chown storage
files on gluster via native API.

7 days agoqemuConnectGetDomainCapabilities: Use wiser defaults
Michal Privoznik [Thu, 17 Jul 2014 09:06:09 +0000]
qemuConnectGetDomainCapabilities: Use wiser defaults

Up to now, users have to pass two arguments at least: domain virt type
('qemu' vs 'kvm') and one of emulatorbin or architecture. This is not
much user friendly. Nowadays users mostly use KVM and share the host
architecture with the guest. So now, the API (and subsequently virsh
command) can be called with all NULLs  (without any arguments).

Before this patch:
 # virsh domcapabilities
 error: failed to get emulator capabilities
 error: virttype_str in qemuConnectGetDomainCapabilities must not be NULL

 # virsh domcapabilities kvm
 error: failed to get emulator capabilities
 error: invalid argument: at least one of emulatorbin or architecture fields must be present


 # virsh domcapabilities
   <vcpu max='255'/>

Signed-off-by: Michal Privoznik <>

7 days agonumatune: finish the split from domain_conf and remove all dependencies
Martin Kletzander [Mon, 21 Jul 2014 09:32:33 +0000]
numatune: finish the split from domain_conf and remove all dependencies

This patch adds back the virDomainDef typedef into domain_conf and
makes all the numatune_conf functions independent of any virDomainDef

Signed-off-by: Martin Kletzander <>

7 days agoleaseshelper: avoid mem leak after storing lease entries
Nehal J Wani [Wed, 23 Jul 2014 22:05:13 +0000]
leaseshelper: avoid mem leak after storing lease entries

Contents of existing lease file were being stored in a variable
which was never freed.

7 days agomaint: simplify some syntax check exemptions
Eric Blake [Fri, 18 Jul 2014 21:22:08 +0000]
maint: simplify some syntax check exemptions

Commit 5028160 accidentally weakened the strtol prohibitions to
skip ALL files under src/util instead of the former situation of
just protecting util/virsexpr.c; even though NONE of the files
in that directory need any protection.

Shorten some long lines while at it.

* (exclude_file_name_regexp--sc_prohibit_strtol): No need
to exclude all of util.
(exclude_file_name_regexp--sc_prohibit_sprintf): Reduce long line.
(exclude_file_name_regexp--sc_prohibit_raw_allocation): Likewise.

Signed-off-by: Eric Blake <>

7 days agoconf: avoid memory leaks while parsing seclabel
Eric Blake [Wed, 23 Jul 2014 04:02:56 +0000]
conf: avoid memory leaks while parsing seclabel

Our seclabel parsing was repeatedly assigning malloc'd data into a
temporary variable, without first freeing the previous use.  Among
other leaks flagged by valgrind:

==9312== 8 bytes in 1 blocks are definitely lost in loss record 88 of 821
==9312==    at 0x4A0645D: malloc (in /usr/lib64/valgrind/
==9312==    by 0x8C40369: strdup (strdup.c:42)
==9312==    by 0x50EA799: virStrdup (virstring.c:676)
==9312==    by 0x50FAEB9: virXPathString (virxml.c:90)
==9312==    by 0x50FAF1E: virXPathStringLimit (virxml.c:112)
==9312==    by 0x510F516: virSecurityLabelDefParseXML (domain_conf.c:4571)
==9312==    by 0x510FB20: virSecurityLabelDefsParseXML (domain_conf.c:4720)

While it was multiple problems, it looks like commit da78351 (thankfully
unreleased) was to blame for all of them.

* src/conf/domain_conf.c (virSecurityLabelDefParseXML): Plug leaks
detected by valgrind.

Signed-off-by: Eric Blake <>

8 days agonwfilter: plug memory leak with firewall
Eric Blake [Wed, 23 Jul 2014 04:18:07 +0000]
nwfilter: plug memory leak with firewall

Introduced in commit 70571ccc (v1.2.4). Caught by valgrind:

==9816== 170 (32 direct, 138 indirect) bytes in 1 blocks are definitely lost in loss record 646 of 821
==9816==    at 0x4A081D4: calloc (in /usr/lib64/valgrind/
==9816==    by 0x50836FB: virAlloc (viralloc.c:144)
==9816==    by 0x50AEC2B: virFirewallNew (virfirewall.c:204)
==9816==    by 0x1E2308ED: ebiptablesDriverProbeStateMatch (nwfilter_ebiptables_driver.c:3715)
==9816==    by 0x1E2309AD: ebiptablesDriverInit (nwfilter_ebiptables_driver.c:3742)

* src/nwfilter/nwfilter_ebiptables_driver.c
(ebiptablesDriverProbeStateMatch): Properly clean up.

Signed-off-by: Eric Blake <>

8 days agometadata: track title edits across libvirtd restart
Eric Blake [Tue, 22 Jul 2014 15:41:05 +0000]
metadata: track title edits across libvirtd restart

Although the edits were changing in-memory XML, it was not flushed
to disk; so unless some other action changes XML, a libvirtd restart
would lose the changed information.

* src/conf/domain_conf.c (virDomainObjSetMetadata): Add parameter,
to save live status across restarts.
(virDomainSaveXML): Allow for test driver.
* src/conf/domain_conf.h (virDomainObjSetMetadata): Adjust
* src/bhyve/bhyve_driver.c (bhyveDomainSetMetadata): Adjust caller.
* src/lxc/lxc_driver.c (lxcDomainSetMetadata): Likewise.
* src/qemu/qemu_driver.c (qemuDomainSetMetadata): Likewise.
* src/test/test_driver.c (testDomainSetMetadata): Likewise.

Signed-off-by: Eric Blake <>

8 days agodocs: Point to list of valid pool target volume formats
John Ferlan [Wed, 23 Jul 2014 12:36:50 +0000]
docs: Point to list of valid pool target volume formats

Rather than point off to some nefarious "pool-specific docs" page when
describing the "format" field for the target pool provide a link to the
storage driver page which describes the various valid formats for each
pool type.  Also make it a bit more clear that if a valid format isn't
specified, then the type field is ignored.

8 days agospec: Enable sanlock on qemu_kvm_arches for RHEL
Jiri Denemark [Wed, 23 Jul 2014 07:04:22 +0000]
spec: Enable sanlock on qemu_kvm_arches for RHEL

Signed-off-by: Jiri Denemark <>

8 days agoAdded myself in
Cédric Bosdonnat [Wed, 23 Jul 2014 14:23:46 +0000]
Added myself in

8 days agoDocumented VIR_DOMAIN_FEATURE_CAPABILITIES use of virDomainCapabilitesPolicy
Cédric Bosdonnat [Wed, 23 Jul 2014 14:21:59 +0000]
Documented VIR_DOMAIN_FEATURE_CAPABILITIES use of virDomainCapabilitesPolicy

8 days agoIntroduce virTristateSwitch enum
Ján Tomko [Fri, 27 Jun 2014 15:18:53 +0000]
Introduce virTristateSwitch enum

For the values "default", "on", "off"


8 days agoIntroduce virTristateBool enum type
Ján Tomko [Fri, 27 Jun 2014 15:16:54 +0000]
Introduce virTristateBool enum type

Replace all three-state (default/yes/no) enums with it:

8 days agoFix build after 47e5b5ae3262f140955abd57bbb13337c65a3497
Peter Krempa [Wed, 23 Jul 2014 08:19:20 +0000]
Fix build after 47e5b5ae3262f140955abd57bbb13337c65a3497

The patch described above introduced two problems caught by the compiler
and thus breaking the build.

One of the problems was comparison of unsigned with < 0 and the second
one jumped a variable init.

8 days agoLXC: show used memory as 0 when domain is not active
Chen Hanxiao [Thu, 17 Jul 2014 09:28:29 +0000]
LXC: show used memory as 0 when domain is not active

virsh # dominfo chx3
State:          shut off
Max memory:     92160 KiB
Used memory:    92160 KiB

virsh # dominfo container1
State:          shut off
Max memory:     92160 KiB
Used memory:    0 KiB

Similar to qemu cases.

Signed-off-by: Chen Hanxiao <>

8 days agolxc domain from xml: convert lxc.cap.drop
Cédric Bosdonnat [Fri, 18 Jul 2014 08:02:30 +0000]
lxc domain from xml: convert lxc.cap.drop

8 days agolxc: allow to keep or drop capabilities
Cédric Bosdonnat [Fri, 18 Jul 2014 08:02:29 +0000]
lxc: allow to keep or drop capabilities

Added <capabilities> in the <features> section of LXC domains
configuration. This section can contain elements named after the
capabilities like:

  <mknod state="on"/>, keep CAP_MKNOD capability
  <sys_chroot state="off"/> drop CAP_SYS_CHROOT capability

Users can restrict or give more capabilities than the default using
this mechanism.

8 days agoLXC: create a bind mount for sysfs when enable userns but disable netns
Chen Hanxiao [Mon, 14 Jul 2014 10:01:51 +0000]
LXC: create a bind mount for sysfs when enable userns but disable netns

kernel commit 7dc5dbc879bd0779924b5132a48b731a0bc04a1e
forbid us doing a fresh mount for sysfs
when enable userns but disable netns.
This patch will create a bind mount in this senario.

Signed-off-by: Chen Hanxiao <>

9 days agotests: Remove stale scsihostdata dir
Michal Privoznik [Tue, 22 Jul 2014 09:06:21 +0000]
tests: Remove stale scsihostdata dir

In the fbd91d49 commit, new scsihostdata dir is added to EXTRA_DIST in
the tests/ However, the directory itself is not created
anywhere, nor in the commit.

Signed-off-by: Michal Privoznik <>

9 days agoqemu: snapshot: Forbid taking/reverting snapshots in PMSUSPENDED state
Peter Krempa [Mon, 21 Jul 2014 13:48:35 +0000]
qemu: snapshot: Forbid taking/reverting snapshots in PMSUSPENDED state

Qemu doesn't currently support them and behaves strangely. Just forbid


9 days agoqemu: snapshot: Forbid taking snapshot in invalid state
Peter Krempa [Mon, 21 Jul 2014 13:20:43 +0000]
qemu: snapshot: Forbid taking snapshot in invalid state

Similarly to 49a3a649a85f9d3d478be355aa8694bce889586a forbid creating
snapshots in domain states impossible to reach in qemu.

9 days agodomtop: Fix build on mingw
Michal Privoznik [Mon, 21 Jul 2014 15:26:57 +0000]
domtop: Fix build on mingw

Firstly, there's no sigaction() nor struct sigaction on mingw. We have
to use the one implemented by gnulib (and hence link with gnulib).
Then, for some reason one header file from windows defines ERROR
symbol. Yes it does. Sigh.

Signed-off-by: Michal Privoznik <>

10 days agobuild: fix build without numactl
Eric Blake [Mon, 21 Jul 2014 17:24:21 +0000]
build: fix build without numactl

Under ./configure --without-numactl but with numactl-devel installed,
the build fails with:

../../src/util/virnuma.c: In function 'virNumaNodeIsAvailable':
../../src/util/virnuma.c:407:5: error: implicit declaration of function 'numa_bitmask_isbitset' [-Werror=implicit-function-declaration]
     return numa_bitmask_isbitset(numa_nodes_ptr, node);

and other failures, all because the configure results for particular
functions were used without regard to whether libnuma was even being
linked in.

* src/util/virnuma.c (virNumaGetPages): Fix message typo.
(virNumaNodeIsAvailable): Correct build when not using numactl.

Signed-off-by: Eric Blake <>

10 days agostorage: logical: drop useless if
Roman Bogorodskiy [Mon, 21 Jul 2014 17:08:58 +0000]
storage: logical: drop useless if

virStorageBackendLogicalCreateVol contains a piece like:

    if (vol->target.path != NULL) {
        /* A target path passed to CreateVol has no meaning */

The 'if' is useless here, but 'syntax-check' doesn't catch that
because of the comment, so drop the 'if'.

10 days agoFix build on non-Linux platforms
Roman Bogorodskiy [Mon, 21 Jul 2014 17:26:00 +0000]
Fix build on non-Linux platforms

Commit ef48a1b introduced virFindSCSIHostByPCI for Linux and
a stub for other platforms that returns -1 while the function
should return 'char *', so use 'return NULL' instead.

Commit fbd91d4 introduced virReadSCSIUniqueId with the third
argument 'int *result', however the stub for non-Linux patform
uses 'unsigned int *result', so change it to 'int *result'.

Pushed under the build breaker rule.

10 days agogetAdapterName: Lookup stable scsi_host
John Ferlan [Mon, 9 Jun 2014 16:19:16 +0000]
getAdapterName: Lookup stable scsi_host

If a parentaddr was provided in the XML, have getAdapterName lookup
the stable address.  This allows virStorageBackendSCSICheckPool() and
virStorageBackendSCSIRefreshPool() to automagically find the scsi_host
by its PCI address and unique_id

10 days agoscsi_host: Introduce virFindSCSIHostByPCI
John Ferlan [Tue, 10 Jun 2014 11:47:12 +0000]
scsi_host: Introduce virFindSCSIHostByPCI

Introduce a new function to parse the provided scsi_host parent address
and unique_id value in order to find the /sys/class/scsi_host directory
which will allow a stable SCSI host address

Add a test to scsihosttest to lookup the host# name by using the PCI address
and unique_id value

10 days agoAdd unique_id to nodedev output
John Ferlan [Thu, 5 Jun 2014 17:17:05 +0000]
Add unique_id to nodedev output

Add an optional unique_id parameter to nodedev.  Allows for easier lookup
and display of the unique_id value in order to document for use with
scsi_host code.

10 days agovirutil: Introduce virReadSCSIUniqueId
John Ferlan [Tue, 10 Jun 2014 15:09:20 +0000]
virutil: Introduce virReadSCSIUniqueId

Introduce a new function to read the current scsi_host entry and return
the value found in the 'unique_id' file.

Add a 'scsihosttest' test (similar to the fchosttest, but incorporating some
of the concepts of the mocked pci test library) in order to read the
unique_id file like would be found in the /sys/class/scsi_host tree.

10 days agoscsi_backend: Use existing LINUX_SYSFS_SCSI_HOST_PREFIX definition
John Ferlan [Mon, 9 Jun 2014 16:41:04 +0000]
scsi_backend: Use existing LINUX_SYSFS_SCSI_HOST_PREFIX definition

Rather than supplying the path again in the formatting of the sysfs
scsi_host directory.

10 days agostorage: Introduce parentaddr into virStoragePoolSourceAdapter
Osier Yang [Tue, 4 Mar 2014 03:15:13 +0000]
storage: Introduce parentaddr into virStoragePoolSourceAdapter

Between reboots and kernel reloads, the SCSI host number used for SCSI
storage pools may change requiring modification to the storage pool XML
in order to use a specific SCSI host adapter.

This patch introduces the "parentaddr" element and "unique_id" attribute
for the SCSI host adapter in order to uniquely identify the adapter
between reboots and kernel reloads. For now the goal is to only parse
and format the XML. Both will be required to be provided in order to
uniquely identify the desired SCSI host.

The new XML is expected to be as follows:

  <adapter type='scsi_host'>
    <parentaddr unique_id='3'>
      <address domain='0x0000' bus='0x00' slot='0x1f' func='0x2'/>

where "parentaddr" is the parent device of the SCSI host using the PCI
address on which the device resides and the value from the unique_id file
for the device. Both the PCI address and unique_id values will be used
to traverse the /sys/class/scsi_host/ directories looking at each link
to match the PCI address reformatted to the directory link format where
"domain:bus:slot:function" is found.  Then for each matching directory
the unique_id file for the scsi_host will be used to match the unique_id
value in the xml.

For a PCI address listed above, this will be formatted to "0000:00:1f.2"
and the links in /sys/class/scsi_host will be used to find the host#
to be used for the 'scsi_host' device. Each entry is a link to the
/sys/bus/pci/devices directories, e.g.:

%  ls -al /sys/class/scsi_host/host2
lrwxrwxrwx. 1 root root 0 Jun  1 00:22 /sys/class/scsi_host/host2 -> ../../devices/pci0000:00/0000:00:1f.2/ata3/host2/scsi_host/host2

% cat /sys/class/scsi_host/host2/unique_id

The "parentaddr" and "name" attributes are mutually exclusive to identify
the SCSI host number. Use of the "parentaddr" element will be the preferred

This patch only supports to parse and format the XMLs. Later patches will
add code to find out the scsi host number.

10 days agovirStoragePoolSourceAdapter: Refine the SCSI_HOST adapter name
Osier Yang [Mon, 3 Mar 2014 20:04:17 +0000]
virStoragePoolSourceAdapter: Refine the SCSI_HOST adapter name

Preparation for future patches by creating a scsi_host union. For now,
just the 'name' will be present.

10 days agogetAdapterName: check for SCSI_HOST
John Ferlan [Mon, 3 Mar 2014 19:57:50 +0000]
getAdapterName: check for SCSI_HOST

Rather than assume that NOT FC_HOST is SCSI_HOST, let's call them out
specifically. Makes it easier to find SCSI_HOST code/structs and ensures
something isn't missed in the future

10 days agoschema: pool: netfs: Don't enforce slash in glusterfs pool source
Peter Krempa [Wed, 28 May 2014 13:47:38 +0000]
schema: pool: netfs: Don't enforce slash in glusterfs pool source

Gluster volumes don't start with a leading slash. Our schema for netfs
gluster pools enforces it though. Luckily mount.glusterfs skips it.
Allow a slashless volume name for glusterfs netfs mounts in the schema.


10 days agodoc: Explicitly specify how to override spice channel mode
Peter Krempa [Mon, 21 Jul 2014 15:12:51 +0000]
doc: Explicitly specify how to override spice channel mode

Be more clear that the "<channel mode=" attribute overrides the default
set by "defaultMode".


10 days agonode_device: HAL: Ignore return value of virStrToLong_ui
Peter Krempa [Mon, 21 Jul 2014 14:32:53 +0000]
node_device: HAL: Ignore return value of virStrToLong_ui

Commit 5df813177c3b609a8cf5db26ae94b26d4a40063d forgot to adjust a few
callers of virStrToLong_ui to ignore the returned value in some ancient
parts of the code.

10 days agoutil: Check return value from virStrToLong* functions
Peter Krempa [Mon, 21 Jul 2014 08:17:02 +0000]
util: Check return value from virStrToLong* functions

We do so in the vast majority of places, so there's no problem of adding
the attribute to enforce it by the complier and fix a few leftover

This was originally pointed out by Coverity as a recent change triggered
it's warning that our code checked the vast majority of returns from

10 days agoexamples: domtop: Avoid leaking memory
Peter Krempa [Mon, 21 Jul 2014 07:53:17 +0000]
examples: domtop: Avoid leaking memory

Use the virTypedParamsFree unconditionally as it handles NULL well and
has the benefit of freeing a typed parameter array even if it wasn't yet
assigned, but only allocated.

10 days agoexamples: domtop: Fix uninitialized variable use
Peter Krempa [Mon, 21 Jul 2014 07:52:02 +0000]
examples: domtop: Fix uninitialized variable use

max_id could be used uninitialized in the cleanup section after the
domain wasn't found.

Discovered by Coverity.

10 days agoqemu: snapshot: Reject revertion from clearly bad states
Peter Krempa [Fri, 18 Jul 2014 13:38:48 +0000]
qemu: snapshot: Reject revertion from clearly bad states

Report errors on some states snapshots done by qemu should never reach

10 days agoqemu: snapshot: Convert if-else switch to switch statement
Peter Krempa [Fri, 18 Jul 2014 13:25:59 +0000]
qemu: snapshot: Convert if-else switch to switch statement

Convert the target snapshot state selector to a switch statement
enumerating all possible values. This points out a few mistakes in the
original selector.

The logic of the code is preserved until later patches.

13 days agobhyve: reconnect to domains after libvirtd restart
Roman Bogorodskiy [Sun, 29 Jun 2014 15:52:35 +0000]
bhyve: reconnect to domains after libvirtd restart

Try to reconnect to the running domains after libvirtd restart. To
achieve that, do:

 * Save domain state
  - Modify virBhyveProcessStart() to save domain state to the state
  - Modify virBhyveProcessStop() to cleanup the pidfile and the state

 * Detect if the state information loaded from the driver's state
   dir matches the actual state. Consider domain active if:
    - PID it points to exist
    - Process title of this PID matches the expected one with the
      domain name

   Otherwise, mark the domain as shut off.

Note: earlier development bhyve versions before FreeBSD 10.0-RELEASE
didn't set proctitle we expect, so the current code will not detect
it. I don't plan adding support for this unless somebody requests

13 days agodoc: add domain to address of hostdev pci
Hu Tao [Fri, 18 Jul 2014 07:59:22 +0000]
doc: add domain to address of hostdev pci

libvirt supports pci domain already, so update the documentation.
Otherwise users who lookup the documentation for how to use hostdev may
miss the domain and encounter error when pass-through a pci device in a
domain other than 0.

Signed-off-by: Hu Tao <>

13 days agoqemu: snapshot: Forbid snapshots of iSCSI passthrough devices
Peter Krempa [Fri, 18 Jul 2014 09:07:01 +0000]
qemu: snapshot: Forbid snapshots of iSCSI passthrough devices

As with the local SCSI passthrough devicesm qemu can't support snapshots
on those as the block ops are handled by the device. This is also true
for iSCSI backing of the disk. Remove the check for the local block
device and just forbid snapshot when the disk is of type 'lun'.


13 days agodoc: domain: Clarify that disk type 'lun' works with iSCSI too
Peter Krempa [Fri, 18 Jul 2014 09:05:08 +0000]
doc: domain: Clarify that disk type 'lun' works with iSCSI too

Disk type 'lun' enables SCSI command passthrough for a disk. We stated
that it works only with "block" disks. Qemu supports it also when using
the iSCSI protocol.

13 days agoexamples: Introduce domtop
Michal Privoznik [Mon, 14 Jul 2014 13:09:51 +0000]
examples: Introduce domtop

There's this question on the list that is asked over and over again.
How do I get {cpu, memory, ...} usage in percentage? Or its modified
version: How do I plot nice graphs like virt-manager does?

It would be nice if we have an example to inspire people. And that's
what domtop should do. Yes, it could be written in different ways, but
I've chosen this one as I think it show explicitly what users need to
implement in order to imitate virt-manager's graphing.

Note: The usage is displayed from host perspective. That is, how much
host CPUs the domain is using. But it should be fairly simple to
switch do just guest CPU usage if needed.

Signed-off-by: Michal Privoznik <>

13 days agoKill last strto{l,ll,d} scouts
Michal Privoznik [Fri, 18 Jul 2014 07:46:39 +0000]
Kill last strto{l,ll,d} scouts

There's no need to use it since we have this shiny functions
that even checks for conversion and overflow errors.

Signed-off-by: Michal Privoznik <>

13 days agolxc conf2xml: convert for veth networks
Cédric Bosdonnat [Wed, 2 Jul 2014 13:13:40 +0000]
lxc conf2xml: convert for veth networks

13 days agolxc network configuration allows setting target container NIC name
Cédric Bosdonnat [Fri, 27 Jun 2014 08:41:22 +0000]
lxc network configuration allows setting target container NIC name

LXC network devices can now be assigned a custom NIC device name on the
container side. For example, this is configured with:

    <interface type='network'>
      <source network='default'/>
      <guest dev="eth1"/>

In this example the network card will appear as eth1 in the guest.

13 days agospec: Consolidate with_qemu* definitions
Jiri Denemark [Thu, 17 Jul 2014 13:48:37 +0000]
spec: Consolidate with_qemu* definitions

Decisions whether qemu driver and libvirt-daemon-{qemu,kvm} packages
should be built on various OS/arch combinations were scattered around
the spec file. Let's make it easier to see where qemu driver is going to
be built.