6 hours agoqemuDomainSnapshotPrepare: Don't always assume vm->def->os.loader master
Michal Privoznik [Thu, 30 Mar 2017 12:03:45 +0000]
qemuDomainSnapshotPrepare: Don't always assume vm->def->os.loader

In 9e2465834 a check that denies internal snapshots when pflash
based loader is configured for the domain. However, if there's
none and an user tries to do an internal snapshot they will
witness daemon crash as in that case vm->def->os.loader is NULL
and we dereference it unconditionally.

Signed-off-by: Michal Privoznik <>

10 hours agoqemu: Check non-migratable host CPU features v3.2.0-rc2
Jiri Denemark [Wed, 29 Mar 2017 09:00:32 +0000]
qemu: Check non-migratable host CPU features

CPU features which change their value from disabled to enabled between
two calls to query-cpu-model-expansion (the first with no extra
properties set and the second with 'migratable' property set to false)
can be marked as enabled and non-migratable in qemuMonitorCPUModelInfo.

Since the code consuming qemuMonitorCPUModelInfo currently ignores the
migratable flag, this change is effectively changing the CPU model
advertised in domain capabilities to contain all features (even those
which block migration). And this matches what we do for QEMU older than
2.9.0, when we detect all CPUID bits ourselves without asking QEMU.

As a result of this change

    <cpu mode='host-model'>
      <feature name='invtsc' policy='require'/>

will work with all QEMU versions. Such CPU definition would be forbidden
with QEMU >= 2.9.0 without this patch.

Signed-off-by: Jiri Denemark <>

10 hours agoqemu: Check migratable host CPU features
Jiri Denemark [Wed, 29 Mar 2017 08:58:41 +0000]
qemu: Check migratable host CPU features

If calling query-cpu-model-expansion on the 'host'/'max' CPU model with
'migratable' property set to false succeeds, we know QEMU is able to
tell us which features would disable migration. Thus we can mark all
enabled features as migratable.

Signed-off-by: Jiri Denemark <>

10 hours agoqemuMonitorCPUModelInfo: Add support for non-migratable features
Jiri Denemark [Wed, 29 Mar 2017 08:33:08 +0000]
qemuMonitorCPUModelInfo: Add support for non-migratable features

QEMU is able to tell us whether a CPU feature would block migration or
not. This patch adds support for storing such features in

Signed-off-by: Jiri Denemark <>

25 hours agodocs: document bhyve UEFI support
Roman Bogorodskiy [Mon, 20 Mar 2017 13:53:18 +0000]
docs: document bhyve UEFI support

 - Add a news entry
 - Update the driver page with documentation of the new options
   and some examples

27 hours agoqemu: domain: Properly lookup top of chain in qemuDomainGetStorageSourceByDevstr
Peter Krempa [Wed, 29 Mar 2017 14:56:05 +0000]
qemu: domain: Properly lookup top of chain in qemuDomainGetStorageSourceByDevstr

When idx is 0 virStorageFileChainLookup returns the base (bottom) of the
backing chain rather than the top. This is expected by the callers of

Add a special case for idx == 0

33 hours agoconf: do not steal pointers from the pool source
Ján Tomko [Tue, 28 Mar 2017 13:11:52 +0000]
conf: do not steal pointers from the pool source

Since commit fcbbb28 we steal the pointer to the storage pool
source name if there was no pool name specified.

Properly duplicate the string to avoid freeing it twice.

33 hours agoschema: do not require name for certain pool types
Ján Tomko [Tue, 28 Mar 2017 13:07:50 +0000]
schema: do not require name for certain pool types

Pool types that have the VIR_STORAGE_POOL_SOURCE_NAME flag set
allow omitting the <name> element and instead fill out the pool name
from the <source><name> element.

Relax the schema to make <name> optional for these pools.
Expressing that at least one of these is required is out of scope
of the schema.

34 hours agoqemuDomainGetStats: Copy domain ID too
Michal Privoznik [Tue, 28 Mar 2017 13:47:42 +0000]
qemuDomainGetStats: Copy domain ID too

One of the problems with our virGetDomain function is that it
copies just domain name and domain UUID. Therefore it's very
easy to forget aboud domain ID. This can cause some bugs, like
virConnectGetAllDomainStats not reporting proper domain IDs.

Signed-off-by: Michal Privoznik <>

34 hours agonetwork: Don't crash on domain destroy
Michal Privoznik [Wed, 22 Mar 2017 12:07:14 +0000]
network: Don't crash on domain destroy

Imagine the following scenario:

1) virsh net-start default
2) virsh start myFavouriteDomain
3) virsh net-destroy default
4) virsh destroy myFavouriteDomain

(assuming myFavouriteDomain has an interface from default

Regardless of how unlikely this scenario looks like, we should
not crash. The problem is, on net-destroy in
networkShutdownNetworkVirtual() the virMacMap module is unrefed,
but the stale pointer is kept around. Thus when the domain
destroy procedure comes in, networkReleaseActualDevice() and
subsequently networkMacMgrDel() is called. This function sees the
stale pointer and starts calling the virMacMap module APIs which
work over freed memory.

Signed-off-by: Michal Privoznik <>

2 days agonews: Update after recent commits
Peter Krempa [Mon, 27 Mar 2017 15:35:34 +0000]
news: Update after recent commits

Mention the hyperv notifier and the new API to set block thresholds.

2 days agostorage: Better describe logical pool creation/definition parameters
John Ferlan [Sat, 25 Mar 2017 12:07:36 +0000]
storage: Better describe logical pool creation/definition parameters

Clean up the virsh man page description for --pool-create-as in order
to better describe how the various arguments are used when creating
(or defining) a logical pool.

Signed-off-by: Ján Tomko <>

2 days agoRevert "storage: Better describe logical pool creation/definition parameters"
Ján Tomko [Tue, 28 Mar 2017 07:45:10 +0000]
Revert "storage: Better describe logical pool creation/definition parameters"

This reverts commit ca4515d2639057020c749470f390fe1f5981e91e
which also included a functional change that broke logical storage pools
not named after their volume groups.

2 days agostorage: Fix build on i686
Jiri Denemark [Tue, 28 Mar 2017 10:48:31 +0000]
storage: Fix build on i686

off_t is signed and it's size is the same as long only on 64b archs.
Thus it cannot be formatted as %lu.

Signed-off-by: Jiri Denemark <>

2 days agodocs: Improve documentation related to memory locking
Andrea Bolognani [Thu, 23 Mar 2017 17:22:15 +0000]
docs: Improve documentation related to memory locking

2 days agotests: Introduce QEMU memory locking limit tests
Andrea Bolognani [Thu, 23 Mar 2017 13:06:57 +0000]
tests: Introduce QEMU memory locking limit tests

These tests cover a number of scenarios where we care about
the memory locking limit being set correctly for the guest
to work properly.

2 days agotests: Introduce virTestCompareToULL()
Andrea Bolognani [Thu, 23 Mar 2017 13:29:43 +0000]
tests: Introduce virTestCompareToULL()

This will be used later on in the test suite.

2 days agoprocess: Translate "unlimited" correctly
Andrea Bolognani [Wed, 22 Mar 2017 12:44:45 +0000]
process: Translate "unlimited" correctly

The value we use internally to represent the lack of a memory
match the value setrlimit() and prlimit() use for the same
purpose, RLIM_INFINITY, so we have to handle the translation


2 days agoqemu: Fix memory locking limit calculation
Andrea Bolognani [Wed, 22 Mar 2017 12:44:13 +0000]
qemu: Fix memory locking limit calculation

For guests that use <memoryBacking><locked>, our only option
is to remove the memory locking limit altogether.


2 days agoqemu: Remove qemuDomainRequiresMemLock()
Andrea Bolognani [Tue, 21 Mar 2017 18:52:50 +0000]
qemu: Remove qemuDomainRequiresMemLock()

Instead of having a separate function, we can simply return
zero from the existing qemuDomainGetMemLockLimitBytes() to
signal the caller that the memory locking limit doesn't need
to be set for the guest.

Having a single function instead of two makes it less likely
that we will use the wrong value, which is exactly what
happened when we started applying the limit that was meant
for VFIO-using guests to <memoryBacking><locked>-using

2 days agoRevert "qemu: Forbid <memoryBacking><locked> without <memtune><hard_limit>"
Andrea Bolognani [Thu, 16 Mar 2017 17:23:56 +0000]
Revert "qemu: Forbid <memoryBacking><locked> without <memtune><hard_limit>"

This reverts commit c2e60ad0e5124482942164e5fec088157f5e716a.

Turns out this check is excessively strict: there are ways
other than <memtune><hard_limit> to raise the memory locking
limit for QEMU processes, one prominent example being
tweaking /etc/security/limits.conf.


2 days agonews: Fix typo in element name
Jiri Denemark [Tue, 28 Mar 2017 08:12:22 +0000]
news: Fix typo in element name

Signed-off-by: Jiri Denemark <>

2 days agonews: Move recent bug fixes into 3.2.0 release v3.2.0-rc1
Jiri Denemark [Mon, 27 Mar 2017 20:50:30 +0000]
news: Move recent bug fixes into 3.2.0 release

Commits 29f7b5ea6a and 5edf9aaf54 pushed them incorrectly at the end of
the file in the bug fixes section for libvirt 2.5.0.

Signed-off-by: Jiri Denemark <>

2 days agonews: Make changes understandable for users
Martin Kletzander [Mon, 27 Mar 2017 20:25:39 +0000]
news: Make changes understandable for users

When reading release notes, patch summary is not always the best
description of what users can expect in new version.  I propose
changing it slightly so that it describes what exactly happens and

However, we do not have to add every single code change to the news
file, that would be ridiculous and unreadable for users.  If the patch
subject needs changes like this one, I'm rather tempted to say that
such changes should not be in the news file at all.  So that would be
the other way how to fix this.

Signed-off-by: Martin Kletzander <>

2 days agoBuild vircaps2xmltest and requirements only on Linux
Martin Kletzander [Mon, 27 Mar 2017 20:08:45 +0000]
Build vircaps2xmltest and requirements only on Linux

The mock, as well as the test, is only available on Linux.  So skip
building it everywhere else, especially when it fails on mingw.

Signed-off-by: Martin Kletzander <>

2 days agoUse stub for virNetDevGetName on mingw
Martin Kletzander [Mon, 27 Mar 2017 19:49:06 +0000]
Use stub for virNetDevGetName on mingw

If if_indextoname is not defined, the whole function using it should
not be defined either.  Add stub to fix build on mingw.

Caused by 5dd607059d8a98e04024305ae4afbd038aadbdcd

Signed-off-by: Martin Kletzander <>

2 days agoqemu: Free persistent def inside qemuMigrationCookieFree
Jiri Denemark [Tue, 21 Mar 2017 10:04:16 +0000]
qemu: Free persistent def inside qemuMigrationCookieFree

Creating a copy of the definition we want to add in a migration cookie
makes the code cleaner and less prone to memory leaks or double free

Signed-off-by: Jiri Denemark <>

2 days agoqemu: Typedef migration cookie enums
Jiri Denemark [Tue, 21 Mar 2017 09:36:53 +0000]
qemu: Typedef migration cookie enums

Signed-off-by: Jiri Denemark <>

2 days agoqemu: Fix formatting in qemu_migration_cookie.c
Jiri Denemark [Tue, 21 Mar 2017 11:47:19 +0000]
qemu: Fix formatting in qemu_migration_cookie.c

Signed-off-by: Jiri Denemark <>

2 days agoqemu: Move migration cookies to a separate file
Jiri Denemark [Mon, 27 Mar 2017 18:50:44 +0000]
qemu: Move migration cookies to a separate file

Signed-off-by: Jiri Denemark <>

2 days agonews: Add support for setting TSC frequency
Jiri Denemark [Mon, 27 Mar 2017 18:31:10 +0000]
news: Add support for setting TSC frequency

Signed-off-by: Jiri Denemark <>

2 days agodocs: Add news article for logical pool-create-as
John Ferlan [Mon, 27 Mar 2017 17:18:49 +0000]
docs: Add news article for logical pool-create-as

2 days agostorage: Better describe logical pool creation/definition parameters
John Ferlan [Sat, 25 Mar 2017 12:07:36 +0000]
storage: Better describe logical pool creation/definition parameters

Clean up the virsh man page description for --pool-create-as in order
to better describe how the various arguments are used when creating
(or defining) a logical pool.

Also modify the storage pool XML parsing algorithm to check for the
mismatched "name" and "source-name".

2 days agovirsh.pod: Move the positional --print-xml for pool-{define|create}-as
John Ferlan [Mon, 27 Mar 2017 17:14:55 +0000]
virsh.pod: Move the positional --print-xml for pool-{define|create}-as

Move the --print-xml to the end of the qualifiers since it's not
properly positionally situated for both --pool-create-as and --pool-define-as
and could be miscontrued as being the 3rd positional argument.

2 days agoconf: Set defaultFormat if no storage source XML present
John Ferlan [Mon, 27 Mar 2017 17:01:56 +0000]
conf: Set defaultFormat if no storage source XML present

While parsing if the storage source is not present, then a defaultFormat
was not set. This could lead to oddities such as seeing "unknown" format
in output for the "logical" pool even though the only format the pool could
support would be "lvm2".

This does "put a label" on other pool defaults as follows:

   File System: FS_AUTO
   Network File System: NETFS_AUTO
   Disk: UNKNOWN

Each of which is the "0" value for their respective pools and thus
would be no "real" change.

3 days agoqemu: Allow migration with invtsc if tsc frequency is set
Jiri Denemark [Fri, 24 Mar 2017 08:27:26 +0000]
qemu: Allow migration with invtsc if tsc frequency is set

Migration with invtsc is allowed by QEMU as long as TSC frequency is
explicitly specified.

Signed-off-by: Jiri Denemark <>

3 days agoqemu: Use virCPUCheckFeature in qemuMigrationIsAllowed
Jiri Denemark [Fri, 24 Mar 2017 08:27:16 +0000]
qemu: Use virCPUCheckFeature in qemuMigrationIsAllowed

Signed-off-by: Jiri Denemark <>

3 days agoqemu: Add support for setting TSC frequency
Jiri Denemark [Thu, 23 Mar 2017 14:54:38 +0000]
qemu: Add support for setting TSC frequency

QEMU allows for TSC frequency to be explicitly set to enable migration
with invtsc (migration fails if the destination QEMU cannot set the
exact same frequency used when starting the domain on the source host).

Libvirt already supports setting the TSC frequency in the XML using

      <timer name='tsc' frequency='1234567890'/>

which will be transformed into

    -cpu Model,tsc-frequency=1234567890

QEMU command line.

Signed-off-by: Jiri Denemark <>

3 days agoconf: Fix XML parser for timer frequency
Jiri Denemark [Thu, 23 Mar 2017 14:53:50 +0000]
conf: Fix XML parser for timer frequency

The frequency is documented and formatted as an attribute of the <timer>
element rather than a nested <frequency> element expected by the parser.
Luckily enough, timer frequency has not been used by any driver so far.
And users were not able to set it in the XML either.

Signed-off-by: Jiri Denemark <>

3 days agovirmdev: fix build on non-Linux
Roman Bogorodskiy [Mon, 27 Mar 2017 15:38:33 +0000]
virmdev: fix build on non-Linux

 - Make virMediatedDeviceNew() stub args match its prototype
 - Fix typo: virRerportError -> virReportError
 - Move MDEV_SYSFS_DEVICES definition out of the #ifdef __linux__ block
   so we don't have to stub virMediatedDeviceGetSysfsPath()

3 days agonetdev: fix build on non-Linux
Roman Bogorodskiy [Mon, 27 Mar 2017 15:25:16 +0000]
netdev: fix build on non-Linux

Fix typo: virNetDevVLanPtr -> virNetDevVlanPtr.

3 days agoutil: Fix build on FreeBSD
Jiri Denemark [Mon, 27 Mar 2017 17:43:31 +0000]
util: Fix build on FreeBSD

Signed-off-by: Jiri Denemark <>

3 days agonews: Add logical overwrite
John Ferlan [Mon, 27 Mar 2017 16:52:32 +0000]
news: Add logical overwrite

3 days agological: Need to overwrite/clear more than just first 512 bytes
John Ferlan [Fri, 24 Mar 2017 16:25:27 +0000]
logical: Need to overwrite/clear more than just first 512 bytes

As it turns out some file headers (e.g. ext4) may be larger/longer than
the 512 bytes of zeros being written prior to a pvcreate, so let's write
out 2048 bytes similar to how the pvcreate sources would peek at the first
4 sectors of the device.

Make sure there is at enough bytes on the device to clear before doing
doing the clear - just to be sure.

3 days agoutil: Remove NONNULL from virHostdevReAttachMediatedDevices
John Ferlan [Mon, 27 Mar 2017 15:25:20 +0000]
util: Remove NONNULL from virHostdevReAttachMediatedDevices

Causes build failure when enabling static analysis

3 days agonews: Add <change> lost in merge
John Ferlan [Mon, 27 Mar 2017 15:20:58 +0000]
news: Add <change> lost in merge

Ensure to insert </change> <change> between items - lost during merge

3 days agonetwork: better validation of devices in hostdev network pool
Laine Stump [Sat, 25 Mar 2017 18:00:13 +0000]
network: better validation of devices in hostdev network pool

This adds a few validations to the devices listed for a hostdev network:

* devices must be listed by PCI address, not by netdev name

* listing a device by PCI address is valid only for hostdev networks, not
  for other types of network (e.g. macvtap passthrough).

* each device in a hostdev pool must be an SR-IOV VF


3 days agoExpose Linux symbols only on Linux
Martin Kletzander [Mon, 27 Mar 2017 15:11:49 +0000]
Expose Linux symbols only on Linux

Signed-off-by: Martin Kletzander <>

3 days agovirhostcpu: Make only defined symbols available
Martin Kletzander [Mon, 27 Mar 2017 14:15:45 +0000]
virhostcpu: Make only defined symbols available

That way you get the error from the compiler before the linker.

Signed-off-by: Martin Kletzander <>

3 days agovirhostcpu: Expose virHostCPUGetOnline on non-Linux
Martin Kletzander [Mon, 27 Mar 2017 14:16:43 +0000]
virhostcpu: Expose virHostCPUGetOnline on non-Linux

Previously, this function must've been called only on Linux in order
to fail gracefully.  That lead to #ifdef mess in callers, so the
function was redesigned so it failed gracefully on non-existing
files.  However that commit forgot to define the function outside the
__linux__ ifdef, it broke non-Linux builds.

Caused by c67e04e25fa58104e0fae41f5b874a8067557073.

Signed-off-by: Martin Kletzander <>

3 days agotests: Properly dereference cpus pointer in virnumamock.c
Martin Kletzander [Mon, 27 Mar 2017 13:47:58 +0000]
tests: Properly dereference cpus pointer in virnumamock.c

Signed-off-by: Martin Kletzander <>

3 days agovirsh: reject more negative numbers
Ján Tomko [Mon, 27 Mar 2017 12:17:42 +0000]
virsh: reject more negative numbers

Be more positive and reject negative numbers where we don't
allow them by using the virStrToLong variants with 'p'.

3 days agostorage: reject negative capacity
Ján Tomko [Mon, 27 Mar 2017 12:33:16 +0000]
storage: reject negative capacity

3 days agobuild: Fix syntax check in VPATH
Jiri Denemark [Mon, 27 Mar 2017 14:48:19 +0000]
build: Fix syntax check in VPATH

Matching the beginning of a path in syntax check does not work because
each path is enriched with a prefix of the source tree.

Signed-off-by: Jiri Denemark <>

3 days agobuild: Fix sc_prohibit_exit_in_tests syntax check
Jiri Denemark [Mon, 27 Mar 2017 14:46:12 +0000]
build: Fix sc_prohibit_exit_in_tests syntax check

This check makes sense only in *.c files.

Signed-off-by: Jiri Denemark <>

3 days agocputest: Add tests for virCPUUpdateLive API
Jiri Denemark [Thu, 16 Mar 2017 11:26:30 +0000]
cputest: Add tests for virCPUUpdateLive API

The test takes

  x86-cpuid-Something-guest.xml CPU (the CPU libvirt would use for
    host-model on a CPU described by x86_64-cpuid-Something.xml without
    talking to QEMU about what it supports on the host)

and updates it according to CPUID data from QEMU:

  x86_64-cpuid-Something-enabled.xml (reported as "feature-words"
    property of the CPU device)


  x86_64-cpuid-Something-disabled.xml (reported as "filtered-features"
    property of the CPU device).

The result is compared to

  x86_64-cpuid-Something-json.xml (the CPU libvirt would use as
    host-model based on the reply from query-cpu-model-expansion).

The comparison is a bit tricky because the *-json.xml CPU contains fewer
disabled features. Only the features which are included in the base CPU
model, but listed as disabled in *.json will be disabled in *-json.xml.
The CPU computed by virCPUUpdateLive from the test data will list all
features present in the host's CPUID data and not enabled in *.json as
disabled. The cpuTestUpdateLiveCompare function checks that the computed
and expected sets of enabled features match.

Signed-off-by: Jiri Denemark <>

3 days agocputest: Disable "cmt" feature unknown to QEMU
Jiri Denemark [Fri, 17 Mar 2017 10:46:19 +0000]
cputest: Disable "cmt" feature unknown to QEMU

All CPU features which QEMU does not know about but libvirt knows them
(currently "cmt" is the only one) are implicitly disabled by QEMU and
should be present in x86_64-cpuid-*-disabled.xml.

Signed-off-by: Jiri Denemark <>

3 days agocputest: Disable TSX on broken models
Jiri Denemark [Fri, 17 Mar 2017 10:29:02 +0000]
cputest: Disable TSX on broken models

Commit v3.1.0-26-gd60012b4e started filtering hle and rtm features from
broken Intel Haswell CPUs. QEMU implemented similar functionality and
thus it doesn't report rtm and hle features as enabled for Core i5-4670T
CPU anymore.

Signed-off-by: Jiri Denemark <>

3 days agocputest: Generate data for virCPUUpdateLive
Jiri Denemark [Thu, 16 Mar 2017 11:26:05 +0000]
cputest: Generate data for virCPUUpdateLive

Generated with

    (cd tests/cputestdata; ./ diff x86_64-cpuid-*.json)

Signed-off-by: Jiri Denemark <>

3 days agocputest: Add "diff" command to
Jiri Denemark [Thu, 16 Mar 2017 11:25:30 +0000]
cputest: Add "diff" command to

The new command can be used to generate test data for virCPUUpdateLive.

When " diff x86-cpuid-Something.json" is run, it reads raw
CPUID data stored in x86-cpuid-Something.xml and CPUID data from QEMU
stored in x86-cpuid-Something.json to produce two more CPUID files:
x86-cpuid-Something-enabled.xml and x86-cpuid-Something-disabled.xml.

- x86-cpuid-Something-enabled.xml will contain CPUID bits present in
    x86-cpuid-Something.json (i.e., enabled by QEMU for the "host" CPU)

- x86-cpuid-Something-disabled.xml will contain all CPUID bits from
    x86-cpuid-Something.xml which are not present in
    x86-cpuid-Something.json (i.e., CPUID bits which the host CPU
    supports, but QEMU does not enable them for the "host" CPU)

Signed-off-by: Jiri Denemark <>

3 days agocputest: Add cpuidLeaf helper to
Jiri Denemark [Wed, 15 Mar 2017 13:29:30 +0000]
cputest: Add cpuidLeaf helper to

Signed-off-by: Jiri Denemark <>

3 days agocputest: Add cpuidIsSet helper to
Jiri Denemark [Wed, 15 Mar 2017 13:21:48 +0000]
cputest: Add cpuidIsSet helper to

Signed-off-by: Jiri Denemark <>

3 days agocputest: Rename script as
Jiri Denemark [Wed, 15 Mar 2017 12:16:37 +0000]
cputest: Rename script as

The new script is going to be more general and the original
functionality can be requested by " convert".

Signed-off-by: Jiri Denemark <>

3 days agocputest: Move instantiation of JSONDecoder in
Jiri Denemark [Wed, 15 Mar 2017 12:09:21 +0000]
cputest: Move instantiation of JSONDecoder in

Let's make the object local to the parseFeatureWords function which uses

Signed-off-by: Jiri Denemark <>

3 days agocpu: Do not pass virConnectBaselineCPUFlags to cpuBaseline
Jiri Denemark [Fri, 17 Mar 2017 14:58:07 +0000]
cpu: Do not pass virConnectBaselineCPUFlags to cpuBaseline

The public API flags are handled by the cpuBaselineXML wrapper. The
internal cpuBaseline API only needs to know whether it is supposed to
drop non-migratable features.

Signed-off-by: Jiri Denemark <>

3 days agocpu: Move feature expansion out of cpuBaseline
Jiri Denemark [Fri, 17 Mar 2017 14:57:47 +0000]
cpu: Move feature expansion out of cpuBaseline

cpuBaseline is responsible for computing a baseline CPU while feature
expansion is done by virCPUExpandFeatures. The cpuBaselineXML wrapper
(used by hypervisor drivers to implement virConnectBaselineCPU API)
calls cpuBaseline followed by virCPUExpandFeatures if requested by

The features in the three changed test files had to be sorted using
"sort -k 3" because virCPUExpandFeatures returns a sorted list of

Signed-off-by: Jiri Denemark <>

3 days agocpu: Drop unused flags from cpuArchDecode
Jiri Denemark [Thu, 16 Mar 2017 13:03:09 +0000]
cpu: Drop unused flags from cpuArchDecode

Signed-off-by: Jiri Denemark <>

3 days agocpu: Introduce virCPUExpandFeatures
Jiri Denemark [Thu, 16 Mar 2017 11:23:50 +0000]
cpu: Introduce virCPUExpandFeatures

flag to expand CPU features is strange. Not to mention that cpuBaseline
can only expand host CPU definitions (i.e., it completely ignores
feature policies). The new virCPUExpandFeatures API is designed to work
with both host and guest CPU definitions.

Signed-off-by: Jiri Denemark <>

3 days agocpu_conf: Introduce virCPUDefFreeFeatures
Jiri Denemark [Thu, 16 Mar 2017 11:21:58 +0000]
cpu_conf: Introduce virCPUDefFreeFeatures

Signed-off-by: Jiri Denemark <>

3 days agodocs: make interface start mode element optional
Laine Stump [Mon, 27 Mar 2017 04:40:18 +0000]
docs: make interface start mode element optional

This brings the libvirt version of this RNG file in line with the same
file in netcf (as soon as the corresponding patch there is ACKed and

There's no reason to require it when defining an interface (the config
option it corresponds to is optional), and it isn't even output in the
status of an interface.


3 days agoconf: validate that PCI controller index is < 256
Laine Stump [Mon, 27 Mar 2017 00:47:17 +0000]
conf: validate that PCI controller index is < 256

This is the maximum for many reasons, for starters because index ==
bus number, and a controller's bus number is 8 bits.

This incidentally resolves:

3 days agoutil: rename virHostdevNetConfigRestore() to virHostdevRestoreNetConfig()
Laine Stump [Mon, 13 Mar 2017 23:07:02 +0000]
util: rename virHostdevNetConfigRestore() to virHostdevRestoreNetConfig()

3 days agoutil: log all setting of MAC addresses and vlan tags
Laine Stump [Sat, 11 Mar 2017 15:29:29 +0000]
util: log all setting of MAC addresses and vlan tags

Having this information available will make it easier to determine the
culprit when MAC or vlan tag appear to not be set, eg.:

(This patch doesn't fix that bug, just makes it easier to diagnose)

3 days agoutil: try *really* hard to set the MAC address of an SRIOV VF
Laine Stump [Tue, 7 Mar 2017 19:24:37 +0000]
util: try *really* hard to set the MAC address of an SRIOV VF

If an SRIOV VF has previously been used for VFIO device assignment,
the "admin MAC" that is stored in the PF driver's table of VF info
will have been set to the MAC address that the virtual machine wanted
the device to have. Setting the admin MAC for a VF also sets a flag in
the PF that is loosely called the "administratively set" flag. Once
that flag is set, it is no longer possible for the net driver of the
VF (either on the host or in a virtual machine) to directly set the
VF's MAC again; this flag isn't reset until the *PF* driver is
restarted, and that requires taking *all* VFs offline, so it's not
really feasible to do.

If the same SRIOV VF is later used for macvtap passthrough mode, the
VF's MAC address must be set, but normally we don't unbind the VF from
its host net driver (since we actually need the host net driver in
this case). Since setting the VF MAC directly will fail, in the past
"we" ("I") had tried to fix the problem by simply setting the admin MAC
(via the PF) instead. This *appeared* to work (and might have at one
time, due to promiscuous mode being turned on somewhere or something),
but it currently creates a non-working interface because only the
value for admin MAC is set to the desired value, *not* the actual MAC
that the VF is using.

Earlier patches in this series reverted that behavior, so that we once
again set the MAC of the VF itself for macvtap passthrough operation,
not the admin MAC. But that brings back the original bug - if the
interface has been used for VFIO device assignment, you can no longer
use it for macvtap passthrough.

This patch solves that problem by noticing when virNetDevSetMAC()
fails for a VF, and in that case it sets the desired MAC to the admin
MAC via the PF, then "bounces" the VF driver (by unbinding and the
immediately rebinding it to the VF). This causes the VF's MAC to be
reinitialized from the admin MAC, and everybody is happy (until the
*next* time someone wants to set the VF's MAC address, since the
"administratively set" bit is still turned on).

3 days agoutil: if setting admin MAC to 00:00:00:00:00:00 fails, try 02:00:00:00:00:00
Laine Stump [Mon, 6 Mar 2017 18:59:29 +0000]
util: if setting admin MAC to 00:00:00:00:00:00 fails, try 02:00:00:00:00:00

Some PF drivers allow setting the admin MAC (that is the MAC address
that the VF will be initialized to the next time the VF's driver is
loaded) to 00:00:00:00:00:00, and some don't. Multiple drivers
initialize the admin MACs to all 0, but don't allow setting it to that
very same value. It has been an uphill battle convincing the driver
people that it's reasonable to expect The argument that's used is
that an all 0 device MAC address on a device is invalid; however, from
an outsider's point of view, when the admin MAC is set to 0 at the
time the VF driver is loaded, the VF's MAC is *not* set to 0, but to a
random non-0 value. But that's beside the point - even if I could
convince one or two SRIOV driver maintainers to permit setting the
admin MAC to 0, there are still several other drivers.

So rather than fighting that losing battle, this patch checks for a
failure to set the admin MAC due to an all 0 value, and retries it
with 02:00:00:00:00:00. That won't result in a random value being set
in the VF MAC at next VF driver init, but that's okay, because we
always want to set a specific value anyway. Rather, the "almost 0"
setting makes it easy to visually detect from the output of "ip link
show" which VFs are currently in use and which are free.

3 days agoutil: remove unused functions from virnetdev.c
Laine Stump [Mon, 6 Mar 2017 15:01:02 +0000]
util: remove unused functions from virnetdev.c

The global functions virNetDevReplaceMacAddress(),
virNetDevReplaceNetConfig(), virNetDevRestoreMacAddress(), and
virNetDevRestoreNetConfig() are no longer used, as their functionality
has been replaced by virNetDev(Save|Read|Set)NetConfig().

The static functions virNetDevReplaceVfConfig() and
virNetDevRestoreVfConfig() were only used by the above-named global
functions that were removed.

3 days agoutil: after hostdev assignment, restore VF MAC address via setting admin MAC
Laine Stump [Mon, 6 Mar 2017 14:36:40 +0000]
util: after hostdev assignment, restore VF MAC address via setting admin MAC

It takes longer to explain this than to fix it...

In the past we weren't able to save the VF's own MAC address *at all*
when using it for hostdev assignment, because we had already unbound
the VF from the host net driver prior to saving its config. With the
previous patch, that problem has been solved, so we now have the VF's
MAC address saved and can move on to the *next* problem, which is twofold:

1) during teardown we restore the config before we've re-bound, so the
   VF doesn't have a net driver, and thus we can't set its MAC address

2) even if we delay restoring the config until the VF is bound to a
   net driver, the request to set its MAC address would fail, since
   (during device setup) we had set the "admin MAC" for the VF via an
   RTM_SETLINK to the PF - once you've set the admin MAC for a VF, the
   VF driver (either on host or on guest) is not allowed to change the
   VF's MAC address "forever" (well, until you reload the PF driver,
   but that requires destroying and recreating every single VF, which
   isn't something you can require).

The solution is to keep the restoration of config at the same place,
but to set the *admin MAC* to the address you want the VF to have -
when the VF net driver is later initialized (as a part of re-binding
to the VF net driver) its MAC will be initialized to the current value
of the admin MAC.

3 days agoutil: save hostdev network device config before unbinding from host driver
Laine Stump [Tue, 28 Feb 2017 21:44:26 +0000]
util: save hostdev network device config before unbinding from host driver

In order to properly restore the original state of an SRIOV VF when
we're finished with it, we need to save the MAC address of the VF
itself (not just the admin MAC address for the VF that is stored in
the PF). But that can only be done when the VF is still bound to the
host's netdev driver, and we have always done the saving of device
config after the VF is already bound to vfio-pci. This patch prepares
us for adding a save of the VF's MAC by calling the function that
saves netconfig earlier in the device preparation, before we've
unbound it from the host netdev driver.

3 days agoutil: replace virHostdevNetConfigReplace with ...(Save|Set)NetConfig()
Laine Stump [Tue, 28 Feb 2017 18:47:12 +0000]
util: replace virHostdevNetConfigReplace with ...(Save|Set)NetConfig()

These two operations will need to be separated so that saving of the
original config is done before detaching the host net driver, and
setting the new config is done after attaching vfio-pci. This patch
splits the single function into two, but for now calls them together
(to make bisecting easier if there is a regression).

3 days agoutil: use new virNetDev*NetConfig() functions for hostdev setup/teardown
Laine Stump [Mon, 6 Mar 2017 01:28:08 +0000]
util: use new virNetDev*NetConfig() functions for hostdev setup/teardown

virHostdevNetConfigReplace() and virHostdevNetConfigRestore() are
modified to use the new virNetDev*NetConfig() functions.

Note that due to the VF's original MAC addresses being saved after it
has already been un-bound from the host net driver, the actual current
VF MAC address won't be saved (because it no longer exists) - only the
"admin MAC" will be saved. This reflects existing behavior that will
be fixed in an upcoming patch.

3 days agoutil: use new virNetDev*NetConfig() functions for macvtap setup/teardown
Laine Stump [Sun, 5 Mar 2017 22:43:39 +0000]
util: use new virNetDev*NetConfig() functions for macvtap setup/teardown

This patch modifies the macvtap passthrough setup to use
virNetDevSaveNetConfig()+virNetDevSetConfig() instead of
virNetDevReplaceNetConfig() or virNetDevReplaceMacAddress(), and the
teardown to use virNetDevReadNetConfig()+virNetDevSetConfig() instead
of virNetDevRestoreNetConfig() or virNetDevRestoreMacAddress().

Since the older functions only saved/restored the admin MAC and vlan
tag (which is incorrect) and the new functions save/restore the VF's
own MAC address and vlan tag (correct), this actually fixes a bug
(which was introduced by commit cb3fe38c7, which was itself supposed
to be a fix for ).

The downside to this patch is that it causes an *apparent* regression
in that bug (because there will once again be an error reported if the
interface had previously been used for VFIO device assignment), but in
reality, the code hasn't been working for *any* case before this
current patch (at least not with any recent kernel). Anyway, that
"regression" will be fixed with an upcoming patch that fixes it the
*right* way.

3 days agoutil: new functions virNetDev(Save|Read|Set)NetConfig()
Laine Stump [Mon, 20 Feb 2017 21:14:53 +0000]
util: new functions virNetDev(Save|Read|Set)NetConfig()

These three functions are destined to replace
virNetDev(Replace|Restore)NetConfig() and
virNetDev(Replace|Restore)MacAddress(), which both do the save and set
together as a single step. We need to separate the save, read, and set
steps because there will be situations where we need to do something
else in between (in particular, we will need to rebind a VF's driver
after save but before set).

This patch creates the new functions, but doesn't call them - that
will come in a subsequent patch. Note that the new functions to
read/write the file that stores the original network config now uses
JSON rather than plaintext (it still recognizes the old format as well
though, so it won't get confused during an upgrade).

3 days agoqemu: Log additional data from hyperv crash notifier
Peter Krempa [Mon, 20 Mar 2017 16:55:56 +0000]
qemu: Log additional data from hyperv crash notifier

The hyperv panic notifier reports additional data in form of 5 registers
that are reported in the crash event from qemu. Log them into the VM log
file and report them as a warning so that admins can see the cause of
crash of their windows VMs.


3 days agoqemu: monitor: Extract additional info from GUEST_PANICKED event
Peter Krempa [Mon, 20 Mar 2017 13:35:33 +0000]
qemu: monitor: Extract additional info from GUEST_PANICKED event

For certain kinds of panic notifiers (notably hyper-v) qemu is able to
report some data regarding the crash passed from the guest.

Make the data accessible to the callback in qemu so that it can be
processed further.

3 days agoqemu: driver: Fix formatting in processGuestPanicEvent
Peter Krempa [Wed, 1 Mar 2017 17:18:43 +0000]
qemu: driver: Fix formatting in processGuestPanicEvent

3 days agoqemu: driver: Remove useless forward declarations
Peter Krempa [Mon, 20 Mar 2017 13:39:33 +0000]
qemu: driver: Remove useless forward declarations

3 days agonews: Update our NEWS file about addition of the mdevs
Erik Skultety [Mon, 27 Mar 2017 13:42:06 +0000]
news: Update our NEWS file about addition of the mdevs

Signed-off-by: Erik Skultety <>

3 days agodocs: Document the new hostdev type 'mdev'
Erik Skultety [Fri, 3 Feb 2017 10:02:07 +0000]
docs: Document the new hostdev type 'mdev'

Signed-off-by: Erik Skultety <>

3 days agotest: Add some test cases for our test suite regarding the mdevs
Erik Skultety [Sat, 7 Jan 2017 12:27:34 +0000]
test: Add some test cases for our test suite regarding the mdevs

For now, these only cover the unmanaged, i.e. user pre-created devices.

Signed-off-by: Erik Skultety <>

3 days agoqemu: Format mdevs on qemu command line
Erik Skultety [Fri, 3 Feb 2017 13:24:14 +0000]
qemu: Format mdevs on qemu command line

Format the mediated devices on the qemu command line as
-device vfio-pci,sysfsdev='/path/to/device/in/syfs'.

Signed-off-by: Erik Skultety <>

3 days agoqemu: Bump the memory locking limit for mdevs as well
Erik Skultety [Thu, 16 Feb 2017 16:18:35 +0000]
qemu: Bump the memory locking limit for mdevs as well

Since mdevs are just another type of VFIO devices, we should increase
the memory locking limit the same way we do for VFIO PCI devices.

Signed-off-by: Erik Skultety <>

3 days agoqemu: cgroup: Adjust cgroups' logic to allow mediated devices
Erik Skultety [Fri, 3 Feb 2017 13:13:25 +0000]
qemu: cgroup: Adjust cgroups' logic to allow mediated devices

As goes for all the other hostdev device types, grant the qemu process
access to /dev/vfio/<mediated_device_iommu_group>.

Signed-off-by: Erik Skultety <>

3 days agohostdev: Maintain a driver list of active mediated devices
Erik Skultety [Fri, 3 Feb 2017 13:04:59 +0000]
hostdev: Maintain a driver list of active mediated devices

Keep track of the assigned mediated devices the same way we do it for
the rest of hostdevs. Methods like 'Prepare', 'Update', and 'ReAttach'
are introduced by this patch.

Signed-off-by: Erik Skultety <>

3 days agoqemu: Assign PCI addresses for mediated devices as well
Erik Skultety [Fri, 3 Feb 2017 12:43:48 +0000]
qemu: Assign PCI addresses for mediated devices as well

So far, the official support is for x86_64 arch guests so unless a
different device API than vfio-pci is available let's only turn on
support for PCI address assignment. Once a different device API is
introduced, we can enable another address type easily.

Signed-off-by: Erik Skultety <>

3 days agoconf: Enable cold-plug of a mediated device
Erik Skultety [Fri, 3 Feb 2017 12:29:37 +0000]
conf: Enable cold-plug of a mediated device

This merely introduces virDomainHostdevMatchSubsysMediatedDev method that
is supposed to check whether device being cold-plugged does not already
exist in the domain configuration.

Signed-off-by: Erik Skultety <>

3 days agosecurity: Enable labeling of vfio mediated devices
Erik Skultety [Fri, 3 Feb 2017 12:25:57 +0000]
security: Enable labeling of vfio mediated devices

This patch updates all of our security driver to start labeling the
VFIO IOMMU devices under /dev/vfio/ as well.

Signed-off-by: Erik Skultety <>

3 days agoconf: Introduce new hostdev device type mdev
Erik Skultety [Tue, 31 Jan 2017 16:26:36 +0000]
conf: Introduce new hostdev device type mdev

A mediated device will be identified by a UUID (with 'model' now being
a mandatory <hostdev> attribute to represent the mediated device API) of
the user pre-created mediated device. We also need to make sure that if
user explicitly provides a guest address for a mdev device, the address
type will be matching the device API supported on that specific mediated
device and error out with an incorrect XML message.

The resulting device XML:
  <hostdev mode='subsystem' type='mdev' model='vfio-pci'>
      <address uuid='c2177883-f1bb-47f0-914d-32a22e3a8804'>

Signed-off-by: Erik Skultety <>

3 days agoutil: Introduce new module virmdev
Erik Skultety [Wed, 22 Mar 2017 14:50:33 +0000]
util: Introduce new module virmdev

Beside creation, disposal, getter, and setter methods the module exports
methods to work with lists of mediated devices.

Signed-off-by: Erik Skultety <>

3 days agoconf: Introduce virDomainHostdevDefPostParse
Erik Skultety [Tue, 14 Feb 2017 14:42:40 +0000]
conf: Introduce virDomainHostdevDefPostParse

Just to make the code a bit cleaner, move hostdev specific post parse
code to its own function just in case it grows in the future.

Signed-off-by: Erik Skultety <>

3 days agoconf: hostdev: Introduce virDomainHostdevSubsysSCSIClear
Erik Skultety [Thu, 9 Mar 2017 09:25:47 +0000]
conf: hostdev: Introduce virDomainHostdevSubsysSCSIClear

Just a tiny wrapper over the SCSI def clearing logic to drop some
if-else branches from a switch, mainly because extending the switch in
the future would render the current code with branching less readable.

Signed-off-by: Erik Skultety <>