1. 08 2月, 2016 2 次提交
  2. 05 2月, 2016 1 次提交
  3. 04 2月, 2016 1 次提交
  4. 27 1月, 2016 1 次提交
    • P
      device: cleanup input device code · 36785c7e
      Pavel Hrdina 提交于
      The current code was a little bit odd.  At first we've removed all
      possible implicit input devices from domain definition to add them later
      back if there was any graphics device defined while parsing XML
      description.  That's not all, while formating domain definition to XML
      description we at first ignore any input devices with bus different to
      USB and VIRTIO and few lines later we add implicit input devices to XML.
      
      This seems to me as a lot of code for nothing.  This patch may look
      to be more complicated than original approach, but this is a preferred
      way to modify/add driver specific stuff only in those drivers and not
      deal with them in common parsing/formating functions.
      
      The update is to add those implicit input devices into config XML to
      follow the real HW configuration visible by guest OS.
      
      There was also inconsistence between our behavior and QEMU's in the way,
      that in QEMU there is no way how to disable those implicit input devices
      for x86 architecture and they are available always, even without graphics
      device.  This applies also to XEN hypervisor.  VZ driver already does its
      part by putting correct implicit devices into live XML.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      36785c7e
  5. 11 1月, 2016 1 次提交
  6. 16 12月, 2015 1 次提交
    • J
      libxl: implement virDomainGetJobInfo · ad716651
      Joao Martins 提交于
      Introduce support for domainGetJobInfo to get info about the
      ongoing job. If the job is active it will update the
      timeElapsed which is computed with the "started" field added to
      struct libxlDomainJobObj.  For now we support just the very basic
      info and all jobs have VIR_DOMAIN_JOB_UNBOUNDED (i.e. no completion
      time estimation) plus timeElapsed computed.
      
      Openstack Kilo uses the Job API to monitor live-migration
      progress which is currently nonexistent in libxl driver and
      therefore leads to a crash in the nova compute node. Right
      now, migration doesn't use jobs in the source node and will
      return VIR_DOMAIN_JOB_NONE. Though nova handles this case and
      will migrate it properly instead of crashing.
      Signed-off-by: NJoao Martins <joao.m.martins@oracle.com>
      ad716651
  7. 09 12月, 2015 1 次提交
  8. 08 12月, 2015 1 次提交
    • J
      Revert "libxl: implement virDomainInterfaceStats" · e4ac5919
      Jim Fehlig 提交于
      This reverts commit d2e5538b.
      
      A migration regression was introduced by this commit. When migrating
      a domain, its active XML is sent to the destination libvirtd, where
      it is parsed as inactive XML. d2e5538b copied the libxl generated
      interface name into the active config, which was being passed to the
      migration destination and being parsed into inactive config. Attempting
      to start the config could result in failure if an interface with the
      same generated name already exists.
      
      The qemu driver behaves similarly, but the parser contains a hack to
      skip interface names starting with 'vnet' when parsing inactive XML.
      We could extend the hack to skip names starting with 'vif' too, but a
      better fix would be to expose these hypervisor-specific interface name
      prefixes in capabilities. See the following discussion thread for more
      details
      
      https://www.redhat.com/archives/libvir-list/2015-December/msg00262.html
      
      For the pending 1.3.0 release, it is best to revert d2e5538b. It can
      be added again post release, after moving the prefix to capabilities.
      e4ac5919
  9. 03 12月, 2015 1 次提交
    • J
      libxl: implement virDomainInterfaceStats · d2e5538b
      Joao Martins 提交于
      Introduce support for domainInterfaceStats API call for querying
      network interface statistics. Consequently it also enables the
      use of `virsh domifstat <dom> <interface name>` command plus
      seeing the interfaces names instead of "-" when doing
      `virsh domiflist <dom>`.
      
      After successful guest creation we fill the network
      interfaces names based on domain, device id and append suffix
      if it's emulated in the following form: vif<domid>.<devid>[-emu].
      We extract the network interfaces info from the libxl_domain_config
      object in libxlDomainCreateIfaceNames() to generate ifname. On domain
      cleanup we also clear ifname, in case it was set by libvirt (i.e.
      being prefixed with "vif"). We also skip these two steps in case the name
      of the interface was manually inserted by the adminstrator.
      
      For getting the interface statistics we resort to virNetInterfaceStats
      and let libvirt handle the platform specific nits. Note that the latter
      is not yet supported in FreeBSD.
      Signed-off-by: NJoao Martins <joao.m.martins@oracle.com>
      d2e5538b
  10. 13 8月, 2015 1 次提交
  11. 09 7月, 2015 1 次提交
    • J
      libxl: rework setting the state of virDomainObj · e9c27344
      Jim Fehlig 提交于
      Set the state of virDomainObj in the functions that
      actually change the domain state, instead of the generic
      libxlDomainCleanup function. This approach gives functions
      calling libxlDomainCleanup more flexibility wrt when and
      how they change virDomainObj state via virDomainObjSetState.
      
      The prior approach of calling virDomainObjSetState in
      libxlDomainCleanup resulted in the following incorrect
      coding pattern in the various functions that change
      domain state
      
       libxlDomain<DoStateTransition>
         call libxl function to do state transition
         emit lifecycle event
         libxlDomainCleanup
           virDomainObjSetState
      
      Once simple manifestation of this bug is seeing a domain
      running in virt-manager after selecting the shutdown button,
      even after the domain has long shutdown.
      e9c27344
  12. 20 6月, 2015 1 次提交
    • I
      libxl: avoid freeing an uninitialised bitmap · cc99d240
      Ian Campbell 提交于
      If vm->def->cputune.nvcpupin is 0 in libxlDomainSetVcpuAffinities (as
      seems to be the case on arm) then the VIR_FREE after cleanup: would be
      operating on an uninitialised pointer in map.map.
      
      Fix this by using libxl_bitmap_init and libxl_bitmap_dispose in the
      appropriate places (like VIR_FREE, libxl_bitmap_dispose is also
      idempotent, so there is no double free on exit from the loop).
      
      libxl_bitmap_dispose is slightly preferable since it also sets
      map.size back to 0, avoiding a potential source of confusion.
      
      This fixes the crashes we've been seeing in the Xen automated tests on
      ARM.
      
      I had a glance at the handful of other users of libxl_bitmap and none
      of them looked to have a similar issue.
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      cc99d240
  13. 19 6月, 2015 1 次提交
  14. 04 6月, 2015 2 次提交
  15. 03 6月, 2015 2 次提交
  16. 29 5月, 2015 2 次提交
  17. 30 4月, 2015 1 次提交
  18. 21 4月, 2015 2 次提交
  19. 17 4月, 2015 3 次提交
  20. 02 4月, 2015 1 次提交
    • J
      libxl: fix dom0 balloon logic · d685c0f9
      Jim Fehlig 提交于
      Recent testing on large memory systems revealed a bug in the Xen xl
      tool's freemem() function.  When autoballooning is enabled, freemem()
      is used to ensure enough memory is available to start a domain,
      ballooning dom0 if necessary.  When ballooning large amounts of memory
      from dom0, freemem() would exceed its self-imposed wait time and
      return an error.  Meanwhile, dom0 continued to balloon.  Starting the
      domain later, after sufficient memory was ballooned from dom0, would
      succeed.  The libvirt implementation in libxlDomainFreeMem() suffers
      the same bug since it is modeled after freemem().
      
      In the end, the best place to fix the bug on the Xen side was to
      slightly change the behavior of libxl_wait_for_memory_target().
      Instead of failing after caller-provided wait_sec, the function now
      blocks as long as dom0 memory ballooning is progressing.  It will return
      failure only when more memory is needed to reach the target and wait_sec
      have expired with no progress being made.  See xen.git commit fd3aa246.
      There was a dicussion on how this would affect other libxl apps like
      libvirt
      
      http://lists.xen.org/archives/html/xen-devel/2015-03/msg00739.html
      
      If libvirt containing this patch was build against a Xen containing
      the old libxl_wait_for_memory_target() behavior, libxlDomainFreeMem()
      will fail after 30 sec and domain creation will be terminated.
      Without this patch and with old libxl_wait_for_memory_target() behavior,
      libxlDomainFreeMem() does not succeed after 30 sec, but returns success
      anyway.  Domain creation continues resulting in all sorts of fun stuff
      like cpu soft lockups in the guest OS.  It was decided to properly fix
      libxl_wait_for_memory_target(), and if anything improve the default
      behavior of apps using the freemem reference impl in xl.
      
      xl was patched to accommodate the change in libxl_wait_for_memory_target()
      with xen.git commit 883b30a0.  This patch does the same in the libxl
      driver.  While at it, I changed the logic to essentially match
      freemem() in $xensrc/tools/libxl/xl_cmdimpl.c.  It was a bit cleaner
      IMO and will make it easier to spot future, potentially interesting
      divergences.
      d685c0f9
  21. 27 3月, 2015 1 次提交
  22. 25 3月, 2015 7 次提交
    • J
      libxl: remove per-domain libxl_ctx · a5bf06ba
      Jim Fehlig 提交于
      Although needed in the Xen 4.1 libxl days, there is no longer any
      benefit to having per-domain libxl_ctx.  On the contrary, their use
      makes the code unecessarily complicated and prone to deadlocks under
      load.  As suggested by the libxl maintainers, use a single libxl_ctx
      as a handle to libxl instead of per-domain ctx's.
      
      One downside to using a single libxl_ctx is there are no longer
      per-domain log files for log messages emitted by libxl.  Messages
      for all domains will be sent to /var/log/libvirt/libxl/libxl-driver.log.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      a5bf06ba
    • J
      libxl: make libxlDomainFreeMem static · 6728645a
      Jim Fehlig 提交于
      libxlDomainFreeMem() is only used in libxl_domain.c and thus should
      be declared static.  While at it, change the signature to take a
      libxl_ctx instead of libxlDomainObjPrivatePtr, since only the
      libxl_ctx is needed.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      6728645a
    • J
      libxl: remove unnecessary libxlDomainEventsRegister · 1cca1d25
      Jim Fehlig 提交于
      This function now only enables domain death events.  Simply call
      libxl_evenable_domain_death() instead of an unnecessary wrapper.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      1cca1d25
    • J
      libxl: use global libxl_ctx in event handler · 0b0a3d63
      Jim Fehlig 提交于
      Change the domain event handler code to use the driver-wide
      libxl_ctx instead of the domain-specific one.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      0b0a3d63
    • J
      libxl: move event registration to driver initialization · 109cf8d8
      Jim Fehlig 提交于
      Register a domain event handler with the driver-wide libxl_ctx
      during driver initialization.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      109cf8d8
    • J
      libxl: Move setup of child processing code to driver initialization · 331a02a7
      Jim Fehlig 提交于
      Informing libxl how to handle its child proceses should be done once
      during driver initialization, not once for each domain-specific
      libxl_ctx object.  The related libxl documentation in
      $xen-src/tools/libxl/libxl_event.h even mentions that "it is best to
      call this at initialisation".
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      331a02a7
    • J
      libxl: use driver-wide ctx in fd and timer event handling · 57db83ae
      Jim Fehlig 提交于
      Long ago I incorrectly associated libxl fd and timer registrations
      with per-domain libxl_ctx objects.  When creating a libxlDomainObjPrivate,
      a libxl_ctx is allocated, and libxl_osevent_register_hooks is called
      passing a pointer to the libxlDomainObjPrivate.  When an fd or timer
      registration occurred, the registration callback received the
      libxlDomainObjPrivate, containing the per-domain libxl_ctx.  This
      libxl_ctx was then used when informing libxl about fd events or
      timer expirations.
      
      The problem with this approach is that fd and timer registrations do not
      share the same lifespan as libxlDomainObjPrivate, and hence the per-domain
      libxl_ctx ojects.  The result is races between per-domain libxl_ctx's being
      destoryed and events firing on associated fds/timers, typically manifesting
      as an assert in libxl
      
      libxl_internal.h:2788: libxl__ctx_unlock: Assertion `!r' failed
      
      There is no need to associate libxlDomainObjPrivate objects with libxl's
      desire to use libvirt's event loop.  Instead, the driver-wide libxl_ctx can
      be used for the fd and timer registrations.
      
      This patch moves the fd and timer handling code away from the
      domain-specific code in libxl_domain.c into libxl_driver.c.  While at it,
      function names were changed a bit to better describe their purpose.
      
      The unnecessary locking was also removed since the code simply provides a
      wrapper over the event loop interface.  Indeed the locks may have been
      causing some deadlocks when repeatedly creating/destroying muliple domains.
      There have also been rumors about such deadlocks during parallel OpenStack
      Tempest runs.
      Signed-off-by: NJim Fehlig <jfehlig@suse.com>
      57db83ae
  23. 23 3月, 2015 3 次提交
    • P
      conf: Add interface to parse and format memory device information · 3e4230d2
      Peter Krempa 提交于
      This patch adds code that parses and formats configuration for memory
      devices.
      
      A simple configuration would be:
      <memory model='dimm'>
        <target>
          <size unit='KiB'>524287</size>
          <node>0</node>
        </target>
      </memory>
      
      A complete configuration of a memory device:
      <memory model='dimm'>
        <source>
          <pagesize unit='KiB'>4096</pagesize>
          <nodemask>1-3</nodemask>
        </source>
        <target>
          <size unit='KiB'>524287</size>
          <node>1</node>
        </target>
      </memory>
      
      This patch preemptively forbids use of the <memory> device in individual
      drivers so the users are warned right away that the device is not
      supported.
      3e4230d2
    • P
      conf: Add support for parsing and formatting max memory and slot count · bffb9163
      Peter Krempa 提交于
      Add a XML element that will allow to specify maximum supportable memory
      and the count of memory slots to use with memory hotplug.
      
      To avoid possible confusion and misuse of the new element this patch
      also explicitly forbids the use of the maxMemory setting in individual
      drivers's post parse callbacks. This limitation will be lifted when the
      support is implemented.
      bffb9163
    • P
      libxl: Refactor logic in domain post parse callback · 19e85d84
      Peter Krempa 提交于
      With the current control flow the post parse callback returned success
      right away for fully virtualized VMs. To allow adding additional checks
      into the post parse callback tweak the conditions so that the function
      doesn't return early except for error cases.
      
      To clarify the original piece of code borrow the wording from the commit
      message for the patch that introduced the code.
      19e85d84
  24. 16 3月, 2015 1 次提交
  25. 13 3月, 2015 1 次提交
    • J
      Introduce virBitmapIsBitSet · 22fd3ac3
      Ján Tomko 提交于
      A helper that never returns an error and treats bits out of bitmap range
      as false.
      
      Use it everywhere we use ignore_value on virBitmapGetBit, or loop over
      the bitmap size.
      22fd3ac3