]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
10 years agoxenconfig: add support for multiple USB devices syntax
Marek Marczykowski-Górecki [Fri, 6 Mar 2015 14:36:13 +0000 (15:36 +0100)]
xenconfig: add support for multiple USB devices syntax

In Xen>=4.3, libxl supports new syntax for USB devices:
usbdevice=[ "DEVICE", "DEVICE", ... ]
Add support for that in xenconfig driver. When only one device is
defined, keep using old syntax for backward compatibility.

Adjust tests for changed options order.

Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
10 years agolibxl: add tablet/mouse input device support
Marek Marczykowski [Fri, 6 Mar 2015 14:36:12 +0000 (15:36 +0100)]
libxl: add tablet/mouse input device support

Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
10 years agobridge_driver: Use more of networkObjFromNetwork
Michal Privoznik [Mon, 2 Mar 2015 11:22:11 +0000 (12:22 +0100)]
bridge_driver: Use more of networkObjFromNetwork

Now that the network driver lock is ash heap of history,
we can use more of networkObjFromNetwork().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoparallels_network: Drop parallelsDriverLock() from everywhere.
Michal Privoznik [Thu, 26 Feb 2015 13:36:47 +0000 (14:36 +0100)]
parallels_network: Drop parallelsDriverLock() from everywhere.

While in previous commits there were some places that relied on
the big lock, in this file there's no such place and the big
driver lock can be dropped completely. Yay!

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agotest_driver: Drop testDriverLock() from almost everywhere
Michal Privoznik [Thu, 26 Feb 2015 13:25:54 +0000 (14:25 +0100)]
test_driver: Drop testDriverLock() from almost everywhere

Well, if 'everywhere' is defined as that part of the driver code
that serves virNetwork* APIs. Again, we lower layers already have
their locks, so there's no point doing big lock.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agobridge_driver: Drop networkDriverLock() from almost everywhere
Michal Privoznik [Thu, 26 Feb 2015 13:19:53 +0000 (14:19 +0100)]
bridge_driver: Drop networkDriverLock() from almost everywhere

Now that we have fine grained locks, there's no need to
lock the whole driver. We can rely on self-locking APIs.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agostruct _virNetworkDriverState: Annotate items
Michal Privoznik [Tue, 10 Mar 2015 14:42:18 +0000 (15:42 +0100)]
struct _virNetworkDriverState: Annotate items

In order to drop network driver lock, lets annotate which
structure items are immutable, which have self-locking
APIs and so on.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_driver: Use accessor for dnsmasqCaps
Michal Privoznik [Thu, 12 Mar 2015 13:28:15 +0000 (14:28 +0100)]
network_driver: Use accessor for dnsmasqCaps

This is not an immutable pointer and can change during lifetime.
Therefore, in order to drop network driver lock, we must use an
internal accessor which does not lock the network driver yet, but
it will soon. Now it merely returns an referenced object.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agobridge_driver: Don't access global driver randomly
Michal Privoznik [Thu, 12 Mar 2015 12:42:46 +0000 (13:42 +0100)]
bridge_driver: Don't access global driver randomly

Well, network driver code has the driver accessible as a global
variable. This makes any rework hard, as it's unclear where the
variable is accessed and/or modified. Lets just pass the driver
as a parameter to all functions where needed.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoIntroduce virBitmapIsBitSet
Ján Tomko [Wed, 11 Mar 2015 15:41:57 +0000 (16:41 +0100)]
Introduce virBitmapIsBitSet

A helper that never returns an error and treats bits out of bitmap range
as false.

Use it everywhere we use ignore_value on virBitmapGetBit, or loop over
the bitmap size.

10 years agoClarify the meaning of version in redirdev filters
Ján Tomko [Thu, 12 Mar 2015 12:13:39 +0000 (13:13 +0100)]
Clarify the meaning of version in redirdev filters

The version attribute in redirdev filters refers to the revision
of the device, not the version of the USB protocol.

Explicitly state that this is not the USB protocol and remove references
to those round version numbers that resemble USB protocol versions.

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

10 years agoparallels: fix prlsdkCheckUnsupportedParams checks
Maxim Nestratov [Thu, 12 Mar 2015 15:43:29 +0000 (18:43 +0300)]
parallels: fix prlsdkCheckUnsupportedParams checks

for memory limits since unset ones are no longer zero

Signed-off-by: Maxim Nestratov <mnestratov@parallels.com>
10 years agovmx: add e1000e to supported NIC models.
Dawid Zamirski [Mon, 9 Mar 2015 15:16:26 +0000 (11:16 -0400)]
vmx: add e1000e to supported NIC models.

This NIC model is supported on hardware version 8 and newer and libvirt
ESX driver does support those.

10 years agovbox: use user cache dir when screenshotting.
Dawid Zamirski [Mon, 9 Mar 2015 15:07:46 +0000 (11:07 -0400)]
vbox: use user cache dir when screenshotting.

For VBOX it's most likely that the connection is vbox:///session and it
runs with local non-root account. This caused permission denied when
LOCALSTATEDIR was used to create temp file. This patch makes use of the
virGetUserCacheDirectory to address this problem for non-root users.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agovirnetdev: fix build with old kernel
Pavel Hrdina [Tue, 10 Mar 2015 16:00:15 +0000 (17:00 +0100)]
virnetdev: fix build with old kernel

Commit c9027d8f added a detection of NIC HW features, but some of them
are not available in old kernel.  Very old kernels lack enum
ethtool_flags and even if this enum is present, not all values are
available for all kernels.  To be sure that we have everything in kernel
that we need, we must check for existence of most of that flags, because
only few of them were defined at first.

Also to successfully build libvirt with older kernel we need to include
<linux/types.h> before <linux/ethtool.h> to have __u32 and friends
defined.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoparallels: add VIR_ARCH_I686 capability to parallels driver
Maxim Nestratov [Tue, 10 Mar 2015 19:32:50 +0000 (22:32 +0300)]
parallels: add VIR_ARCH_I686 capability to parallels driver

as soon as x32 architecture is also supported

10 years agoError out on an address for isa-serial in QEMU driver.
Ján Tomko [Wed, 4 Mar 2015 07:58:02 +0000 (08:58 +0100)]
Error out on an address for isa-serial in QEMU driver.

We've never formatted them on the qemu command line.

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

10 years agoxenapi: Resolve Coverity REVERSE_INULL
John Ferlan [Tue, 10 Mar 2015 23:14:31 +0000 (19:14 -0400)]
xenapi: Resolve Coverity REVERSE_INULL

Coverity notes in xenapiDomainGetXMLDesc that 'vms' is dereferenced
a few times before a "if (vms) xen_vm_set_free(vms);" call is made.
Since we'd exit out much sooner if the fetch of the vms failed, just
remove the unnecessary "if (vms)" check.

10 years agoxenapi: Resolve Coverity REVERSE_INULL
John Ferlan [Tue, 10 Mar 2015 23:10:34 +0000 (19:10 -0400)]
xenapi: Resolve Coverity REVERSE_INULL

Coverity complains that "net_set" is compared to NULL before calling
xen_network_set_free, but used rather liberally before that.  While
I was looking at the code I also noted that if the virAsprintfQuiet
fails, then we leak our structures - so I added those too.

10 years agoxenapi: Resolve Coverity NULL_RETURNS
John Ferlan [Tue, 10 Mar 2015 22:52:07 +0000 (18:52 -0400)]
xenapi: Resolve Coverity NULL_RETURNS

Coverity points out that the return from virDomainDefParseString is
not checked in xenapiDomainCreateXML like it should be which could
end up in a NULL pointer dereference

10 years agoxenapi: Resolve Coverity NO_EFFECT
John Ferlan [Tue, 10 Mar 2015 22:41:18 +0000 (18:41 -0400)]
xenapi: Resolve Coverity NO_EFFECT

Coverity points out that check (def->uuid) has no effect since it's not
a pointer, rather an array of characters.   Just remove the extranous check.

10 years agoxenapi: Resolve Coverity FORWARD_NULL
John Ferlan [Tue, 10 Mar 2015 22:33:59 +0000 (18:33 -0400)]
xenapi: Resolve Coverity FORWARD_NULL

Since inception.  Coverity complains that the code checks "(record ==
NULL && !session->ok)", but doesn't check (record != NULL) before
dereferencing at "record->is_a_template"

10 years agoconf: Resolve Coverity RESOURCE_LEAK
John Ferlan [Tue, 10 Mar 2015 22:24:49 +0000 (18:24 -0400)]
conf: Resolve Coverity RESOURCE_LEAK

Commit id 'c9027d8f' added parsing of the CapNet for offload SRIOV NIC
discovery, but forgot to free the nodes

10 years agovirsh: Add iothreadpin command
John Ferlan [Fri, 6 Mar 2015 00:08:04 +0000 (19:08 -0500)]
virsh: Add iothreadpin command

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

$ virsh iothread --help

  NAME
    iothreadpin - control domain IOThread affinity

  SYNOPSIS
    iothreadpin <domain> <iothread> <cpulist> [--config] [--live] [--current]

  DESCRIPTION
    Pin domain IOThreads to host physical CPUs.

  OPTIONS
    [--domain] <string>  domain name, id or uuid
    [--iothread] <number>  IOThread ID number
    [--cpulist] <string>  host cpu number(s) to set
    --config         affect next boot
    --live           affect running domain
    --current        affect current domain

Using the output from iothreadsinfo, allow changing the pinned CPUs for
a single IOThread.

$ virsh iothreadsinfo $dom
 IOThread ID    CPU Affinity
---------------------------------------------------
 1               2
 2               3
 3               0-1

$ virsh iothreadpin $dom 3 0-2

Then view the change

$ virsh iothreadsinfo $dom
 IOThread ID    CPU Affinity
---------------------------------------------------
 1               2
 2               3
 3               0-2

If an invalid value is supplied or require option missing,
then an error will be displayed:

$ virsh iothreadpin $dom 4 3
error: invalid argument: iothread value out of range 4 > 3

$ virsh iothreadpin $dom 3
error: command 'iothreadpin' requires <cpulist> option

10 years agoqemu: Add support to pin IOThreads to specific CPU
John Ferlan [Fri, 6 Mar 2015 00:07:51 +0000 (19:07 -0500)]
qemu: Add support to pin IOThreads to specific CPU

Add qemuDomainPinIOThread to handle setting the CPU affinity
for a specific IOThread

10 years agodomain: Introduce virDomainIOThreadsPin{Add|Del}
John Ferlan [Tue, 17 Feb 2015 17:22:48 +0000 (12:22 -0500)]
domain: Introduce virDomainIOThreadsPin{Add|Del}

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

More or less a virtual copy of the existing virDomainVcpuPin{Add|Del} API's.

NB: The IOThreads implementation "reused" the virDomainVcpuPinDefPtr
since it provided everything necessary - an "id" and a "map" for each
thread id configured.

10 years agoremote: Implement the plumbing for virDomainPinIOThread
John Ferlan [Thu, 5 Mar 2015 19:28:39 +0000 (14:28 -0500)]
remote: Implement the plumbing for virDomainPinIOThread

Implement the remote plumbing.

10 years agoImplement public API for virDomainPinIOThread
John Ferlan [Thu, 5 Mar 2015 19:14:27 +0000 (14:14 -0500)]
Implement public API for virDomainPinIOThread

Add virDomainPinIOThread to allow setting the CPU affinity for a specific
IOThread based on the output generated from virDomainGetIOThreadsInfo

The API supports updating both the --live domain and the --config data

10 years agovirNetworkObjFindBy*: Return an reference to found object
Michal Privoznik [Thu, 26 Feb 2015 12:45:05 +0000 (13:45 +0100)]
virNetworkObjFindBy*: Return an reference to found object

This patch turns both virNetworkObjFindByUUID() and
virNetworkObjFindByName() to return an referenced object so that
even if caller unlocks it, it's for sure that object won't
disappear meanwhile. Especially if the object (in general) is
locked and unlocked during the caller run.
Moreover, this commit is nicely small, since the object unrefing
can be done in virNetworkObjEndAPI().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agovirNetworkObjListPtr: Make APIs self-locking
Michal Privoznik [Thu, 26 Feb 2015 07:51:55 +0000 (08:51 +0100)]
virNetworkObjListPtr: Make APIs self-locking

Every API that touches internal structure of the object must lock
the object first. Not every API that has the object as an
argument needs to do that though. Some APIs just pass the object
to lower layers which, however, must lock the object then. Look
at the code, you'll get my meaning soon.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_conf: Introduce locked versions of lookup functions
Michal Privoznik [Wed, 4 Mar 2015 12:28:07 +0000 (13:28 +0100)]
network_conf: Introduce locked versions of lookup functions

This is going to be needed later, when some functions already
have the virNetworkObjList object already locked and need to
lookup a object to work on. As an example of such function is
virNetworkAssignDef(). The other use case might be in
virNetworkObjListForEach() callback.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agovirNetworkObjList: Derive from virObjectLockableClass
Michal Privoznik [Wed, 25 Feb 2015 13:58:16 +0000 (14:58 +0100)]
virNetworkObjList: Derive from virObjectLockableClass

Later we can turn APIs to lock the object if needed instead of
relying on caller to mutually exclude itself (probably done by
locking a big lock anyway).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoparallels_network: Use virNetworkObjEndAPI
Michal Privoznik [Wed, 25 Feb 2015 16:38:54 +0000 (17:38 +0100)]
parallels_network: Use virNetworkObjEndAPI

So far, this is pure code replacement. But once we introduce
reference counting to virNetworkObj this will be more handy as
there'll be only one function to change: virNetworkObjEndAPI().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agotest_driver: Use virNetworkObjEndAPI
Michal Privoznik [Wed, 25 Feb 2015 16:38:54 +0000 (17:38 +0100)]
test_driver: Use virNetworkObjEndAPI

So far, this is pure code replacement. But once we introduce
reference counting to virNetworkObj this will be more handy as
there'll be only one function to change: virNetworkObjEndAPI().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agobridge_driver: Use virNetworkObjEndAPI
Michal Privoznik [Wed, 25 Feb 2015 16:01:52 +0000 (17:01 +0100)]
bridge_driver: Use virNetworkObjEndAPI

So far, this is pure code replacement. But once we introduce
reference counting to virNetworkObj this will be more handy as
there'll be only one function to change: virNetworkObjEndAPI().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_conf: Introduce virNetworkObjEndAPI
Michal Privoznik [Wed, 25 Feb 2015 15:49:19 +0000 (16:49 +0100)]
network_conf: Introduce virNetworkObjEndAPI

This is practically copy of qemuDomObjEndAPI. The reason why is
it so widely available is to avoid code duplication, since the
function is going to be called from our bridge driver, test
driver and parallels driver too.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_conf: Make virNetworkObj actually virObject
Michal Privoznik [Wed, 25 Feb 2015 13:08:19 +0000 (14:08 +0100)]
network_conf: Make virNetworkObj actually virObject

So far it's just a structure which happens to have 'Obj' in its
name, but otherwise it not related to virObject at all. No
reference counting, not virObjectLock(), nothing.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agovirNetworkObjListPtr: Turn list into a hash table
Michal Privoznik [Mon, 9 Mar 2015 11:16:12 +0000 (12:16 +0100)]
virNetworkObjListPtr: Turn list into a hash table

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu: monitor: Kill qemuMonitorGetBlockStats(Info,ParamsNumber)
Peter Krempa [Tue, 10 Mar 2015 15:56:53 +0000 (16:56 +0100)]
qemu: monitor: Kill qemuMonitorGetBlockStats(Info,ParamsNumber)

The functions and their QMP and HMP implementations are no longer needed
since everything is now done via the *AllStats functions.

10 years agotest: qemu: json: Avoid using the now obsolete functions
Peter Krempa [Tue, 10 Mar 2015 16:11:22 +0000 (17:11 +0100)]
test: qemu: json: Avoid using the now obsolete functions

Use the new single function instead of calling
qemuMonitorJSONGetBlockStatsInfo and
qemuMonitorJSONGetBlockStatsParamsNumber. This will allow to delete the
functions later while still maintaining coverage.

10 years agoqemu: blockstats: Refactor qemuDomainBlockStatsFlags
Peter Krempa [Tue, 10 Mar 2015 15:52:08 +0000 (16:52 +0100)]
qemu: blockstats: Refactor qemuDomainBlockStatsFlags

Now that qemuDomainBlocksStatsGather provides functions of both
qemuMonitorGetBlockStatsParamsNumber and qemuMonitorGetBlockStatsInfo we
can reuse it and kill a lot of code.

Additionally as a bonus qemuDomainBlockStatsFlags will now support
summary statistics so add a statement to the virsh man page about that.

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

10 years agoqemu: blockstats: Add support for totalled block statistics
Peter Krempa [Tue, 10 Mar 2015 14:54:17 +0000 (15:54 +0100)]
qemu: blockstats: Add support for totalled block statistics

In the LXC driver, if the disk path is not provided the API returns
total statistics for all disks of the domain. With the new text monitor
implementation this can be now done in the qemu driver too.

Add code that wil total the stats for all disks if the path is not
provided.

10 years agoqemu: Split out working code qemuDomainBlockStats
Peter Krempa [Tue, 10 Mar 2015 14:37:31 +0000 (15:37 +0100)]
qemu: Split out working code qemuDomainBlockStats

Extract the code to look up the disk alias and return the block stats
struct so that it can be reused later in qemuDomainBlockStatsFlags.

The function uses qemuMonitorGetAllBlockStatsInfo instead of
qemuMonitorGetBlockStatsInfo.

10 years agoqemu: monitor: Count block stats fields in qemuMonitorGetAllBlockStatsInfo
Peter Krempa [Tue, 10 Mar 2015 13:40:58 +0000 (14:40 +0100)]
qemu: monitor: Count block stats fields in qemuMonitorGetAllBlockStatsInfo

Our virDomainBlockStatsFlags API uses the old approach where, when it's
called without the typed parameter array, returns the count of parameters
supported by qemu.

The supported parameter count is obtained via separate monitor calls
which is a waste since we can calculate it when gathering the data.

This patch adds code to the qemuMonitorGetAllBlockStatsInfo workers that
allows to track the count of supported fields reported by qemu and will
allow to remove the old duplicate code.

10 years agoqemu: monitor: Convert common code to a macro
Peter Krempa [Tue, 10 Mar 2015 13:32:46 +0000 (14:32 +0100)]
qemu: monitor: Convert common code to a macro

The function that is extracting block stats data from the QMP monitor
reply contains a lot of repeated code. Since I'd be changing each of the
copies in the next patch, lets convert it to a macro right away.

10 years agoqemu: monitor: Implement HMP version for listing all block device stats
Peter Krempa [Mon, 9 Mar 2015 16:23:49 +0000 (17:23 +0100)]
qemu: monitor: Implement HMP version for listing all block device stats

Add a different version of parser for "info blockstats" that basically
parses the same information as the existing copy of the function.

This will allow us to remove the single device version
qemuMonitorGetBlockStatsInfo in the future.

The new implementation uses few new helpers so it should be more
understandable and provides a test case to verify that it works.

10 years agotest: qemu: Fix qemu monitor test utils to allow testing HMP
Peter Krempa [Tue, 10 Mar 2015 12:10:20 +0000 (13:10 +0100)]
test: qemu: Fix qemu monitor test utils to allow testing HMP

qemu HMP commands sent by libvirt are terminated just by a '\r'. The
fake monitor used in tests wasn't prepared to handle this and the
communication would hang on an attempt to do a HMP conversation.

Add a special case for handling commands separated by \r in case HMP is
used.

10 years agoqemu: blockstats: Switch to caller allocated hash table
Peter Krempa [Tue, 10 Mar 2015 09:02:40 +0000 (10:02 +0100)]
qemu: blockstats: Switch to caller allocated hash table

Allocate the hash table in the monitor wrapper function instead of the
worker itself so that the text monitor impl that will be added in the
next patch doesn't have to duplicate it.

10 years agoqemu: monitor: Drop parsing of 'errs' from block info
Peter Krempa [Mon, 9 Mar 2015 14:25:17 +0000 (15:25 +0100)]
qemu: monitor: Drop parsing of 'errs' from block info

The error count statistic is not supported by qemu, so there's no need
to pass the variables around if the result is ignored anyways.

10 years agoqemu: Use macro to set block stats typed parameters
Peter Krempa [Mon, 9 Mar 2015 14:17:33 +0000 (15:17 +0100)]
qemu: Use macro to set block stats typed parameters

All the setters are the same code except for parameter name and
variable, so they can be converted to a macro to save a ton of
duplicated code.

10 years agoRNG: Allow multiple parameters to be passed to an interface filter
Michal Privoznik [Wed, 11 Mar 2015 08:54:29 +0000 (09:54 +0100)]
RNG: Allow multiple parameters to be passed to an interface filter

Our code supports that for ages. When using a <filterref/> to an
<interface/> several parameters can be passed to the filter. Later,
when building firewall rules, parameters are substituted for their
values. However, our RNG schema allowed only one parameter to be
passed.

Reported-by: Brian Rak <brak@gameservers.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoparallels: prevent domain define only if vcpupin is specified
Maxim Nestratov [Tue, 10 Mar 2015 20:12:22 +0000 (23:12 +0300)]
parallels: prevent domain define only if vcpupin is specified

and their settings differ from common cpumask

Signed-off-by: Maxim Nestratov <mnestratov@parallels.com>
10 years agoparallels: prevent domain define only if NUMA is really specified
Maxim Nestratov [Tue, 10 Mar 2015 20:12:21 +0000 (23:12 +0300)]
parallels: prevent domain define only if NUMA is really specified

Signed-off-by: Maxim Nestratov <mnestratov@parallels.com>
10 years agoparallels: don't forget to unlock domain in parallelsDomainHasManagedSaveImage
Maxim Nestratov [Tue, 10 Mar 2015 20:12:20 +0000 (23:12 +0300)]
parallels: don't forget to unlock domain in parallelsDomainHasManagedSaveImage

Signed-off-by: Maxim Nestratov <mnestratov@parallels.com>
10 years agoparallels: cpumask support
Maxim Nestratov [Tue, 10 Mar 2015 20:12:19 +0000 (23:12 +0300)]
parallels: cpumask support

Signed-off-by: Maxim Nestratov <mnestratov@parallels.com>
10 years agodomain_conf: fix crash in virDomainObjListFindByUUIDInternal
Michael Chapman [Wed, 11 Mar 2015 02:19:54 +0000 (13:19 +1100)]
domain_conf: fix crash in virDomainObjListFindByUUIDInternal

If a domain object is being removed and looked up concurrently we must
ensure we unlock the object before unreferencing it, since the latter
might free the object.

The flaw was introduced in commit feb1a4d792e1c35b1009e69c00bf351b39.

Signed-off-by: Michael Chapman <mike@very.puzzling.org>
10 years ago{domain, network}_conf: disable autostart when deleting config
Michael Chapman [Wed, 11 Mar 2015 02:20:28 +0000 (13:20 +1100)]
{domain, network}_conf: disable autostart when deleting config

Undefining a running, autostarted domain removes the autostart link, but
dom->autostart is not cleared. If the domain is subsequently redefined,
libvirt thinks it is already autostarted and will not create the link
even if requested:

  # virsh dominfo example | grep Autostart
  Autostart:      enable

  # ls /etc/libvirt/qemu/autostart/example.xml
  /etc/libvirt/qemu/autostart/example.xml

  # virsh undefine example
  Domain example has been undefined

  # virsh define example.xml
  Domain example defined from example.xml

  # virsh dominfo example | grep Autostart
  Autostart:      enable

  # virsh autostart example
  Domain example marked as autostarted

  # ls /etc/libvirt/qemu/autostart/example.xml
  ls: cannot access /etc/libvirt/qemu/autostart/example.xml: No such file or directory

This commit ensures dom->autostart is cleared whenever the config and
autostart link (if present) are removed.

The bridge network driver cleared this flag itself in networkUndefine.
This commit moves this into virNetworkDeleteConfig for symmetry with
virDomainDeleteConfig, and to ensure it is not missed in future network
drivers.

Signed-off-by: Michael Chapman <mike@very.puzzling.org>
10 years agoqemu: Remove unnecessary virReportError on networkGetNetworkAddress return
Luyao Huang [Sat, 28 Feb 2015 09:08:34 +0000 (17:08 +0800)]
qemu: Remove unnecessary virReportError on networkGetNetworkAddress return

Error messages are already set in all code paths returning -1 from
networkGetNetworkAddress, so we don't want to overwrite them.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agovirQEMUCapsInitQMP: Don't dispose locked @vm
Michal Privoznik [Tue, 10 Mar 2015 13:23:43 +0000 (14:23 +0100)]
virQEMUCapsInitQMP: Don't dispose locked @vm

When creating qemu capabilities, a dummy virDomainObj is created just
because our monitor code expects that. However, the object is created
locked already. Then, under cleanup label, we simply unref the object
which results in whole domain object to be disposed. The object lock
is destroyed subsequently, but hey - it's still locked:

==24845== Thread #14's call to pthread_mutex_destroy failed
==24845==    with error code 16 (EBUSY: Device or resource busy)
==24845==    at 0x4C3024E: pthread_mutex_destroy (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
==24845==    by 0x531F72E: virMutexDestroy (virthread.c:83)
==24845==    by 0x5302977: virObjectLockableDispose (virobject.c:237)
==24845==    by 0x5302A89: virObjectUnref (virobject.c:265)
==24845==    by 0x1DD37866: virQEMUCapsInitQMP (qemu_capabilities.c:3397)
==24845==    by 0x1DD37CC6: virQEMUCapsNewForBinary (qemu_capabilities.c:3481)
==24845==    by 0x1DD381E2: virQEMUCapsCacheLookup (qemu_capabilities.c:3609)
==24845==    by 0x1DD30F8A: virQEMUCapsInitGuest (qemu_capabilities.c:744)
==24845==    by 0x1DD31889: virQEMUCapsInit (qemu_capabilities.c:1020)
==24845==    by 0x1DD7DD36: virQEMUDriverCreateCapabilities (qemu_conf.c:888)
==24845==    by 0x1DDC57C0: qemuStateInitialize (qemu_driver.c:803)
==24845==    by 0x53DC743: virStateInitialize (libvirt.c:777)
==24845==

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoqemu: fix memory leak in qemuAgentGetFSInfo
Chen Fan [Tue, 10 Mar 2015 05:56:11 +0000 (13:56 +0800)]
qemu: fix memory leak in qemuAgentGetFSInfo

in virDomainFSInfoFree(), don't free the virDomainFSInfo data.

==10670== 80 bytes in 2 blocks are definitely lost in loss record 576 of 793
==10670==    at 0x4A06BC3: calloc (vg_replace_malloc.c:618)
==10670==    by 0x509DEBD: virAlloc (viralloc.c:144)
==10670==    by 0x19FBD558: qemuAgentGetFSInfo (qemu_agent.c:1837)
==10670==    by 0x1A03CF91: qemuDomainGetFSInfo (qemu_driver.c:19238)

Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
10 years agoReverse the logic in virbitmaptest
Ján Tomko [Fri, 6 Mar 2015 16:55:38 +0000 (17:55 +0100)]
Reverse the logic in virbitmaptest

Test the whole range in testBit, not just the first bit.

10 years agoUse virBitmapNextClearBit in networkNextClassID
Ján Tomko [Fri, 6 Mar 2015 16:09:49 +0000 (17:09 +0100)]
Use virBitmapNextClearBit in networkNextClassID

Instead of finding the next clear bit by calling virBitmapGetBit
in a loop, use the virBitmapNextClearBit helper.

10 years agoqemu: don't fill in nicindexes for session mode libvirtd
Laine Stump [Tue, 10 Mar 2015 06:09:24 +0000 (02:09 -0400)]
qemu: don't fill in nicindexes for session mode libvirtd

Commit 4bbe1029f fixed a problem in commit f7afeddc by moving the call
to virNetDevGetIndex() to a location common to all interface types (so
that the nicindex array would be filled in for macvtap as well as tap
interfaces), but the location was *too* common, as the original call
to virNetDevGetIndex() had been in a section qualified by "if
(cfg->privileged)". The result was that the "fixed" libvirtd would try
to call virNetDevGetIndex() even for session mode libvirtd, and end up
failing with the log message:

  Unable to open control socket: Operation not permitted

To remedy that, this patch qualifies the call to virNetDevGetIndex()
in its new location with cfg->privileged.

This resolves https://bugzilla.redhat.com/show_bug.cgi?id=1198244

10 years agovirnet*: Don't unlock object in dispose
Michal Privoznik [Tue, 10 Mar 2015 10:06:35 +0000 (11:06 +0100)]
virnet*: Don't unlock object in dispose

As of bba93d40 all of our RPC objects are derived from
virObjectLockable. However, during rewrite some errors sneaked
in. For instance, the dispose functions to virNetClient and
virNetServerClient objects were not only freeing allocated
memory, but unlocking themselves. This is wrong. Object should
never disappear while locked.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agodocs: add a note that spice channel is usable only with spice graphics
Pavel Hrdina [Thu, 26 Feb 2015 10:59:41 +0000 (11:59 +0100)]
docs: add a note that spice channel is usable only with spice graphics

To prevent a confusion about missing chardev argument in qemu
command line add a note about that behavior into documentation.

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

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agonet-define: update or unify documentation
Pavel Hrdina [Wed, 25 Feb 2015 15:01:09 +0000 (16:01 +0100)]
net-define: update or unify documentation

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

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agopool-define: update and unify documentation
Pavel Hrdina [Wed, 25 Feb 2015 14:51:41 +0000 (15:51 +0100)]
pool-define: update and unify documentation

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

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoiface-define: update and unify documentation
Pavel Hrdina [Wed, 25 Feb 2015 14:37:00 +0000 (15:37 +0100)]
iface-define: update and unify documentation

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

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agonetwork_conf: Turn struct _virNetworkObjList private
Michal Privoznik [Tue, 24 Feb 2015 12:48:50 +0000 (13:48 +0100)]
network_conf: Turn struct _virNetworkObjList private

Now that all the code uses accessors, don't expose the structure
anyway.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_conf: Turn virNetworkObjList into virObject
Michal Privoznik [Tue, 24 Feb 2015 12:45:45 +0000 (13:45 +0100)]
network_conf: Turn virNetworkObjList into virObject

Well, one day this will be self-locking object, but not today.
But lets prepare the code for that! Moreover,
virNetworkObjListFree() is no longer needed, so turn it into
virNetworkObjListDispose().

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoparallels_network: Adapt to new virNetworkObjList accessors
Michal Privoznik [Tue, 24 Feb 2015 10:32:52 +0000 (11:32 +0100)]
parallels_network: Adapt to new virNetworkObjList accessors

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agotest_driver: Adapt to new virNetworkObjList accessors
Michal Privoznik [Tue, 24 Feb 2015 10:32:52 +0000 (11:32 +0100)]
test_driver: Adapt to new virNetworkObjList accessors

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agobridge_driver: Adapt to new virNetworkObjList accessors
Michal Privoznik [Mon, 23 Feb 2015 17:29:20 +0000 (18:29 +0100)]
bridge_driver: Adapt to new virNetworkObjList accessors

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_conf: Introduce virNetworkObjListPrune
Michal Privoznik [Wed, 4 Mar 2015 16:38:39 +0000 (17:38 +0100)]
network_conf: Introduce virNetworkObjListPrune

The API will iterate over the list of network object and remove
desired ones from it.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_conf: Introduce virNetworkObjListNumOfNetworks
Michal Privoznik [Mon, 23 Feb 2015 16:46:01 +0000 (17:46 +0100)]
network_conf: Introduce virNetworkObjListNumOfNetworks

An accessor following pattern laid out by virDomainObjList* APIs.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_conf: Introduce virNetworkObjListGetNames
Michal Privoznik [Mon, 23 Feb 2015 16:37:17 +0000 (17:37 +0100)]
network_conf: Introduce virNetworkObjListGetNames

An accessor following pattern laid out by virDomainObjList* APIs.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agonetwork_conf: Introduce virNetworkObjListForEach
Michal Privoznik [Mon, 23 Feb 2015 16:21:46 +0000 (17:21 +0100)]
network_conf: Introduce virNetworkObjListForEach

This API will be used in the future to call passed callback over
each network object in the list. It's slightly different to its
virDomainObjListForEach counterpart, because virDomainObjList
uses a hash table to store domain object, while virNetworkObjList
uses an array.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agosanlock: Don't spam logs with "target pid not found"
Jiri Denemark [Fri, 6 Mar 2015 14:58:55 +0000 (15:58 +0100)]
sanlock: Don't spam logs with "target pid not found"

Commit v1.2.4-52-gda879e5 fixed issues with domains started before
sanlock driver was enabled by checking whether a running domain is
registered with sanlock and if it's not, sanlock driver is basically
ignored for the domain.

However, it was checking this even for domain which has just been
started and no sanlock_* API was called for them yet. This results in

    cmd 9 target pid 2135544 not found

error messages to appear in sanlock.log whenever we start a new domain.

This patch avoids this useless check for freshly started domains.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
10 years agolocking: Fix flags in virLockManagerLockDaemonNew
Jiri Denemark [Mon, 9 Mar 2015 12:12:36 +0000 (13:12 +0100)]
locking: Fix flags in virLockManagerLockDaemonNew

virLockManager*New APIs are never called with
VIR_LOCK_MANAGER_USES_STATE. Moreover, lockd driver does not maintain
any state that would need to be transferred during migration and thus it
should not mention VIR_LOCK_MANAGER_USES_STATE at all.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
10 years agotests: fix qemuxml2argvtest to be arch independent
Pavel Hrdina [Sat, 7 Mar 2015 10:24:48 +0000 (11:24 +0100)]
tests: fix qemuxml2argvtest to be arch independent

Commit 5aee81a0 introduced a new test for disk-serial.  The test fails
on i686 arch because there is no need to add "-cpu qemu32" to command
line.  To fix the test update emulator in XML to "/usr/bin/qemu" so we
don't add the "-cpu qemu32" to command while running the test on i686 or
x86_64 host.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoqemu: Change qemuDomainGetEmulatorPinInfo bitmap manipulation
John Ferlan [Fri, 6 Mar 2015 18:26:46 +0000 (13:26 -0500)]
qemu: Change qemuDomainGetEmulatorPinInfo bitmap manipulation

Follow-up to the IOThread review on CPU affinity map manipulation:

http://www.redhat.com/archives/libvir-list/2015-March/msg00294.html

indicates that the GetEmulatorPinInfo could use similar algorithm adjustments
which is what this patch does.

10 years agoqemu: Change qemuDomainGetVcpuPinInfo bitmap manipulation
John Ferlan [Fri, 6 Mar 2015 17:58:25 +0000 (12:58 -0500)]
qemu: Change qemuDomainGetVcpuPinInfo bitmap manipulation

Follow-up to the IOThread review on CPU affinity map manipulation:

http://www.redhat.com/archives/libvir-list/2015-March/msg00294.html

indicates that the GetVcpuPinInfo could use similar algorithm adjustments
which is what this patch does.

10 years agoqemu: Resolve Coverity CHECKED_RETURN issue
John Ferlan [Fri, 6 Mar 2015 17:27:37 +0000 (12:27 -0500)]
qemu: Resolve Coverity CHECKED_RETURN issue

By adding a call and check of return of virBitmapToData to the
IOThreads code, my Coverity checker lets me know qemuDomainHelperGetVcpus
also needs to check the status...

10 years agoqemu: Change/Fix IOThread CPU affinity bitmap manipulation
John Ferlan [Fri, 6 Mar 2015 17:07:56 +0000 (12:07 -0500)]
qemu: Change/Fix IOThread CPU affinity bitmap manipulation

Based on review:

http://www.redhat.com/archives/libvir-list/2015-March/msg00294.html

Adjust how the cpumap and cpumaplen to be returned are generated

10 years agoRemove ReadOnly check for GetIOThreadsInfo
John Ferlan [Fri, 6 Mar 2015 15:26:51 +0000 (10:26 -0500)]
Remove ReadOnly check for GetIOThreadsInfo

10 years agoFix syntax for vcpupin description
John Ferlan [Fri, 6 Mar 2015 15:17:50 +0000 (10:17 -0500)]
Fix syntax for vcpupin description

10 years agotests: Add test for os interleaving
Martin Kletzander [Wed, 25 Feb 2015 14:45:26 +0000 (15:45 +0100)]
tests: Add test for os interleaving

We don't usually do tests purely for one change, but one change was
special because when users will migrate to OVMF/AAVMF, commit 18f9f69b
makes their lives easier by allowing them to interleave <type/> inside
<os/>.  It would be nice of us to keep the possibility of them pasting
the loader and nvram elements wherever it is valid, hence this test.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agotests: Add test for virtio-mmio address type
Martin Kletzander [Wed, 25 Feb 2015 14:12:31 +0000 (15:12 +0100)]
tests: Add test for virtio-mmio address type

Commit 3e4b783e fixed an issue with RNG schema where this address type
was missing, this commit adds a test for it.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
10 years agodomain_conf: Format <pvpanic/> without address correctly
Michal Privoznik [Thu, 26 Feb 2015 14:28:07 +0000 (15:28 +0100)]
domain_conf: Format <pvpanic/> without address correctly

We have something like pvpanic device. However, in some cases it does
not have any address assigned, in which case we produce this ugly XML
(still valid though):

  <devices>
    <emulator>/usr/bin/qemu</emulator>
    ...
    <panic>
    </panic>
  </devices>

Lets format "<panic/>" instead.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
10 years agoRefresh translations from Zanata
Daniel P. Berrange [Fri, 6 Mar 2015 13:06:57 +0000 (13:06 +0000)]
Refresh translations from Zanata

Delete .po files which contain zero translated strings. Refresh
the .pot file and pull down latest translations from Zanata.

When refreshing the libvirt.pot, it can be pushed to zanata
and .po files resynchonized using

 # cd po
 # rm libvirt.pot
 # make libvirt.pot
 # zanata-cli push
 # zanata-cli pull

Note there is no need for 'make update-po', as long as you do
a zanata push, immediately followed by zanata pull, as the
Zanata server will ensure the .po files downloaded match the
just pushed .pot file.

Note at time of writing, it is strongly recommended to only
use the zanata Java client binary (zanata-cli), and not the
python client binary (zanata). This is because the moderately
large size of the libvirt pot file is causing errors when the
python client tries to push, which have been known to result
in the loss of all translations on the server, as well as also
preventing uploading of .po files themselves :-(

10 years agovirsh: Add 'iothreadsinfo' command
John Ferlan [Wed, 11 Feb 2015 20:29:22 +0000 (15:29 -0500)]
virsh: Add 'iothreadsinfo' command

Add the 'iothreadsinfo' command to display IOThread Info data. Allow for
[--live] or [--config] options in order to display live or config data
for an active domain.

$ virsh iothreadsinfo --help
  NAME
    iothreadsinfo - view domain IOThreads

  SYNOPSIS
    iothreadsinfo <domain> [--config] [--live] [--current]

  DESCRIPTION
    Returns basic information about the domain IOThreads.

  OPTIONS
    [--domain] <string>  domain name, id or uuid
    --config         affect next boot
    --live           affect running domain
    --current        affect current domain

An active domain may return:

$ virsh iothreads $dom
 IOThread ID     CPU Affinity
---------------------------------------------------
  1               2
  2               3
  3               0

$ echo $?
0

For domains which don't have IOThreads the following is returned:

$ virsh iothreads $dom
No IOThreads found for the domain

$ echo $?
0

For domains which are not running the following is returned:

$ virsh iothreads $dom --live
error: Unable to get domain IOThreads information
error: Requested operation is not valid: domain is not running

$ echo $?
1

Editing a domains configuration and modifying the iothreadpin data for
thread 3 from nothing provided to setting a cpuset of '0-1' and then
displaying using --config would display:

$ virsh iothreads f18iothr --config
 IOThread ID     CPU Affinity
 ----------------------------
  1               2
  2               3
  3               0-1

$

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agoqemu: Implement the qemu driver fetch for IOThreads
John Ferlan [Wed, 11 Feb 2015 17:45:58 +0000 (12:45 -0500)]
qemu: Implement the qemu driver fetch for IOThreads

Depending on the flags passed, either attempt to return the active/live
IOThread data for the domain or the config data.

The active/live path will call into the Monitor in order to get the
IOThread data and then correlate the thread_id's returned from the
monitor to the currently running system/threads in order to ascertain
the affinity for each iothread_id.

The config path will map each of the configured IOThreads and return
any configured iothreadspin data

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agoremote: Implement the remote plumbing for virDomainGetIOThreadsInfo
John Ferlan [Mon, 9 Feb 2015 23:59:23 +0000 (18:59 -0500)]
remote: Implement the remote plumbing for virDomainGetIOThreadsInfo

Implement the remote plumbing for virDomainGetIOThreadsInfo

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agoImplement public API for virDomainGetIOThreadsInfo
John Ferlan [Mon, 9 Feb 2015 21:16:55 +0000 (16:16 -0500)]
Implement public API for virDomainGetIOThreadsInfo

Add virDomainGetIOThreadInfo in order to return a list of
virDomainIOThreadInfoPtr structures which list the IOThread ID
and the CPU Affinity map for each IOThread for the domain.

For an active domain, the live data will be returned, while for
an inactive domain, the config data will be returned.

The API supports either the --live or --config flag, but not both.

Also added virDomainIOThreadsInfoFree in order to free the cpumap
and the IOThreadInfo structure.

Signed-off-by: John Ferlan <jferlan@redhat.com>
10 years agomemtune: change the way how we store unlimited value
Pavel Hrdina [Mon, 2 Mar 2015 19:04:12 +0000 (20:04 +0100)]
memtune: change the way how we store unlimited value

There was a mess in the way how we store unlimited value for memory
limits and how we handled values provided by user.  Internally there
were two possible ways how to store unlimited value: as 0 value or as
VIR_DOMAIN_MEMORY_PARAM_UNLIMITED.  Because we chose to store memory
limits as unsigned long long, we cannot use -1 to represent unlimited.
It's much easier for us to say that everything greater than
VIR_DOMAIN_MEMORY_PARAM_UNLIMITED means unlimited and leave 0 as valid
value despite that it makes no sense to set limit to 0.

Remove unnecessary function virCompareLimitUlong.  The update of test
is to prevent the 0 to be miss-used as unlimited in future.

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

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agovirutil: introduce helper functions for memory limits
Pavel Hrdina [Wed, 4 Mar 2015 14:08:09 +0000 (15:08 +0100)]
virutil: introduce helper functions for memory limits

The first one is to truncate the memory limit to
VIR_DOMAIN_MEMORY_PARAM_UNLIMITED if the value is greater and the second
one is to decide whether the memory limit is set or not, unlimited means
that it's not set.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agovirsh: fix memtune to also accept 0 as valid value
Pavel Hrdina [Mon, 2 Mar 2015 15:26:52 +0000 (16:26 +0100)]
virsh: fix memtune to also accept 0 as valid value

Fix vshMemtuneGetSize to return correct value.  We can then decide
according that return code whether a parameter is present and valid or
not.  This will allow as to accept 0 as a valid value.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
10 years agoqemu: Pass file descriptor when using TPM passthrough
Stefan Berger [Thu, 5 Mar 2015 23:57:06 +0000 (18:57 -0500)]
qemu: Pass file descriptor when using TPM passthrough

Pass the TPM file descriptor to QEMU via command line.
Instead of passing /dev/tpm0 we now pass /dev/fdset/10 and the additional
parameters -add-fd set=10,fd=20.

This addresses the use case when QEMU is started with non-root privileges
and QEMU cannot open /dev/tpm0 for example.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
10 years agoqemu: Move TPM command line build code into own function
Stefan Berger [Thu, 5 Mar 2015 23:57:06 +0000 (18:57 -0500)]
qemu: Move TPM command line build code into own function

Move the TPM command line build code into its own function.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
10 years agoutils: Implement virCommandPassFDGetFDIndex
Stefan Berger [Thu, 5 Mar 2015 23:57:06 +0000 (18:57 -0500)]
utils: Implement virCommandPassFDGetFDIndex

Implement virCommandPassFDGetFDIndex to determine the index a given
file descriptor will have when passed to the child process.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>