1. 13 9月, 2012 12 次提交
  2. 12 9月, 2012 7 次提交
    • D
      parallels: fix parallelsDomainDefineXML for domains with VNC and autoport · 4cf4120b
      Dmitry Guryanov 提交于
      virDomainDefParseString assigns 0 to port if autoport enabled.
      So fix code, which check different between old and new
      configurations.
      4cf4120b
    • D
      parallels: fix parallelsDoCmdRun in case of command failure · 748b6d8e
      Dmitry Guryanov 提交于
      Don't try to dereferece NULL pointer.
      748b6d8e
    • L
      Backcompt for console devices in virDomainDeviceInfoIterate · babe7dad
      Li Zhang 提交于
      Historically, the first <console> element is treated as the
      alias of a <serial> device. In the virDomainDeviceInfoIterate,
      This situation is not considered. It still handles the first <console>
      element as another devices, which means that for console[0] with
      serial targetType, it calls callback function another time.
      It will cause the problem of address conflicts when assigning
      spapr-vio address for serial device on pSeries guest.
      
      For pSeries guest, the serial configuration in the xml file
      is as the following:
               <serial type='pty'>
                     <target port='0'/>
                     <address type='spapr-vio'/>
                </serial>
      
      Console configuration is default, the dumped xml file is as the following:
         <serial type='pty'>
            <source path='/dev/pts/5'/>
            <target port='0'/>
            <alias name='serial0'/>
            <address type='spapr-vio' reg='0x30000000'/>
          </serial>
          <console type='pty' tty='/dev/pts/5'>
            <source path='/dev/pts/5'/>
            <target type='serial' port='0'/>
            <alias name='serial0'/>
            <address type='spapr-vio' reg='0x30000000'/>
          </console>
      
      It shows that the <console> device is the alias of serial device.
      So its address is the same as the serial device. When detecting
      the conflicts in the qemuAssignSpaprVIOAddress the first console
      and the serial device conflicts because virDomainDeviceInfoIterate()
      still handle these as two different devices, and in the qemuAssignSpaprVIOAddress(),
      it will compare these two devices' addressed. If they have same address,
      it will report address conflict error.
      
      So this patch is to handle the first console which targetType is serial
      as the alias of serial device to avoid address conflicts error reported.
      Signed-off-by: NLi Zhang <zhlcindy@linux.vnet.ibm.com>
      babe7dad
    • O
      list: Implement listAllInterfaces · a3cf061c
      Osier Yang 提交于
      This is not that ideal as API for other objects, as it's still
      O(n). Because interface driver uses netcf APIs to manage the
      stuffs, instead of by itself. And netcf APIs don't return a object.
      It provides APIs like old libvirt APIs:
      
         ncf_number_of_interfaces
         ncf_list_interfaces
         ncf_lookup_by_name
         ......
      
      Perhaps we should further improve netcf to let it provide an API
      to return the object, but it could be a later patch. And anyway,
      we will still benefit from the new API for the simplification,
      and no race like the old APIs.
      
      src/interface/netcf_driver.c: Implement listAllInterfaces
      a3cf061c
    • O
      list: Implemente RPC calls for virConnectListAllInterfaces · 65741d84
      Osier Yang 提交于
      The RPC generator doesn't support returning list of object yet, this patch
      do the work manually.
      
        * daemon/remote.c:
          Implemente the server side handler remoteDispatchConnectListAllInterfaces.
      
        * src/remote/remote_driver.c:
          Add remote driver handler remoteConnectListAllInterfaces.
      
        * src/remote/remote_protocol.x:
          New RPC procedure REMOTE_PROC_CONNECT_LIST_ALL_INTERFACES and
          structs to represent the args and ret for it.
      
        * src/remote_protocol-structs: Likewise.
      65741d84
    • O
      list: Define new API virConnectListAllInterfaces · f4af202f
      Osier Yang 提交于
      This is to list the interface objects, supported filtering flags
      are: active|inactive.
      
      include/libvirt/libvirt.h.in: Declare enum virConnectListAllInterfaceFlags
                                    and virConnectListAllInterfaces.
      python/generator.py: Skip auto-generating
      src/driver.h: (virDrvConnectListAllInterfaces)
      src/libvirt.c: Implement the public API
      src/libvirt_public.syms: Export the symbol to public
      f4af202f
    • H
      fix bug in qemuSetupCgroupForEmulator · f7e1a546
      Hu Tao 提交于
      Should not return 0 when failed to setup cgroup.
      f7e1a546
  3. 11 9月, 2012 8 次提交
  4. 10 9月, 2012 5 次提交
    • C
      Fix unwanted closing of libvirt client connection · 164c03d3
      Christophe Fergeau 提交于
      e5a1bee0 introduced a regression in Boxes: when Boxes is left idle
      (it's still doing some libvirt calls in the background), the
      libvirt connection gets closed after a few minutes. What happens is
      that this code in virNetClientIOHandleOutput gets triggered:
      
      if (!thecall)
          return -1; /* Shouldn't happen, but you never know... */
      
      and after the changes in e5a1bee0, this causes the libvirt connection
      to be closed.
      
      Upon further investigation, what happens is that
      virNetClientIOHandleOutput is called from gvir_event_handle_dispatch
      in libvirt-glib, which is triggered because the client fd became
      writable. However, between the times gvir_event_handle_dispatch
      is called, and the time the client lock is grabbed and
      virNetClientIOHandleOutput is called, another thread runs and
      completes the current call. 'thecall' is then NULL when the first
      thread gets to run virNetClientIOHandleOutput.
      
      After describing this situation on IRC, danpb suggested this:
      
      11:37 < danpb> In that case I think the correct thing would be to change
                     'return -1' above to 'return 0' since that's not actually an
                     error - its a rare, but expected event
      
      which is what this patch is doing. I've tested it against master
      libvirt, and I didn't get disconnected in ~10 minutes while this
      happens in less than 5 minutes without this patch.
      164c03d3
    • O
      list: Implement virStoragePoolListAllVolumes for test driver · a4d7f4a0
      Osier Yang 提交于
      src/test/test_driver.c: Implement poolListAllVolumes.
      a4d7f4a0
    • O
      list: Implement virStoragePoolListAllVolumes for storage driver · 7254a367
      Osier Yang 提交于
      src/storage/storage_driver.c: Implement poolListAllVolumes.
      7254a367
    • O
      list: Implement RPC calls for virStoragePoolListAllVolumes · a8bac1c0
      Osier Yang 提交于
      The RPC generator doesn't returning support list of object, this
      patch do the work manually.
      
        * daemon/remote.c:
          Implemente the server side handler remoteDispatchStoragePoolListAllVolumes
      
        * src/remote/remote_driver.c:
          Add remote driver handler remoteStoragePoolListAllVolumes
      
        * src/remote/remote_protocol.x:
          New RPC procedure REMOTE_PROC_STORAGE_POOL_LIST_ALL_VOLUMES and
          structs to represent the args and ret for it.
      
        * src/remote_protocol-structs: Likewise.
      a8bac1c0
    • O
      list: Define new API virStoragePoolListAllVolumes · a42eac60
      Osier Yang 提交于
      Simply returns the storage volume objects. No supported filter
      flags.
      
      include/libvirt/libvirt.h.in: Declare the API
      python/generator.py: Skip the function for generating. virStoragePool.py
                           will be added in later patch.
      src/driver.h: virDrvStoragePoolListVolumesFlags
      src/libvirt.c: Implementation for the API.
      src/libvirt_public.syms: Export the symbol to public
      a42eac60
  5. 09 9月, 2012 1 次提交
  6. 07 9月, 2012 7 次提交
    • C
      events: Fix domain event race on client disconnect · defa8b85
      Christophe Fergeau 提交于
      GNOME Boxes sometimes stops getting domain events from libvirtd, even
      after restarting it. Further investigation in libvirtd shows that
      events are properly queued with virDomainEventStateQueue, but the
      timer virDomainEventTimer which flushes the events and sends them to
      the clients never gets called. Looking at the event queue in gdb
      shows that it's non-empty and that its size increases with each new
      events.
      
      virDomainEventTimer is set up in virDomainEventStateRegister[ID]
      when going from 0 client connecte to 1 client connected, but is
      initially disabled. The timer is removed in
      virDomainEventStateRegister[ID] when the last client is disconnected
      (going from 1 client connected to 0).
      
      This timer (which handles sending the events to the clients) is
      enabled in virDomainEventStateQueue when queueing an event on an
      empty queue (queue containing 0 events). It's disabled in
      virDomainEventStateFlush after flushing the queue (ie removing all
      the elements from it). This way, no extra work is done when the queue
      is empty, and when the next event comes up, the timer will get
      reenabled because the queue will go from 0 event to 1 event, which
      triggers enabling the timer.
      
      However, with this Boxes bug, we have a client connected (Boxes), a
      non-empty queue (there are events waiting to be sent), but a disabled
      timer, so something went wrong.
      
      When Boxes connects (it's the only client connecting to the libvirtd
      instance I used for debugging), the event timer is not set as expected
      (state->timer == -1 when virDomainEventStateRegisterID is called),
      but at the same time the event queue is not empty. In other words,
      we had no clients connected, but pending events. This also explains
      why the timer never gets enabled as this is only done when an event
      is queued on an empty queue.
      
      I think this can happen if an event gets queued using
      virDomainEventStateQueue and the client disconnection happens before
      the event timer virDomainEventTimer gets a chance to run and flush
      the event. In this situation, virDomainEventStateDeregister[ID] will
      get called with a non-empty event queue, the timer will be destroyed
      if this was the only client connected. Then, when other clients connect
      at a later time, they will never get notified about domain events as
      the event timer will never get enabled because the timer is only
      enabled if the event queue is empty when virDomainEventStateRegister[ID]
      gets called, which will is no longer the case.
      
      To avoid this issue, this commit makes sure to remove all events from
      the event queue when the last client in unregistered. As there is
      no longer anyone interested in receiving these events, these events
      are stale so there is no need to keep them around. A client connecting
      later will have no interest in getting events that happened before it
      got connected.
      defa8b85
    • D
      Don't assume use of /sys/fs/cgroup · a4fd7405
      Daniel P. Berrange 提交于
      The introduction of /sys/fs/cgroup came in fairly recent kernels.
      Prior to that time distros would pick a custom directory like
      /cgroup or /dev/cgroup. We need to auto-detect where this is,
      rather than hardcoding it
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      a4fd7405
    • D
      Add non-null annotations to qemuMonitorOpen · 1f490138
      Daniel P. Berrange 提交于
      Add some non-null annotations to qemuMonitorOpen and also
      check that the error callback is set, since it is mandatory
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      1f490138
    • J
      Add PMSUSPENDED life cycle event · fc4115e8
      Jiri Denemark 提交于
      While PMSUSPENDED state was added a long time ago, we didn't have
      corresponding life cycle event.
      fc4115e8
    • P
      util: Add helper to assign typed params from string · 245cef9f
      Peter Krempa 提交于
      This patch adds a helper to deal with assigning values to
      virTypedParameter structures from strings. The helper parses the value
      from the string and assigns it to the corresponding union value.
      245cef9f
    • P
      qemu: Add range checking for scheduler tunables when changed by API · 972e914f
      Peter Krempa 提交于
      The quota and period tunables for cpu scheduler accept only a certain
      range of values. When changing the live configuration invalid values get
      rejected. This check is not performed when changing persistent config.
      
      This patch adds a separate range check, that improves error messages
      when changing live config and adds the check for persistent config.
      This check is done only when using the API. It is still possible to
      specify invalid values in the XML.
      972e914f
    • P
      qemu: clean up qemuSetSchedulerParametersFlags() · 3e250b36
      Peter Krempa 提交于
      This patch tries to clean the code up a little bit and shorten very long
      lines.
      
      The apparent semantic change from moving the condition before calling
      the setter function is a non-issue here as the setter function is a
      no-op when called with both arguments zero.
      3e250b36