Peter Krempa [Tue, 29 Mar 2016 13:47:40 +0000 (15:47 +0200)]
vsh: Introduce helper to parse --bandwidth
Historically we've used 'unsigned long' and allowed wrapping of negative
numbers for bandwidth values. Add a helper that will simplify adding
support for scaled integers and support for byte granularity while
keeping the compatibility with the older approach.
Peter Krempa [Thu, 17 Mar 2016 14:40:43 +0000 (15:40 +0100)]
vsh: Tweak error message for scaled integers
It was too similar to the non-scaled alternative.
before:
error: Numeric value 'abc' for <size> option is malformed or out of range
after:
error: Scaled numeric value 'abc' for <size> option is malformed or out of range
Peter Krempa [Fri, 11 Mar 2016 15:33:03 +0000 (16:33 +0100)]
qemu: monitor: Remove JSON impls of drive_add and drive_del
qemu won't ever add those functions directly to QMP. They will be
replaced with 'blockdev-add' and 'blockdev-del' eventually. At this time
there's no need to keep the stubs around.
Additionally the drive_del stub in JSON contained dead code in the
attempt to report errors. (VIR_ERR_OPERATION_UNSUPPORTED was never
reported). Since the text impl does have the same message it is reported
anyways.
Qiaowei Ren [Mon, 28 Mar 2016 13:30:28 +0000 (21:30 +0800)]
perf: implement a set of util functions for perf event
This patch implement a set of interfaces for perf event. Based on
these interfaces, we can implement internal driver API for perf,
and get the results of perf conuter you care about.
Michal Privoznik [Tue, 29 Mar 2016 11:19:56 +0000 (13:19 +0200)]
docs: Document NSS module
While we have a wiki page describing the feature [1] since the
feature is distributed in our .tar.gz we ought to document it. So
I went ahead, copied the wiki page and reformatted so it fits our
docs coding style.
1: http://wiki.libvirt.org/page/NSS_module
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Nitesh Konkar [Tue, 22 Mar 2016 08:34:50 +0000 (04:34 -0400)]
storage: Initialize pool size parameters for refresh thread
If the pool creation thread happens to detect the luns in
the scsi target, the size parameters will be calculated as
part of the refreshPool called from storagePoolCreate().
This means the virStoragePoolFCRefreshThread (commit id
'512b874') waiting to run and "refresh" the pool will
essentially double the allocation and capacity values.
A separate refresh would correct the values.
To avoid this, the FCRefreshThread needs to reinitialize
the pool size values prior to calling virStorageBackendSCSIFindLUs
which eventually calls virStorageBackendSCSINewLun and
updates the size values for each volume found.
Peter Krempa [Tue, 29 Mar 2016 06:50:30 +0000 (08:50 +0200)]
storage: rbd: Fix build
After the recent commits the build didn't work for me. Fix it by
using size_t as the callback argument is using and the correct
formatter. The attempted fixup to use %llu as a formatter was wrong.
Jim Fehlig [Mon, 28 Mar 2016 18:59:36 +0000 (12:59 -0600)]
libxl: remove reference to non-existent out label
Commit e6336442 changed the 'out:' label to 'cleanup' in
libxlDomainAttachNetDevice(), but missed a comment referencing
the 'out:' label. Remove it from the comment since it is no
longer accurate anyhow.
Cole Robinson [Fri, 18 Mar 2016 19:57:11 +0000 (15:57 -0400)]
docs: website: more header spacing tweaks
- remove top padding for h1. this means page titles sit flush with the top
of the side bar (like 'The virtualization API' on the front page)
- up the top padding for the remaining sections. makes it visually easier
to tell adjacent header sections apart, especially in dense wiki pages
- use two different spacing levels for h2-h4 and h5-h6,
gives pages some more visual flexibility
- use a slightly lower bottom padding... this makes top padding stick out
more which makes it visually easier to differentiate between adjacent
header sections
John Ferlan [Mon, 28 Mar 2016 14:57:55 +0000 (10:57 -0400)]
docs: Update the hyperv feature qemu supported version
In order to follow recent comments which indicate support for specific
feature bits are supported by a specific QEMU version add the version
from whence the relaxed, vapic, and spinlocks support was added.
Maxim Nestratov [Thu, 10 Mar 2016 12:43:49 +0000 (15:43 +0300)]
conf: qemu: Add support for more HyperV Enlightenment features
This patch adds support for "vpindex", "runtime", "synic",
"stimer", and "vendor_id" features available in qemu 2.5+.
- When Hyper-V "vpindex" is on, guest can use MSR HV_X64_MSR_VP_INDEX
to get virtual processor ID.
- Hyper-V "runtime" enlightement feature allows to use MSR
HV_X64_MSR_VP_RUNTIME to get the time the virtual processor consumes
running guest code, as well as the time the hypervisor spends running
code on behalf of that guest.
- Hyper-V "synic" stands for Synthetic Interrupt Controller, which is
lapic extension controlled via MSRs.
- Hyper-V "stimer" switches on Hyper-V SynIC timers MSR's support.
Guest can setup and use fired by host events (SynIC interrupt and
appropriate timer expiration message) as guest clock events
- Hyper-V "reset" allows guest to reset VM.
- Hyper-V "vendor_id" exposes hypervisor vendor id to guest.
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> Signed-off-by: John Ferlan <jferlan@redhat.com>
Laine Stump [Mon, 28 Mar 2016 14:14:04 +0000 (10:14 -0400)]
util: avoid getting stuck on macvtapN name created outside libvirt
After the patches that added tracking of in-use macvtap names (commit
370608, first appearing in libvirt-1.3.2), if the function to allocate
a new macvtap device came to a device name created outside libvirt, it
would retry the same device name MACVLAN_MAX_ID (8191) times before
finally giving up in failure.
The problem was that virBitmapNextClearBit was always being called
with "0" rather than the value most recently checked (which would
increment each time through the loop), so it would always return the
same id (since we dutifully release that id after failing to create a
new device using it).
Anatole Denis [Fri, 11 Mar 2016 16:50:54 +0000 (17:50 +0100)]
tests: storagepoolxml2xmltest: Enable pool-rbd
This test was commited 4 years ago, but was never enabled in
storagepoolxml2xmltest.c. This patch reactivates it, conditionnaly on RBD
storage support being enabled
Anatole Denis [Fri, 11 Mar 2016 16:50:53 +0000 (17:50 +0100)]
tests: storagepoolxml2xmltest: Fix pool-rbd test
This test failed for two reasons:
* The uuid was missing from the input file
* The output file had the <name> in a different place from the actual output
The "if (vol->target.format != VIR_STORAGE_FILE_RAW)" check in the
createVol backend. This check is bogus because virStorageVolDefParseXML()
in conf/storage_conf.c sets target.format only if volOptions in
virStoragePoolTypeInfo has formatFromString set, and that's not the
case the zfs backend.
So the check always fails and breaks volume creation.
The "if (vol->target.format != VIR_STORAGE_FILE_RAW)" check in the
createVol backend. This check is bogus because virStorageVolDefParseXML()
in conf/storage_conf.c sets target.format only if volOptions in
virStoragePoolTypeInfo has formatFromString set, and that's not the
case the logical backend.
So the check always fails and breaks volume creation.
Chunyan Liu [Mon, 21 Mar 2016 08:11:36 +0000 (16:11 +0800)]
libxlDomainAttachNetDevice: release actual deivce and remove hostdev when fail
When AttachNetDevice failed, should call networkReleaseActualDevice
to release actual device, and if actual device is hostdev, should
remove the hostdev from vm->def->hostdevs.
Laine Stump [Fri, 25 Mar 2016 17:17:28 +0000 (13:17 -0400)]
network: call proper start/stop functions for macvtap bridge-mode networks
networkStartNetwork() and networkShutdownNetwork() were calling the
wrong type-specific function in the case of networks that were
configured for macvtap ("direct") bridge mode - they were instead
calling the functions for a tap+bridge network. Currently none of
these functions does anything (they just return 0) so it hasn't
created any problems, but that could change in the future.
An attempt to simplify the code for the VIR_NETWORK_FORWARD_BRIDGE
case of networkUpdateState in commit b61db335 (first in release
1.2.14) resulted in networks based on macvtap bridge mode being
erroneously marked as inactive any time libvirtd was restarted.
The problem is that the original code had differentiated between a
network using tap devices to connect to an existing host-bridge device
(forward mode of VIR_NETWORK_FORWARD_BRIDGE and a non-NULL
def->bridge), and one using macvtap bridge mode to connect to any
ethernet device (still forward mode VIR_NETWORK_FORWARD_BRIDGE, but
null def->bridge), but the changed code assumed that all networks with
VIR_NETWORK_FORWARD_BRIDGE were tap + host-bridge networks, so a null
def->bridge was interpreted as "inactive".
This patch restores the original code in networkUpdateState
Michal Privoznik [Fri, 25 Mar 2016 09:18:00 +0000 (10:18 +0100)]
admin_server: Avoid accessing unallocated memory
In 68b726b93c11cc90 we tried to fix a mem leak. However, it
wasn't done quite well. Problem is, virNetDaemonGetServers() may
fail in which case virObjectListFreeCount() would be called with
-1 objects to free. But the number of elements is taken in
unsigned rather than signed integer.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Michal Privoznik [Thu, 24 Mar 2016 13:57:42 +0000 (14:57 +0100)]
testutils: Adapt to highly unlikely case
Coverity pointed out that getenv("PATH") may return NULL. Well,
we check for that in virFindFileInPath() too. If this happens, we
will pass NULL into strstr(). Ouch.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Michal Privoznik [Thu, 24 Mar 2016 13:54:58 +0000 (14:54 +0100)]
nsstest: Drop useless @data check
The variable is dereferenced prior its check for NULL. The check
itself does not make much sense anyway - it's our test, we know
we are not passing NULL.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Erik Skultety [Thu, 17 Mar 2016 09:16:19 +0000 (10:16 +0100)]
tests: virlogtest: Fix testLogParseOutputs return value
The test can return positive value even though it should have failed. It just
returns the value parser returned, which should be flipped back to -1 if
something went wrong or the result was unexpected, but it isn't.
Michal Privoznik [Wed, 16 Mar 2016 09:24:38 +0000 (10:24 +0100)]
gendispatch: Avoid comparing signed and unsigned vars
The adminDispatchConnectListServers() function is generated by
our great perl script. However, it has a tiny flaw: if
adminConnectListServers() it calls fails, the control jumps onto
cleanup label where we try to free any list of servers built so
far. However, in the loop @i is unsigned (size_t) while @nresults
is signed (int). Currently, it does no harm because of the check
for @result being non-NULL. But if that ever changes in the
future, this bug will be hard to chase.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Michal Privoznik [Wed, 23 Mar 2016 15:19:26 +0000 (16:19 +0100)]
qemuxml2argvtest: Adapt to ethernet automatic tap creation
After 9c17d665fdc5 the tap device for ethernet network type is
automatically precreated before spawning qemu. Problem is, the
qemuxml2argvtest wasn't updated and thus is failing. Because of
all the APIs that new code is calling, I had to mock a lot. Also,
since the tap FDs are labeled separately from the rest of the
devices/files I had to enable NOP security driver for the test
too.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Michal Privoznik [Wed, 23 Mar 2016 08:57:06 +0000 (09:57 +0100)]
qemuxml2argv: Mock virSCSIDeviceGetSgName
When constructing SCSI hostdev command line for qemu, the
/sys/bus/scsi/devices/... dir is scanned. Unfortunately, even in
the tests. This is needed to determine the name of SCSI device to
passthrough to qemu, because in the domain XML we were given its
address instead. Anyway, we should not be touching live system
data in our test suite as it produced unpredictable results. The
test is regressing from 1e9a083742efe on.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Vasiliy Tolstov [Wed, 23 Mar 2016 11:37:59 +0000 (11:37 +0000)]
autocreate tap device for ethernet network type
If a user specify network type ethernet, then create it via libvirt and run
script if it provided. After this commit user does not need to
run external script to create tap device or add root permissions to qemu
process.
Andrea Bolognani [Fri, 18 Mar 2016 17:03:53 +0000 (18:03 +0100)]
tests: hostdev: Add more tests
Ensure the code behaves properly even for situations that were not
being considered before, such as simply detaching devices from the
host without attaching them to a guest and attaching devices as
managed even though they had already been manually detached from
the host.
Andrea Bolognani [Fri, 18 Mar 2016 17:03:52 +0000 (18:03 +0100)]
hostdev: Use actual device when reattaching
Instead of forcing the values for the unbind_from_stub, remove_slot
and reprobe properties, look up the actual device and use that when
calling virPCIDeviceReattach().
This ensures the device is restored to its original state after
reattach: for example, if it was not bound to any driver before
detach, it will not be bound forcefully during reattach.
Andrea Bolognani [Fri, 18 Mar 2016 17:03:51 +0000 (18:03 +0100)]
hostdev: Save netdev configuration of actual device
We would be just fine looking up the information in pcidevs most
of the time; however, some corner cases would not be handled
properly, so look up the actual device instead.
Andrea Bolognani [Fri, 18 Mar 2016 17:03:50 +0000 (18:03 +0100)]
hostdev: Streamline device ownership tracking
After this patch, ownership of virPCIDevice instances is very easy
to keep track of: for each host PCI device, the only instance that
actually matters is the one inside one of the bookkeeping list.
Whenever some operation needs to be performed on a PCI device, the
actual device is looked up first; when this is not the case, a
comment explains the reason.
hostdev: Stop early if unmanaged devices have not been detached
Unmanaged devices, as the name suggests, are not detached
automatically from the host by libvirt before being attached to a
guest: it's the user's responsability to detach them manually
beforehand. If that preliminary step has not been performed, the
attach operation can't complete successfully.
Instead of relying on the lower layers to error out with cryptic
messages such as
error: Failed to attach device from /tmp/hostdev.xml
error: Path '/dev/vfio/12' is not accessible: No such file or directory
prevent the situation altogether and provide the user with a more
useful error message.
Andrea Bolognani [Thu, 17 Mar 2016 16:41:31 +0000 (17:41 +0100)]
hostdev: Detect untracked inactive devices
Unmanaged devices are attached to guests in two steps: first,
the device is detached from the host and marked as inactive;
subsequently, it is marked as active and attached to the guest.
If the daemon is restarted between these two operations, we lose
track of the inactive device.
Steps 5 and 6 of virHostdevPreparePCIDevices() already subtly
take care of this situation, but some planned changes will make
it so that's no longer the case. Plus, explicit is always better
than implicit.
Pavel Hrdina [Tue, 15 Mar 2016 12:54:24 +0000 (13:54 +0100)]
qemuxml2argvtest: use driver.config and priv for qemuDomainSetPrivatePaths
Update testutilsqemu to overwrite libDir and channelTargetDir and set
private paths using domain's privateData. This changes is required for
following patch.
This will skip few steps from qemuProcessStart in order to create only
qemu CMD. Use a VIR_QEMU_PROCESS_START_PRETEND for all the qemuProcess*
functions called by this one to not modify or check host.
This new function will be used later on for XMLToNative API and also for
qemuxml2argvtest to make sure that both API and test uses the same code
as qemuProcessStart.
We need also update qemuProcessInit to wrap few lines of code with check
that VIR_QEMU_PROCESS_START_PRETEND that makes sense only for
qemuProcessStart.
Pavel Hrdina [Tue, 15 Mar 2016 12:00:59 +0000 (13:00 +0100)]
qemu_process: introduce qemuProcessPrepareDomain
Move all code that modifies only live XML to this function. The new
VIR_QEMU_PROCESS_START_PRETEND flag will be used by qemuXMLToNative and
qemuxml2argvtest later in order to reuse the same code as
qemuProcessStart uses.
Every aligning requires at least one cast and it's hard to read. Let's
make a function that makes sure the pointer is moved according to the
alignment and use that to move throughout the data buffer.
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Michal Privoznik [Mon, 21 Mar 2016 13:52:49 +0000 (14:52 +0100)]
tests: Produce predictable results in nsstest
Problem is that in the test any status file matching
tests/nssdata/*.status is loaded as it contains IP addresses that
are parsed. However, there's no order specified in which the
files are loaded. Therefore on different systems the order may be
different. This is then producing an unexpected results.
Instead of defining an order in which the files are loaded, make
the code that checks for missing IP addresses (or redundant ones)
cope with unordered list of addresses. The reasoning behind is
that the code doing the parsing is used in real NSS module where
we don't care for ordering.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Jim Fehlig [Tue, 23 Feb 2016 03:06:57 +0000 (20:06 -0700)]
libxl: support enabling and disabling <hap> feature
Until now, the libxl driver ignored any <hap> setting in domain XML
and deferred to libxl, which enables hap if not specified. While
this is a good default, it prevents disabling hap if desired.
This change allows disabling hap with <hap state='off'/>. hap is
explicitly enabled with <hap/> or <hap state='on/>. Absense of <hap>
retains current behavior of deferring default state to libxl.
Jim Fehlig [Tue, 23 Feb 2016 01:50:19 +0000 (18:50 -0700)]
xenconfig: change 'hap' setting to align with Xen behavior
hap is enabled by default in xm and xl config and usually only
specified when it is desirable to disable hap (hap = 0). Change
the xm,xl <-> xml converter to behave similarly. I.e. only
produce 'hap = 0' when <hap state='off'/> and vice versa.
Jim Fehlig [Tue, 23 Feb 2016 00:03:21 +0000 (17:03 -0700)]
conf: add 'state' attribute to <hap> feature
Most hypervisors use Hardware Assisted Paging by default and don't
require specifying the feature in domain conf. But some hypervisors
support disabling HAP on a per-domain basis. To enable HAP by default
yet provide a knob to disable it, extend the <hap> feature with a
'state=on|off' attribute, similar to <pvspinlock> and <vmport> features.
In the absence of <hap>, the hypervisor default (on) is used. <hap>
without the state attribute would be the same as <hap state='on'/> for
backwards compatibility. And of course <hap state='off'/> disables hap.
Jiri Denemark [Thu, 17 Dec 2015 12:46:18 +0000 (13:46 +0100)]
qemu: Add flags to qemuMigrationWaitForCompletion
The function already takes two bool arguments, switching to flags makes
it a lot easier to read. Especially in case we need to add another
boolean in the future.
Jiri Denemark [Thu, 14 Jan 2016 23:10:37 +0000 (00:10 +0100)]
qemu: Refuse to abort migration in post-copy mode
In post-copy mode none of the hosts has a complete guest state and
rolling back migration is impossible. Thus aborting it would be
equivalent to destroying the domain.
Jiri Denemark [Wed, 13 Jan 2016 15:29:58 +0000 (16:29 +0100)]
qemu: Handle post-copy migration failures
When migration fails in the post-copy mode, it's impossible to just kill
the destination domain and resume the source since the source no longer
contains current guest state. Let's mark domains on both sides as
VIR_DOMAIN_PAUSED_POSTCOPY_FAILED to let the upper layer decide what to
do with them.