]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
7 years agoqemuDomainChangeNet: Forbid changing MTU
Michal Privoznik [Thu, 8 Jun 2017 11:45:31 +0000 (13:45 +0200)]
qemuDomainChangeNet: Forbid changing MTU

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

Currently, any attempt to change MTU on an interface that is
plugged to a running domain is silently ignored. We should either
do what's asked or error out. Well, we can update the host side
of the interface, but we cannot change 'host_mtu' attribute for
the virtio-net device. Therefore we have to error out.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Laine Stump <laine@laine.org>
7 years agoqemu: Set iface MTU on hotplug
Michal Privoznik [Thu, 8 Jun 2017 08:14:36 +0000 (10:14 +0200)]
qemu: Set iface MTU on hotplug

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

While implementing MTU (572eda12ad and friends), I've forgotten
to actually set MTU on the host NIC in case of hotplug. We
correctly tell qemu on the monitor what the MTU should be, but we
are not actually setting it on the host NIC.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Laine Stump <laine@laine.org>
7 years agoqemu: format virtio-related options on the command line
Ján Tomko [Wed, 24 May 2017 15:09:12 +0000 (17:09 +0200)]
qemu: format virtio-related options on the command line

Format iommu_platform= and ats= for virtio devices.

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemuxml2argvtest: add virtio-options test case
Ján Tomko [Wed, 24 May 2017 15:09:46 +0000 (17:09 +0200)]
qemuxml2argvtest: add virtio-options test case

Add a test case to demonstrate the addition of new command line options

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoAdd virtio-related options to input devices
Ján Tomko [Mon, 8 Aug 2016 13:42:18 +0000 (15:42 +0200)]
Add virtio-related options to input devices

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoAdd virtio-related options to video
Ján Tomko [Mon, 6 Jun 2016 14:51:31 +0000 (16:51 +0200)]
Add virtio-related options to video

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoAdd virtio-related options to rng devices
Ján Tomko [Mon, 6 Jun 2016 15:01:56 +0000 (17:01 +0200)]
Add virtio-related options to rng devices

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoAdd virtio-related options to filesystems
Ján Tomko [Mon, 6 Jun 2016 14:50:57 +0000 (16:50 +0200)]
Add virtio-related options to filesystems

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoAdd virtio-related options to controllers
Ján Tomko [Mon, 6 Jun 2016 14:50:22 +0000 (16:50 +0200)]
Add virtio-related options to controllers

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoAdd virtio-related options to disks
Ján Tomko [Mon, 6 Jun 2016 14:49:17 +0000 (16:49 +0200)]
Add virtio-related options to disks

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoadd virtio-related options to memballoon
Ján Tomko [Wed, 24 May 2017 14:47:28 +0000 (16:47 +0200)]
add virtio-related options to memballoon

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoAdd virtio-related options to interfaces
Ján Tomko [Wed, 24 May 2017 14:44:44 +0000 (16:44 +0200)]
Add virtio-related options to interfaces

<interface type='user'>
  <mac address='52:54:56:5a:5c:5e'/>
  <model type='virtio'/>
  <driver iommu='on' ats='on'/>
</interface>

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoconf: use a leading space in virDomainVirtioNetDriverFormat
Ján Tomko [Wed, 7 Jun 2017 18:50:39 +0000 (20:50 +0200)]
conf: use a leading space in virDomainVirtioNetDriverFormat

Instead of formatting a space after every option.

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemuxml2xmltest: add virtio-options test
Ján Tomko [Wed, 24 May 2017 14:47:21 +0000 (16:47 +0200)]
qemuxml2xmltest: add virtio-options test

Add a test case with all the virtio devices we know to demonstrate
the addition of new options.

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: format device-iotlb on intel-iommu command line
Ján Tomko [Wed, 3 May 2017 15:18:47 +0000 (17:18 +0200)]
qemu: format device-iotlb on intel-iommu command line

Format the device-iotlb attribute.

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoconf: add iotlb attribute to iommu
Ján Tomko [Wed, 3 May 2017 15:07:55 +0000 (17:07 +0200)]
conf: add iotlb attribute to iommu

Add a new iotlb attribute to the iommu device
to control the device IOTLB support for intel-iommu.

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

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agovirNetDevOpenvswitchGetVhostuserIfname: Fix off by one error
Michal Privoznik [Thu, 8 Jun 2017 12:58:22 +0000 (14:58 +0200)]
virNetDevOpenvswitchGetVhostuserIfname: Fix off by one error

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

We try to get the last element of the passed path by calling
strrch(path, '/'). However, the pointer that strrchr() returns
points at the slash, We want string that starts right after that.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agoqemu: Query for vhostuser iface names at runtime
Michal Privoznik [Wed, 7 Jun 2017 13:43:58 +0000 (15:43 +0200)]
qemu: Query for vhostuser iface names at runtime

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

Currently, we are querying for vhostuser interface name in post
parse callback. At that time interface might not yet exist.
However, it has to exist when starting domain. Therefore it makes
more sense to query its name at that point. This partially
reverts 57b5e27.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agovirDomainControllerDefFormat: do not mix attributes and subelements
Ján Tomko [Tue, 6 Jun 2017 11:12:05 +0000 (13:12 +0200)]
virDomainControllerDefFormat: do not mix attributes and subelements

Move out the PCI controller's subelements formatting out of the switch
handling attributes. This removes the need for a few bool variables.

7 years agoconf: eliminate monster condition in virDomainControllerDefFormat
Ján Tomko [Fri, 26 May 2017 16:13:59 +0000 (18:13 +0200)]
conf: eliminate monster condition in virDomainControllerDefFormat

Move most of the subelement formatting out of the giant if.

7 years agovirNetClientStreamQueuePacket: Set st->incomingEOF on the end of stream
Michal Privoznik [Tue, 6 Jun 2017 12:45:55 +0000 (14:45 +0200)]
virNetClientStreamQueuePacket: Set st->incomingEOF on the end of stream

While reworking client side of streams, I had to postpone payload
decoding so that stream holes and stream data can be
distinguished in virNetClientStreamRecvPacket. That's merely what
18944b7aea46d does. However, I accidentally removed one important
bit: when server sends us an empty STREAM packet (with no
payload) - meaning end of stream - st->incomingEOF flag needs to
be set. It used to be before I touched the code. After I removed
it, virNetClientStreamRecvPacket will try to fetch more data from
the stream, but it will never come.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
7 years agovirDomainNetDefParseXML: Fix typo
Michal Privoznik [Wed, 7 Jun 2017 15:52:40 +0000 (17:52 +0200)]
virDomainNetDefParseXML: Fix typo

In 9cb891141c we've introduced some logic to clearing suggested
macvtap/macvlan ifnames. The logic consists of comparing ifname
string with strings that libvirt would generate. However, due to
a typo only VIR_NET_GENERATED_MACVTAP_PREFIX was compared. Twice.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agodocs: correct improper information about domain states in virsh manpage
Laine Stump [Tue, 6 Jun 2017 16:07:49 +0000 (12:07 -0400)]
docs: correct improper information about domain states in virsh manpage

Commit 24d4a0a1f removed the non-existent "dying" state from the list
of possible domain states given in the virsh manpage, but didn't
correct the count of states from 8 down to 7. This patch fixes that
mismatch by completely removing any reference to the exact number of
states (thus preventing a potential future mismatch), while wording
the sentence in a more readable/truthful manner.

7 years agoqemu: Fix serial stub console allocation
Erik Skultety [Mon, 29 May 2017 10:58:34 +0000 (12:58 +0200)]
qemu: Fix serial stub console allocation

When adding the aliased serial stub console, the structure wasn't
properly allocated (VIR_ALLOC instead of virDomainChrDefNew) which then
resulted in SIGSEGV in virDomainChrSourceIsEqual during a serial device
coldplug.

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

Signed-off-by: Erik Skultety <eskultet@redhat.com>
7 years agoqemu: Use updated CPU when starting QEMU if possible
Jiri Denemark [Wed, 31 May 2017 10:34:10 +0000 (12:34 +0200)]
qemu: Use updated CPU when starting QEMU if possible

If QEMU is new enough and we have the live updated CPU definition in
either save or migration cookie, we can use it to enforce ABI. The
original guest CPU from domain XML will be stored in private data.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Store updated CPU in save cookie
Jiri Denemark [Fri, 2 Jun 2017 20:52:03 +0000 (22:52 +0200)]
qemu: Store updated CPU in save cookie

Since the domain XML saved in a snapshot or saved image uses the
original guest CPU definition but we still want to enforce ABI when
restoring the domain if libvirt and QEMU are new enough, we save the
live updated CPU definition in a save cookie.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Send updated CPU in migration cookie
Jiri Denemark [Fri, 26 May 2017 15:06:56 +0000 (17:06 +0200)]
qemu: Send updated CPU in migration cookie

Since the domain XML send during migration uses the original guest CPU
definition but we still want the destination to enforce ABI if it is new
enough, we send the live updated CPU definition in a migration cookie.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Always send persistent XML during migration
Jiri Denemark [Wed, 7 Jun 2017 07:35:25 +0000 (09:35 +0200)]
qemu: Always send persistent XML during migration

When persistent migration of a transient domain is requested but no
custom XML is passed to the migration API we would just let the
destination daemon make a persistent definition from the live definition
itself. This is not a problem now, but once the destination daemon
starts replacing the original CPU definition with the one from migration
cookie before starting a domain, it would need to add more ugly hacks to
reverse the operation. Let's just always send the persistent definition
in the cookie to make things a bit cleaner.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Report the original CPU in migratable xml
Jiri Denemark [Fri, 19 May 2017 13:20:31 +0000 (15:20 +0200)]
qemu: Report the original CPU in migratable xml

The destination host may not be able to start a domain using the live
updated CPU definition because either libvirt or QEMU may not be new
enough. Thus we need to send the original guest CPU definition.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Remember CPU def from domain start
Jiri Denemark [Tue, 16 May 2017 11:26:54 +0000 (13:26 +0200)]
qemu: Remember CPU def from domain start

When starting a domain we update the guest CPU definition to match what
QEMU actually provided (since it is allowed to add or removed some
features unless check='full' is specified). Let's store the original CPU
in domain private data so that we can use it to provide a backward
compatible domain XML.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Store save cookie in save images and snapshots
Jiri Denemark [Thu, 25 May 2017 08:20:57 +0000 (10:20 +0200)]
qemu: Store save cookie in save images and snapshots

The following patches will add an actual content in the cookie and use
the data when restoring a domain.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Implement virSaveCookie object and callbacks
Jiri Denemark [Fri, 2 Jun 2017 20:50:18 +0000 (22:50 +0200)]
qemu: Implement virSaveCookie object and callbacks

This patch implements a new save cookie object and callbacks for qemu
driver. The actual useful content will be added in the object later.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoconf: Add save cookie callbacks to xmlopt
Jiri Denemark [Thu, 1 Jun 2017 22:44:46 +0000 (00:44 +0200)]
conf: Add save cookie callbacks to xmlopt

virDomainXMLOption gains driver specific callbacks for parsing and
formatting save cookies.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoconf: Introduce virSaveCookie
Jiri Denemark [Thu, 1 Jun 2017 22:44:06 +0000 (00:44 +0200)]
conf: Introduce virSaveCookie

The code will be used by snapshots and domain save/restore code to store
additional data for a saved running domain. It is analogous to migration
cookies, but simple and one way only.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Introduce virQEMUSaveData structure
Jiri Denemark [Tue, 6 Jun 2017 22:08:25 +0000 (00:08 +0200)]
qemu: Introduce virQEMUSaveData structure

The new structure encapsulates save image header and associated data
(domain XML).

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Refactor qemuDomainSaveHeader
Jiri Denemark [Tue, 6 Jun 2017 21:41:57 +0000 (23:41 +0200)]
qemu: Refactor qemuDomainSaveHeader

The function is now called virQEMUSaveDataWrite and it is now doing
everything it needs to save both the save image header and domain XML to
a file. Be it a new file or an existing file in which a user wants to
change the domain XML.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Introduce virQEMUSaveDataFinish
Jiri Denemark [Tue, 6 Jun 2017 20:49:11 +0000 (22:49 +0200)]
qemu: Introduce virQEMUSaveDataFinish

The function is supposed to update the save image header after a
successful migration to the save image file.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Introduce virQEMUSaveData{New,Free}
Jiri Denemark [Tue, 6 Jun 2017 20:29:24 +0000 (22:29 +0200)]
qemu: Introduce virQEMUSaveData{New,Free}

This is a preparation for creating a new virQEMUSaveData structure which
will encapsulate all save image header data.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Fix memory leaks in qemuDomainSaveImageOpen
Jiri Denemark [Tue, 6 Jun 2017 20:27:57 +0000 (22:27 +0200)]
qemu: Fix memory leaks in qemuDomainSaveImageOpen

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Rename xml_len in virQEMUSaveHeader as data_len
Jiri Denemark [Tue, 23 May 2017 18:32:07 +0000 (20:32 +0200)]
qemu: Rename xml_len in virQEMUSaveHeader as data_len

Since virQEMUSaveHeader will be followed by more than just domain XML,
the old name would be confusing as it was designed to describe the
length of all data following the save image header.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoconf: Pass xmlopt to virDomainSnapshotDefFormat
Jiri Denemark [Thu, 1 Jun 2017 22:27:33 +0000 (00:27 +0200)]
conf: Pass xmlopt to virDomainSnapshotDefFormat

This will be used later when a save cookie will become part of the
snapshot XML using new driver specific parser/formatter functions.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoconf: Make virDomainSnapshotDefFormat easier to read
Jiri Denemark [Thu, 1 Jun 2017 13:57:55 +0000 (15:57 +0200)]
conf: Make virDomainSnapshotDefFormat easier to read

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoconf: Refactor virCPUDefParseXML
Jiri Denemark [Tue, 23 May 2017 07:29:36 +0000 (09:29 +0200)]
conf: Refactor virCPUDefParseXML

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoconf: Make error reporting in virCPUDefIsEqual optional
Jiri Denemark [Wed, 31 May 2017 14:42:42 +0000 (16:42 +0200)]
conf: Make error reporting in virCPUDefIsEqual optional

The function will be used in paths where mismatching CPU defs are not an
error.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 years agovirsh: Add support for VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB
Peter Krempa [Tue, 6 Jun 2017 13:32:49 +0000 (15:32 +0200)]
virsh: Add support for VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB

Allow using the new flag with virsh.

7 years agoqemu: Conditionally allow block-copy for persistent domains
Peter Krempa [Tue, 6 Jun 2017 13:13:51 +0000 (15:13 +0200)]
qemu: Conditionally allow block-copy for persistent domains

Allow starting the block-copy job for a persistent domain if a user
declares by using a flag that the job will not be recovered if the VM is
switched off while the job is active.

This allows to use the block-copy job with persistent VMs under the same
conditions as would apply to transient domains.

7 years agoqemu: Set operation on completed migration job
Jiri Denemark [Wed, 31 May 2017 08:08:28 +0000 (10:08 +0200)]
qemu: Set operation on completed migration job

Without this patch libvirt would just report the operation of a
completed job as "unknown" instead of "incoming migration".

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

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7 years agointerface: Convert virInterfaceObj to use virObjectLockable
John Ferlan [Mon, 15 May 2017 18:31:44 +0000 (14:31 -0400)]
interface: Convert virInterfaceObj to use virObjectLockable

Now that we have a bit more control, let's convert our object into
a lockable object and let that magic handle the create and lock/unlock.

This commit also introduces virInterfaceObjEndAPI in order to handle the
lock unlock and object unref in one call for consumers returning a NULL
obj upon return. This removes the need for virInterfaceObj{Lock|Unlock}
external API's.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Consume @def in virInterfaceObjNew
John Ferlan [Fri, 2 Jun 2017 11:56:59 +0000 (07:56 -0400)]
interface: Consume @def in virInterfaceObjNew

Move the consumption of @def in virInterfaceObjNew and then handle that
in the error path of virInterfaceObjListAssignDef since it's caller expects
to need to free @def when NULL is returned and so would virInterfaceObjFree.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Introduce virInterfaceObjNew
John Ferlan [Thu, 20 Apr 2017 14:40:22 +0000 (10:40 -0400)]
interface: Introduce virInterfaceObjNew

Create/use a helper to perform the object allocation

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agoqemu: process: Save vcpu ordering information on reconnect
Peter Krempa [Tue, 6 Jun 2017 05:39:25 +0000 (07:39 +0200)]
qemu: process: Save vcpu ordering information on reconnect

vCPU ordering information would not be updated if a vCPU emerged or
disappeared during the time libvirtd is not running. This allowed to
create invalid configuration like:

    [...]
    <vcpu id='56' enabled='yes' hotpluggable='yes' order='57'/>
    <vcpu id='57' enabled='yes' hotpluggable='yes' order='58'/>
    <vcpu id='58' enabled='yes' hotpluggable='yes'/>

Call the function that records the information on reconnect.

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

7 years agovirFDStreamThread: Make sure we won't exceed @length
Michal Privoznik [Mon, 5 Jun 2017 11:22:23 +0000 (13:22 +0200)]
virFDStreamThread: Make sure we won't exceed @length

There's a problem with current streams after I switched them from
iohelper to thread implementation. Previously, iohelper made sure
not to exceed specified @length resulting in the pipe EOF
appearing at the exact right moment (the pipe was used to tunnel
the data from the iohelper to the daemon). Anyway, when switching
to thread I had to write the I/O code from scratch. Whilst doing
that I took an inspiration from the iohelper code, but since the
usage of pipe switched to slightly different meaning, there was
no 1:1 relationship between the codes.

Moreover, after introducing VIR_FDSTREAM_MSG_TYPE_HOLE, the
condition that should made sure we won't exceed @length was
completely wrong.

The fix is to:

a) account for holes for @length
b) cap not just data sections but holes too (if @length would be
exceeded)

For this purpose, the condition needs to be brought closer to the
code that handles holes and data sections.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agoconf: only format <controller> as a pair tag when needed
Ján Tomko [Fri, 26 May 2017 16:10:11 +0000 (18:10 +0200)]
conf: only format <controller> as a pair tag when needed

Make the decision based on the usage of childBuf buffer.

This fixes the oddity in the test case introduced by commit c1c4d0d
where we would format an empty pair tag.

7 years agoconf: use a separate buffer for the subelements of <controller>
Ján Tomko [Fri, 26 May 2017 15:53:54 +0000 (17:53 +0200)]
conf: use a separate buffer for the subelements of <controller>

We need to decide whether to format <controller> as a single tag
or if it has any subelements.

Rewrite the function to use a separate buffer for subelements,
to make adding new options easier.

7 years agoconf: introduce virDomainControllerDriverFormat
Ján Tomko [Fri, 26 May 2017 15:47:50 +0000 (17:47 +0200)]
conf: introduce virDomainControllerDriverFormat

Split out formatting the <driver> subelement of <controller>
to make adding new options easier.

7 years agoaudit: Fix the output message for shmem
Martin Kletzander [Thu, 11 May 2017 08:10:54 +0000 (10:10 +0200)]
audit: Fix the output message for shmem

After some discussion on and off the linux-audit mailing list, we
should use different fields for the audit messages.

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

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
7 years agoremote: Consolidate remoteStream{Abort,Finish} functions
Martin Kletzander [Wed, 31 May 2017 14:58:49 +0000 (16:58 +0200)]
remote: Consolidate remoteStream{Abort,Finish} functions

They do the same thing with only one difference.  Let's put them
together (like we already do with virFDStreamCloseInt) so that future
changes don't miss one of the implementations.  Also to clean up the
code.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
7 years agobhyveargv2xmltest: Fix call of virDomainDefCheckABIStability
Michal Privoznik [Mon, 5 Jun 2017 09:46:02 +0000 (11:46 +0200)]
bhyveargv2xmltest: Fix call of virDomainDefCheckABIStability

In 4f0aeed I've expanded the list of arguments for
virDomainDefCheckABIStability() but I forgot to fix
bhyveargv2xmltest.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agoReset the whole stack in testutils
Martin Kletzander [Mon, 5 Jun 2017 07:38:31 +0000 (09:38 +0200)]
Reset the whole stack in testutils

The memset() was resetting only 30 bytes in the array (size of the
array), but it is array of pointers.  Since it is a static array,
let's just reset it by its size.

Found by gcc-7.1:

  testutils.c: In function 'virTestRun':
  testutils.c:243:13: error: 'memset' used with length equal to number
  of elements without multiplication by element size [-Werror=memset-elt-size]
    memset(testAllocStack, 0, ARRAY_CARDINALITY(testAllocStack));
    ^~~~~~

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
7 years agoExpose resource control capabilities for caches
Eli Qiao [Wed, 17 May 2017 09:08:33 +0000 (17:08 +0800)]
Expose resource control capabilities for caches

Add cache resource control into capabilities for CAT without CDP:

  <cache>
    <bank id='0' level='3' type='unified' size='15360' unit='KiB' cpus='0-5'>
      <control min='768' unit='KiB' scope='both' max_allocation='4'/>
    </bank>
  </cache>

and with CDP:

  <cache>
    <bank id='0' level='3' type='unified' size='15360' unit='KiB' cpus='0-5'>
      <control min='768' unit='KiB' scope='code' max_allocation='4'/>
      <control min='768' unit='KiB' scope='data' max_allocation='4'/>
    </bank>
  </cache>

Also add new test cases for vircaps2xmltest.

Signed-off-by: Eli Qiao <liyong.qiao@intel.com>
7 years agovirQEMUDriverDomainABIStability: Check for memoryBacking
Michal Privoznik [Fri, 19 May 2017 14:46:27 +0000 (16:46 +0200)]
virQEMUDriverDomainABIStability: Check for memoryBacking

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

Problem is, qemu fails to load guest memory image if these
attribute change on migration/restore from an image.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agovirDomainXMLOption: Introduce virDomainABIStabilityDomain
Michal Privoznik [Fri, 19 May 2017 13:07:15 +0000 (15:07 +0200)]
virDomainXMLOption: Introduce virDomainABIStabilityDomain

While checking for ABI stability, drivers might pose additional
checks that are not valid for general case. For instance, qemu
driver might check some memory backing attributes because of how
qemu works. But those attributes may work well in other drivers.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agonodedev: Remove privateData from virNodeDeviceObj
John Ferlan [Fri, 12 May 2017 17:07:43 +0000 (13:07 -0400)]
nodedev: Remove privateData from virNodeDeviceObj

It was only ever used in node_device_hal.c which really never used it
anyway since the NODE_DEV_UDI was never referenced.  Remove free_udi()
and @privData as well as the references to obj->privateData & obj->privateFree.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agonodedev: Introduce virNodeDeviceObjGetDef
John Ferlan [Sat, 3 Jun 2017 11:36:01 +0000 (07:36 -0400)]
nodedev: Introduce virNodeDeviceObjGetDef

In preparation for privatizing the virNodeDeviceObj - create an accessor
for the @def field and then use it for various callers.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agonodedev: Create helper for finding by name in driver
John Ferlan [Fri, 12 May 2017 16:24:56 +0000 (12:24 -0400)]
nodedev: Create helper for finding by name in driver

Create nodeDeviceObjFindByName which will perform the corresponding
virNodeDeviceObjFindByName call for various node_device_driver callers
rather than having the same repetitive code.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agonodedev: Alter param to nodeDeviceUpdateCaps
John Ferlan [Fri, 12 May 2017 20:06:47 +0000 (16:06 -0400)]
nodedev: Alter param to nodeDeviceUpdateCaps

Rather than taking an virNodeDeviceObjPtr and dereffing the obj->def,
just pass the def.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agonodedev: Alter param to nodeDeviceUpdateDriverName
John Ferlan [Fri, 12 May 2017 20:04:19 +0000 (16:04 -0400)]
nodedev: Alter param to nodeDeviceUpdateDriverName

Rather than taking an virNodeDeviceObjPtr and dereffing the obj->def,
just pass the def.

Also check for an error in the function to have the calling function goto
cleanup on error.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agonodedev: Cleanup driver code and prototypes
John Ferlan [Fri, 12 May 2017 15:49:18 +0000 (11:49 -0400)]
nodedev: Cleanup driver code and prototypes

Alter the node_device_driver source and prototypes to follow more
recent code style guidelines w/r/t spacing between functions, format
of the function, and the prototype definitions.

While the new names for nodeDeviceUpdateCaps, nodeDeviceUpdateDriverName,
and nodeDeviceGetTime don't follow exactly w/r/t a "vir" prefix, they
do follow other driver nomenclature style.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agonodedev: Use switch for virNodeDeviceObjHasCap and virNodeDeviceCapMatch
John Ferlan [Thu, 25 May 2017 19:43:45 +0000 (15:43 -0400)]
nodedev: Use switch for virNodeDeviceObjHasCap and virNodeDeviceCapMatch

In order to ensure that whenever something is added to virNodeDevCapType
that both functions are considered for processing of a new capability,
change the if-then-else construct into a switch statement.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agonodedev: Need to check for vport capable scsi_host for vHBA searches
John Ferlan [Tue, 16 May 2017 17:21:32 +0000 (13:21 -0400)]
nodedev: Need to check for vport capable scsi_host for vHBA searches

When searching for an NPIV capable fc_host, not only does there need to
be an "fc_host" capability with the specified wwnn/wwpn or fabric_wwn,
but that scsi_host must be vport capable; otherwise, one could end up
picking an exising vHBA/NPIV which wouldn't be good.

Currently not a problem since scsi_hosts are in an as found forward linked
list and the vport capable scsi_hosts will always appear before a vHBA by
definition. However, in the near term future a hash table will be used to
lookup the devices and that could cause problems for these algorithms.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Clean up virInterfaceObjListFindByMACString
John Ferlan [Sat, 15 Apr 2017 11:08:01 +0000 (07:08 -0400)]
interface: Clean up virInterfaceObjListFindByMACString

Alter the algorithm to return a list of matching names rather than a
list of match virInterfaceObjPtr which are then just dereferenced
extracting the def->name and def->mac. Since the def->mac would be
the same as the passed @mac, just return a list of names and as long
as there's only one, extract the [0] entry from the passed list.
Also alter the error message on failure to include the mac that wasn't
found.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Rename some virInterfaceObj* API's
John Ferlan [Fri, 14 Apr 2017 20:49:48 +0000 (16:49 -0400)]
interface: Rename some virInterfaceObj* API's

Prefix should have been virInterfaceObjList since the API is operating
on the list of interfaces.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Make _virInterfaceObjList struct private
John Ferlan [Fri, 14 Apr 2017 19:45:27 +0000 (15:45 -0400)]
interface: Make _virInterfaceObjList struct private

Move the structs into virinterfaceobj.c, create necessary accessors, and
initializers.

This also includes reworking virInterfaceObjListClone to handle receiving
a source interfaces list pointer, creating the destination interfaces object,
and copying everything from source into dest.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Make _virInterfaceObj struct private
John Ferlan [Tue, 25 Apr 2017 21:45:02 +0000 (17:45 -0400)]
interface: Make _virInterfaceObj struct private

Move the struct into virinterfaceobj.c, create necessary accessors, and
initializers.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Use virInterfaceDefPtr rather than deref from virInterfaceObjPtr
John Ferlan [Wed, 19 Apr 2017 02:32:17 +0000 (22:32 -0400)]
interface: Use virInterfaceDefPtr rather than deref from virInterfaceObjPtr

We're about to make the obj much more private, so make it easier to
see future changes which will require accessors for the obj->def

This also includes modifying some interfaces->objs[i]->X references to be
obj = interfaces->objs[i]; and then def = obj->def

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Remove some unnecessary goto's for Interface tests
John Ferlan [Fri, 14 Apr 2017 13:05:21 +0000 (09:05 -0400)]
interface: Remove some unnecessary goto's for Interface tests

Rather than using goto cleanup on object find failure and having cleanup
need to check if the obj was present before unlocking, just return immediately.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agointerface: Consistently use 'obj' for a virInterfaceObjPtr
John Ferlan [Wed, 19 Apr 2017 02:29:44 +0000 (22:29 -0400)]
interface: Consistently use 'obj' for a virInterfaceObjPtr

Alter variable names to be obj rather than 'iface' and/or 'obj'.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agodaemon: Don't initialize SASL context if not necessary
Peter Krempa [Wed, 31 May 2017 07:12:09 +0000 (09:12 +0200)]
daemon: Don't initialize SASL context if not necessary

SASL context would be initialized even if the corresponding TCP or TLS
sockets are not enabled.

fe772f24a68 attempted to fix the symptom by commenting out the settings,
but that did not fix the root cause. 3c647ee4bbb later reverted those
changes so that the more secure algorithm is used.

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

7 years agoqemu: Don't error out if allocation info can't be queried
Peter Krempa [Mon, 22 May 2017 15:44:00 +0000 (17:44 +0200)]
qemu: Don't error out if allocation info can't be queried

qemuDomainGetBlockInfo would error out if qemu did not report
'wr_highest_offset'. This usually does not happen, but can happen
briefly during active layer block commit. There's no need to report the
error, we can simply report that the disk is fully alocated at that
point.

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

7 years agoutil: remove dead code inside virstoragefile
Julio Faracco [Fri, 2 Jun 2017 01:56:09 +0000 (22:56 -0300)]
util: remove dead code inside virstoragefile

The host address or the socket path have already been checked at the
begining of the function virStorageSourceParseNBDColonString(). So,
when the parameter is not a unix socket, there is no reason to check
the address again because if it does not exists, the logic will fail
in the first IF conditional.

Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
7 years agoutil: fix wrong comparison inside virStoragePermsCopy()
Julio Faracco [Fri, 2 Jun 2017 01:58:06 +0000 (22:58 -0300)]
util: fix wrong comparison inside virStoragePermsCopy()

VIR_STRDUP returns -1 if the string copy was not successful. So, the
current comparison/logic is throwing an error when VIR_STRDUP() returns
1. Only when source is NULL, it is considering as a success which is
not right.

Signed-off-by: Julio Faracco <jcfaracco@gmail.com>
7 years agoPost-release version bump to 3.5.0
Peter Krempa [Fri, 2 Jun 2017 07:27:34 +0000 (09:27 +0200)]
Post-release version bump to 3.5.0

7 years agoRelease of libvirt-3.4.0
Daniel Veillard [Fri, 2 Jun 2017 07:06:20 +0000 (09:06 +0200)]
Release of libvirt-3.4.0

* docs/news.xml: updated for the release
* po/*.po*: regenerated

7 years agoFix closing XML element in news file
Daniel P. Berrange [Thu, 1 Jun 2017 09:34:21 +0000 (10:34 +0100)]
Fix closing XML element in news file

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
7 years agonews: Minor cleanups
Martin Kletzander [Thu, 1 Jun 2017 08:36:24 +0000 (10:36 +0200)]
news: Minor cleanups

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
7 years agoAdd some news items for the 3.4.0 release
Martin Kletzander [Wed, 31 May 2017 14:02:23 +0000 (16:02 +0200)]
Add some news items for the 3.4.0 release

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
7 years agoqemu: mkdir memory_backing_dir on startup
Michal Privoznik [Sat, 27 May 2017 10:24:30 +0000 (12:24 +0200)]
qemu: mkdir memory_backing_dir on startup

In 48d9e6cdcc and friends we've allowed users to back guest
memory by a file inside the host. And in order to keep things
manageable the memory_backing_dir variable was introduced to
qemu.conf to specify the directory where the files are kept.
However, libvirt's policy is that directories are created on
domain startup if they don't exist. We've missed this one.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agoudev: Fix build on older platforms
Erik Skultety [Wed, 31 May 2017 09:31:29 +0000 (11:31 +0200)]
udev: Fix build on older platforms

Caused by commit @d1eea6c1 due to the missing symbol on older platforms.

Signed-off-by: Erik Skultety <eskultet@redhat.com>
7 years agoqemu: json: Fix daemon crash on handling domain shutdown event
Erik Skultety [Tue, 30 May 2017 08:28:18 +0000 (10:28 +0200)]
qemu: json: Fix daemon crash on handling domain shutdown event

commit a8eba5036 added further checking of the guest shutdown cause, but
this enhancement is available since qemu 2.10, causing a crash because
of a NULL pointer dereference on older qemus.

Thread 1 "libvirtd" received signal SIGSEGV, Segmentation fault.
0x00007ffff72441af in virJSONValueObjectGet (object=0x0,
                                             key=0x7fffd5ef11bf "guest")
    at util/virjson.c:769
769     if (object->type != VIR_JSON_TYPE_OBJECT)
(gdb) bt
0  in virJSONValueObjectGet
1  in virJSONValueObjectGetBoolean
2  in qemuMonitorJSONHandleShutdown
3  in qemuMonitorJSONIOProcessEvent
4  in qemuMonitorJSONIOProcessLine
5  in qemuMonitorJSONIOProcess
6  in qemuMonitorIOProcess

Signed-off-by: Erik Skultety <eskultet@redhat.com>
7 years agoutil: hostcpu: Correctly report total number of vcpus in virHostCPUGetMap
Nitesh Konkar [Thu, 25 May 2017 10:17:43 +0000 (15:47 +0530)]
util: hostcpu: Correctly report total number of vcpus in virHostCPUGetMap

Callers expect the return value to be the total number of vcpus in the
host (including offline vcpus). The refactor in c67e04e25fa58104e0fae41
broke this assumption by using virHostCPUGetOnlineBitmap which only
creates a bitmap long enough to hold the last online vcpu.

Report the full number of host vcpus by returning value from
virHostCPUGetCount().

Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
7 years agonodedev: Increase the netlink socket buffer size to the one used by udev
ning.bo [Tue, 9 May 2017 02:09:07 +0000 (10:09 +0800)]
nodedev: Increase the netlink socket buffer size to the one used by udev

When a number of SRIOV VFs (up to 128 on Intel XL710) is created:
for i in `seq 0 1`; do
  echo 63 > /sys/class/net/<interface>/device/sriov_numvfs
done

libvirtd will then report "udev_monitor_receive_device returned NULL"
error because the netlink socket buffer is not big enough (using GDB on
libudev confirmed this with ENOBUFFS) and thus some udev events were
dropped. This results in some devices being missing in the nodedev-list
output. This patch overrides the system's rmem_max limit but for that,
we need to make sure we've got root privileges.

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

Signed-off-by: ning.bo <ning.bo9@zte.com.cn>
Signed-off-by: Erik Skultety <eskultet@redhat.com>
7 years agovirCapabilitiesInitCaches: Don't leak @cpus
Michal Privoznik [Mon, 29 May 2017 08:04:36 +0000 (10:04 +0200)]
virCapabilitiesInitCaches: Don't leak @cpus

The @cpus is allocated by virFileReadValueBitmap() but never
freed:

==21274== 40 (32 direct, 8 indirect) bytes in 1 blocks are definitely lost in loss record 808 of 1,004
==21274==    at 0x4C2E080: calloc (vg_replace_malloc.c:711)
==21274==    by 0x54BA561: virAlloc (viralloc.c:144)
==21274==    by 0x54BC604: virBitmapNewEmpty (virbitmap.c:126)
==21274==    by 0x54BD059: virBitmapParseUnlimited (virbitmap.c:570)
==21274==    by 0x54EECE9: virFileReadValueBitmap (virfile.c:4113)
==21274==    by 0x5563132: virCapabilitiesInitCaches (capabilities.c:1548)
==21274==    by 0x2BB86E59: virQEMUCapsInit (qemu_capabilities.c:1132)
==21274==    by 0x2BBEC067: virQEMUDriverCreateCapabilities (qemu_conf.c:928)
==21274==    by 0x2BC3DEAA: qemuStateInitialize (qemu_driver.c:845)
==21274==    by 0x5625AAC: virStateInitialize (libvirt.c:770)
==21274==    by 0x124519: daemonRunStateInit (libvirtd.c:881)
==21274==    by 0x554C927: virThreadHelper (virthread.c:206)

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agoutil: fix virfcp build on non-Linux
Roman Bogorodskiy [Fri, 26 May 2017 16:00:51 +0000 (20:00 +0400)]
util: fix virfcp build on non-Linux

 - Include virerror.h for virReportSystemError
 - Rename stub functions to match original function names

7 years agodocs: update news.xml
Bjoern Walk [Mon, 22 May 2017 06:38:26 +0000 (08:38 +0200)]
docs: update news.xml

Mention CCW and fc_remote_port capablities in the news.xml file.

Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Signed-off-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
7 years agonode_device: introduce new capability FC_RPORT
Bjoern Walk [Mon, 22 May 2017 06:38:25 +0000 (08:38 +0200)]
node_device: introduce new capability FC_RPORT

Similar to scsi_host and fc_host, there is a relation between a
scsi_target and its transport specific fc_remote_port. Let's expose this
relation and relevant information behind it.

An example for a virsh nodedev-dumpxml:

    virsh # nodedev-dumpxml scsi_target0_0_0
    <device>
      <name>scsi_target0_0_0</name>
      <path>/sys/devices/[...]/host0/rport-0:0-0/target0:0:0</path>
      <parent>scsi_host0</parent>
      <capability type='scsi_target'>
        <target>target0:0:0</target>
        <capability type='fc_remote_port'>
          <rport>rport-0:0-0</rport>
          <wwpn>0x9d73bc45f0e21a86</wwpn>
        </capability>
      </capability>
    </device>

Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Signed-off-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
7 years agoutil: helper functions for fibre channel devices
Bjoern Walk [Mon, 22 May 2017 06:38:24 +0000 (08:38 +0200)]
util: helper functions for fibre channel devices

We will need some convenient helper functions for managing sysfs-entries
for fibre channel-backed devices. Let's implement them and make them
available in the private API.

Signed-off-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
7 years agovirsh: nodedev: ability to filter CCW capabilities
Bjoern Walk [Mon, 22 May 2017 06:38:23 +0000 (08:38 +0200)]
virsh: nodedev: ability to filter CCW capabilities

Now that the node_device driver is aware of CCW devices, let's hook up
virsh so that we can filter them properly.

Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Reviewed-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
Signed-off-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
7 years agonode_device: detect CCW devices
Bjoern Walk [Mon, 22 May 2017 06:38:22 +0000 (08:38 +0200)]
node_device: detect CCW devices

Make CCW devices available to the node_device driver. The devices are
already seen by udev so let's implement necessary code for detecting
them properly.

Topologically, CCW devices are similar to PCI devices, e.g.:

    +- ccw_0_0_1a2b
        |
        +- scsi_host0
            |
            +- scsi_target0_0_0
                |
                +- scsi_0_0_0_0

Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Signed-off-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
7 years agonode_device: Unlock obj in case of an error too
Marc Hartmayer [Mon, 22 May 2017 06:38:21 +0000 (08:38 +0200)]
node_device: Unlock obj in case of an error too

Unlock @obj in case of an error too.

Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Signed-off-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
7 years agonode_device: Use the @cap iterator variable
Marc Hartmayer [Mon, 22 May 2017 06:38:20 +0000 (08:38 +0200)]
node_device: Use the @cap iterator variable

Since the switch statement is already using the deref'd @cap variable
and the VIR_NODE_DEV_CAP_NET case uses it, the SCSI_HOST and PCI_DEV
cases may as well use it too.

Suggested-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
Signed-off-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>