]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
8 years agoremote: fix logic for known_hosts and keyfile checks
Pino Toscano [Tue, 10 Jan 2017 18:43:19 +0000 (19:43 +0100)]
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
needed.

8 years agorpc: libssh: allow a NULL known_hosts file
Pino Toscano [Tue, 10 Jan 2017 18:43:18 +0000 (19:43 +0100)]
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

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

8 years agoNEWS: Add trailing periods to all sentences
Andrea Bolognani [Tue, 10 Jan 2017 18:54:12 +0000 (19:54 +0100)]
NEWS: Add trailing periods to all sentences

Suggested-by: John Ferlan <jferlan@redhat.com>
8 years agoconf: eliminate virDomainPCIAddressReleaseSlot() in favor of ...Addr()
Laine Stump [Mon, 24 Oct 2016 15:25:53 +0000 (11:25 -0400)]
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).

8 years agoqemu: rename qemuDomainPCIAddressReserveNextSlot() to ...Addr()
Laine Stump [Mon, 24 Oct 2016 15:10:47 +0000 (11:10 -0400)]
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.

8 years agoqemu: remove qemuDomainPCIAddressReserveNextAddr()
Laine Stump [Sun, 23 Oct 2016 22:11:06 +0000 (18:11 -0400)]
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).

8 years agoconf: rename virDomainPCIAddressReserveSlot() to ...Addr()
Laine Stump [Sun, 23 Oct 2016 16:14:16 +0000 (12:14 -0400)]
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.

8 years agoconf: rename virDomainPCIAddressReserveAddr() to ...Internal()
Laine Stump [Sun, 23 Oct 2016 16:07:20 +0000 (12:07 -0400)]
conf: rename virDomainPCIAddressReserveAddr() to ...Internal()

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

8 years agoconf: make virDomainPCIAddressReserveAddr() a static function
Laine Stump [Sun, 23 Oct 2016 16:03:47 +0000 (12:03 -0400)]
conf: make virDomainPCIAddressReserveAddr() a static function

It is now only used in domain_addr.c.

8 years agoqemu: replace virDomainPCIAddressReserveAddr with virDomainPCIAddressReserveSlot
Laine Stump [Sun, 23 Oct 2016 15:57:55 +0000 (11:57 -0400)]
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).

8 years agoconf: eliminate virDomainPCIAddressReserveNextSlot()
Laine Stump [Sat, 22 Oct 2016 17:28:07 +0000 (13:28 -0400)]
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(...,
-1).

8 years agoconf: rename virDomainPCIAddressGetNextSlot() to ...GetNextAddr()
Laine Stump [Sat, 22 Oct 2016 17:10:10 +0000 (13:10 -0400)]
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.

8 years agoconf: fix fromConfig argument to virDomainPCIAddressValidate()
Laine Stump [Sat, 22 Oct 2016 16:53:17 +0000 (12:53 -0400)]
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.

8 years agoconf: fix fromConfig argument to virDomainPCIAddressReserveAddr()
Laine Stump [Sat, 22 Oct 2016 16:35:38 +0000 (12:35 -0400)]
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().

8 years agoconf: aggregate multiple pcie-root-ports onto a single slot
Laine Stump [Thu, 20 Oct 2016 19:46:01 +0000 (15:46 -0400)]
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.

8 years agoconf: aggregate multiple devices on a slot when assigning PCI addresses
Laine Stump [Wed, 19 Oct 2016 18:15:01 +0000 (14:15 -0400)]
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.

8 years agoqemu: use virDomainPCIAddressSetAllMulti() to set multi when needed
Laine Stump [Tue, 10 Jan 2017 05:20:11 +0000 (00:20 -0500)]
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).)

8 years agoconf: new function virDomainPCIAddressSetAllMulti()
Laine Stump [Tue, 10 Jan 2017 05:02:40 +0000 (00:02 -0500)]
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.

8 years agoconf: start search for next unused PCI address at same slot as previous find
Laine Stump [Fri, 21 Oct 2016 17:05:33 +0000 (13:05 -0400)]
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).

8 years agoconf: eliminate repetitive code in virDomainPCIAddressGetNextSlot()
Laine Stump [Wed, 19 Oct 2016 17:58:42 +0000 (13:58 -0400)]
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.

8 years agoconf: eliminate concept of "reserveEntireSlot"
Laine Stump [Wed, 19 Oct 2016 16:43:04 +0000 (12:43 -0400)]
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".

8 years agoconf: use struct instead of int for each slot in virDomainPCIAddressBus
Laine Stump [Sun, 16 Oct 2016 21:14:25 +0000 (17:14 -0400)]
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".

8 years agolibxl: define a per-domain logger.
Cédric Bosdonnat [Mon, 9 Jan 2017 15:20:50 +0000 (16:20 +0100)]
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.

8 years agovirsh: pool-info: introduce option --bytes
Chen Hanxiao [Wed, 4 Jan 2017 01:01:21 +0000 (09:01 +0800)]
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 <chenhanxiao@gmail.com>
8 years agodocs: add news entry in improvements section.
Dawid Zamirski [Wed, 11 Jan 2017 00:05:13 +0000 (19:05 -0500)]
docs: add news entry in improvements section.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agovbox: consolidate vbox IID structures.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:32 +0000 (15:34 -0500)]
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
  differences.
* remove IID_MEMBER macro and use the new vboxIID directly.

8 years agovbox: fix _displayTakeScreenShotPNGToArray
Dawid Zamirski [Thu, 29 Dec 2016 20:34:31 +0000 (15:34 -0500)]
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.

8 years agovbox: IVRDxServer to IVRDEServer.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:30 +0000 (15:34 -0500)]
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.

8 years agovbox: remove code dealing with oldMediumInterface
Dawid Zamirski [Thu, 29 Dec 2016 20:34:29 +0000 (15:34 -0500)]
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.

8 years agovbox: remove domain events support.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:28 +0000 (15:34 -0500)]
vbox: remove domain events support.

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

8 years agovbox: remove getMachineForSession flag.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:27 +0000 (15:34 -0500)]
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

8 years agovbox: do not use IHardDisk anymore.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:26 +0000 (15:34 -0500)]
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

8 years agovbox: remove _vboxAttachDrivesOld
Dawid Zamirski [Thu, 29 Dec 2016 20:34:25 +0000 (15:34 -0500)]
vbox: remove _vboxAttachDrivesOld

and fold vboxAttachDrivesNew into vboxAttachDrives

8 years agovbox: remove code for old API versions.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:24 +0000 (15:34 -0500)]
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.

8 years agovbox: remove calls to *InstallUniformedAPI macros.
Dawid Zamirski [Thu, 29 Dec 2016 20:34:23 +0000 (15:34 -0500)]
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.

8 years agovbox: remove SDK header files for vbox 3 and older.
Dawid Zamirski [Tue, 29 Nov 2016 22:23:27 +0000 (17:23 -0500)]
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 Makefile.am

8 years agomaint: update to latest gnulib
Eric Blake [Tue, 10 Jan 2017 18:39:30 +0000 (12:39 -0600)]
maint: update to latest gnulib

Among other recent changes, this includes a workaround to avoid
Clang compiler bug https://llvm.org/bugs/show_bug.cgi?id=16404
having spurious link failures.

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

Signed-off-by: Eric Blake <eblake@redhat.com>
8 years agodocs: Document the release notes process for contributors
Andrea Bolognani [Wed, 4 Jan 2017 11:45:23 +0000 (12:45 +0100)]
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
happen.

8 years agoNEWS: Reformat at generation time
Andrea Bolognani [Tue, 3 Jan 2017 16:50:34 +0000 (17:50 +0100)]
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.

8 years agoNEWS: Improve building pipeline
Andrea Bolognani [Tue, 3 Jan 2017 11:22:54 +0000 (12:22 +0100)]
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.

8 years agovirSecuritySELinuxSetFileconHelper: Fix build with broken selinux.h
Michal Privoznik [Tue, 10 Jan 2017 15:33:58 +0000 (16:33 +0100)]
virSecuritySELinuxSetFileconHelper: Fix build with broken selinux.h

There are still some systems out there that have broken
setfilecon*() prototypes. Instead of taking 'const char *tcon' it
is taking 'char *tcon'. The function should just set the context,
not modify it.

We had been bitten with this problem before which resulted in
292d3f2d and subsequently b109c09765. However, with one my latest
commits (4674fc6afd6d) I've changed the type of @tcon variable to
'const char *' which results in build failure on the systems from
above.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agoqemu_domain: Move qemuDomainGetPreservedMounts
Michal Privoznik [Tue, 10 Jan 2017 15:33:57 +0000 (16:33 +0100)]
qemu_domain: Move qemuDomainGetPreservedMounts

This function is used only from code compiled on Linux. Therefore
on non-Linux platforms it triggers compilation error:

../../src/qemu/qemu_domain.c:209:1: error: unused function 'qemuDomainGetPreservedMounts' [-Werror,-Wunused-function]

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agoqemu: blockjob: Fix locking of block copy/active block commit
Peter Krempa [Fri, 16 Dec 2016 15:06:57 +0000 (16:06 +0100)]
qemu: blockjob: Fix locking of block copy/active block commit

For the blockjobs, where libvirt is able to track the state internally
we can fix locking of images we can remove the appropriate locks.

Also when doing a pivoting operation we should not acquire the lock on
any of those images since both are actually locked already.

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

8 years agoqemu: snapshot: Properly handle image locking
Peter Krempa [Fri, 16 Dec 2016 14:45:26 +0000 (15:45 +0100)]
qemu: snapshot: Properly handle image locking

Images that became the backing chain of the current image due to the
snapshot need to be unlocked in the lock manager. Also if qemu was
paused during the snapshot the current top level images need to be
released until qemu is resumed so that they can be acquired properly.

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

8 years agoqemu: snapshot: Refactor snapshot rollback on failure
Peter Krempa [Fri, 16 Dec 2016 05:12:34 +0000 (06:12 +0100)]
qemu: snapshot: Refactor snapshot rollback on failure

The code at first changed the definition and then rolled it back in case
of failure. This was ridiculous. Refactor the code so that the image in
the definition is changed only when the snapshot is successful.

The refactor will also simplify further fix of image locking when doing
snapshots.

8 years agoqemu: snapshot: Don't redetect backing chain after snapshot
Peter Krempa [Fri, 16 Dec 2016 06:10:46 +0000 (07:10 +0100)]
qemu: snapshot: Don't redetect backing chain after snapshot

Libvirt is able to properly model what happens to the backing chain
after a snapshot so there's no real need to redetect the data.
Additionally with the _REUSE_EXT flag this might end up in redetecting
wrong data if the user puts wrong backing chain reference into the
snapshot image.

8 years agolibxl: implement virDomainGetMaxVcpus
Jim Fehlig [Fri, 6 Jan 2017 19:19:31 +0000 (12:19 -0700)]
libxl: implement virDomainGetMaxVcpus

The libxl driver already supports getting maximum vcpu count via
libxlDomainGetVcpusFlags, allowing to trivially implement
virDomainGetMaxVcpus.

8 years agostorage: Fix storage_backend probing when PARTED not installed.
John Ferlan [Tue, 10 Jan 2017 15:15:19 +0000 (10:15 -0500)]
storage: Fix storage_backend probing when PARTED not installed.

Commit id 'a48c674f' caused problems for systems without PARTED installed.

So move the PARTED probing code back to storage_backend_disk.c and create
a shim within storage_backend.c to call it if WITH_STORAGE_DISK is true;
otherwise, just return -1 with the error.

8 years agostorage: Validate the device formats at logical startup
John Ferlan [Thu, 15 Dec 2016 14:19:49 +0000 (09:19 -0500)]
storage: Validate the device formats at logical startup

At startup time, rather than blindly trusting the target devices are
still properly formatted, let's check to make sure the pool's target
devices are all properly formatted before attempting to start the pool.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Add overwrite flag checking for logical pool
John Ferlan [Thu, 15 Dec 2016 13:39:13 +0000 (08:39 -0500)]
storage: Add overwrite flag checking for logical pool

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

Add support and documentation for the [NO_]OVERWRITE flags for the
logical backend.

Update virsh.pod with a description of the process for usage of
the flags and building of the pool's volume group.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Extract logical device initialize into a helper
John Ferlan [Thu, 15 Dec 2016 12:15:48 +0000 (07:15 -0500)]
storage: Extract logical device initialize into a helper

Make the remaining code a bit cleaner.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Clean up logical pool devices on build failure
John Ferlan [Thu, 15 Dec 2016 11:39:42 +0000 (06:39 -0500)]
storage: Clean up logical pool devices on build failure

If the build fails, then we need to ensure that we've run pvremove
on any devices which we've run pvcreate on; otherwise, a subsequent
build could fail since running pvcreate twice on a device requires
special force arguments.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Adjust disk label found to match labels
John Ferlan [Thu, 15 Dec 2016 20:45:01 +0000 (15:45 -0500)]
storage: Adjust disk label found to match labels

Currently as long as the disk is formatted using a known parted format
type, the algorithm is happy to continue. However, that leaves a scenario
whereby a disk formatted using "pc98" could be used by a pool that's defined
using "dvh" (or vice versa). Alter the check to be match and different
and adjust the caller.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Move and rename disk backend label checking
John Ferlan [Wed, 14 Dec 2016 23:34:24 +0000 (18:34 -0500)]
storage: Move and rename disk backend label checking

Rather than have the Disk code having to use PARTED to determine if
there's something on the device, let's use the virStorageBackendDeviceProbe.
and only fallback to the PARTED probing if the BLKID code isn't built in.

This will also provide a mechanism for the other current caller (File
System Backend) to utilize a PARTED parsing algorithm in the event that
BLKID isn't built in to at least see if *something* exists on the disk
before blindly trying to use. The PARTED error checking will not find
file system types, but if there is a partition table set on the device,
it will at least cause a failure.

Move virStorageBackendDiskValidLabel and virStorageBackendDiskFindLabel
to storage_backend and rename/rework the code to fit the new model.

Update the virsh.pod description to provide a more generic description
of the process since we could now use either blkid or parted to find
data on the target device.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: For FS pool check for properly formatted target volume
John Ferlan [Thu, 15 Dec 2016 14:25:57 +0000 (09:25 -0500)]
storage: For FS pool check for properly formatted target volume

Prior to starting up, let's be sure the target volume device is
formatted as we expect; otherwise, inhibit the start.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Add writelabel bool for virStorageBackendDeviceProbe
John Ferlan [Wed, 14 Dec 2016 23:03:20 +0000 (18:03 -0500)]
storage: Add writelabel bool for virStorageBackendDeviceProbe

It's possible that the API could be called from a startup path in
order to check whether the label on the device matches what our
format is. In order to handle that condition, add a 'writelabel'
boolean to the API in order to indicate whether a write or just
read is about to happen.

This alters two "error" conditions that would care about knowing.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Add partition type checks for BLKID probing
John Ferlan [Wed, 14 Dec 2016 22:45:20 +0000 (17:45 -0500)]
storage: Add partition type checks for BLKID probing

A device may be formatted using some sort of disk partition format type.
We can check that using the blkid_ API's as well - so alter the logic to
allow checking the device for both a filesystem and a disk partition.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Fix implementation of no-overwrite for file system backend
John Ferlan [Wed, 14 Dec 2016 20:14:19 +0000 (15:14 -0500)]
storage: Fix implementation of no-overwrite for file system backend

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

Commit id '27758859' introduced the "NO_OVERWRITE" flag check for
file system backends; however, the implementation, documentation,
and algorithm was inconsistent. For the "flag" description for the
API the flag was described as "Do not overwrite existing pool";
however, within the storage backend code the flag is described
as "it probes to determine if filesystem already exists on the
target device, renurning an error if exists".

The code itself was implemented using the paradigm to set up the
superblock probe by creating a filter that would cause the code
to only search for the provided format type. If that type wasn't
found, then the algorithm would return success allowing the caller
to format the device. If the format type already existed on the
device, then the code would fail indicating that the a filesystem
of the same type existed on the device.

The result is that if someone had a file system of one type on the
device, it was possible to overwrite it if a different format type
was specified in updated XML effectively trashing whatever was on
the device already.

This patch alters what NO_OVERWRITE does for a file system backend
to be more realistic and consistent with what should be expected when
the caller requests to not overwrite the data on the disk.

Rather than filter results based on the expected format type, the
code will allow success/failure be determined solely on whether the
blkid_do_probe calls finds some known format on the device. This
adjustment also allows removal of the virStoragePoolProbeResult
enum that was under utilized.

If it does find a formatted file system different errors will be
generated indicating a file system of a specific type already exists
or a file system of some other type already exists.

In the original virsh support commit id 'ddcd5674', the description
for '--no-overwrite' within the 'pool-build' command help output
has an ambiguous "of this type" included in the short description.
Compared to the longer description within the "Build a given pool."
section of the virsh.pod file it's more apparent that the meaning
of this flag would cause failure if a probe of the target already
has a filesystem.

So this patch also modifies the short description to just be the
antecedent of the 'overwrite' flag, which matches the API description.
This patch also modifies the grammar in virsh.pod for no-overwrite
as well as reworking the paragraph formats to make it easier to read.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agostorage: Introduce virStorageBackendDeviceIsEmpty
John Ferlan [Wed, 14 Dec 2016 19:49:27 +0000 (14:49 -0500)]
storage: Introduce virStorageBackendDeviceIsEmpty

Rename virStorageBackendFileSystemProbe and to virStorageBackendBLKIDFindFS
and move to the more common storage_backend module.

Create a shim virStorageBackendDeviceIsEmpty which will make the call
to the virStorageBackendBLKIDFindFS and check the return value.

Signed-off-by: John Ferlan <jferlan@redhat.com>
8 years agoqemu: Drop qemuDomainDeleteNamespace
Michal Privoznik [Fri, 6 Jan 2017 09:56:01 +0000 (10:56 +0100)]
qemu: Drop qemuDomainDeleteNamespace

After previous commits, this function is no longer needed.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agoqemuDomainCreateNamespace: move mkdir to qemuDomainBuildNamespace
Michal Privoznik [Fri, 6 Jan 2017 09:55:37 +0000 (10:55 +0100)]
qemuDomainCreateNamespace: move mkdir to qemuDomainBuildNamespace

Again, there is no need to create /var/lib/libvirt/$domain.*
directories in CreateNamespace(). It is sufficient to create them
as soon as we need them which is in BuildNamespace. This way we
don't leave them around for the whole lifetime of domain.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agoqemuDomainGetPreservedMounts: Do not special case /dev
Michal Privoznik [Fri, 6 Jan 2017 09:54:47 +0000 (10:54 +0100)]
qemuDomainGetPreservedMounts: Do not special case /dev

The c1140eb9e got me thinking. We don't want to special case /dev
in qemuDomainGetPreservedMounts(), but in all other places in the
code we special case it anyway. I mean,
/var/run/libvirt/$domain.dev path is constructed separately just
so that it is not constructed here. It makes only a little sense
(if any at all).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agoqemuDomainCreateNamespace: s/unlink/rmdir/
Michal Privoznik [Fri, 6 Jan 2017 10:02:42 +0000 (11:02 +0100)]
qemuDomainCreateNamespace: s/unlink/rmdir/

If something goes wrong in this function we try a rollback. That
is unlink all the directories we created earlier. For some weird
reason unlink() was called instead of rmdir().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agoqemu: Use transactions from security driver
Michal Privoznik [Thu, 15 Dec 2016 15:47:15 +0000 (16:47 +0100)]
qemu: Use transactions from security driver

So far if qemu is spawned under separate mount namespace in order
to relabel everything it needs an access to the security driver
to run in that namespace too. This has a very nasty down side -
it is being run in a separate process, so any internal state
transition is NOT reflected in the daemon. This can lead to many
sleepless nights. Therefore, use the transaction APIs so that
libvirt developers can sleep tight again.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agosecurity_selinux: Implement transaction APIs
Michal Privoznik [Wed, 14 Dec 2016 16:11:05 +0000 (17:11 +0100)]
security_selinux: Implement transaction APIs

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agosecurity_dac: Implement transaction APIs
Michal Privoznik [Wed, 14 Dec 2016 13:49:11 +0000 (14:49 +0100)]
security_dac: Implement transaction APIs

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agosecurity driver: Introduce transaction APIs
Michal Privoznik [Wed, 14 Dec 2016 09:14:49 +0000 (10:14 +0100)]
security driver: Introduce transaction APIs

With our new qemu namespace code in place, the relabelling of
devices is done not as good is it could: a child process is
spawned, it enters the mount namespace of the qemu process and
then runs desired API of the security driver.

Problem with this approach is that internal state transition of
the security driver done in the child process is not reflected in
the parent process. While currently it wouldn't matter that much,
it is fairly easy to forget about that. We should take the extra
step now while this limitation is still fresh in our minds.

Three new APIs are introduced here:
  virSecurityManagerTransactionStart()
  virSecurityManagerTransactionCommit()
  virSecurityManagerTransactionAbort()

The Start() is going to be used to let security driver know that
we are starting a new transaction. During a transaction no
security labels are actually touched, but rather recorded and
only at Commit() phase they are actually updated. Should
something go wrong Abort() aborts the transaction freeing up all
memory allocated by transaction.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agosecurity_dac: Resolve virSecurityDACSetOwnershipInternal const correctness
Michal Privoznik [Wed, 14 Dec 2016 14:25:22 +0000 (15:25 +0100)]
security_dac: Resolve virSecurityDACSetOwnershipInternal const correctness

The code at the very bottom of the DAC secdriver that calls
chown() should be fine with read-only data. If something needs to
be prepared it should have been done beforehand.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agoNEWS: Update for virtio-pci by default for mach-virt guests
Andrea Bolognani [Fri, 23 Dec 2016 18:18:54 +0000 (19:18 +0100)]
NEWS: Update for virtio-pci by default for mach-virt guests

8 years agodocs: Document virtio-pci by default for mach-virt guests
Andrea Bolognani [Fri, 23 Dec 2016 18:44:35 +0000 (19:44 +0100)]
docs: Document virtio-pci by default for mach-virt guests

8 years agoqemu: Use virtio-pci by default for mach-virt guests
Andrea Bolognani [Fri, 21 Oct 2016 09:50:15 +0000 (11:50 +0200)]
qemu: Use virtio-pci by default for mach-virt guests

virtio-pci is the way forward for aarch64 guests: it's faster
and less alien to people coming from other architectures.
Now that guest support is finally getting there (Fedora 24,
CentOS 7.3, Ubuntu 16.04 and Debian testing all support
virtio-pci out of the box), we'd like to start using it by
default instead of virtio-mmio.

Users and applications can already opt-in by explicitly using

  <address type='pci'/>

inside the relevant elements, but that's kind of cumbersome and
requires all users and management applications to adapt, which
we'd really like to avoid.

What we can do instead is use virtio-mmio only if the guest
already has at least one virtio-mmio device, and use virtio-pci
in all other situations.

That means existing virtio-mmio guests will keep using the old
addressing scheme, and new guests will automatically be created
using virtio-pci instead. Users can still override the default
in either direction.

Existing tests such as aarch64-aavmf-virtio-mmio and
aarch64-virtio-pci-default already cover all possible
scenarios, so no additions to the test suites are necessary.

8 years agoqemu: setvcpus: Properly coldplug vcpus when hotpluggable vcpus are present
Peter Krempa [Mon, 9 Jan 2017 12:50:26 +0000 (13:50 +0100)]
qemu: setvcpus: Properly coldplug vcpus when hotpluggable vcpus are present

When coldplugging vcpus to a VM that already has a few hotpluggable
vcpus the code might generate invalid configuration as
non-hotpluggable cpus need to be clustered starting from vcpu 0.

This fix forces the added vcpus to be hotpluggable in such case.

Fixes a corner case described in:
https://bugzilla.redhat.com/show_bug.cgi?id=1370357

8 years agodocs: fix list of domain states in virsh manpage
Laine Stump [Tue, 3 Jan 2017 19:41:33 +0000 (14:41 -0500)]
docs: fix list of domain states in virsh manpage

The virsh manpage lists "shutdown" and "dying" as two of the possible
domain states that could be listed in the output of the "virsh list"
command. However, a domain that is being shutdown will be listed as
"in shutdown", and the "dying" state doesn't even exist (and never
has, as far as I can tell from looking through git history - it was
shown in the original import of the virsh.pod file in 2006; there was
no VIR_DOMAIN_DYING state then, there wasn't one when those lines of
virsh.pod were tweaked in 2008, and there still isn't one
today. Apparently it was just something that sounded like a good idea
to someone at some time, but was never implemented...)

Resolves: https://bugzilla.redhat.com/1408778

8 years agoperf: Add cache_l1d perf event support
Nitesh Konkar [Fri, 6 Jan 2017 12:55:41 +0000 (18:25 +0530)]
perf: Add cache_l1d perf event support

This patch adds support and documentation for
a generalized hardware cache event called cache_l1d
perf event.

Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com>
8 years agodocs: Reword virsh manpage for --uuid --name --table options
Nitesh Konkar [Thu, 5 Jan 2017 06:05:10 +0000 (11:35 +0530)]
docs: Reword virsh manpage for --uuid --name --table options

The virsh manpage lists options --uuid and --name as
mutually exclusive along option --table when actually
the option --table is mutually exclusive and can't go
with options --uuid and/or --name. This patch rewords the
virsh manpage to state the correct meaning.

Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com>
8 years agovirsh: Display perf enabled/disabled message for set operations
Nitesh Konkar [Wed, 28 Dec 2016 11:36:22 +0000 (17:06 +0530)]
virsh: Display perf enabled/disabled message for set operations

When setting perf events, the enabled/disabled perf events are not
listed. Since we know which events were changed it's possible to
print out the values on successful set, such as :

    virsh perf Domain --enable instructions --disable cache_misses
    instructions   : enabled
    cache_misses   : disabled

Created a helper to print the messages - use the vshPrintExtra to
adhere to the --quiet|-q option being set by some script. This will
cause the get code to print nothing, but will return success/failure.

Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com>
8 years agovirsh: Fix English grammar in the virsh perf manpage
Nitesh Konkar [Thu, 22 Dec 2016 14:06:15 +0000 (19:36 +0530)]
virsh: Fix English grammar in the virsh perf manpage

8 years agoUpdate remote_protocol-structs for new events
Jiri Denemark [Mon, 9 Jan 2017 18:53:55 +0000 (19:53 +0100)]
Update remote_protocol-structs for new events

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
8 years agosecret: add support for value change events
Daniel P. Berrange [Thu, 5 Jan 2017 13:51:07 +0000 (13:51 +0000)]
secret: add support for value change events

Emit an event whenever a secret value changes

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agovirsh: add secret lifecycle event handling
Daniel P. Berrange [Thu, 22 Dec 2016 16:39:43 +0000 (16:39 +0000)]
virsh: add secret lifecycle event handling

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agoexamples: add secret events to event demo program
Daniel P. Berrange [Thu, 22 Dec 2016 16:36:40 +0000 (16:36 +0000)]
examples: add secret events to event demo program

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agosecret: add support for lifecycle events
Daniel P. Berrange [Thu, 22 Dec 2016 16:23:58 +0000 (16:23 +0000)]
secret: add support for lifecycle events

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agoremote: implement secret lifecycle event APIs
Daniel P. Berrange [Thu, 22 Dec 2016 16:11:06 +0000 (16:11 +0000)]
remote: implement secret lifecycle event APIs

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agoconf: simplify internal virSecretDef handling of usage
Daniel P. Berrange [Thu, 22 Dec 2016 15:40:11 +0000 (15:40 +0000)]
conf: simplify internal virSecretDef handling of usage

The public virSecret object has a single "usage_id" field
but the virSecretDef object has a different 'char *' field
for each usage type, but the code all assumes every usage
type has a corresponding single string. Get rid of the
pointless union in virSecretDef and just use "usage_id"
everywhere. This doesn't impact public XML format, only
the internal handling.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agoconf: add secret event handling
Daniel P. Berrange [Thu, 22 Dec 2016 15:24:43 +0000 (15:24 +0000)]
conf: add secret event handling

Add helper APIs / objects for managing secret events

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agoIntroduce secret lifecycle event APIs
Daniel P. Berrange [Thu, 22 Dec 2016 15:09:55 +0000 (15:09 +0000)]
Introduce secret lifecycle event APIs

Add public APIs to allow applications to watch for define and
undefine of secret objects.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agoremote: fix struct for device removal failed event
Daniel P. Berrange [Mon, 9 Jan 2017 15:53:07 +0000 (15:53 +0000)]
remote: fix struct for device removal failed event

The handler for the device removal failed event was using
the struct for the device added event. Fortunately the
layout was the same, so this was harmless.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agoAdd domain event for metadata changes
Daniel P. Berrange [Thu, 22 Dec 2016 14:41:30 +0000 (14:41 +0000)]
Add domain event for metadata changes

When changing the metadata via virDomainSetMetadata, we now
emit an event to notify the app of changes. This is useful
when co-ordinating different applications read/write of
custom metadata.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agocgroup: add virCgroupAddMachineTask stub for win32
Daniel P. Berrange [Mon, 9 Jan 2017 14:27:34 +0000 (14:27 +0000)]
cgroup: add virCgroupAddMachineTask stub for win32

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agolxc: ensure libvirt_lxc and qemu-nbd move into systemd machine slice
Daniel P. Berrange [Thu, 5 Jan 2017 15:26:00 +0000 (15:26 +0000)]
lxc: ensure libvirt_lxc and qemu-nbd move into systemd machine slice

Currently when spawning containers with systemd, the container PID 1
will get moved into the systemd machine slice. Libvirt then manually
moves the libvirt_lxc and qemu-nbd processes into the cgroups associated
with the slice, but skips the systemd controller cgroup. This means that
from systemd's POV, libvirt_lxc and qemu-nbd are still part of the
libvirtd.service unit.

On systemctl daemon-reload, it will notice that libvirt_lxc & qemu-nbd
are in the libvirtd.service unit for the systemd controller, but in the
machine cgroups for resources. Systemd will thus move them back into
the libvirtd.service resource cgroups next time libvirtd is restarted.
This causes libvirtd to kill off the container due to incorrect cgroup
placement.

The solution is to ensure that when moving libvirt_lxc & qemu-nbd, we
also move the systemd cgroup controller placement. Normally this is
not something we ever want todo, but this is a special case as we are
intentionally wanting to move them to a different systemd unit.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
8 years agosecurity_selinux: s/virSecuritySELinuxSecurity/virSecuritySELinux/
Michal Privoznik [Wed, 14 Dec 2016 15:34:49 +0000 (16:34 +0100)]
security_selinux: s/virSecuritySELinuxSecurity/virSecuritySELinux/

It doesn't make much sense to have two different prefix for
functions within the same driver.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agovirutil: Provide non-linux impl for virGetFCHostNameByFabricWWN
Michal Privoznik [Mon, 9 Jan 2017 08:13:41 +0000 (09:13 +0100)]
virutil: Provide non-linux impl for virGetFCHostNameByFabricWWN

Currently, there's only linux implementation for
virGetFCHostNameByFabricWWN(). Since the symbol is exported in
our private symbols we ought to have implementation for other
platforms too. This also triggers compilation error on FreeBSD:

../src/.libs/libvirt_driver_storage_impl.a(libvirt_driver_storage_impl_la-storage_backend_scsi.o): In function `createVport':
/usr/home/jenkins/libvirt-master/systems/libvirt-freebsd/build/src/../../src/storage/storage_backend_scsi.c:740: undefined reference to `virGetFCHostNameByFabricWWN'

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
8 years agovirsh: Fix grammar - s/rather then/rather than
Chen Hanxiao [Sat, 7 Jan 2017 08:47:16 +0000 (16:47 +0800)]
virsh: Fix grammar - s/rather then/rather than

Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com>
8 years agotests: Add "no-kvm-pit-device" testcase
Maxim Nestratov [Fri, 9 Dec 2016 14:28:06 +0000 (17:28 +0300)]
tests: Add "no-kvm-pit-device" testcase

Add a test case for when the QEMU_CAPS_NO_KVM_PIT capability is set.
This capability is mutually exclusive to QEMU_CAPS_KVM_PIT_TICK_POLICY
and results in the same output regardless of whether "discard" or
"delay" was specified in the guest XML for 'tickpolicy'.

Signed-off-by: Maxim Nestratov <mnestratov@virtuozzo.com>
8 years agoqemu: Allow to specify pit timer tick policy=discard
Maxim Nestratov [Fri, 9 Dec 2016 14:28:05 +0000 (17:28 +0300)]
qemu: Allow to specify pit timer tick policy=discard

Separate out the "policy=discard" into it's own specific
qemu command line.

We'll rename "kvm-pit-device" test case to be "kvm-pit-discard"
since it has the syntax we'd be using.

Signed-off-by: Maxim Nestratov <mnestratov@virtuozzo.com>
8 years agoqemu: Fix pit timer tick policy=delay
Maxim Nestratov [Fri, 9 Dec 2016 14:28:04 +0000 (17:28 +0300)]
qemu: Fix pit timer tick policy=delay

By a mistake, for the VIR_DOMAIN_TIMER_TICKPOLICY_DELAY qemu
command line creation, 'discard' was used instead of 'delay'
in commit id '1569fa14'.

Test "kvm-pit-delay" is fixed accordingly to show the correct
option being generated.

Remove the (now) redundant kvm-pit-device tests. As it turns
out there is no need to specify both QEMU_CAPS_NO_KVM_PIT and
QEMU_CAPS_KVM_PIT_TICK_POLICY since they are mutually exclusive
and "kvm-pit-device" becomes just the same as "kvm-pit-delay".

Signed-off-by: Maxim Nestratov <mnestratov@virtuozzo.com>
8 years agoiscsi: Add parent wwnn/wwpn or fabric capability for createVport
John Ferlan [Fri, 18 Nov 2016 12:08:37 +0000 (07:08 -0500)]
iscsi: Add parent wwnn/wwpn or fabric capability for createVport

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

As it turns out using only the 'parent' to achieve the goal of a
consistent vHBA parent has issues with reboots where the scsi_hostX
parent could change to scsi_hostY causing either failure to create
the vHBA or usage of the wrong HBA for our vHBA.

Thus add the ability to search for the "parent" by the parent wwnn/
wwpn values or just a fabric_name if someone only cares to ensure
usage of the same SAN for the vHBA.

8 years agoutil: Introduce virGetFCHostNameByFabricWWN
John Ferlan [Fri, 18 Nov 2016 12:36:18 +0000 (07:36 -0500)]
util: Introduce virGetFCHostNameByFabricWWN

Create a utility routine in order to read the scsi_host fabric_name files
looking for a match to a passed fabric_name

8 years agoconf: Add more fchost search fields for storage pool vHBA creation
John Ferlan [Thu, 17 Nov 2016 22:48:35 +0000 (17:48 -0500)]
conf: Add more fchost search fields for storage pool vHBA creation

Add new fields to the fchost structure to allow creation of a vHBA via
the storage pool when a parent_wwnn/parent_wwpn or parent_fabric_wwn is
supplied in the storage pool XML.

8 years agonodedev: Add the ability to create vHBA by parent wwnn/wwpn or fabric_wwn
John Ferlan [Thu, 17 Nov 2016 16:09:09 +0000 (11:09 -0500)]
nodedev: Add the ability to create vHBA by parent wwnn/wwpn or fabric_wwn

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

When creating a vHBA, the process is to feed XML to nodeDeviceCreateXML
that lists the <parent> scsi_hostX to use to create the vHBA. However,
between reboots, it's possible that the <parent> changes its scsi_hostX
to scsi_hostY and saved XML to perform the creation will either fail or
create a vHBA using the wrong parent.

So add the ability to provide "wwnn" and "wwpn" or "fabric_wwn" to
the <parent> instead of a name of the scsi_hostN that is the parent.
The allowed XML will thus be:

  <parent>scsi_host3</parent>  (current)

or

  <parent wwnn='$WWNN' wwpn='$WWPN'/>

or

  <parent fabric_wwn='$WWNN'/>

Using the wwnn/wwpn or fabric_wwn ensures the same 'scsi_hostN' is
selected between hardware reconfigs or host reboots. The fabric_wwn
Using the wwnn/wwpn pair will provide the most specific search option,
while fabric_wwn will at least ensure usage of the same SAN, but maybe
not the same scsi_hostN.

This patch will add the new fields to the nodedev.rng for input purposes
only since the input XML is essentially thrown away, no need to Format
the values since they'd already be printed as part of the scsi_host
data block.

New API virNodeDeviceGetParentHostByWWNs will take the parent "wwnn" and
"wwpn" in order to search the list of devices for matching capability
data fields wwnn and wwpn.

New API virNodeDeviceGetParentHostByFabricWWN will take the parent "fabric_wwn"
in order to search the list of devices for matching capability data field
fabric_wwn.