40 min agonodedev: Fabric name must not be required for fc_host capability master
Boris Fiuczynski [Mon, 16 Jan 2017 13:27:34 +0000]
nodedev: Fabric name must not be required for fc_host capability

fabric_name is one of many fc_host attributes in Linux that is optional
and left to the low-level driver to decide if it is implemented.
The zfcp device driver does not provide a fabric name for an fcp host.

This patch removes the requirement for a fabric name by making it optional.

Signed-off-by: Boris Fiuczynski <>

46 min agoutil: add file exists check in virReadFCHost
Boris Fiuczynski [Mon, 16 Jan 2017 13:27:33 +0000]
util: add file exists check in virReadFCHost

File open errors are prevented by a file exists check before
virFileReadAll is called since all callers of the virReadFCHost
method handle errors themselves based on the NULL return anyway.
Also included is a minor spelling correction in a comment.

Signed-off-by: Boris Fiuczynski <>

55 min agodisk: Fixup error handling path for devmapper when part_separator='yes'
John Ferlan [Tue, 15 Nov 2016 19:37:01 +0000]
disk: Fixup error handling path for devmapper when part_separator='yes'

If libvirt_parthelper is erroneously told to append the partition
separator 'p' onto the generated output for a disk pool using device
mapper that has 'user_friendly_names' set to true, then the error
recovery path will fail to find volume resulting in the pool being
in an unusable state.

So, augment the documentation to provide the better hint that the
part_separator='yes' should be set when user_friendly_names are not
being used. Additionally, once we're in the error path where the
returned name doesn't match the expected partition name try to see
if the reason is because the 'p' was erroneosly added. If so alter
the about to be removed vol->target.path so that the DiskDeleteVol
code can find the partition that was created and remove it.

63 min agostorage: Allow probe of volume capacity for BLOCK type
John Ferlan [Tue, 6 Dec 2016 23:37:46 +0000]
storage: Allow probe of volume capacity for BLOCK type

If the voldef type is VIR_STORAGE_VOL_BLOCK, then as long as the
format is known, let's allow the probe to happen - gets a truer value
and the same probe/update would be allowed for the same volume defined
in a domain.

63 min agostorage: Fix virStorageBackendUpdateVolTargetInfo type check
John Ferlan [Tue, 6 Dec 2016 11:17:20 +0000]
storage: Fix virStorageBackendUpdateVolTargetInfo type check

For volume processing in virStorageBackendUpdateVolTargetInfo to get
the capacity commit id 'a760ba3a7' added the ability to probe a volume
that didn't list a target format. Unfortunately, the code used the
virStorageSource  (e.g. target->type - virStorageType) rather than
virStorageVolDef (e.g. vol->type - virStorageVolType) in order to
make the comparison. As it turns out target->type for a volume is
not filled in at all for a voldef as the code relies on vol->type.
Ironically the result is that only VIR_STORAGE_VOL_BLOCK's would get
their capacity updated.

This patch will adjust the code to check the "vol->type" field instead
as an argument. This way for a voldef, the correct comparison is made.

Additionally for a backingStore, the 'type' field is never filled in;
however, since we know that the provided path is a location at which
the backing store can be accessed on the local filesystem thus just
pass VIR_STORAGE_VOL_FILE in order to satisfy the adjusted voltype
check. Whether it's a FILE or a BLOCK only matters if we're trying to
get more data based on the target->format.

74 min agoPost-release version bump to 3.1.0
Michal Privoznik [Wed, 18 Jan 2017 10:53:56 +0000]
Post-release version bump to 3.1.0

Signed-off-by: Michal Privoznik <>

83 min agotests: Distribute qemuhotplugtestcpus
Michal Privoznik [Wed, 18 Jan 2017 10:42:59 +0000]
tests: Distribute qemuhotplugtestcpus

Starting from a245abce436f4f333 another set of tests for
qemuhotplugtest has been introduced. This time for vcpu hotplug.
However, the test data (which live in qemuhotplugtestcpus dir)
are not being distributed properly.

Signed-off-by: Michal Privoznik <>

2 hours agospec: Depend on the gluster command line tool
Peter Krempa [Tue, 10 Jan 2017 17:08:44 +0000]
spec: Depend on the gluster command line tool

The gluster command line tool that is used to lookup storage pool
sources moved from the gluster-client package to gluster-cli.


2 hours agostorage: gluster: Remove build-time dependency on the 'gluster' cli tool
Peter Krempa [Mon, 9 Jan 2017 14:56:12 +0000]
storage: gluster: Remove build-time dependency on the 'gluster' cli tool

The tool is used for pool discovery. Since we call an external binary we
don't really need to compile out the code that uses it. We can check
whether it exists at runtime.

2 hours agostorage: gluster: Report error if no volumes were found in pool lookup
Peter Krempa [Tue, 10 Jan 2017 17:35:03 +0000]
storage: gluster: Report error if no volumes were found in pool lookup

Similarly to the 'netfs' pool, return an error if the host does not have
any volumes.

2 hours agostorage: Fix error reporting when looking up storage pool sources
Peter Krempa [Tue, 10 Jan 2017 17:29:54 +0000]
storage: Fix error reporting when looking up storage pool sources

In commit 4090e15399 we went back from reporting no errors if no storage
pools were found on a given host to reporting a bad error. And only in
cases when gluster was not installed.

Report a less bad error in case there are no volumes. Also report the
error when gluster is installed but no volumes were found, since
virStorageBackendFindGlusterPoolSources would return success in that

2 hours agotests: hotplug: Test CPU hotplug with ppc64 data
Peter Krempa [Fri, 9 Dec 2016 15:52:16 +0000]
tests: hotplug: Test CPU hotplug with ppc64 data

Add a positive test and few negative tests.

2 hours agotests: hotplug: Add test data for legacy cpu hotplug
Peter Krempa [Fri, 9 Dec 2016 14:54:54 +0000]
tests: hotplug: Add test data for legacy cpu hotplug

Test that the old approach generates correct commands.

3 hours agotests: hotplug: Add test infrastructure for testing qemu CPU hotplug code
Peter Krempa [Sun, 4 Dec 2016 18:08:25 +0000]
tests: hotplug: Add test infrastructure for testing qemu CPU hotplug code

The cpu hotplug operation is rather complex so the testing code needs to
provide quite lot of data and monitor conversations to successfully test
it. The code mainly tests the selection of cpus according to the target
count request.

3 hours agotests: qemu: Add helper to load full monitor conversation from file
Peter Krempa [Wed, 30 Nov 2016 13:43:50 +0000]
tests: qemu: Add helper to load full monitor conversation from file

Similar to the existing qemuMonitorTestNewFromFile the *Full version
will allow to check both commands and supply responses for a better
monitor testing.

3 hours agotests: qemu: monitor: Add helpers to test full command syntax
Peter Krempa [Fri, 25 Nov 2016 09:43:23 +0000]
tests: qemu: monitor: Add helpers to test full command syntax

Add test monitor infrastructure that will test the commands verbatim
rather than trying to do any smart handling.

3 hours agotests: qemumonitor: Propagate better error messages
Peter Krempa [Thu, 1 Dec 2016 08:22:44 +0000]
tests: qemumonitor: Propagate better error messages

3 hours agoqemu: Move cpu hotplug code into qemu_hotplug.c
Peter Krempa [Thu, 24 Nov 2016 15:56:56 +0000]
qemu: Move cpu hotplug code into qemu_hotplug.c

Move all the worker code into the appropriate file. This will also allow
testing of cpu hotplug.

3 hours agoqemu: Prepare for reuse of qemuDomainSetVcpusLive
Peter Krempa [Wed, 9 Nov 2016 14:03:34 +0000]
qemu: Prepare for reuse of qemuDomainSetVcpusLive

Extract the call to qemuDomainSelectHotplugVcpuEntities outside of
qemuDomainSetVcpusLive and decide whether to hotplug or unplug the
entities specified by the cpumap using a boolean flag.

This will allow to use qemuDomainSetVcpusLive in cases where we prepare
the list of vcpus to enable or disable by other means.

3 hours agotests: qemu: Document qemuMonitorTestNewFromFile
Peter Krempa [Wed, 30 Nov 2016 08:58:12 +0000]
tests: qemu: Document qemuMonitorTestNewFromFile

3 hours agoutil: json: Add helper to reformat JSON strings
Peter Krempa [Wed, 30 Nov 2016 09:46:57 +0000]
util: json: Add helper to reformat JSON strings

For use in test cases it will be helpful to allow reformatting JSON
strings. Add a wrapper on top of the parser and formatter to achieve

3 hours agoqemu: monitor: More strict checking of 'query-cpus' if hotplug is supported
Peter Krempa [Sun, 4 Dec 2016 17:53:03 +0000]
qemu: monitor: More strict checking of 'query-cpus' if hotplug is supported

In cases where CPU hotplug is supported by qemu force the monitor to
reject invalid or broken responses to 'query-cpus'. It's expected that
the command returns usable data in such case.

3 hours agonews: Fix xml dump of autogenerated websocket
Nikolay Shirokovskiy [Wed, 18 Jan 2017 07:21:44 +0000]
news: Fix xml dump of autogenerated websocket

18 hours agoRelease of libvirt-3.0.0 v3.0.0
Daniel Veillard [Tue, 17 Jan 2017 18:07:00 +0000]
Release of libvirt-3.0.0

20 hours agotests: fix QED disk test in xlconfigtest
Jim Fehlig [Mon, 16 Jan 2017 18:31:42 +0000]
tests: fix QED disk test in xlconfigtest

When LIBXL_HAVE_QED is defined, xlconfigtest fails

 9) Xen XL-2-XML Format disk-qed  ... command line: config parsing error
 in disk specification: no vdev specified in

As per the xl-disk-configuration(5) man page, target= must come
last in the disk specification when specified by name:

When this parameter is specified by name, ie with the target=
syntax in the configuration file, it consumes the whole rest of the
DISKSPEC including trailing whitespaces.  Therefore in that case
it must come last.

Change tests/xlconfigdata/test-disk-qed.cfg to adhere to this

21 hours agosecurity: SELinux: fix the transaction model's list append
Erik Skultety [Tue, 17 Jan 2017 11:22:14 +0000]
security: SELinux: fix the transaction model's list append

The problem is in the way how the list item is created prior to
appending it to the transaction list - the @path argument is just a
shallow copy instead of deep copy of the hostdev device's path.
Unfortunately, the hostdev devices from which the @path is extracted, in
order to add them into the transaction list, are only temporary and
freed before the buildup of the qemu namespace, thus making the @path
attribute in the transaction list NULL, causing 'permission denied' or
'double free' or 'unknown cause' errors.


Signed-off-by: Erik Skultety <>

21 hours agosecurity: DAC: fix the transaction model's list append
Erik Skultety [Tue, 17 Jan 2017 11:21:27 +0000]
security: DAC: fix the transaction model's list append

The problem is in the way how the list item is created prior to
appending it to the transaction list - the @path attribute is just a
shallow copy instead of deep copy of the hostdev device's path.
Unfortunately, the hostdev devices from which the @path is extracted, in
order to add them into the transaction list, are only temporary and
freed before the buildup of the qemu namespace, thus making the @path
attribute in the transaction list NULL, causing 'permission denied' or
'double free' or 'unknown cause' errors.


Signed-off-by: Erik Skultety <>

22 hours agoqemu: Don't leak hostCPUModelInfo in virQEMUCaps
Jiri Denemark [Tue, 17 Jan 2017 13:34:23 +0000]
qemu: Don't leak hostCPUModelInfo in virQEMUCaps

Signed-off-by: Jiri Denemark <>

23 hours agoqemu: Actually unshare() iff running as root
Michal Privoznik [Tue, 17 Jan 2017 11:15:16 +0000]
qemu: Actually unshare() iff running as root

While all the code that deals with qemu namespaces correctly
detects whether we are running as root (and turn into NO-OP for
qemu:///session) the actual unshare() call is not guarded with
such check. Therefore any attempt to start a domain under
qemu:///session shall fail as unshare() is reserved for root.

The fix consists of moving unshare() call (for which we have a
wrapper called virProcessSetupPrivateMountNS) into
qemuDomainBuildNamespace() where the proper check is performed.

Signed-off-by: Michal Privoznik <>
Tested-by: Richard W.M. Jones <>

43 hours agoRevert "perf: Add cache_l1d perf event support"
Daniel P. Berrange [Mon, 16 Jan 2017 16:54:34 +0000]
Revert "perf: Add cache_l1d perf event support"

This reverts commit ae16c95f1bb5591c27676c5de8d383e5612c3568.

43 hours agonews: document events changes and lxc fix
Daniel P. Berrange [Wed, 11 Jan 2017 16:32:59 +0000]
news: document events changes and lxc fix

Signed-off-by: Daniel P. Berrange <>

2 days agonews: Add support for guest CPU configuration on s390
Jiri Denemark [Fri, 13 Jan 2017 16:25:33 +0000]
news: Add support for guest CPU configuration on s390

Signed-off-by: Jiri Denemark <>

3 days agostorage: Alter error message in probe/empty checks v3.0.0-rc2
John Ferlan [Fri, 13 Jan 2017 12:33:02 +0000]
storage: Alter error message in probe/empty checks

For case VIR_STORAGE_BLKID_PROBE_DIFFERENT, clean up the message to
avoid using the virsh like --overwrite syntax. Additionally provide
a different error message when not writing the label to avoid confusion.

3 days agostorage: Clean up return value checking
John Ferlan [Fri, 13 Jan 2017 12:34:03 +0000]
storage: Clean up return value checking

Rather than special casing the VIR_STORAGE_BLKID_PROBE_UNKNOWN after
calling virStorageBackendBLKIDFindPart, just allow the switch statement
handle setting ret = -2.

3 days agostorage: Alter logic when both BLKID and PARTED unavailable
John Ferlan [Fri, 13 Jan 2017 00:29:40 +0000]
storage: Alter logic when both BLKID and PARTED unavailable

If neither BLKID or PARTED is available and we're not writing, then
just return 0 which allows the underlying storage pool to generate
a failure. If both are unavailable and we're writing, then generate
a more generic error message.

4 days agodocs: add entry for aggregation of pcie-root-ports to news.xml
Laine Stump [Fri, 13 Jan 2017 15:27:05 +0000]
docs: add entry for aggregation of pcie-root-ports to news.xml

4 days agoqemu-capabilities: Fix query-cpu-model-expansion on s390 with older kernel
Collin L. Walling [Thu, 12 Jan 2017 16:18:11 +0000]
qemu-capabilities: Fix query-cpu-model-expansion on s390 with older kernel

When running on s390 with a kernel that does not support cpu model checking and
with a Qemu new enough to support query-cpu-model-expansion, the gathering of qemu
capabilities will fail. Qemu responds to the query-cpu-model-expansion qmp
command with an error because the needed kernel ioct does not exist. When this
happens a guest cannot even be defined due to missing qemu capabilities data.

This patch fixes the problem by silently ignoring generic errors stemming from
calls to query-cpu-model-expansion.

Reported-by: Farhan Ali <>
Signed-off-by: Collin L. Walling <>
Signed-off-by: Jason J. Herne <>

4 days agoqemu: Copy SELinux labels for namespace too
Michal Privoznik [Fri, 13 Jan 2017 09:03:23 +0000]
qemu: Copy SELinux labels for namespace too

When creating new /dev/* for qemu, we do chown() and copy ACLs to
create the exact copy from the original /dev. I though that
copying SELinux labels is not necessary as SELinux will chose the
sane defaults. Surprisingly, it does not leaving namespace with
the following labels:

crw-rw-rw-. root root system_u:object_r:tmpfs_t:s0     random
crw-------. root root system_u:object_r:tmpfs_t:s0     rtc0
drwxrwxrwt. root root system_u:object_r:tmpfs_t:s0     shm
crw-rw-rw-. root root system_u:object_r:tmpfs_t:s0     urandom

As a result, domain is unable to start:

error: internal error: process exited while connecting to monitor: Error in GnuTLS initialization: Failed to acquire random data.
qemu-kvm: cannot initialize crypto: Unable to initialize GNUTLS library: Failed to acquire random data.

The solution is to copy the SELinux labels as well.

Reported-by: Andrea Bolognani <>
Signed-off-by: Michal Privoznik <>

5 days agodocs: Fix libvirt_guest nss module name
Michal Privoznik [Fri, 13 Jan 2017 10:41:11 +0000]
docs: Fix libvirt_guest nss module name

In the documentation we are mixing libvirt-guest and
libvirt_guest module name. The correct name is the latter.

Signed-off-by: Michal Privoznik <>

5 days agoRevert "storage: Validate the device formats at logical startup"
Peter Krempa [Thu, 12 Jan 2017 13:04:09 +0000]
Revert "storage: Validate the device formats at logical startup"

The check is pointless since LVM is capable to detect it's own members
and the check is flawed as it would fail if neither libblkid nor parted
is installed.

We don't really need to babysit LVM in this way.

This reverts commit cb38b6cbc7e35e7ee92a7f54828f21261227d17a.

5 days agoRevert "storage: For FS pool check for properly formatted target volume"
Peter Krempa [Thu, 12 Jan 2017 12:50:19 +0000]
Revert "storage: For FS pool check for properly formatted target volume"

The check does not work properly (crashes) with netfs filesystems and
also checking that a device is not empty when attempting to mount a
filesystem is not very usefull since the mount will fail anyways.

As the code would improve only a very minor corner case I don't really
see a reason to have this code at all.

This code would also fail if libvirt is compiled without support for
blkid and without parted.

This reverts commit a11fd69735e6951cda9bf256d8e423696a441aa4.

5 days agolibxl: always enable pae for x86_64 HVM
Jim Fehlig [Thu, 12 Jan 2017 00:42:42 +0000]
libxl: always enable pae for x86_64 HVM

For HVM domains, pae is only set in libxl_domain_build_info when
explicitly specified in the hypervisor <features> config. This is
fine for i686 machines, but is incorrect behavior for x86_64 machines
where pae must always be enabled. See the following discussion for
additional details

5 days agodocs: Document <sndbuf/>
Michal Privoznik [Thu, 12 Jan 2017 11:43:21 +0000]
docs: Document <sndbuf/>

This element has been introduced in fe053dbea7, but isn't
documented yet. After exactly 6 years I guess we can finally
document it.

Signed-off-by: Michal Privoznik <>

5 days agonews: document libxl HVM network attach fix
Joao Martins [Thu, 12 Jan 2017 12:02:55 +0000]
news: document libxl HVM network attach fix

Signed-off-by: Joao Martins <>

6 days agoqemu: Ignore non-boolean CPU model properties
Jiri Denemark [Wed, 11 Jan 2017 13:35:52 +0000]
qemu: Ignore non-boolean CPU model properties

The query-cpu-model-expansion is currently implemented for s390(x) only
and all CPU properties it returns are booleans. However, x86
implementation will report more types of properties. Without making the
code more tolerant older libvirt would fail to probe newer QEMU

Signed-off-by: Jiri Denemark <>

6 days agoqemu: Don't check CPU model property key
Jiri Denemark [Wed, 11 Jan 2017 13:29:58 +0000]
qemu: Don't check CPU model property key

The qemuMonitorJSONParseCPUModelProperty function is a callback for
virJSONValueObjectForeachKeyValue and is called for each key/value pair,
thus it doesn't really make sense to check whether key is NULL.

Signed-off-by: Jiri Denemark <>

6 days agonews: document drive addresses fix
Marc Hartmayer [Thu, 12 Jan 2017 09:58:34 +0000]
news: document drive addresses fix

Signed-off-by: Marc Hartmayer <>

6 days agonews: Reflect hugepages patch
Michal Privoznik [Wed, 11 Jan 2017 16:56:21 +0000]
news: Reflect hugepages patch

In f55afd8 I've made libvirt to construct hugepage path on
per-domain basis. However, this change was not reflected in
the NEWS file.

Signed-off-by: Michal Privoznik <>

6 days agoqemuDomainCreateDevice: Canonicalize paths
Michal Privoznik [Wed, 11 Jan 2017 16:32:46 +0000]
qemuDomainCreateDevice: Canonicalize paths

So far the decision whether /dev/* entry is created in the qemu
namespace is really simple: does the path starts with "/dev/"?
This can be easily fooled by providing path like the following
(for any considered device like disk, rng, chardev, ..):


Therefore, before making the decision the path should be

Signed-off-by: Michal Privoznik <>

6 days agoqemu: Use namespaces iff available on the host kernel
Michal Privoznik [Wed, 11 Jan 2017 10:05:50 +0000]
qemu: Use namespaces iff available on the host kernel

So far the namespaces were turned on by default unconditionally.
For all non-Linux platforms we provided stub functions that just
ignored whatever namespaces setting there was in qemu.conf and
returned 0 to indicate success. Moreover, we didn't really check
if namespaces are available on the host kernel.

This is suboptimal as we might have ignored user setting.

Signed-off-by: Michal Privoznik <>

6 days agoutil: Introduce virFileMoveMount
Michal Privoznik [Wed, 11 Jan 2017 10:29:00 +0000]
util: Introduce virFileMoveMount

This is a simple wrapper over mount(). However, not every system
out there is capable of moving a mount point. Therefore, instead
of having to deal with this fact in all the places of our code we
can have a simple wrapper and deal with this fact at just one

Signed-off-by: Michal Privoznik <>

6 days agolxc_container: Drop userns_supported
Michal Privoznik [Wed, 11 Jan 2017 09:45:44 +0000]
lxc_container: Drop userns_supported

This is unnecessary wrapper around virProcessNamespaceAvailable().

Signed-off-by: Michal Privoznik <>

6 days agolxc: Move lxcContainerAvailable to virprocess
Michal Privoznik [Wed, 11 Jan 2017 09:23:39 +0000]
lxc: Move lxcContainerAvailable to virprocess

Other drivers (like qemu) would like to know if the namespaces
are available therefore it makes sense to move this function to
a shared module.

At the same time, this function had some default namespaces that
are checked with every call. It is not necessary - let callers
pass just those namespaces they are interested in.

With the move the function is renamed to

Signed-off-by: Michal Privoznik <>

6 days agoqemuDomainSetupAllInputs: Update debug message
Michal Privoznik [Wed, 11 Jan 2017 14:16:06 +0000]
qemuDomainSetupAllInputs: Update debug message

Due to a copy-paste error, the debug message reads:

  Setting up disks

It should have been:

  Setting up inputs.

Signed-off-by: Michal Privoznik <>

6 days agodocs: Add logical storage pool overwrite change description to news.xml
John Ferlan [Wed, 11 Jan 2017 00:32:25 +0000]
docs: Add logical storage pool overwrite change description to news.xml

Add "New Features" entry to describe the overwrite flag for logical backend.

6 days agodocs: Add file system pool overwrite change description to news.xml
John Ferlan [Wed, 11 Jan 2017 00:30:04 +0000]
docs: Add file system pool overwrite change description to news.xml

Add bug fixes description of overwrite changes for a file system storage pool

6 days agodocs: Add NPIV/vHBA change description to news.xml
John Ferlan [Wed, 11 Jan 2017 00:35:10 +0000]
docs: Add NPIV/vHBA change description to news.xml

Add "Improvements" for commit id 'bb74a7ffe' and '78be2e8b7' which add
support for using the parent wwnn/wwpn or fabric_name rather than just
using the parent by scsi_hostX name.

6 days agodocs: Document the new vHBA/NPIV params for storage
John Ferlan [Wed, 11 Jan 2017 12:09:03 +0000]
docs: Document the new vHBA/NPIV params for storage

Commit id 'bb74a7ffe' forgot to adjust the storage docs to describe the
new fields.

6 days agolibxl: fix usb inputs loop error
Cédric Bosdonnat [Tue, 10 Jan 2017 16:09:03 +0000]
libxl: fix usb inputs loop error

List indexes where mixed up in the code looping over the USB
input devices.

6 days agoremote: do not check for an existing config dir
Pino Toscano [Tue, 10 Jan 2017 18:43:20 +0000]
remote: do not check for an existing config dir

When composing the path to the default known_hosts file (for the libssh
and libssh2 drivers), do not check whether the configuration directory
(determined by virGetUserConfigDirectory()) exists: both the drivers can
handle non-existing files, and are able to create them (and their
directories) in that case.

This adds a small behaviour change: before, the key for an unknown host,
and manually accepted, was saved only if the configuration directory
existed -- a bit incoherent behaviour though.

6 days agoremote: fix logic for known_hosts and keyfile checks
Pino Toscano [Tue, 10 Jan 2017 18:43:19 +0000]
remote: fix logic for known_hosts and keyfile checks

If any of them is specified for the libssh and libssh2 drivers, there is
no need to depend on checks based on other paths: in particular, a
specified path for known_hosts was ignored if the local config directory
could not be determined, and the path for keyfile was ignored if the
home could not be determined.

Instead, lazily determine and use these two paths only in case they are

6 days agorpc: libssh: allow a NULL known_hosts file
Pino Toscano [Tue, 10 Jan 2017 18:43:18 +0000]
rpc: libssh: allow a NULL known_hosts file

Make sure that virNetLibsshSessionSetHostKeyVerification accepts a NULL
value for the path to the known_hosts file:
- call ssh_options_set(SSH_OPTIONS_KNOWNHOSTS) anyway, using /dev/null,
  otherwise libssh will use its default path
- do not call ssh_write_knownhost when no known hosts file was set


7 days agoNEWS: Add trailing periods to all sentences v3.0.0-rc1
Andrea Bolognani [Tue, 10 Jan 2017 18:54:12 +0000]
NEWS: Add trailing periods to all sentences

Suggested-by: John Ferlan <>

7 days agoconf: eliminate virDomainPCIAddressReleaseSlot() in favor of ...Addr()
Laine Stump [Mon, 24 Oct 2016 15:25:53 +0000]
conf: eliminate virDomainPCIAddressReleaseSlot() in favor of ...Addr()

Surprisingly there was a virDomainPCIAddressReleaseAddr() function
already, but it was completely unused. Since we don't reserve entire
slots at once any more, there is no need to release entire slots
either, so we just replace the single call to
virDomainPCIAddressReleaseSlot() with a call to
virDomainPCIAddressReleaseAddr() and remove the now unused function.

The keen observer may be concerned that ...Addr() doesn't call
virDomainPCIAddressValidate(), as ...Slot() did. But really the
validation was pointless anyway - if the device hadn't been suitable
to be connected at that address, it would have failed validation
before every being reserved in the first place, so by definition it
will pass validation when it is being unplugged. (And anyway, even if
something "bad" happened and we managed to have a device incorrectly
at the given address, we would still want to be able to free it up for
use by a device that *did* validate properly).

7 days agoqemu: rename qemuDomainPCIAddressReserveNextSlot() to ...Addr()
Laine Stump [Mon, 24 Oct 2016 15:10:47 +0000]
qemu: rename qemuDomainPCIAddressReserveNextSlot() to ...Addr()

This function doesn't actually reserve an entire slot any more, it
reserves a single PCI address, so this name is more appropriate.

7 days agoqemu: remove qemuDomainPCIAddressReserveNextAddr()
Laine Stump [Sun, 23 Oct 2016 22:11:06 +0000]
qemu: remove qemuDomainPCIAddressReserveNextAddr()

This function is only called in two places, and the function itself is
just adding a single argument and calling
virDomainPCIAddressReserveNextAddr(), so we can remove it and instead
call virDomainPCIAddressReserveNextAddr() directly. (The main
motivation for doing this is to free up the name so that
qemuDomainPCIAddressReserveNextSlot() can be renamed in the next
patch, as its current name is now inaccurate and misleading).

7 days agoconf: rename virDomainPCIAddressReserveSlot() to ...Addr()
Laine Stump [Sun, 23 Oct 2016 16:14:16 +0000]
conf: rename virDomainPCIAddressReserveSlot() to ...Addr()

This function doesn't actually reserve an entire slot any more, it
reserves a single PCI address, so this name is more appropriate.

7 days agoconf: rename virDomainPCIAddressReserveAddr() to ...Internal()
Laine Stump [Sun, 23 Oct 2016 16:07:20 +0000]
conf: rename virDomainPCIAddressReserveAddr() to ...Internal()

This is in preparation for renaming virDomainPCIAddressReserveSlot()
to virDomainPCIAddressReserveAddr(), which is a better description of
what it does.

7 days agoconf: make virDomainPCIAddressReserveAddr() a static function
Laine Stump [Sun, 23 Oct 2016 16:03:47 +0000]
conf: make virDomainPCIAddressReserveAddr() a static function

It is now only used in domain_addr.c.

7 days agoqemu: replace virDomainPCIAddressReserveAddr with virDomainPCIAddressReserveSlot
Laine Stump [Sun, 23 Oct 2016 15:57:55 +0000]
qemu: replace virDomainPCIAddressReserveAddr with virDomainPCIAddressReserveSlot

All occurences of the former use fromConfig=true, and that's exactly
how virDomainPCIAddressReserveSlot() calls
virDomainPCIaddressReserveAddr(), so just use *Slot() so that *Addr()
can be made static to conf/domain_addr.c (both functions will be
renamed in upcoming patches).

7 days agoconf: eliminate virDomainPCIAddressReserveNextSlot()
Laine Stump [Sat, 22 Oct 2016 17:28:07 +0000]
conf: eliminate virDomainPCIAddressReserveNextSlot()

Since we don't actually reserve an entire slot at a time anymore, the
name of this function is just confusing, and it's almost identical in
operation to virDomainPCIAddressReserveNextAddr() anyway, so remove
the *Slot() function and replace calls to it with calls to *Addr(...,

7 days agoconf: rename virDomainPCIAddressGetNextSlot() to ...GetNextAddr()
Laine Stump [Sat, 22 Oct 2016 17:10:10 +0000]
conf: rename virDomainPCIAddressGetNextSlot() to ...GetNextAddr()

With the advent of VIR_PCI_CONNECT_AGGREGATE_SLOT, the new name is
more appropriate, since the address returned may be another address
on the same slot as last time, not necessarily a new slot.

7 days agoconf: fix fromConfig argument to virDomainPCIAddressValidate()
Laine Stump [Sat, 22 Oct 2016 16:53:17 +0000]
conf: fix fromConfig argument to virDomainPCIAddressValidate()

fromConfig should be true if the caller wants
virDomainPCIAddressValidate() to loosen restrictions on its
interpretation of the pciConnectFlags. In particular, either
PCI_DEVICE or PCIE_DEVICE will be counted as equivalent to both, and
HOTPLUG will be ignored. In a few cases where libvirt was manually
overriding automatic address assignment, it was setting fromConfig to
false when validating the hardcoded manual override. This patch
changes those to fromConfig=true as a preemptive strike against any
future bugs that might otherwise surface.

7 days agoconf: fix fromConfig argument to virDomainPCIAddressReserveAddr()
Laine Stump [Sat, 22 Oct 2016 16:35:38 +0000]
conf: fix fromConfig argument to virDomainPCIAddressReserveAddr()

Although setting virDomainPCIAddressReserveAddr()'s fromConfig=true is
correct when a PCI addres is coming from a domain's config, the *true*
purpose of the fromConfig argument is to lower restrictions on what
kind of device can plug into what kind of controller - if fromConfig
is true, then a PCIE_DEVICE can plug into a slot that is marked as
only compatible with PCI_DEVICE (and vice versa), and the HOTPLUG flag
is ignored.

For a long time there have been several calls to
virDomainPCIAddressReserveAddr() that have fromConfig incorrectly set
to false - it's correct that the addresses aren't coming from user
config, but they are coming from hardcoded exceptions in libvirt that
should, if anything, pay *even less* attention to following the
pciConnectFlags (under the assumption that the libvirt programmer knew
what they were doing).

See commit b87703cf7 for an example of an actual bug caused by the
incorrect setting of the "fromConfig" argument to
virDomainPCIAddressReserveAddr(). Although they haven't resulted in
any reported bugs, this patch corrects all the other incorrect
settings of fromConfig in calls to virDomainPCIAddressReserveAddr().

7 days agoconf: aggregate multiple pcie-root-ports onto a single slot
Laine Stump [Thu, 20 Oct 2016 19:46:01 +0000]
conf: aggregate multiple pcie-root-ports onto a single slot

Set the VIR_PCI_CONNECT_AGGREGATE_SLOT flag for pcie-root-ports so
that they will be assigned to all the functions on a slot.

Some qemu test case outputs had to be adjusted due to the
pcie-root-ports now being put on multiple functions.

7 days agoconf: aggregate multiple devices on a slot when assigning PCI addresses
Laine Stump [Wed, 19 Oct 2016 18:15:01 +0000]
conf: aggregate multiple devices on a slot when assigning PCI addresses

If a PCI device has VIR_PCI_CONNECT_AGGREGATE_SLOT set in its
pciConnectFlags, then during address assignment we allow multiple
instances of this type of device to be auto-assigned to multiple
functions on the same device. A slot is used for aggregating multiple
devices only if the first device assigned to that slot had
VIR_PCI_CONNECT_AGGREGATE_SLOT set. but any device types that have
AGGREGATE_SLOT set might be mix/matched on the same slot.

(NB: libvirt should never set the AGGREGATE_SLOT flag for a device
type that might need to be hotplugged. Currently it is only planned
for pcie-root-port and possibly other PCI controller types, and none
of those are hotpluggable anyway)

There aren't yet any devices that use this flag. That will be in a
later patch.

7 days agoqemu: use virDomainPCIAddressSetAllMulti() to set multi when needed
Laine Stump [Tue, 10 Jan 2017 05:20:11 +0000]
qemu: use virDomainPCIAddressSetAllMulti() to set multi when needed

If there are multiple devices assigned to the different functions of a
single PCI slot, they will not work properly if the device at function
0 doesn't have its "multi" attribute turned on, so it makes sense for
libvirt to turn it on during PCI address assignment. Setting multi
then assures that the new setting is stored in the config (so it will
be used next time the domain is started), preventing any potential
problems in the case that a future change in the configuration
eliminates the devices on all non-0 functions (multi will still be set
for function 0 even though it is the only function in use on the slot,
which has no useful purpose, but also doesn't cause any problems).

(NB: If we were to instead just decide on the setting for
multifunction at runtime, a later removal of the non-0 functions of a
slot would result in a silent change in the guest ABI for the
remaining device on function 0 (although it may seem like an
inconsequential guest ABI change, it *is* a guest ABI change to turn
off the multi bit).)

7 days agoconf: new function virDomainPCIAddressSetAllMulti()
Laine Stump [Tue, 10 Jan 2017 05:02:40 +0000]
conf: new function virDomainPCIAddressSetAllMulti()

This utility function iterates through all devices looking for any
with a PCI address that has function != 0 (which implies that multiple
functions are in use on that slot), then uses an inner iterator to
find the device that's on function 0 of that same slot and sets the
"multi" in its virDomainDeviceInfo (as long as it hasn't already been
set explicitly by someone who presumably has better information than
we do).

It isn't yet called from anywhere, so will have no functional effect.

7 days agoconf: start search for next unused PCI address at same slot as previous find
Laine Stump [Fri, 21 Oct 2016 17:05:33 +0000]
conf: start search for next unused PCI address at same slot as previous find

There is a very slight time advantage to beginning the search for the
next unused PCI address at the slot *after* the previous find (which
is now used), but if we do that, we will miss allocating the other
functions of the same slot (when we implement a
VIR_PCI_CONNECT_AGGREGATE_SLOT flag to support that).

7 days agoconf: eliminate repetitive code in virDomainPCIAddressGetNextSlot()
Laine Stump [Wed, 19 Oct 2016 17:58:42 +0000]
conf: eliminate repetitive code in virDomainPCIAddressGetNextSlot()

virDomainPCIAddressGetNextSlot() starts searching from the last
allocated address and goes to the end of all the buses, then goes back
to the first bus and searches from there up to the starting point (in
case any address has been freed since the last time an address was
allocated. The loops for these two are almost, but not exactly, the
same, so they have remained as separate loops with the same code
inside the loop. To lessen maintenance headaches, the identical code
has been moved out into the function
virDomainPCIAddressFindUnusedFunctionOnBus(), which is called in place
of the loop contents.

7 days agoconf: eliminate concept of "reserveEntireSlot"
Laine Stump [Wed, 19 Oct 2016 16:43:04 +0000]
conf: eliminate concept of "reserveEntireSlot"

setting reserveEntireSlot really accomplishes nothing - instead of
going to the trouble of computing the value for reserveEntireSlot and
then possibly setting *all* functions of the slot as in-use, we can
just set the in-use bit only for the specific function being used by a
device.  Later we will know from the context (the PCI connect flags,
and whether we are reserving a specific address or asking for "the
next available") whether or not it is okay to allocate other functions
on the same slot.

Although it's not used yet, we allow specifying "-1" for the function
number when looking for the "next available slot" - this is going to
end up meaning "return the lowest available function in the slot, but
since we currently only provide a function from an otherwise unused
slot, "-1" ends up meaning "0".

7 days agoconf: use struct instead of int for each slot in virDomainPCIAddressBus
Laine Stump [Sun, 16 Oct 2016 21:14:25 +0000]
conf: use struct instead of int for each slot in virDomainPCIAddressBus

When keeping track of which functions of which slots are allocated, we
will need to have more information than just the current bitmap with a
bit for each function that is currently stored for each slot in a
virDomainPCIAddressBus. To prepare for adding more per-slot info, this
patch changes "uint8_t slots" into "virDomainPCIAddressSlot slot", which
currently has a single member named "functions" that serves the same
purpose previously served directly by "slots".

7 days agolibxl: define a per-domain logger.
Cédric Bosdonnat [Mon, 9 Jan 2017 15:20:50 +0000]
libxl: define a per-domain logger.

libxl doesn't provide a way to write one log for each domain. Thus
we need to demux the messages. If our logger doesn't know to which
domain to attribute a message, then it will write it to the default
log file.

Starting with Xen 4.9 (commit f9858025 and following), libxl will
write the domain ID in an easy to grab manner. The logger introduced
by this commit will use it to demux the libxl log messages.

Thanks to the default log file, this logger will also work with older
versions of Xen.

7 days agovirsh: pool-info: introduce option --bytes
Chen Hanxiao [Wed, 4 Jan 2017 01:01:21 +0000]
virsh: pool-info: introduce option --bytes

By default, pool-info will convert sizes to human friendly units.

This patch will introduce option [--bytes].
If specified, the raw sizes will be in the output.

Signed-off-by: Chen Hanxiao <>

7 days agodocs: add news entry in improvements section.
Dawid Zamirski [Wed, 11 Jan 2017 00:05:13 +0000]
docs: add news entry in improvements section.

Signed-off-by: John Ferlan <>

7 days agovbox: consolidate vbox IID structures.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:32 +0000]
vbox: consolidate vbox IID structures.

* remove _vboxIID_v2_x and _vboxIID_v3_x structs and repalce with one
  _vboxIID as all supprted vbox versions have the same IID structure.
* remove vboxIIDUnion that was used to abstract version depended IID
* remove IID_MEMBER macro and use the new vboxIID directly.

7 days agovbox: fix _displayTakeScreenShotPNGToArray
Dawid Zamirski [Thu, 29 Dec 2016 20:34:31 +0000]
vbox: fix _displayTakeScreenShotPNGToArray

This function was not implemented for vbox 5+ which removed
TakeScreenShotPNGToArray but provides TakeScreenShotToArray with
BitmapFormat_PNG argument which is the same thing.

7 days agovbox: IVRDxServer to IVRDEServer.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:30 +0000]
vbox: IVRDxServer to IVRDEServer.

The IVRDxServer was used because vbox < 4 used to have IVRDPServer
whereas vbox >= 4 has IVRDEServer. Now that support for legacy
versions is being removed, we can use IVRDEServer.

7 days agovbox: remove code dealing with oldMediumInterface
Dawid Zamirski [Thu, 29 Dec 2016 20:34:29 +0000]
vbox: remove code dealing with oldMediumInterface

* removed oldMediumInterface flag and related code that was used for
  vbox 2.x
* remove accelerate2DVideo and networkRemoveInterface flags which were
  also conditionals for handling legacy vbox versions.

7 days agovbox: remove domain events support.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:28 +0000]
vbox: remove domain events support.

this was implemented only for vbox 3 series and was mostly stubs

7 days agovbox: remove getMachineForSession flag.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:27 +0000]
vbox: remove getMachineForSession flag.

* the getMachineForSession is always true for 4.0+. This also means that
  checkflag argument in openSessionForMachine no longer has any meaning
  because it was or'ed with getMachineForSession (always true)
* remove supportScreenshot flag - vbox 4.0+ supports it
* remove detachDevicesExplicitly flag only relevant for < 4.0

7 days agovbox: do not use IHardDisk anymore.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:26 +0000]
vbox: do not use IHardDisk anymore.

VirtualBox 4.0+ uses IMedium and IHardDisk is no longer used, so

* remove typef IMedium IHardDisk
* merge UIHardDisk into UIMedium
* update all references accordingly

7 days agovbox: remove _vboxAttachDrivesOld
Dawid Zamirski [Thu, 29 Dec 2016 20:34:25 +0000]
vbox: remove _vboxAttachDrivesOld

and fold vboxAttachDrivesNew into vboxAttachDrives

7 days agovbox: remove code for old API versions.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:24 +0000]
vbox: remove code for old API versions.

This removes most of the code wrapped in VBOX_API_VERSION < 4000000
preprocessor checks. Those are the ones that can be safely removed
without needing to update driver code to accomodate it.

7 days agovbox: remove calls to *InstallUniformedAPI macros.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:23 +0000]
vbox: remove calls to *InstallUniformedAPI macros.

That is, for versions older than 4.0. Also do not try to include
headers for those old versions.

7 days agovbox: remove SDK header files for vbox 3 and older.
Dawid Zamirski [Tue, 29 Nov 2016 22:23:27 +0000]
vbox: remove SDK header files for vbox 3 and older.

* delete SDK header files for vbox older than 4.0
* delete .c files for vbox older than 4.0
* update vbox_XPCOMCGlue to use oldest supported header file, that is 4.0
  going forward.
* remove deleted files from

7 days agomaint: update to latest gnulib
Eric Blake [Tue, 10 Jan 2017 18:39:30 +0000]
maint: update to latest gnulib

Among other recent changes, this includes a workaround to avoid
Clang compiler bug
having spurious link failures.

* .gnulib: Update.
* bootstrap: Synchronize to upstream.

Signed-off-by: Eric Blake <>

7 days agodocs: Document the release notes process for contributors
Andrea Bolognani [Wed, 4 Jan 2017 11:45:23 +0000]
docs: Document the release notes process for contributors

Now that we have built a fairly solid process for dealing with
release notes, we should start pushing for contributors to
provide the relevant information along with their code:
documenting the process is clearly a requirement for this to

7 days agoNEWS: Reformat at generation time
Andrea Bolognani [Tue, 3 Jan 2017 16:50:34 +0000]
NEWS: Reformat at generation time

Instead of encoding formatting information inside the
corresponding XSLT stylesheet, use a Python script to reformat
the text appropriately based on a few simple markers.

Splitting the task between the XSLT stylesheet and the Python
script allows us to keep both parts very simple.

7 days agoNEWS: Improve building pipeline
Andrea Bolognani [Tue, 3 Jan 2017 11:22:54 +0000]
NEWS: Improve building pipeline

Currently, building the NEWS file involves using a XSLT stylesheet
to extract information from the same HTML file that's used on the
libvirt website.

The process works, but it's quite fiddly in that it requires the
source HTML to be formatted in a very precise way, and a single
missing newline can mess up the resulting plain text considerably.

Moreover, the XSLT stylesheet itself encodes a lot of the details
of converting to plain text in a way that's not necessarily easy
to understand, tweak or fix.

To improve the process, move all existing entries to a new XML
file that contains exactly the information we care about in a
simple structured format, and start generating both the HTML and
plain text versions of the release notes using XSLT stylesheets
that can now afford to be almost trivial.