1. 06 1月, 2014 1 次提交
    • J
      Fix explicit usage of default video PCI slots · ec128e69
      Ján Tomko 提交于
      Do not leave the PCI address of the primary video card set
      to the legacy default (0000:00:02.0) if we're doing two-pass
      allocation.
      
      Since QEMU 1.6 (QEMU_CAPS_VIDEO_PRIMARY) we allow the primary
      video card to be on other slots than 0000:00:02.0 (as we use
      -device instead of -vga).
      
      However we fail to assign it an address if:
      * another device explicitly uses 0000:00:02.0 and
      * the primary video device has no address specified
      
      On the first pass, we have set the address to default, then checked
      if it's available, leaving it set even if it wasn't. This address
      got picked up by the second pass, resulting in a conflict:
      
      XML error: Attempted double use of PCI slot 0000:00:02.0
      (may need "multifunction='on'" for device on function 0)
      
      Also fix the test that was supposed to catch this.
      ec128e69
  2. 05 1月, 2014 1 次提交
    • E
      maint: improve VIR_ERR_NO_SUPPORT usage · baa72449
      Eric Blake 提交于
      We weren't very consistent in our use of VIR_ERR_NO_SUPPORT; many
      users just passed __FUNCTION__ on, while others passed "%s" to
      silence over-eager compilers that warn about __FUNCTION__ not
      containing any %.  It's nicer to route all these uses through
      a single macro, so that if we ever need to change the reporting,
      we can do it in one place.
      
      I verified that 'virsh -c test:///default qemu-monitor-command test foo'
      gives the same error message before and after this patch:
      error: this function is not supported by the connection driver: virDomainQemuMonitorCommand
      
      Note that in libvirt.c, we were inconsistent on whether virDomain*
      API used virLibConnError() (with VIR_FROM_NONE) or virLibDomainError()
      (with VIR_FROM_DOMAIN); this patch unifies these errors to all use
      VIR_FROM_NONE, on the grounds that it is unlikely that a caller
      learning that a call is unimplemented can do anything in particular
      with extra knowledge of which error domain it belongs to.
      
      One particular change to note is virDomainOpenGraphics which was
      trying to fail with VIR_ERR_NO_SUPPORT after a failed
      VIR_DRV_SUPPORTS_FEATURE check; all other places that fail a
      feature check report VIR_ERR_ARGUMENT_UNSUPPORTED.
      
      * src/util/virerror.h (virReportUnsupportedError): New macro.
      * src/libvirt-qemu.c: Use new macro.
      * src/libvirt-lxc.c: Likewise.
      * src/lxc/lxc_driver.c: Likewise.
      * src/security/security_manager.c: Likewise.
      * src/util/virinitctl.c: Likewise.
      * src/libvirt.c: Likewise.
      (virDomainOpenGraphics): Use correct error for unsupported feature.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      baa72449
  3. 04 1月, 2014 5 次提交
    • E
      maint: avoid nested public calls · 8f6c845f
      Eric Blake 提交于
      Having one API call into another is generally not good; among
      other issues, it gives confusing logs, and is not quite as
      efficient.
      
      This fixes several instances, but not all: we still have instances
      in both libvirt.c and in backend hypervisors (lxc and qemu) calling
      the public virTypedParamsGetString and friends, which dispatch
      errors immediately.  I'm not sure if it is worth trying to clean
      that up in a separate patch (such a cleanup may be easiest by
      separating the public function into a wrapper around the internal,
      then tweaking internal.h so that internal users directly use the
      internal function).
      
      * src/libvirt.c (virDomainGetUUIDString, virNetworkGetUUIDString)
      (virStoragePoolGetUUIDString, virSecretGetUUIDString)
      (virNWFilterGetUUIDString): Avoid nested public API call.
      * src/util/virtypedparam.c (virTypedParamsReplaceString): Don't
      dispatch errors here.
      (virTypedParamsGet): No need to reset errors.
      (virTypedParamsGetBoolean): Use consistent ordering.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      8f6c845f
    • D
      vmware: os x support is broken · d69415d4
      Denis Kondratenko 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1036248
      
      Incorrect usage of virAsprintf.  vmware-vmx reports version
      information to stderr, at least for OS X 10.9.1.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      d69415d4
    • E
      event: remove unneeded virObjectEventGetEventID · 344e1f51
      Eric Blake 提交于
      Any file with access to object_event_private.h also has access to
      the internals of virObjectEvent, without needing an accessor
      function.  Not to mention the accessor function was doing type
      checks that would always succeed.
      
      * src/conf/object_event_private.h (virObjectEventGetEventID): Drop.
      * src/conf/object_event.c (virObjectEventGetEventID): Drop.
      (virObjectEventDispatchMatchCallback): Simplify caller.
      * src/conf/domain_event.c (virDomainEventDispatchDefaultFunc):
      Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      344e1f51
    • E
      event: fix doc typos, and doc more public methods · 6742fb0b
      Eric Blake 提交于
      While working on events, I found a number of minor issues; I'm
      hoisting these to the front rather than doing it piecemeal in
      the patches where I first noticed bad or missing documentation.
      
      * src/conf/object_event.c: Fix grammar, document all parameters
      of public functions, wrap some long lines.
      * src/conf/object_event.h: Likewise.
      * src/conf/network_event.c: Likewise.
      * src/conf/domain_event.c: Likewise (except for the large number
      of event creation functions).
      * src/libvirt_private.cyms (conf/object_event.h): Split...
      (conf/network_event.h): ...to account for new file.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      6742fb0b
    • E
      maint: reset error on entrance to public API · f06d55da
      Eric Blake 提交于
      We document that calling any public API wipes out all prior
      libvirt errors in the same thread; but weren't obeying this
      style in a few functions.
      
      There are a couple of nested uses of virConnectRef (in lxc
      and qemu reboot paths), but they should not be affected by
      this change in semantics since there should not be any
      previous error getting nuked (a later patch will clean up
      the nested calls, along with abuse of virConnectClose on
      cleanup paths which DOES nuke errors).
      
      * src/libvirt.c (virGetVersion, virConnectRef, virDomainRef)
      (virDomainGetSecurityLabel, virDomainGetSecurityLabelList)
      (virDomainSetMetadata, virDomainGetMetadata)
      (virNodeGetSecurityModel, virNetworkRef, virInterfaceRef)
      (virStoragePoolRef, virStorageVolRef, virNodeDeviceGetName)
      (virNodeDeviceRef, virSecretRef, virStreamRef, virNWFilterRef)
      (virDomainSnapshotRef): Reset error on entrance.
      (do_open): Drop redundant error reset.
      * src/libvirt-qemu.c (virDomainQemuAgentCommand): Likewise.
      * src/libvirt-lxc.c (virDomainLxcEnterNamespace)
      (virDomainLxcEnterSecurityLabel): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      f06d55da
  4. 03 1月, 2014 5 次提交
    • E
      maint: improve error condition style in public API · ca0ea2a9
      Eric Blake 提交于
      While auditing error messages in libvirt.c, I found a couple
      instances that had not been converted to modern error styles,
      and a few places that failed to dispatch the error through
      the known-good connection.
      
      * src/libvirt.c (virDomainPinEmulator, virDomainGetDiskErrors)
      (virDomainSendKey, virDomainGetSecurityLabelList)
      (virDomainGetEmulatorPinInfo): Use typical error reporting.
      (virConnectGetCPUModelNames, virConnectRegisterCloseCallback)
      (virConnectUnregisterCloseCallback, virDomainGetUUID): Report
      error through connection.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      ca0ea2a9
    • E
      maint: split long lines in invalidArg errors · 5e3e211d
      Eric Blake 提交于
      Style only.  In particular, the message on "flags 'affect live'
      and 'affect config'" being mutually exclusive was already split
      in some instances.
      
      * src/libvirt.c: Wrap some long error messages to fit in 80 columns.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      5e3e211d
    • E
      maint: move debug statements first in public API · ff658434
      Eric Blake 提交于
      Most of our public APIs emit a debug log on entry, prior to anything
      else.  There were a few exceptions where obvious failures were not
      logged, so fix those.  When moving a debug earlier, this patch also
      makes sure to avoid any NULL dereference during the log (the APIs
      are supposed to gracefully fail if the user passes NULL for the object).
      
      However, do NOT use VIR_DEBUG prior to virInitialize, since setting
      up the error reporting can change where VIR_DEBUG output would be
      routed.  Instead add documentation to virGlobalInit, virInitialize,
      and virGetVersion that better explains initialization.
      
      * src/libvirt.c (virGetVersion, virConnectRef, virDomainRef)
      (virNetworkRef, virInterfaceRef, virStoragePoolRef)
      (virStorageVolRef, virNodeDeviceRef, virSecretRef, virStreamRef)
      (virNWFilterRef, virDomainSnapshotRef): Debug on function entry.
      * src/libvirt-lxc.c (virDomainLxcEnterNamespace)
      (virDomainLxcEnterSecurityLabel): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      ff658434
    • E
      maint: improve debug of libvirt-{qemu,lxc} apis · 13f83720
      Eric Blake 提交于
      I noticed that the virDomainQemuMonitorCommand debug output wasn't
      telling me the name of the domain it was working on.  While it was
      easy enough to determine which pointer matches the domain based on
      other log messages, it is nicer to be consistent.
      
      * src/util/viruuid.h (VIR_UUID_DEBUG): Moved here from...
      * src/libvirt.c (VIR_UUID_DEBUG): ...here.
      (VIR_ARG15, VIR_HAS_COMMA, VIR_DOMAIN_DEBUG_EXPAND)
      (VIR_DOMAIN_DEBUG_PASTE, VIR_DOMAIN_DEBUG_0, VIR_DOMAIN_DEBUG_1)
      (VIR_DOMAIN_DEBUG_2, VIR_DOMAIN_DEBUG): Move...
      * src/datatypes.h: ...here.
      * src/libvirt-qemu.c (virDomainQemuMonitorCommand)
      (virDomainQemuAgentCommand): Better debug messages.
      * src/libvirt-lxc.c (virDomainLxcOpenNamespace): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      13f83720
    • E
      maint: consistent formatting in libvirt.c · 80aed9f8
      Eric Blake 提交于
      Preliminary cleanups to make search-and-replace easier in later
      patches.  Many of these were done by grepping for (multiline)
      pattern violations, then bundled all into one patch.
      
      * src/libvirt.c: Uniform two spaces between functions, return
      type and open brace on separate line, avoid blank lines around
      open brace, label in column 1, drop redundant (), consistent
      indentation for function headers split across lines.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      80aed9f8
  5. 02 1月, 2014 6 次提交
    • E
      event: improve public API docs · c8f95fff
      Eric Blake 提交于
      Since libvirt 0.9.3, the entire virevent.c file has been a public
      API, so improve the documentation in this file.  Also, fix a
      potential core dump - it could only be triggered by bogus use of
      the API and would only affect the caller (not libvirtd), but we
      might as well be nice.
      
      * src/libvirt.c (virConnectSetKeepAlive)
      (virConnectDomainEventRegister, virConnectDomainEventRegisterAny)
      (virConnectNetworkEventRegisterAny): Document event loop requirement.
      * src/util/virevent.c (virEventAddHandle, virEventRemoveHandle)
      (virEventAddTimeout, virEventRemoveTimeout): Likewise.
      (virEventUpdateHandle, virEventUpdateTimeout): Likewise, and avoid
      core dump if caller didn't register handler.
      (virEventRunDefaultImpl): Expand example, and set up code block in
      html docs.
      (virEventRegisterImpl, virEventRegisterDefaultImpl): Document more
      on the use of the event loop.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      c8f95fff
    • E
      event: don't overwrite registration error message · cfd62c1f
      Eric Blake 提交于
      Prior to this patch, an attempt to register an event without an
      event loop started results in the vague:
      
      libvirt: Remote Driver error : adding cb to list
      
      Now it gives the much nicer:
      
      libvirt:  error : internal error: could not initialize domain event timer
      
      This also avoids hiding other reasonable error messages, such as
      attempts to register a duplicate callback or OOM errors.
      
      * src/remote/remote_driver.c (remoteConnectNetworkEventRegisterAny)
      (remoteConnectDomainEventRegister)
      (remoteConnectDomainEventRegisterAny): Preserve more detailed error.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      cfd62c1f
    • E
      tests: fix syntax in previous patch · 53e3f9e4
      Eric Blake 提交于
      'make syntax-check' wasn't happy with commit fb004207.
      
      * tests/virnetsockettest.c (checkProtocols): Typo fix.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      53e3f9e4
    • R
      aarch64: Fix sysinfo test. · 1063a0ff
      Richard W.M. Jones 提交于
      On AArch64 the kernel prints one "processor" (lower case 'p') line per
      core.  As this was missing from the test data, virSysinfo was not
      parsing any processors at all.
      
      Fix the test data so the test now passes.
      1063a0ff
    • R
    • R
  6. 01 1月, 2014 3 次提交
    • R
      aarch64: Disable -fstack-protector. · fe881ae0
      Richard W.M. Jones 提交于
      I'm using gcc-4.8.2-7.fc21.aarch64 which does not appear to support
      this option.
      fe881ae0
    • E
      maint: update to latest gnulib · a01cf01f
      Eric Blake 提交于
      'make syntax-check' wants a newer gnulib for 2014 copyright.
      
      Also, a couple of fixes for bootstrap issues reported on IRC:
      - on some older glibc systems, ./configure could deadlock due to
      a glibc malloc bug
      - on FreeBSD systems, a broken autom4te coupled with gettext
      0.18.3 prevents bootstrap; we can't work around it, but can at
      least inform the user why they have a problem
      
      And as always, portability fixes in other modules, some of which
      are used by libvirt.
      
      * .gnulib: Update to latest, in part for bootstrap improvements,
      and for the new year.
      * bootstrap: Resync to gnulib.
      * gnulib/local/m4/ssize_t.m4.diff: Regenerate.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      a01cf01f
    • E
      docs: return paragraph must be last · 16970097
      Eric Blake 提交于
      Commit eb70ceba tried to create a code block for
      libvirt-libvirt.html#virConnectGetType, but failed to note
      that our doc generator treats everything after "Returns" as
      part of the return description rather than looking for
      paragraph and code layout.  Fix some other API that also had
      generic details crammed into the return type paragraph.
      
      * src/libvirt.c (virConnectOpen, virConnectOpenReadOnly)
      (virConnectOpenAuth, virConnectListAllDomains): Fit doc pattern.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      16970097
  7. 31 12月, 2013 1 次提交
    • L
      domain: don't try to interpret <driver> as virtio config for hostdev interfaces · 3337a98a
      Laine Stump 提交于
      This resolves:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=1046337
      
      The <driver> name attribute of an interface is interpreted in two
      different ways depending on the <interface> type - if the interface is
      type='hostdev', then the driver name describes which backend to use
      for the hostdev device assignment (vfio or kvm), but if the interface
      is any emulated type *and* the model type is "virtio", then the driver
      name can be "vhost" or "qemu", telling which backend qemu should use
      to communicate with the emulated device.
      
      The problem comes when someone has defined a an interface like this
      (which is accepted by the parser as long as no <driver name='xxx'/> is
      specified):
      
          <interface type='hostdev'>
             ...
             <model type='virtio'/>
             ...
          </interface>
      
      As libvirt storing this definition in the domain's status, the driver
      name is automatically filled in with the backend that was
      automatically decided by libvirt, so it stores this in the status:
      
          <interface type='hostdev'>
             ...
             <driver name='vfio'/>
             ...
             <model type='virtio'/>
             ...
          </interface>
      
      This isn't noticed until the next time libvirtd is restarted - as it
      is reading the status of all domains, it encounters the above
      interface definition, logs an error:
      
        internal error: Unknown interface <driver name='vfio'> has been specified
      
      and fails to reload the domain status, so the domain is marked as
      inactive.
      
      The solution is to stop the parser from interpreting <driver>
      attributes as if the device was an emulated virtio device, when it is
      actually a hostdev.
      
      (Although the bug has existed since vfio support was added, it has
      just recently become more apparent because libvirt previously didn't
      automatically set the driver name for hostdev interfaces in the domain
      status to vfio/kvm as it does since commit f094aa, first appearing in
      v1.1.4.)
      3337a98a
  8. 29 12月, 2013 1 次提交
  9. 28 12月, 2013 1 次提交
  10. 25 12月, 2013 6 次提交
    • M
      virkeycode: Allow ANSI_A · 72ffbd1b
      Michal Privoznik 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1044806
      
      Currently, sending the ANSI_A keycode from os_x codepage doesn't work as
      it has a special value of 0x0. Our internal code handles that no
      different to other not defined keycodes. Hence, in order to allow it we
      must change all the undefined keycodes from 0 to -1 and adapt some code
      too.
      
        # virsh send-key guestname --codeset os_x ANSI_A
        error: invalid keycode: 'ANSI_A'
      
        # virsh send-key guestname --codeset os_x ANSI_B
        # virsh send-key guestname --codeset os_x ANSI_C
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      72ffbd1b
    • M
      lxcDomainShutdownFlags: Cleanup @flags usage · aa461933
      Michal Privoznik 提交于
      Currently, the @flags usage is a bit unclear at first sight to say the
      least. There's no need for such unclear code especially when we can
      borrow the working code from qemuDomainShutdownFlags().
      
      In addition, this fixes one bug too. If user requested both
      VIR_DOMAIN_SHUTDOWN_INITCTL and VIR_DOMAIN_SHUTDOWN_SIGNAL at the same
      time, he is basically saying: 'Use the force Luke! If initctl fails try
      sending a signal.' But with the current code we don't do that. If
      initctl fails for some reason (e.g. inability to write to /dev/initctl)
      we don't try sending any signal but fail immediately. To make things
      worse, making a domain shutdown with bare _SIGNAL was working by blind
      chance of a @rc variable being placed at correct place on the stack so
      its initial value was zero.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      aa461933
    • M
      interface: Take interface status into account when starting and destroying · 5bd7ac02
      Michal Privoznik 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=956994
      
      Currently, it is possible to start an interface that is already running:
      
       # virsh iface-start eth2
       Interface eth2 started
      
       # echo $?
       0
      
       # virsh iface-start eth2
       Interface eth2 started
      
       # echo $?
       0
      
       # virsh iface-start eth2
       Interface eth2 started
      
       # echo $?
       0
      
      Same applies for destroying a dead interface. We should not allow such
      state transitions.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      5bd7ac02
    • M
      interface: Introduce netcfInterfaceObjIsActive · 50f5468c
      Michal Privoznik 提交于
      This function barely wraps ncf_if_status() and error handling code.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      50f5468c
    • M
      event-test: Unregister close callback · f7fee15a
      Michal Privoznik 提交于
      When registering a close callback, the connection refcount is increased
      as the connection object is passed to the callback and hence we must
      prevent deleting it too soon. However, when closing the connection, the
      connection object is just unrefed. So whenever a connection with a close
      callback is closed, we end up with the connection object which has
      exactly one reference. Leaving the code as-is doesn't mean the end of
      the world as we know it, but why give a bad example?
      
      ==14531== 288 bytes in 1 blocks are still reachable in loss record 695 of 762
      ==14531==    at 0x4C2BDE4: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
      ==14531==    by 0x4E9FE09: virAllocVar (viralloc.c:558)
      ==14531==    by 0x4EDBE45: virObjectNew (virobject.c:190)
      ==14531==    by 0x4F71AAC: virGetConnect (datatypes.c:116)
      ==14531==    by 0x4F78511: do_open (libvirt.c:1136)
      ==14531==    by 0x4F7B3AC: virConnectOpenAuth (libvirt.c:1481)
      ==14531==    by 0x4011D2: main (event-test.c:499)
      
      (and other leaks tied to virGetConnect())
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      f7fee15a
    • M
      examples: Resurrect domsuspend example · e26cae6b
      Michal Privoznik 提交于
      This partially reverts 5eb4b042 and 62774afb.
      
      Rewrite the domsuspend example from scratch. This time do it right.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      e26cae6b
  11. 24 12月, 2013 5 次提交
    • D
      libxl: correctly handle affinity reset in virDomainPinVcpu[Flags] · 9375ba2a
      Dario Faggioli 提交于
      By actually removing the <vcpupin> element (from within the
      <cputune> section) from the XML, rather than jus update it with
      a fully set vcpu affinity mask.
      Signed-off-by: NDario Faggioli <dario.faggioli@citrix.com>
      Cc: Jim Fehlig <jfehlig@suse.com>
      Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>
      9375ba2a
    • D
      libxl: implement virDomainPinVcpuFlags · 520c3fbd
      Dario Faggioli 提交于
      And use it to implement libxlDomainPinVcpu(), similarly to what
      happens in the QEMU driver. This way, it is possible to both
      query and change the vcpu affinity of a persistent but not
      running domain.
      
      In face, before this patch, we have:
       # virsh list --all
        Id    Name                           State
       ----------------------------------------------------
        5     debian_32                      running
        -     fedora20_64                    shut off
       # virsh vcpupin fedora20_64 0 2-4 --current
       error: this function is not supported by the connection driver: virDomainPinVcpuFlags
      
      After (same situation as above):
       # virsh vcpupin  fedora20_64 0 2-4 --current
       # virsh vcpupin  fedora20_64 0
       VCPU: CPU Affinity
       ----------------------------------
          0: 2-4
      Signed-off-by: NDario Faggioli <dario.faggioli@citrix.com>
      Cc: Jim Fehlig <jfehlig@suse.com>
      Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>
      520c3fbd
    • D
      libxl: implement virDomainGetVcpuPinInfo · 2682d0d5
      Dario Faggioli 提交于
      So that it is possible to query vcpu related information of
      a persistent but not running domain, like it is for the QEMU
      driver.
      
      In fact, before this patch, we have:
       # virsh list --all
        Id    Name                           State
       ----------------------------------------------------
        5     debian_32                      running
        -     fedora20_64                    shut off
       # virsh vcpuinfo fedora20_64
       error: this function is not supported by the connection driver: virDomainGetVcpuPinInfo
      
      After (same situation as above, i.e., fedora20_64 not running):
       # virsh vcpuinfo fedora20_64
       VCPU:           0
       CPU:            N/A
       State:          N/A
       CPU time        N/A
       CPU Affinity:   yyyyyyyy
      
       VCPU:           1
       CPU:            N/A
       State:          N/A
       CPU time        N/A
       CPU Affinity:   yyyyyyyy
      Signed-off-by: NDario Faggioli <dario.faggioli@citrix.com>
      Cc: Jim Fehlig <jfehlig@suse.com>
      Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>
      2682d0d5
    • E
      virt-login-shell: clean up usage · 7cc3a718
      Eric Blake 提交于
      I noticed a few odd things in 'virt-login-shell --help' output.
      
      * tools/virt-login-shell.c (usage): At most one option accepted,
      drop trailing colon.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      7cc3a718
    • C
      virnettlscontexttest fails with GNUTLS 3.0.28 · 78af457e
      Cédric Bosdonnat 提交于
      On openSUSE 12.x with GNUTLS 3.0.28, virnettlscontexttest fails. It has
      been reported to work from GNUTLS 3.1.11 on Fedora 19. Changed the
      constraints on gnutls to 3.1+ for unit test cacert4req.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      78af457e
  12. 23 12月, 2013 3 次提交
    • L
      qemu: re-add hostdev interfaces to hostdev array on libvirtd restart · 8700b878
      Laine Stump 提交于
      This resolves:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1045002
      
      If a domain has an <interface type='hostdev'> or an <interface
      type='network'> where the network itself is a pool of hostdev devices,
      then libvirt will internally keep that device on both the interface
      list *and* the hostdev list for the domain. One of the places this
      comes in handy is when a new device is being added and libvirt wants
      to find a unique "alias" name for it - it just scans through the
      hostdev array and makes sure it picks a name that doesn't match the
      alias of any device in that array.
      
      However, when libvirtd was restarted, if there was an <interface
      type='network'> with the network being a hostdev pool, the device
      would not be added to the reconstructed internal hostdev array, so its
      alias would not be found during a scan of the hostdev array, thus
      attempts to add a new hostdev (or <interface type='hostdev'> or
      <interface type='network'>) would result in a message like this:
      
      internal error: unable to execute QEMU command 'device_add':
                      Duplicate ID 'hostdev0' for device
      
      This patch simply fixes the existing code in the domain XML parser
      that fixes up the hostdev array in the case of <interface
      type='hostdev'> to do the same thing in the case of <interface
      type='network'> with a hostdev network.
      
      This bug has existed since the very first addition of hostdev networks
      to libvirt (0.10.0).
      8700b878
    • L
      qemu: avoid duplicate security label restore on hostdev attach failure · c0f511ee
      Laine Stump 提交于
      This eliminates the misleading error message that was being logged
      when a vfio hostdev hotplug failed:
      
        error: unable to set user and group to '107:107' on '/dev/vfio/22':
               No such file or directory
      
      as documented in:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=1035490
      
      Commit ee414b5d (pushed as a fix for Bug 1016511 and part of Bug
      1025108) replaced the single call to
      virSecurityManagerSetHostdevLabel() in qemuDomainAttachHostDevice()
      with individual calls to that same function in each
      device-type-specific attach function (for PCI, USB, and SCSI). It also
      added a corresponding call to virSecurityManagerRestoreHostdevLabel()
      in the error handling of the device-type-specific functions, but
      forgot to remove the common call to that from
      qemuDomainAttachHostDevice() - this resulted in a duplicate call to
      virSecurityManagerRestoreHostdevLabel(), with the second occurrence
      being after (e.g.) a PCI device has already been re-attached to the
      host driver, thus destroying some of the device nodes / links that we
      then attempted to re-label (e.f. /dev/vfio/22) and generating an error
      log that obscured the original error.
      c0f511ee
    • L
      qemu: properly set MaxMemLock when hotplugging with VFIO · 6d867f72
      Laine Stump 提交于
      This resolves:
      
        https://bugzilla.redhat.com/show_bug.cgi?id=1035490
      
      virProcessSetMaxMemLock() (which is a wrapper over prlimit(3)) expects
      the memory size in bytes, but libvirt's domain definition (which was
      being used by qemuDomainAttachHostPciDevice()) stores all memory
      tuning parameters in KiB. This was being accounted for when setting
      MaxMemLock at domain startup time (so cold-plugged devices would
      work), but not for hotplug.
      
      This patch simplifies the few lines that call
      virProcessSetMemMaxLock(), and multiply the amount * 1024 so that
      we're locking the correct amount of memory.
      
      What remains a mystery to me is why hot-plug of a managed='no' device
      would succeed (at least on my system) while managed='yes' would
      fail. I guess in one case the memory was coincidentally already
      resident and in the other it wasn't.
      6d867f72
  13. 21 12月, 2013 2 次提交
    • J
      PanicCheckABIStability: Need to check for existence · d53c57b8
      John Ferlan 提交于
      Commit id '4313fead' added a call to virDomainPanicCheckABIStability()
      which did not check whether the panic device existed before making a call
      to virDomainDeviceInfoCheckABIStability() which ended up segfaulting:
      
      Thread 1 (Thread 0x7f5332837700 (LWP 10964)):
          (src=<optimized out>, dst=<optimized out>)
          at conf/domain_conf.c:13007
          (dst=<optimized out>, src=<optimized out>)
          at conf/domain_conf.c:13712
          (src=<optimized out>, dst=<optimized out>)
          at conf/domain_conf.c:14056
          (domain=domain@entry=0x7f53000057c0, vm=vm@entry=0x7f53000036d0,
           defptr=defptr@entry=0x7f5332836978, snap=snap@entry=0x7f5332836970,
           update_current=update_current@entry=0x7f5332836962, flags=flags@entry=1)
          at conf/snapshot_conf.c:1230
          (domain=0x7f53000057c0, xmlDesc=<optimized out>, flags=1)
          at qemu/qemu_driver.c:12719
          (domain=domain@entry=0x7f53000057c0, xmlDesc=0x7f53000081d0
           "<domainsnapshot>\n  <name>snap2</name>\n
           <description>new-desc</description>\n  <state>running</state>\n
           <parent>\n    <name>snap1</name>\n  </parent>\n
           <creationTime>1387487268</creationTime>\n  <memory s"..., flags=1)
          at libvirt.c:19695
      ...
      
      (gdb) up 3
      (gdb) print *other->def->dom
      $2 = {virtType = 2, id = -1, ..
      ...
        rng = 0x0, panic = 0x0, namespaceData = 0x0,...
      ...
      (gdb) print *def->dom
      $3 = {virtType = 2, id = -1, ...
      ...
        rng = 0x0, panic = 0x0, namespaceData = 0x0,...
      ...
      (gdb)
      
      Also seen using following sequence:
      
      virsh save $dom $file
      virsh save-image-edit $file
        add (or remove) a <panic/> line
        <devices>
        ...
          <panic>
            <address type='isa' iobase='0x505'/>
          </panic>
        ...
        </devices>
      d53c57b8
    • B
      libxl: fix segfault when domain create fail · b03eba13
      Bamvor Jian Zhang 提交于
      there is a segfault in libxl logging in libxl_ctx_free when domain
      create fail. because the log output handler vmessage is freed by
      xtl_logger_destroy before libxl_ctx_free in virDomainObjListRemove.
      move xtl_logger_destroy after libxl_ctx_free could fix this bug.
      Signed-off-by: NBamvor Jian Zhang <bjzhang@suse.com>
      b03eba13