]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
13 years agoqemu: use consistent error when qemu binary is too old
Eric Blake [Tue, 17 Apr 2012 04:16:04 +0000 (22:16 -0600)]
qemu: use consistent error when qemu binary is too old

Most of our errors complaining about an inability to support a
particular action due to qemu limitations used CONFIG_UNSUPPORTED,
but we had a few outliers.  Reported by Jiri Denemark.

* src/qemu/qemu_command.c (qemuBuildDriveDevStr): Prefer
CONFIG_UNSUPPORTED.
* src/qemu/qemu_driver.c (qemuDomainReboot)
(qemuDomainBlockJobImpl): Likewise.
* src/qemu/qemu_hotplug.c (qemuDomainAttachPciControllerDevice):
Likewise.
* src/qemu/qemu_monitor.c (qemuMonitorTransaction)
(qemuMonitorBlockJob, qemuMonitorSystemWakeup): Likewise.

13 years agovirsh: minor syntactic cleanups
Eric Blake [Sat, 14 Apr 2012 22:35:22 +0000 (16:35 -0600)]
virsh: minor syntactic cleanups

No semantic change.

* tools/virsh.c: Fix some spacing issues, {} usage, long lines,
and redundant ().

13 years agovbox: avoid provoking assertions in VBoxSVC
Jean-Baptiste Rouault [Fri, 13 Apr 2012 13:04:14 +0000 (15:04 +0200)]
vbox: avoid provoking assertions in VBoxSVC

Passing a NULL pointer to IMachine::delete virtualbox API
causes VBoxSVC to raise an assertion. This patch passes
an empty array instead.

13 years agodocs: Improve the schema for fs device
Osier Yang [Tue, 17 Apr 2012 09:50:41 +0000 (17:50 +0800)]
docs: Improve the schema for fs device

<filesystemtgt> is redundant, as every group uses it; <address>
shouldn't be in <filesystemtgt> in case of the meaning could be
"filesystemtarget"; The elements <address>, <alias>, <target>,
... should be interleaved.

13 years agoconf: Do not parse cpuset only if the placement is auto
Osier Yang [Tue, 17 Apr 2012 14:57:01 +0000 (22:57 +0800)]
conf: Do not parse cpuset only if the placement is auto

So that a domain xml which doesn't have "placement" specified, but
"cpuset" is specified, could be parsed. And in this case, the
"placement" mode will be set as "static".

13 years agotests: Update read-bufsiz to delete the UUID of vm XML
Osier Yang [Tue, 17 Apr 2012 14:56:18 +0000 (22:56 +0800)]
tests: Update read-bufsiz to delete the UUID of vm XML

Since now we have fixed domain UUID for test driver, defining
a domain with different name but same UUID doesn't work any
more. This patch delete the UUID from the dumped XML so that
it could be generated.

13 years agotest: Set the fixed uuid for the default XMLs
Osier Yang [Tue, 17 Apr 2012 14:53:51 +0000 (22:53 +0800)]
test: Set the fixed uuid for the default XMLs

The objects (domain, pool, network, etc) for testing are defined/
started each time when opening a connect to test driver, and thus
the UUID for the objects will be generated each time, with different
values. e.g.

% for i in {1..3}; do ./tools/virsh --connect \
  test:///default dumpxml test | grep uuid; done
  <uuid>a1b6ee1f-97de-f0ee-617a-0cdb74947df5</uuid>
  <uuid>ee68d7d2-3eb9-593e-2769-797ce1f4c4aa</uuid>
  <uuid>fecb1d3a-918a-8412-e534-76192cf32b18</uuid>

It's the potential bug which can cause operations like below to fail:

$ virsh -c test:///default dumpxml test > test.xml

[ Some modificatons, though it's not supported, but it should work ]

$ virsh -c test:///default define test.xml

This patch set fixed UUID for objects which support it. (domain,
pool, network).

13 years agoqemu: Split ide-drive into ide-cd and ide-hd
Osier Yang [Tue, 17 Apr 2012 09:16:52 +0000 (17:16 +0800)]
qemu: Split ide-drive into ide-cd and ide-hd

A "ide-drive" device can be either a hard disk or a CD-ROM,
if there is ",media=cdrom" specified for the backend, it's
a CD-ROM, otherwise it's a hard disk.

Upstream qemu splitted "ide-drive" into "ide-hd" and "ide-cd"
since commit 1f56e32, and ",media=cdrom" is not required for
ide-cd anymore. "ide-drive" is still supported for backwards
compatibility, but no doubt we should go foward.

13 years agoqemu: Split scsi-disk into into scsi-hd and scsi-cd
Osier Yang [Tue, 17 Apr 2012 09:08:05 +0000 (17:08 +0800)]
qemu: Split scsi-disk into into scsi-hd and scsi-cd

A "scsi-disk" device can be either a hard disk or a CD-ROM,
if there is ",media=cdrom" specified for the backend, it's
a CD-ROM, otherwise it's a hard disk.

But upstream qemu splitted "scsi-disk" into "scsi-hd" and
"scsi-cd" since commit b443ae, and ",media=cdrom" is not
required for scsi-cd anymore. "scsi-disk" is still supported
for backwards compatibility, but no doubt we should go
foward.

13 years agoDo not enforce source type of console[0]
Jan Kiszka [Tue, 13 Mar 2012 15:48:27 +0000 (16:48 +0100)]
Do not enforce source type of console[0]

If console[0] is an alias for serial[0], do not enforce the former to
have a PTY source type. This breaks serial consoles on stdio and makes
no sense.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
13 years agoxen: do not use ioemu type for any emulated NIC
Stefan Bader [Fri, 13 Apr 2012 13:14:56 +0000 (15:14 +0200)]
xen: do not use ioemu type for any emulated NIC

When using the xm/xend stack to manage instances there is a bug
that causes the emulated interfaces to be unusable when the vif
config contains type=ioemu.

The current code already has a special quirk to not use this
keyword if no specific model is given for the emulated NIC
(defaulting to rtl8139).
Essentially it works because regardless of the type argument,i
the Xen stack always creates emulated and paravirt interfaces and
lets the guest decide which one to use. So neither xl nor xm stack
actually require the type keyword for emulated NICs.

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
13 years agoopenvz: Correct the comments for new node APIs
Osier Yang [Tue, 17 Apr 2012 02:08:53 +0000 (10:08 +0800)]
openvz: Correct the comments for new node APIs

It should be 0.9.12 instead of 0.9.11

13 years agodocs: fix 'omitted' typo in <cputune> doc
Christophe Fergeau [Mon, 16 Apr 2012 16:41:25 +0000 (18:41 +0200)]
docs: fix 'omitted' typo in <cputune> doc

'omitted' was mispelt 'commited' twice. One of the sentences with
the typo was also missing an 'is' ('each VCPU *is* pinned to all...')
which I added in this commit while I was at it.

13 years agodocs: add missing </span> in <vcpu placement> doc
Christophe Fergeau [Mon, 16 Apr 2012 16:40:44 +0000 (18:40 +0200)]
docs: add missing </span> in <vcpu placement> doc

13 years agoqemuProcessStart: Switch to flags instead of bunch booleans
Michal Privoznik [Thu, 8 Mar 2012 13:20:19 +0000 (14:20 +0100)]
qemuProcessStart: Switch to flags instead of bunch booleans

Currently, we have 3 boolean arguments we have to pass
to qemuProcessStart(). As libvirt grows it is harder and harder
to remember them and their position. Therefore we should
switch to flags instead.

13 years agodocs: fix path to openvz network configuration file
Guido Günther [Mon, 16 Apr 2012 14:18:29 +0000 (16:18 +0200)]
docs: fix path to openvz network configuration file

It's vznet.conf not vznetctl.conf, see e.g.:

http://git.openvz.org/?p=vzctl;a=blob;f=bin/vznetcfg.in;h=e91f5c4a0744c1ea149e1b8c241b666052e10b12;hb=HEAD

13 years agostorage: lvm: use correct lv* command parameters
Cole Robinson [Fri, 13 Apr 2012 11:34:41 +0000 (07:34 -0400)]
storage: lvm: use correct lv* command parameters

lvcreate want's the parent pool's name, not the pool path
lvchange and lvremove want lv specified as $vgname/$lvname

This largely worked before because these commands strip off a
starting /dev. But https://bugzilla.redhat.com/show_bug.cgi?id=714986
is from a user using a 'nested VG' that was having problems.

I couldn't find any info on nested LVM and the reporter never responded,
but I reproduced with XML that specified a valid source name, and
set target path to a symlink.

13 years agoqemu: Avoid the memory allocation and freeing
Osier Yang [Wed, 11 Apr 2012 14:40:34 +0000 (22:40 +0800)]
qemu: Avoid the memory allocation and freeing

13 years agonumad: Ignore cpuset if placement is auto
Osier Yang [Wed, 11 Apr 2012 14:40:33 +0000 (22:40 +0800)]
numad: Ignore cpuset if placement is auto

As explained in previous patch, numad will balance the affinity
dynamically, so reflecting the cpuset from numad at the first
time doesn't make much case, and may just could cause confusion.

13 years agonumad: Convert node list to cpumap before setting affinity
Osier Yang [Mon, 16 Apr 2012 10:04:27 +0000 (18:04 +0800)]
numad: Convert node list to cpumap before setting affinity

Instead of returning a CPUs list, numad returns NUMA node
list instead, this patch is to convert the node list to
cpumap before affinity setting. Otherwise, the domain
processes will be pinned only to CPU[$numa_cell_num],
which will cause significiant performance losses.

Also because numad will balance the affinity dynamically,
reflecting the cpuset from numad back doesn't make much
sense then, and it may just could produce confusion for
the users. Thus the better way is not to reflect it back
to XML. And in this case, it's better to ignore the cpuset
when parsing XML.

The codes to update the cpuset is removed in this patch
incidentally, and there will be a follow up patch to ignore
the manually specified "cpuset" if "placement" is "auto",
and document will be updated too.

13 years agoSet Martin Kletzander as a commiter
Daniel Veillard [Mon, 16 Apr 2012 08:57:06 +0000 (16:57 +0800)]
Set Martin Kletzander as a commiter

13 years agoopenvz: wire up more node information functions
Guido Günther [Sat, 14 Apr 2012 20:17:48 +0000 (22:17 +0200)]
openvz: wire up more node information functions

in detail nodeGetCPUStats, nodeGetMemoryStats, nodeGetCellsFreeMemory
and nodeGetFreeMemory

13 years agoFix macvtap detection by also checking for IFLA_VF_MAX
Guido Günther [Sat, 14 Apr 2012 17:18:03 +0000 (19:18 +0200)]
Fix macvtap detection by also checking for IFLA_VF_MAX

since this isn't available on older kernels such as Debian Squeeze's
2.6.32. This make --with-macvtap=check work as expected.

13 years agovirnetdev: Check for defined IFLA_VF_*
Philipp Hahn [Fri, 13 Apr 2012 13:43:58 +0000 (15:43 +0200)]
virnetdev: Check for defined IFLA_VF_*

The linux-2.6.32 kernel header does not yet define IFLA_VF_MAX and others,
which breaks compiling a new libvirt on old systems like Debian Squeeze.

(I also have to add --without-macvtap --disable-werror --without-virtualport to
 ./configure to get it to compile.)

Signed-off-by: Philipp Hahn <hahn@univention.de>
13 years agoWeb placeholder for pending patches on the web site
Daniel Veillard [Fri, 13 Apr 2012 14:52:03 +0000 (22:52 +0800)]
Web placeholder for pending patches on the web site

This is based on recent developments on patch checker and the
goal is to keep a list of pending patches needing review on the
project web site. The page template in git just holds a pointer
to the web page.

13 years agogitignore: Reorder alphabetically
Michal Privoznik [Fri, 13 Apr 2012 08:55:15 +0000 (10:55 +0200)]
gitignore: Reorder alphabetically

Recent git reorders .gitignore alphabetically. However, changes are
not committed and I am tired of discarding these changes from
my patches.

13 years agoconf: Avoid double assignment in virDomainDiskRemove
Michal Privoznik [Fri, 13 Apr 2012 09:19:29 +0000 (11:19 +0200)]
conf: Avoid double assignment in virDomainDiskRemove

Although it should be harmless to do:
    disk = disk = def->disks[i]
some not-so-wise compilers may fool around.
Besides, such assignment is useless here.

13 years agoqemu: Fix mem leak in qemuProcessInitCpuAffinity
Michal Privoznik [Fri, 13 Apr 2012 08:53:17 +0000 (10:53 +0200)]
qemu: Fix mem leak in qemuProcessInitCpuAffinity

If placement mode is AUTO, on some return paths char *cpumap or
char *nodeset are leaked.

13 years agoxend_internal: Use domain/status for shutdown check
Stefan Bader [Thu, 12 Apr 2012 13:42:37 +0000 (15:42 +0200)]
xend_internal: Use domain/status for shutdown check

On newer xend (v3.x and after) there is no state and domid reported
for inactive domains. When initially creating connections this is
handled in various places by assigning domain->id = -1.
But once an instance has been running, the id is set to the current
domain id. And it does not change when the instance is shut down.
So when querying the domain info, the hypervisor driver, which gets
asked first will indicate it cannot find information, then the
xend driver is asked and will set the status to NOSTATE because it
checks for the -1 domain id.
Checking domain/status for 0 seems to be more reliable for that.

One note: I am not sure whether the domain->id also should get set
back to -1 whenever any sub-driver thinks the instance is no longer
running.

BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=746007
BugLink: http://bugs.launchpad.net/bugs/929626
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
13 years agoqemu,util: fix netlink callback registration for migration
D. Herrendoerfer [Thu, 29 Mar 2012 11:15:00 +0000 (13:15 +0200)]
qemu,util: fix netlink callback registration for migration

This patch adds a netlink callback when migrating a VEPA enabled
virtual machine.  It fixes a Bug where a VM would not request a port
association when it was cleared by lldpad.

This patch requires the latest git version of lldpad to work.

Signed-off-by: D. Herrendoerfer <d.herrendoerfer@herrendoerfer.name>
13 years agoqemuOpenFile: Don't force chown on NFS
Michal Privoznik [Wed, 11 Apr 2012 09:13:40 +0000 (11:13 +0200)]
qemuOpenFile: Don't force chown on NFS

If dynamic_ownership is off and we are creating a file on NFS
we force chown. This will fail as chown/chmod are not supported
on NFS. However, with no dynamic_ownership we are not required
to do any chown.

13 years agodaemon: Plug memory leaks
Alex Jia [Thu, 12 Apr 2012 09:10:42 +0000 (17:10 +0800)]
daemon: Plug memory leaks

* daemon/libvirtd-config.c (daemonConfigFree): fix memory leaks.

How to reproduce?

% make && make -C tests check TESTS=libvirtdconftest
% cd tests && valgrind -v --leak-check=full ./libvirtdconftest

actual result:

==11008== 185 bytes in 5 blocks are definitely lost in loss record 3 of 5
==11008==    at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==11008==    by 0x39CF07F6E1: strdup (strdup.c:43)
==11008==    by 0x406626: daemonConfigLoadOptions (libvirtd-config.c:438)
==11008==    by 0x406800: daemonConfigLoadData (libvirtd-config.c:492)
==11008==    by 0x403CCF: testCorrupt (libvirtdconftest.c:110)
==11008==    by 0x404FAD: virtTestRun (testutils.c:145)
==11008==    by 0x403A34: mymain (libvirtdconftest.c:219)
==11008==    by 0x404687: virtTestMain (testutils.c:700)
==11008==    by 0x39CF01ECDC: (below main) (libc-start.c:226)
==11008==
==11008== LEAK SUMMARY:
==11008==    definitely lost: 185 bytes in 5 blocks

Signed-off-by: Alex Jia <ajia@redhat.com>
13 years agoblockjob: allow for fast-finishing job
Eric Blake [Wed, 11 Apr 2012 22:28:35 +0000 (16:28 -0600)]
blockjob: allow for fast-finishing job

In my testing, I was able to provoke an odd block pull failure:

$ virsh blockpull dom vda --bandwidth 10000
error: Requested operation is not valid: No active operation on device: drive-virtio-disk0

merely by using gdb to artifically wait to do the block job set speed
until after the pull had already finished.  But in reality, that should
be a success, since the pull finished before we had a chance to set
speed.  Furthermore, using a double job lock is not only annoying, but
a bug in itself - if you do parallel virDomainBlockRebase, and hit
the race window just right, the first call grabs the VM job to start
a fast block job, then the second call grabs the VM job to start
a long-running job with unspecified speed, then the first call finally
regrabs the VM job and sets the speed, which ends up running the
second job under the speed from the first call.  By consolidating
things into a single job, we avoid opening that race, as well as reduce
the time between starting the job and changing the speed, for less
likelihood of the speed change happening after block job completion
in the first place.

* src/qemu/qemu_monitor.h (BLOCK_JOB_CMD): Add new mode.
* src/qemu/qemu_driver.c (qemuDomainBlockRebase): Move secondary
job call...
(qemuDomainBlockJobImpl): ...here, for fewer locks.
* src/qemu/qemu_monitor_json.c (qemuMonitorJSONBlockJob): Change
return value on new internal mode.

13 years agoblockjob: wire up qemu async virDomainBlockJobAbort
Eric Blake [Wed, 11 Apr 2012 22:17:36 +0000 (16:17 -0600)]
blockjob: wire up qemu async virDomainBlockJobAbort

Without the VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC flag, libvirt will internally
poll using qemu's "query-block-jobs" API and will not return until the
operation has been completed.  API users are advised that this operation
is unbounded and further interaction with the domain during this period
may block.  Future patches may refactor things to allow other queries in
parallel with this polling.  For older qemu, we synthesize the cancellation
event, since qemu won't generate it.

The choice of polling duration copies from the code in qemu_migration.c.

Signed-off-by: Adam Litke <agl@us.ibm.com>
Cc: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
13 years agoblockjob: optimize JSON event handler lookup
Eric Blake [Wed, 11 Apr 2012 14:58:09 +0000 (08:58 -0600)]
blockjob: optimize JSON event handler lookup

Probably in the noise, but this will let us scale more efficiently
as we learn to recognize even more qemu events.

* src/qemu/qemu_monitor_json.c (eventHandlers): Sort.
(qemuMonitorEventCompare): New helper function.
(qemuMonitorJSONIOProcessEvent): Optimize event lookup.

13 years agoblockjob: add API for async virDomainBlockJobAbort
Adam Litke [Fri, 13 Jan 2012 20:51:23 +0000 (14:51 -0600)]
blockjob: add API for async virDomainBlockJobAbort

Block job cancellation can take a while.  Now that upstream qemu 1.1
has asynchronous block cancellation, we want to expose that to the user.
Therefore, the following updates are made to the virDomainBlockJob API:

A new block job event type VIR_DOMAIN_BLOCK_JOB_CANCELED is managed by
libvirt.  Regardless of the flags used with virDomainBlockJobAbort, this
event will be raised: 1. when using synchronous block_job_cancel (the
event will be synthesized by libvirt), and 2. whenever it is received
from qemu (via asynchronous block-job-cancel).  Note that the event
may be detected by libvirt even before the virDomainBlockJobAbort
completes (always true when it is synthesized, but also possible if
cancellation was fast).

A new extension flag VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC is added to the
virDomainBlockJobAbort API.  When enabled, this function will allow
(but not require) asynchronous operation (ie, it returns as soon as
possible, which might be before the job has actually been canceled).
When the API is used in this mode, it is the responsibility of the
caller to wait for a VIR_DOMAIN_BLOCK_JOB_CANCELED event or poll via
the virDomainGetBlockJobInfo API to check the cancellation status.

This patch also exposes the new flag through virsh, and makes virsh
slightly easier to use (--async implies --abort, and lack of any options
implies --info), although it leaves the qemu implementation for later
patches.

Signed-off-by: Adam Litke <agl@us.ibm.com>
Cc: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
13 years agoblockjob: add qemu capabilities related to block pull jobs
Eric Blake [Wed, 11 Apr 2012 21:40:16 +0000 (15:40 -0600)]
blockjob: add qemu capabilities related to block pull jobs

RHEL 6.2 was released with an early version of block jobs, which only
worked on the qed file format, where the commands were spelled with
underscore (contrary to QMP style), and where 'block_job_cancel' was
synchronous and did not trigger an event.

The upcoming qemu 1.1 release has fixed these short-comings [1][2]:
the commands now work on multiple file types, are spelled with dash,
and 'block-job-cancel' is asynchronous and emits an event upon conclusion.

[1]qemu commit 370521a1d6f5537ea7271c119f3fbb7b0fa57063
[2]https://lists.gnu.org/archive/html/qemu-devel/2012-04/msg01248.html

This patch recognizes the new spellings, and fixes virDomainBlockRebase
to give a graceful error when talking to a too-old qemu on a partial
rebase attempt.  Fixes for the new semantics will come later.  This
patch also removes a bogus ATTRIBUTE_NONNULL mistakenly added in
commit 10ec36e2.

* src/qemu/qemu_capabilities.h (QEMU_CAPS_BLOCKJOB_SYNC)
(QEMU_CAPS_BLOCKJOB_ASYNC): New bits.
* src/qemu/qemu_capabilities.c (qemuCaps): Name them.
* src/qemu/qemu_monitor_json.c (qemuMonitorJSONCheckCommands): Set
them.
(qemuMonitorJSONBlockJob): Manage both command names.
(qemuMonitorJSONDiskSnapshot): Minor formatting fix.
* src/qemu/qemu_monitor.h (qemuMonitorBlockJob): Alter signature.
* src/qemu/qemu_monitor_json.h (qemuMonitorJSONBlockJob): Likewise.
* src/qemu/qemu_monitor.c (qemuMonitorBlockJob): Pass through
capability bit.
* src/qemu/qemu_driver.c (qemuDomainBlockJobImpl): Update callers.

13 years agoqemu: Fix deadlock when qemuDomainOpenConsole cleans up a connection
Peter Krempa [Tue, 10 Apr 2012 09:56:21 +0000 (11:56 +0200)]
qemu: Fix deadlock when qemuDomainOpenConsole cleans up a connection

The new safe console handling introduced a possibility to deadlock the
qemu driver when a new console connection forcibly disconnects a
previous console stream that belongs to an already closed connection.

The virStreamFree function calls subsequently a the virReleaseConnect
function that tries to lock the driver while discarding the connection,
but the driver was already locked in qemuDomainOpenConsole.

Backtrace of the deadlocked thread:
0  0x00007f66e5aa7f14 in __lll_lock_wait () from /lib64/libpthread.so.0
1  0x00007f66e5aa3411 in _L_lock_500 () from /lib64/libpthread.so.0
2  0x00007f66e5aa322a in pthread_mutex_lock () from/lib64/libpthread.so.0
3  0x0000000000462bbd in qemudClose ()
4  0x00007f66e6e178eb in virReleaseConnect () from/usr/lib64/libvirt.so.0
5  0x00007f66e6e19c8c in virUnrefStream () from /usr/lib64/libvirt.so.0
6  0x00007f66e6e3d1de in virStreamFree () from /usr/lib64/libvirt.so.0
7  0x00007f66e6e09a5d in virConsoleHashEntryFree () from/usr/lib64/libvirt.so.0
8  0x00007f66e6db7282 in virHashRemoveEntry () from/usr/lib64/libvirt.so.0
9  0x00007f66e6e09c4e in virConsoleOpen () from /usr/lib64/libvirt.so.0
10 0x00000000004526e9 in qemuDomainOpenConsole ()
11 0x00007f66e6e421f1 in virDomainOpenConsole () from/usr/lib64/libvirt.so.0
12 0x00000000004361e4 in remoteDispatchDomainOpenConsoleHelper ()
13 0x00007f66e6e80375 in virNetServerProgramDispatch () from/usr/lib64/libvirt.so.0
14 0x00007f66e6e7ae11 in virNetServerHandleJob () from/usr/lib64/libvirt.so.0
15 0x00007f66e6da897d in virThreadPoolWorker () from/usr/lib64/libvirt.so.0
16 0x00007f66e6da7ff6 in virThreadHelper () from/usr/lib64/libvirt.so.0
17 0x00007f66e5aa0c5c in start_thread () from /lib64/libpthread.so.0
18 0x00007f66e57e7fcd in clone () from /lib64/libc.so.6

* src/qemu/qemu_driver.c: qemuDomainOpenConsole()
        -- unlock the qemu driver right after acquiring the domain
        object

13 years agoqemu: Warn on possibly incorrect usage of EnterMonitor*
Jiri Denemark [Tue, 10 Apr 2012 14:39:33 +0000 (16:39 +0200)]
qemu: Warn on possibly incorrect usage of EnterMonitor*

qemuDomainObjEnterMonitor{,WithDriver} should not be called from async
jobs, only EnterMonitorAsync variant is allowed.

13 years agoqemu: Track job owner for better debugging
Jiri Denemark [Fri, 6 Apr 2012 16:55:46 +0000 (18:55 +0200)]
qemu: Track job owner for better debugging

In case an API fails with "cannot acquire state change lock", searching
for the API that possibly forgot to end its job is not always easy.
Let's keep track of the job owner and print it out for easier
identification.

13 years agoqemu: Avoid excessive calls to qemuDomainObjSaveJob()
Jiri Denemark [Fri, 6 Apr 2012 17:42:34 +0000 (19:42 +0200)]
qemu: Avoid excessive calls to qemuDomainObjSaveJob()

As reported by Daniel Berrangé, we have a huge performance regression
for virDomainGetInfo() due to the change which makes virDomainEndJob()
save the XML status file every time it is called. Previous to that
change, 2000 calls to virDomainGetInfo() took ~2.5 seconds. After that
change, 2000 calls to virDomainGetInfo() take 2 *minutes* 45 secs.

We made the change to be able to recover from libvirtd restart in the
middle of a job. However, only destroy and async jobs are taken care of.
Thus it makes more sense to only save domain state XML when these jobs
are started/stopped.

13 years agotests: Fix libvirtdconftest in VPATH build
Jiri Denemark [Tue, 10 Apr 2012 12:03:46 +0000 (14:03 +0200)]
tests: Fix libvirtdconftest in VPATH build

Without this, libvirtdconftest fails to build with "fatal error:
daemon/libvirtd-config.h: No such file or directory"

13 years agodaemon: Add libvirtd-config.c to the list of files to translate
Jiri Denemark [Tue, 10 Apr 2012 13:42:47 +0000 (15:42 +0200)]
daemon: Add libvirtd-config.c to the list of files to translate

13 years agobuild: avoid s390 compiler warnings
Eric Blake [Tue, 10 Apr 2012 15:46:01 +0000 (09:46 -0600)]
build: avoid s390 compiler warnings

I noticed these compiler warnings when building for the s390 architecture.

* src/node_device/node_device_udev.c (udevDeviceMonitorStartup):
Mark unused variable.
* src/nodeinfo.c (linuxNodeInfoCPUPopulate): Avoid unused variable.

13 years agoWire up <loader> to set the QEMU BIOS path
Daniel P. Berrange [Tue, 10 Apr 2012 14:02:13 +0000 (15:02 +0100)]
Wire up <loader> to set the QEMU BIOS path

* src/qemu/qemu_command.c: Wire up -bios with <loader>
* tests/qemuxml2argvdata/qemuxml2argv-bios.args,
  tests/qemuxml2argvdata/qemuxml2argv-bios.xml: Expand
  existing BIOS test case to cover <loader>

13 years agovirsh: Clean up usage of boolean flag variables
Peter Krempa [Tue, 10 Apr 2012 11:14:23 +0000 (13:14 +0200)]
virsh: Clean up usage of boolean flag variables

This patch cleans up variables used to store boolean command flags that
are inquired by vshCommandOptBool to use the bool data type instead of
an integer.

Additionally this patch cleans up flag variables that are inferred from
existing flags.

13 years agovirsh: Clarify use of the --managed-save flag for the list command
Peter Krempa [Tue, 10 Apr 2012 10:21:03 +0000 (12:21 +0200)]
virsh: Clarify use of the --managed-save flag for the list command

The documentation for the flag doesn't clearly state that the flag only
enhances the output and the user needs to specify other flags to list
inactive domains, that are enhanced by this flag.

13 years agoFix comment about GNUTLS initialization/cleanup
Daniel P. Berrange [Tue, 10 Apr 2012 11:15:46 +0000 (12:15 +0100)]
Fix comment about GNUTLS initialization/cleanup

13 years agoFix compilation error on 32bit
Stefan Berger [Tue, 10 Apr 2012 10:24:03 +0000 (06:24 -0400)]
Fix compilation error on 32bit

Below code failed to compile on a 32 bit machine with error

typewrappers.c: In function 'libvirt_intUnwrap':
typewrappers.c:135:5: error: logical 'and' of mutually exclusive tests is always false [-Werror=logical-op]
cc1: all warnings being treated as errors

The patch fixes this error.

13 years agoReplace daemon-conf test script with a proper test case
Daniel P. Berrange [Wed, 4 Apr 2012 14:01:46 +0000 (15:01 +0100)]
Replace daemon-conf test script with a proper test case

The daemon-conf test script continues to be very fragile to
changes in libvirt. It currently fails 1 time in 3/4 due
to race conditions in startup/shutdown of the test script.

Replace it with a proper test case tailored to the code
being tested

* tests/Makefile.am: Remove daemon-conf, add libvirtdconftest
* tests/daemon-conf: Delete obsolete test
* tests/libvirtdconftest.c: Test config file handling

13 years agoSwitch libvirtd config loading code to use error APIs
Daniel P. Berrange [Wed, 4 Apr 2012 14:00:17 +0000 (15:00 +0100)]
Switch libvirtd config loading code to use error APIs

Using VIR_ERROR means the test suite can't catch error messages
easily. Use the proper error reporting APIs instead

13 years agoAdd API for loading daemon config from in-memory blob
Daniel P. Berrange [Wed, 4 Apr 2012 12:14:19 +0000 (13:14 +0100)]
Add API for loading daemon config from in-memory blob

Rename existing daemonConfigLoad API to daemonConfigLoadFile and
add an alternative daemonConfigLoadData

* daemon/libvirtd-config.c, daemon/libvirtd-config.h: Add
  daemonConfigLoadData and rename daemonConfigLoad to
  daemonConfigLoadFile
* daemon/libvirtd.c: Update for renamed API

13 years agoSplit libvirtd config file loading out into separate files
Daniel P. Berrange [Wed, 4 Apr 2012 12:09:09 +0000 (13:09 +0100)]
Split libvirtd config file loading out into separate files

To enable creation of unit tests, split the libvirtd config file
loading code out into separate files.

* daemon/libvirtd.c: Delete config loading code / structs
* daemon/libvirtd-config.c, daemon/libvirtd-config.h: Config
  file loading APIs

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
13 years agoUML: fix iteration over consoles
MATSUDA, Daiki [Mon, 9 Apr 2012 03:40:52 +0000 (12:40 +0900)]
UML: fix iteration over consoles

I found typo in UML driver.

MATSUDA Daiki

13 years agosnapshot: fix memory leak on error
Eric Blake [Thu, 5 Apr 2012 19:15:03 +0000 (13:15 -0600)]
snapshot: fix memory leak on error

Leak introduced in commit 0436d32.  If we allocate an actions array,
but fail early enough to never consume it with the qemu monitor
transaction call, we leaked memory.

But our semantics of making the transaction command free the caller's
memory is awkward; avoiding the memory leak requires making every
intermediate function in the call chain check for error.  It is much
easier to fix things so that the function that allocates also frees,
while the call chain leaves the caller's data intact.  To do that,
I had to hack our JSON data structure to make it easy to protect a
portion of an arbitrary JSON tree from being freed.

* src/util/json.h (virJSONType): Name the enum.
(_virJSONValue): New field.
* src/util/json.c (virJSONValueFree): Use it to protect a portion
of an array.
* src/qemu/qemu_monitor_json.c (qemuMonitorJSONTransaction): Avoid
freeing caller's data.
* src/qemu/qemu_driver.c (qemuDomainSnapshotCreateDiskActive):
Free actions array on failure.

13 years agoqemu_ga: Don't overwrite errors on FSThaw
Michal Privoznik [Fri, 6 Apr 2012 10:33:48 +0000 (12:33 +0200)]
qemu_ga: Don't overwrite errors on FSThaw

We can tell qemuDomainSnapshotFSThaw if we want it to report errors or
not. However, if we don't want to and an error has been already set by
previous qemuReportError() we must keep copy of that error not just a
pointer to it. Otherwise, it get overwritten if FSThaw reports an error.

13 years agoxen config: No vfb in HVM guest configuration
Stefan Bader [Thu, 5 Apr 2012 16:44:35 +0000 (18:44 +0200)]
xen config: No vfb in HVM guest configuration

This causes an implicit vkbd device to be added which takes
6min to finally fail being initialized in the guest.

http://lists.xen.org/archives/html/xen-devel/2012-04/msg00409.html

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
13 years agotests: avoid compiler warnings
Eric Blake [Fri, 6 Apr 2012 02:04:23 +0000 (20:04 -0600)]
tests: avoid compiler warnings

gcc 4.7 warns about uninitialized struct members

* tests/testutilsqemu.c (testQemuCapsInit): Populate new members.
* tests/viruritest.c (mymain): Likewise.

13 years agotest: fix build errors with gcc 4.7.0 and -O0
Laine Stump [Thu, 5 Apr 2012 20:31:36 +0000 (16:31 -0400)]
test: fix build errors with gcc 4.7.0 and -O0

When building on Fedora 17 (which uses gcc 4.7.0) with -O0 in CFLAGS,
three of the tests failed to compile.

cputest.c and qemuxml2argvtest.c had non-static structs defined
inside the macro that was being repeatedly invoked. Due to some so-far
unidentified change in gcc, the stack space used by variables defined
inside { } is not recovered/re-used when the block ends, so all these
structs have become additive (this is the same problem worked around
in commit cf57d345b). Fortunately, these two files could be fixed with
a single line addition of "static" to the struct definition in the
macro.

virnettlscontexttest.c was a bit different, though. The problem structs
in the do/while loop of macros had non-constant initializers, so it
took a bit more work and piecemeal initialization instead of member
initialization to get things to be happy.

In an ideal world, none of these changes should be necessary, but not
knowing how long it will be until the gcc regressions are fixed, and
since the code is just as correct after this patch as before, it makes
sense to fix libvirt's build for -O0 while also reporting the gcc
problem.

13 years agovirURIParse: don't forget to copy the user part
Guido Günther [Thu, 5 Apr 2012 15:52:42 +0000 (17:52 +0200)]
virURIParse: don't forget to copy the user part

This got dropped with 300e60e15b22387dda41ed5985a9ebadfd86dd25

Cheers,
 -- Guido

13 years agotest: fix segfault in networkxml2argvtest
Laine Stump [Thu, 5 Apr 2012 07:18:33 +0000 (03:18 -0400)]
test: fix segfault in networkxml2argvtest

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

rpm builds for i686 were failing with a segfault in
networkxml2argvtest. Running under valgrind showed that a region of
memory was being referenced after it had been freed (as the result of
realloc - see the valgrind report in the BZ).

The problem (in replaceTokens() - added in commit 22ec60, meaning this
bug was in 0.9.10 and 0.9.11) was that the pointers token_start and
token_end were being computed based on the value of *buf, then *buf
was being realloc'ed (potentially moving it), then token_start and
token_end were used without recomputing them to account for movement
of *buf.

The solution is to change the code so that token_start and token_end
are offsets into *buf rather than pointers. This way there is only a
single pointer to the buffer, and nothing needs readjusting after a
realloc. (You may note that some uses of token_start/token_end didn't
need to be changed to add in "*buf +" - that's because there ended up
being a +*buf and -*buf which canceled each other out).

DV gets the credit for finding this bug and pointing out the valgrind
report.

13 years agoconf: Plug memory leaks on virDomainDiskDefParseXML
Alex Jia [Thu, 5 Apr 2012 09:12:12 +0000 (17:12 +0800)]
conf: Plug memory leaks on virDomainDiskDefParseXML

Detected by valgrind. Leaks are introduced in commit b22eaa7.

* src/conf/domain_conf.c (virDomainDiskDefParseXML): fix memory leaks.

How to reproduce?

% make && make -C tests check TESTS=qemuxml2argvtest
% cd tests && valgrind -v --leak-check=full ./qemuxml2argvtest

actual result:

==2143== 12 bytes in 2 blocks are definitely lost in loss record 74 of 179
==2143==    at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==2143==    by 0x39D90A67DD: xmlStrndup (xmlstring.c:45)
==2143==    by 0x4F5EC0: virDomainDiskDefParseXML (domain_conf.c:3438)
==2143==    by 0x502F00: virDomainDefParseXML (domain_conf.c:8304)
==2143==    by 0x505FE3: virDomainDefParseNode (domain_conf.c:9080)
==2143==    by 0x5069AE: virDomainDefParse (domain_conf.c:9030)
==2143==    by 0x41CBF4: testCompareXMLToArgvHelper (qemuxml2argvtest.c:105)
==2143==    by 0x41E5DD: virtTestRun (testutils.c:145)
==2143==    by 0x416FA3: mymain (qemuxml2argvtest.c:399)
==2143==    by 0x41DCB7: virtTestMain (testutils.c:700)
==2143==    by 0x39CF01ECDC: (below main) (libc-start.c:226)

Signed-off-by: Alex Jia <ajia@redhat.com>
13 years agoopenvz: support vzctl 3.1
Ilja Livenson [Wed, 4 Apr 2012 20:30:43 +0000 (14:30 -0600)]
openvz: support vzctl 3.1

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

Basically, openvz dropped strict version numbering (3.1 vs 3.1.0),
which caused parsing to fail.

13 years agoDon't install sysctl file on non-Linux hosts
Daniel P. Berrange [Wed, 4 Apr 2012 10:16:34 +0000 (11:16 +0100)]
Don't install sysctl file on non-Linux hosts

* configure.ac: Set WITH_SYSCTL only on Linux hosts
* daemon/Makefile.am: Conditionalize install-sysctl using WITH_SYSCTL

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Cc: Jason Helfman <jhelfman@e-e.com>
13 years agoFix parallel build in docs/ directory
Daniel P. Berrange [Wed, 4 Apr 2012 11:26:04 +0000 (12:26 +0100)]
Fix parallel build in docs/ directory

Every now & then, with parallel builds, we get a failure to
validate hvsupport.html.in.  I eventually noticed that this
is because we get 2 instances of the generator running at
once.

We already list hvsupport.html.in in BUILT_SOURCES but this
was not working. It turns out the flaw is that we were
adding deps to the 'all:' target instead of the 'all-am:'
target. BUILT_SOURCES is a dep of 'all', so any custom
targets written in Makefile.am must use 'all-am:' so that
they don't get run until BUILT_SOURCES are completely
generated

* docs/Makefile.am: s/all/all-am/

13 years agoPull in GNULIB regex module for benefit of test suite on Win32
Daniel P. Berrange [Wed, 4 Apr 2012 10:56:04 +0000 (11:56 +0100)]
Pull in GNULIB regex module for benefit of test suite on Win32

13 years agoAdd linuxNodeInfoCPUPopulate to src/libvirt_linux.syms
Daniel P. Berrange [Wed, 4 Apr 2012 10:54:27 +0000 (11:54 +0100)]
Add linuxNodeInfoCPUPopulate to src/libvirt_linux.syms

This symbol is used in the test suites

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
13 years agoFix format specifiers in test cases on Win32
Daniel P. Berrange [Thu, 29 Mar 2012 09:41:37 +0000 (10:41 +0100)]
Fix format specifiers in test cases on Win32

Some of the test suites use fprintf with format specifiers
that are not supported on Win32 and are not fixed by gnulib.

The mingw32 compiler also has trouble detecting ssize_t
correctly, complaining that 'ssize_t' does not match
'signed size_t' (which it expects for %zd). Force the
cast to size_t to avoid this problem

* tests/testutils.c, tests/testutils.h: Fix printf
  annotation on virTestResult. Use virVasprintf
  instead of vfprintf
* tests/virhashtest.c: Use VIR_WARN instead of fprintf(stderr).
  Cast to size_t to avoid mingw32 compiler bug

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
13 years agoqemu: Build activeUsbHostdevs list on process reconnect
Michal Privoznik [Mon, 26 Mar 2012 14:44:19 +0000 (16:44 +0200)]
qemu: Build activeUsbHostdevs list on process reconnect

If the daemon is restarted it will lose list of active
USB devices assigned to active domains. Therefore we need
to rebuild this list on qemuProcessReconnect().

13 years agoqemu: Delete USB devices used by domain on stop
Michal Privoznik [Mon, 26 Mar 2012 14:40:01 +0000 (16:40 +0200)]
qemu: Delete USB devices used by domain on stop

To prevent assigning one USB device to two domains,
we keep a list of assigned USB devices. On domain
startup - qemuProcessStart() - we insert devices
used by domain into the list but remove them only
on detach-device. Devices are, however, released
on qemuProcessStop() as well.

13 years agoqemu: Don't leak temporary list of USB devices
Michal Privoznik [Mon, 26 Mar 2012 14:33:58 +0000 (16:33 +0200)]
qemu: Don't leak temporary list of USB devices

and add debug message when adding USB device
to the list of active devices.

13 years agoFix initial hypervisor conditionals
Daniel P. Berrange [Tue, 3 Apr 2012 11:05:32 +0000 (12:05 +0100)]
Fix initial hypervisor conditionals

The openvz, virtualbox and vmware drivers do not run inside
libvirtd, therefore they should be grouped with the other
client side drivers

13 years agoRemove bogus xen-devel dep from libvirt-devel RPM
Daniel P. Berrange [Tue, 3 Apr 2012 11:02:49 +0000 (12:02 +0100)]
Remove bogus xen-devel dep from libvirt-devel RPM

The public libvirt API does not have any application visible
dependency on Xen libraries. The xen-devel dependency is thus
bogus

13 years agoIntroduce per-hypervisor virtual RPMs
Daniel P. Berrange [Tue, 3 Apr 2012 10:54:27 +0000 (11:54 +0100)]
Introduce per-hypervisor virtual RPMs

Introduce a set sub-RPMs, one per hypervisor, which can be used
as dependency targets by applications wishing to pull in the
full stack of packages required for a specific hypervisor. This
avoids the application needing to know what the hypervisor specific
package set is.

ie, applications should not need to know that using the libvirt
Xen hypervisor requires the 'xen' RPM - libvirt should take care
of that knowledge. All the application wants is 'libvirt-daemon-xen'

There are 5 sub-RPMs:

  libvirt-daemon-qemu - non-native TCG based emulators
  libvirt-daemon-kvm  - native KVM hypervisor
  libvirt-daemon-uml  - User Mode linux
  libvirt-daemon-xen  - Xen, either via XenD or libxl
  libvirt-daemon-lxc  - Linux native containers

When driver modules get turned on, these sub-RPMs will also
gain dependencies on the appropriate driver module .so files

13 years agoSplit config files & daemon off from main daemon RPM
Daniel P. Berrange [Tue, 3 Apr 2012 10:44:59 +0000 (11:44 +0100)]
Split config files & daemon off from main daemon RPM

Take the libvirt RPM and split it into three pieces

 - libvirt-daemon - libvirtd & other mandatory bits for its operation
 - libvirt-daemon-config-network - the virbr0 config definition
 - libvirt-daemon-config-nwfilter - the firewall config rules

For backwards compatibility with existing installs / application RPM
deps, the 'libvirt' RPM is retained, but will have a dependency on
the 3 new RPMs.

13 years agoRemove API XML files from libvirt RPM
Daniel P. Berrange [Tue, 3 Apr 2012 10:24:42 +0000 (11:24 +0100)]
Remove API XML files from libvirt RPM

The API XML files are now formally installed as part of the
libvirt-devel RPM. Thus there is no need to include them as
%doc in the main libvirt RPM

13 years agoMove all documentation into a -docs sub-RPM
Daniel P. Berrange [Tue, 3 Apr 2012 09:52:12 +0000 (10:52 +0100)]
Move all documentation into a -docs sub-RPM

Currently documentation is split between the libvirt RPM and the
libvirt-devel RPM. In the client-only build there is no libvirt
RPM, so the docs need to live elsewhere. The obvious answer is a
dedicated libvirt-docs RPM. For back-compatibility make the
libvirt-devel RPM require the libvirt-docs RPM

* libvirt.spec.in: Create separate libvirt-docs RPM

13 years agodocs: fix typo in previous patch
Eric Blake [Tue, 3 Apr 2012 15:40:04 +0000 (09:40 -0600)]
docs: fix typo in previous patch

* docs/news.html.in: Fix accidental deletion.

13 years agonews.html.in: Fix </br> void tag
Michal Privoznik [Tue, 3 Apr 2012 15:19:56 +0000 (17:19 +0200)]
news.html.in: Fix </br> void tag

Void elements should be written with slash *after* the tag name,
not before, so they are not confused with ending tags.

13 years agovirsh: Clarify escape sequence
Michal Privoznik [Tue, 3 Apr 2012 12:59:06 +0000 (14:59 +0200)]
virsh: Clarify escape sequence

Currently, we put no strains on escape sequence possibly leaving users
with console that cannot be terminated. However, not all ASCII
characters can be used as escape sequence. Only those falling in
@ - _ can be; implement and document this constraint.

13 years agoRelease of libvirt 0.9.11
Daniel Veillard [Tue, 3 Apr 2012 07:06:37 +0000 (15:06 +0800)]
Release of libvirt 0.9.11

* configure.ac docs/news.html.in libvirt.spec.in: update for the release
* po/*.po*: updated a number of languages translation including new
  indian languages and regenerated

13 years agoRevert "Refactor the libvirt RPM daemon pieces"
Daniel Veillard [Tue, 3 Apr 2012 06:26:41 +0000 (14:26 +0800)]
Revert "Refactor the libvirt RPM daemon pieces"

This reverts commit 06a0d57f5a90e408a6280dc2f9db0badeeeb78ee.

13 years agoqemu: Start nested job in qemuDomainCheckEjectableMedia
Jiri Denemark [Mon, 2 Apr 2012 13:55:08 +0000 (15:55 +0200)]
qemu: Start nested job in qemuDomainCheckEjectableMedia

Originally, qemuDomainCheckEjectableMedia was entering monitor with qemu
driver lock. Commit 2067e31bf97667eab9f111b496f5e9a44e827c5b, which I
made to fix that, revealed another issue we had (but didn't notice it
since the driver was locked): we didn't set nested job when
qemuDomainCheckEjectableMedia is called during migration. Thus the
original fix I made was wrong.

13 years agoXen: Fix <clock> handling
Philipp Hahn [Wed, 8 Feb 2012 16:32:34 +0000 (17:32 +0100)]
Xen: Fix <clock> handling

XenD-3.1 introduced managed domains. HV-domains have rtc_timeoffset
(hgd24f37b31030 from 2007-04-03), which tracks the offset between the
hypervisors clock and the domains RTC, and is persisted by XenD.
In combination with localtime=1 this had a bug until XenD-3.4
(hg5d701be7c37b from 2009-04-01) (I'm not 100% sure how that bug
manifests, but at least for me in TZ=Europe/Berlin I see the previous
offset relative to utc being applied to localtime again, which manifests
in an extra hour being added)

XenD implements the following variants for clock/@offset:
- PV domains don't have a RTC → 'localtime' | 'utc'
- <3.1: no managed domains → 'localtime' | 'utc'
- ≥3.1: the offset is tracked for HV → 'variable'
        due to the localtime=1 bug → 'localtime' | 'utc'
- ≥3.4: the offset is tracked for HV → 'variable'

Current libvirtd still thinks XenD only implements <clock offset='utc'/>
and <clock offset='localtime'/>, which is wrong, since the semantic of
'utc' and 'localtime' specifies, that the offset will be reset on
domain-restart, while with 'variable' the offset is kept. (keeping the
offset over "virsh edit" is important, since otherwise the clock might
jump, which confuses certain guest OSs)

xendConfigVersion was last incremented to 4 by the xen-folks for
xen-3.1.0. I know of no way to reliably detect the version of XenD
(user space tools), which may be different from the version of the
hypervisor (kernel) version! Because of this only the change from
'utc'/'localtime' to 'variable' in XenD-3.1 is handled, not the buggy
behaviour of XenD-3.1 until XenD-3.4.

For backward compatibility with previous versions of libvirt Xen-HV
still accepts 'utc' and 'localtime', but they are returned as 'variable'
on the next read-back from Xend to libvirt, since this is what XenD
implements: The RTC is NOT reset back to the specified time on next
restart, but the previous offset is kept.
This behaviour can be turned off by adding the additional attribute
adjustment='reset', in which case libvirt will report an error instead
of doing the conversion. The attribute can also be used as a shortcut to
offset='variable' with basis='...'.

With these changes, it is also necessary to adjust the xen tests:

"localtime = 0" is always inserted, because otherwise on updates the
value is not changed within XenD.

adjustment='reset' is inserted for all cases, since they're all <
XEND_CONFIG_VERSION_3_1_0, only 3.1 introduced persistent
rtc_timeoffset.

Some statements change their order because code was moved around.

Signed-off-by: Philipp Hahn <hahn@univention.de>
13 years agoSupport clock=variable relative to localtime
Philipp Hahn [Mon, 6 Feb 2012 13:59:16 +0000 (14:59 +0100)]
Support clock=variable relative to localtime

Since Xen 3.1 the clock=variable semantic is supported. In addition to
qemu/kvm Xen also knows about a variant where the offset is relative to
'localtime' instead of 'utc'.

Extends the libvirt structure with a flag 'basis' to specify, if the
offset is relative to 'localtime' or 'utc'.

Extends the libvirt structure with a flag 'reset' to force the reset
behaviour of 'localtime' and 'utc'; this is needed for backward
compatibility with previous versions of libvirt, since they report
incorrect XML.

Adapt the only user 'qemu' to the new name.
Extend the RelaxNG schema accordingly.
Document the new 'basis' attribute in the HTML documentation.
Adapt test for the new attribute.

Signed-off-by: Philipp Hahn <hahn@univention.de>
13 years agoFix typos and spacing in messages.
Yuri Chornoivan [Sun, 1 Apr 2012 09:23:56 +0000 (12:23 +0300)]
Fix typos and spacing in messages.

13 years agoqemu: fix memory leak in virDomainGetVcpus
Laine Stump [Mon, 2 Apr 2012 04:26:44 +0000 (00:26 -0400)]
qemu: fix memory leak in virDomainGetVcpus

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

The leak is really in virProcessInfoGetAffinity, as shown in the
valgrind output given in the above bug report - it calls CPU_ALLOC(),
but then fails to call CPU_FREE().

This leak has existed in every version of libvirt since 0.7.5.

13 years agoconf: allow fuzz in XML with cur balloon > max
Eric Blake [Fri, 30 Mar 2012 20:45:48 +0000 (14:45 -0600)]
conf: allow fuzz in XML with cur balloon > max

Commit 1b1402b introduced a regression.  Since older libvirt versions
would silently round memory up (until the previous patch), but populated
current memory based on querying the guest, it was possible to have
dumpxml show cur > max by the amount of the rounding.  For example, if
a user requested 1048570 KiB memory (just shy of 1GiB), the qemu
driver would actually run with 1048576 KiB, and libvirt 0.9.10 would
output a current that was 6KiB larger than the maximum.  Situations
where this could have an impact include, but are not limited to,
migration from old to new libvirt, managedsave in old libvirt and
start in new libvirt, snapshot creation in old libvirt and revert in
new libvirt - without this patch, the new libvirt would reject the
VM because of the rounding discrepancy.

Fix things by adding a fuzz factor, and silently clamp current down to
maximum in that case, rather than failing to reparse XML for an existing
VM.  From a practical standpoint, this has no user impact: 'virsh
dumpxml' will continue to query the running guest rather than rely on
the incoming xml, which will see the currect current value, and even if
clamping down occurs during parsing, it will be by at most the fuzz
factor of a megabyte alignment, and rounded back up when passed back to
the hypervisor.

Meanwhile, we continue to reject cur > max if the difference is beyond
the fuzz factor of nearest megabyte.  But this is not a real change in
behavior, since with 0.9.10, even though the parser allowed it, later
in the processing stream we would reject it at the qemu layer; so
rejecting it in the parser just moves error detection to a nicer place.

* src/conf/domain_conf.c (virDomainDefParseXML): Don't reject
existing XML.
Based on a report by Zhou Peng.

13 years agoqemu: reflect any memory rounding back to xml
Eric Blake [Fri, 30 Mar 2012 15:40:09 +0000 (09:40 -0600)]
qemu: reflect any memory rounding back to xml

If we round up a user's memory request, we should update the XML
to reflect the actual value in use by the VM, rather than giving
an artificially small value back to the user.

* src/qemu/qemu_command.c (qemuBuildNumaArgStr)
(qemuBuildCommandLine): Reflect rounding back to XML.

13 years agopython: improve conversion validation
Eric Blake [Fri, 30 Mar 2012 18:03:20 +0000 (12:03 -0600)]
python: improve conversion validation

Laszlo Ersek pointed out that in trying to convert a long to an
unsigned int, we used:

long long_val = ...;
if ((unsigned int)long_val == long_val)

According to C99 integer promotion rules, the if statement is
equivalent to:

(unsigned long)(unsigned int)long_val == (unsigned long)long_val

since you get an unsigned comparison if at least one side is
unsigned, using the largest rank of the two sides; but on 32-bit
platforms, where unsigned long and unsigned int are the same size,
this comparison is always true and ends up converting negative
long_val into posigive unsigned int values, rather than rejecting
the negative value as we had originally intended (python longs
are unbounded size, and we don't want to do silent modulo
arithmetic when converting to C code).

Fix this by using direct comparisons, rather than casting.

* python/typewrappers.c (libvirt_intUnwrap, libvirt_uintUnwrap)
(libvirt_ulongUnwrap, libvirt_ulonglongUnwrap): Fix conversion
checks.

13 years agoFix client only RPM build & other misc RPM problems
Daniel P. Berrange [Sat, 31 Mar 2012 11:55:41 +0000 (12:55 +0100)]
Fix client only RPM build & other misc RPM problems

* libvirt.spec.in: Remove obsolete --with-remote-pid-file arg.
  Add missing %{without_libxl} statement. Fix handling of docs
  in client only build. Put systemtap files in -client RPM
  instead of -daemon RPM
* examples/xml/nwfilter/Makefile.am: Don't install examples if
  nwfilter is disabled.

13 years agoRefactor the libvirt RPM daemon pieces
Daniel P. Berrange [Fri, 30 Mar 2012 13:14:00 +0000 (14:14 +0100)]
Refactor the libvirt RPM daemon pieces

There are a number of flaws with our packaging of the libvirtd
daemon:

 - Installing 'libvirt' does not install 'qemu-kvm' or 'xen'
   etc which are required to actually run the hypervisor in
   question
 - Installing 'libvirt' pulls in the default configuration
   files which may not be wanted & cause problems if installed
   inside a guest
 - It is not possible to explicitly required all the peices
   required to manage a specific hypervisor

This change takes the 'libvirt' RPM and and changes it thus

 - libvirt: just a virtual package with dep on libvirt-daemon,
   libvirt-daemon-config-network & libvirt-daemon-config-nwfilter
 - libvirt-daemon: the libvirt daemon and related pieces
 - libvirt-daemon-config-network: the default network config
 - libvirt-daemon-config-nwfilter: the network filter configs
 - libvirt-docs: the website HTML

We then introduce some more virtual (empty) packages

 - libvirt-daemon-qemu: Deps on libvirt-daemon & 'qemu'
 - libvirt-daemon-kvm: Deps on libvirt-daemon & 'qemu-kvm'
 - libvirt-daemon-lxc: Deps on libvirt-daemon
 - libvirt-daemon-uml: Deps on libvirt-daemon
 - libvirt-daemon-xen: Deps on libvirt-daemon & 'xen'

 - libvirt-qemu: Deps on libvirt-daemon-qemu & libvirt-daemon-config-{network,nwfilter}
 - libvirt-kvm: Deps on libvirt-daemon-kvm & libvirt-daemon-config-{network,nwfilter}
 - libvirt-lxc: Deps on libvirt-daemon-lxc & libvirt-daemon-config-{network,nwfilter}
 - libvirt-uml: Deps on libvirt-daemon-uml & libvirt-daemon-config-{network,nwfilter}
 - libvirt-xen: Deps on libvirt-daemon-xen & libvirt-daemon-config-network

My intent in the future is to turn on the driver modules by
default, at which time 'libvirt-daemon' will cease to include
any specific drivers, instead we'll get libvirt-daemon-driver-XXXX
packages for each driver. The libvirt-daemon-XXX packages will
then pull in each driver that they require.

It is recommended that applications required a locally installed
libvirtd daemon, use either 'Requires: libvirt-daemon-XXXX' or
'Requires: libvirt-XXX' and *not* "Requires: libvirt-daemon"
or 'Requires: libvirt'

* libvirt.spec.in: Refactor RPMs
* docs/packaging.html.in, docs/sitemap.html.in: Document
  new RPM split rationale

13 years agoqemu: support live change of the bridge used by a guest network device
Hendrik Schwartke [Wed, 28 Mar 2012 19:11:09 +0000 (15:11 -0400)]
qemu: support live change of the bridge used by a guest network device

This patch was created to resolve this upstream bug:

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

and is at least a partial solution to this RHEL RFE:

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

Previously the only attribute of a network device that could be
modified by virUpdateDeviceFlags() ("virsh update-device") was the
link state; attempts to change any other attribute would log an error
and fail.

This patch adds recognition of a change in bridge device name, and
supports reconnecting the guest's interface to the new device.
Standard audit logs for detaching and attaching a network device are
also generated. Although the current auditing function doesn't log the
bridge being attached to, this will later be changed in a separate
patch.

13 years agobuild: fix build on cygwin
Eric Blake [Fri, 30 Mar 2012 22:50:52 +0000 (16:50 -0600)]
build: fix build on cygwin

Regression introduced when we changed types in commit 3e2c3d8f6.

We've done this sort of cleanup before (see commit c685993d7).

* src/conf/storage_conf.c (virStoragePoolDefFormat)
(virStorageVolTargetDefFormat): Cast gid_t and uid_t.

13 years agobuild: fix mingw ssize_t, syntax check
Eric Blake [Fri, 30 Mar 2012 16:28:03 +0000 (10:28 -0600)]
build: fix mingw ssize_t, syntax check

We are so close to a release that we don't want to pull in a
gnulib submodule update and risk regressions, since there has
been a lot of other gnulib churn upstream.  However, there are
a couple of gnulib issues that are worth fixing in isolation,
by applying local patches to gnulib.

There was an upstream gnulib bug in maint.mk that rendered most
of our syntax checks ineffective (and fixing it flushed out a
minor bug in our code):
https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00194.html

There is still an upstream bug where gnulib uses the wrong type
for ssize_t on mingw; we need the fix now even though it has not
yet been accepted into gnulib:
https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00188.html

* gnulib/local/top/maint.mk.diff: Pick up upstream gnulib
maint.mk.
* gnulib/local/m4/ssize_t.m4.diff: Work around gnulib bug.
* src/libvirt.c: Remove unused header.
* cfg.mk
(exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF): Exempt
gnulib local files.

13 years agoqemu: eliminate nested switch, simplify code
Laine Stump [Wed, 28 Mar 2012 17:06:37 +0000 (13:06 -0400)]
qemu: eliminate nested switch, simplify code

qemuBuildHostNetStr had a switch-within-a-switch where both were
looking at the same variable. This was apparently to take advantage of
code common to three different cases (while also taking care of some
code that was different). However, there were only 2 lines common to
all, one of those can be eliminated by merging it into the
virAsprintfs that are in each case. On top of that, all the extra
empty cases cause Coverity complaints (because they are unreachable),
but absence of the empty cases causes a compile error due to
"enumeration value not handled in switch".

The solution is to just make each toplevel case independent, folding
in the common code to each.

13 years agoRevert "Set default name for SPICE agent channel"
Laine Stump [Fri, 30 Mar 2012 14:52:46 +0000 (10:52 -0400)]
Revert "Set default name for SPICE agent channel"

This patch reverts commit b0e2bb3. Its functionality has been replaced
by commit 3269ee6.

13 years agoqemu: set default name for SPICE agent channel when generating command
Laine Stump [Fri, 30 Mar 2012 07:16:23 +0000 (03:16 -0400)]
qemu: set default name for SPICE agent channel when generating command

commit b0e2bb33 set a default value for the SPICE agent channel by
inserting it during parsing of the channel XML. That method of setting
a default is problematic because it makes a format/parse roundtrip
unclean, and experience with setting other values as a side effect of
parsing has led to headaches (e.g. automatically setting a MAC address
in the parser when one isn't specified in the input XML).

This patch does not revert commit b0e2bb33 (it will be reverted in a
separate patch) but adds the alternate implementation of simply
inserting the default value in the appropriate place on the qemu
commandline when no value is provided.

13 years agoqemu_agent: Issue guest-sync prior to every command
Michal Privoznik [Wed, 1 Feb 2012 14:44:53 +0000 (15:44 +0100)]
qemu_agent: Issue guest-sync prior to every command

If we issue guest command and GA is not running, the issuing thread
will block endlessly. We can check for GA presence by issuing
guest-sync with unique ID (timestamp). We don't want to issue real
command as even if GA is not running, once it is started, it process
all commands written to GA socket.

13 years agovirnetdevtap: Don't check for flags in virNetDevTapCreateFlags
Michal Privoznik [Fri, 30 Mar 2012 11:37:13 +0000 (13:37 +0200)]
virnetdevtap: Don't check for flags in virNetDevTapCreateFlags

With latest gnulib we are checking even the lowest level functions
whether they check flags. Moreover, we are shadowing the real error
on system without TUNSETIFF support.