1. 03 11月, 2011 1 次提交
    • E
      API: document scheduler parameter names · 319992d4
      Eric Blake 提交于
      Document the parameter names that will be used by
      virDomain{Get,Set}SchedulerParameters{,Flags}, rather than
      hard-coding those names in each driver, to match what is
      done with memory, blkio, and blockstats parameters.
      
      * include/libvirt/libvirt.h.in (VIR_DOMAIN_SCHEDULER_CPU_SHARES)
      (VIR_DOMAIN_SCHEDULER_VCPU_PERIOD)
      (VIR_DOMAIN_SCHEDULER_VCPU_QUOTA, VIR_DOMAIN_SCHEDULER_WEIGHT)
      (VIR_DOMAIN_SCHEDULER_CAP, VIR_DOMAIN_SCHEDULER_RESERVATION)
      (VIR_DOMAIN_SCHEDULER_LIMIT, VIR_DOMAIN_SCHEDULER_SHARES): New
      field name macros.
      * src/qemu/qemu_driver.c (qemuSetSchedulerParametersFlags)
      (qemuGetSchedulerParametersFlags): Use new defines.
      * src/test/test_driver.c (testDomainGetSchedulerParamsFlags)
      (testDomainSetSchedulerParamsFlags): Likewise.
      * src/xen/xen_hypervisor.c (xenHypervisorGetSchedulerParameters)
      (xenHypervisorSetSchedulerParameters): Likewise.
      * src/xen/xend_internal.c (xenDaemonGetSchedulerParameters)
      (xenDaemonSetSchedulerParameters): Likewise.
      * src/lxc/lxc_driver.c (lxcSetSchedulerParametersFlags)
      (lxcGetSchedulerParametersFlags): Likewise.
      * src/esx/esx_driver.c (esxDomainGetSchedulerParametersFlags)
      (esxDomainSetSchedulerParametersFlags): Likewise.
      * src/libxl/libxl_driver.c (libxlDomainGetSchedulerParametersFlags)
      (libxlDomainSetSchedulerParametersFlags): Likewise.
      319992d4
  2. 02 11月, 2011 2 次提交
    • D
      Add missing param initialization in qemuDomainBlockStatsFlags · f4786c18
      Daniel P. Berrange 提交于
      * src/qemu/qemu_driver.c: Fix use of uninitialized 'params'
      f4786c18
    • E
      qemu: allow getting < max typed parameters · 97656536
      Eric Blake 提交于
      Since all virTypedParameter APIs allow us to return the number
      of slots we actually populated, we should allow the user to
      call with nparams too small (without overrunning their array)
      or too large (ignoring the tail of the array that we can't fill),
      rather than requiring that they get things exactly right.
      
      Making this change will make it easier for a future patch to
      introduce VIR_TYPED_PARAM_STRING, with filtering in libvirt.c
      rather than in every single driver, since users already have
      to be prepared for *nparams to be smaller on exit than on entry.
      
      * src/qemu/qemu_driver.c (qemuDomainGetBlkioParameters)
      (qemuDomainGetMemoryParameters): Allow variable nparams on entry.
      (qemuGetSchedulerParametersFlags): Drop redundant check.
      (qemudDomainBlockStats, qemudDomainBlockStatsFlags): Rename...
      (qemuDomainBlockStats, qemuDomainBlockStatsFlags): ...to this.
      Don't return unavailable stats.
      97656536
  3. 01 11月, 2011 2 次提交
  4. 31 10月, 2011 1 次提交
  5. 30 10月, 2011 1 次提交
    • O
      qemu: Restore the original states of PCI device when restarting daemon · d84b3626
      Osier Yang 提交于
      To support "managed" mode of host PCI device, we record the original
      states (unbind_from_stub, remove_slot, and reprobe) so that could
      reattach the device to host with original driver. But there is no XML
      for theses attrs, and thus after daemon is restarted, we lose the
      original states. It's easy to reproduce:
      
          1) virsh start domain
          2) virsh attach-device dom hostpci.xml (in 'managed' mode)
          3) service libvirtd restart
          4) virsh destroy domain
      
          You will see the device won't be bound to the original driver
      if there was one.
      
      This patch is to solve the problem by introducing internal XML
      (won't be dumped to user, only dumped to status XML). The XML is:
          <origstates>
            <unbind/>
            <remove_slot/>
            <reprobe/>
          </origstates>
      
      Which will be child node of <hostdev><source>...</souce></hostdev>.
      (only for PCI device).
      
      A new struct "virDomainHostdevOrigStates" is introduced for the XML,
      and the according members are updated when preparing the PCI device.
      And function "qemuUpdateActivePciHostdevs" is modified to honor
      the original states. Use of qemuGetPciHostDeviceList is removed
      in function "qemuUpdateActivePciHostdevs", and the "managed" value of
      the device config is honored by the change. This fixes another problem
      alongside:
      
          qemuGetPciHostDeviceList set the device as "managed" force
          regardless of whether the device is configured as "managed='yes'"
          or not in XML, which is not right.
      d84b3626
  6. 29 10月, 2011 3 次提交
    • R
      macvtap: Fix error return value convention/inconsistencies · 228a9ec3
      Roopa Prabhu 提交于
      - changed some return 1's to return -1
      - changed if (rc) error checks to if (rc < 0)
      - fixed some other minor convention violations
      
      I might have missed some. Can fix in another patch or can respin
      Signed-off-by: NRoopa Prabhu <roprabhu@cisco.com>
      Reported-by: NEric Blake <eblake@redhat.com>
      Reported-by: NLaine Stump <laine@laine.org>
      Signed-off-by: NEric Blake <eblake@redhat.com>
      228a9ec3
    • X
      pci address conflict when virtio disk with drive type · 5fb0de2e
      Xu He Jie 提交于
      When using the xml as below:
      ------------------------------------------------------
      <devices>
        <emulator>/home/soulxu/data/work-code/qemu-kvm/x86_64-softmmu/qemu-system-x86_64</emulator>
          <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/home/soulxu/data/VM/images/linux.img'/>
          <target dev='vda' bus='virtio'/>
          <address type='drive' controller='0' bus='0' unit='0'/>
        </disk>
        <input type='mouse' bus='ps2'/>
        <graphics type='vnc' port='-1' autoport='yes'/>
        <video>
          <model type='cirrus' vram='9216' heads='1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </video>
        <memballoon model='virtio'>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </memballoon>
      </devices>
      ------------------------------------------------------
      
      Then can't startup qemu, the error message as below:
      virsh # start test-vm
      error: Failed to start domain test-vm
      error: internal error process exited while connecting to monitor: qemu-system-x86_64: -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3: PCI: slot 3 function 0 not available for virtio-balloon-pci, in use by virtio-blk-pci
      qemu-system-x86_64: -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3: Device 'virtio-balloon-pci' could not be initialized
      
      So adding check for bus type and address type. Only the address of pci type support by virtio bus.
      Signed-off-by: NXu He Jie <xuhj@linux.vnet.ibm.com>
      5fb0de2e
    • A
      qemu: plug memory leak · 87b7e148
      Alex Jia 提交于
      Leak introduced in commit c1bc3d89.
      Detected by valgrind:
      
      ==18462== 1,100 bytes in 1 blocks are definitely lost in loss record 183 of 184
      ==18462==    at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
      ==18462==    by 0x4A06167: realloc (vg_replace_malloc.c:525)
      ==18462==    by 0x4AADBB: virReallocN (memory.c:161)
      ==18462==    by 0x4A975E: virBufferGrow (buf.c:117)
      ==18462==    by 0x4A9D92: virBufferVasprintf (buf.c:290)
      ==18462==    by 0x4A9EF7: virBufferAsprintf (buf.c:263)
      ==18462==    by 0x429488: qemuBuildControllerDevStr (qemu_command.c:1993)
      ==18462==    by 0x42C4B6: qemuBuildCommandLine (qemu_command.c:3803)
      ==18462==    by 0x41A604: testCompareXMLToArgvHelper (qemuxml2argvtest.c:124)
      ==18462==    by 0x41BB81: virtTestRun (testutils.c:141)
      ==18462==    by 0x416DFF: mymain (qemuxml2argvtest.c:369)
      ==18462==    by 0x41B277: virtTestMain (testutils.c:696)
      ==18462==
      ==18462== LEAK SUMMARY:
      ==18462==    definitely lost: 1,100 bytes in 1 blocks
      ==18462==    indirectly lost: 0 bytes in 0 blocks
      
      * src/qemu/qemu_command.c (qemuBuildCommandLine): Clean up on success.
      Signed-off-by: NAlex Jia <ajia@redhat.com>
      87b7e148
  7. 28 10月, 2011 4 次提交
    • E
      qemu: avoid leaking uninit data from hotplug to dumpxml · a4ca6e5d
      Eric Blake 提交于
      Detected by Coverity.  The fix in 2c27dfae didn't catch all bad
      instances of memcpy().  Thankfully, on further analysis, all of
      the problematic uses are only triggered by old qemu that lacks
      -device.
      
      * src/qemu/qemu_hotplug.c (qemuDomainAttachPciDiskDevice)
      (qemuDomainAttachNetDevice, qemuDomainAttachHostPciDevice): Init
      all fields since monitor only populates some of them.
      a4ca6e5d
    • D
      Wire up QEMU implementation for virDomainOpenGraphics · f877fed3
      Daniel P. Berrange 提交于
      The QEMU monitor command 'add_client' can be used to connect to
      a VNC or SPICE graphics display. This allows for implementation
      of the virDomainOpenGraphics API
      
      * src/qemu/qemu_driver.c: Implement virDomainOpenGraphics
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h,
        src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_json.h,
        src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h:
        Add binding for 'add_client' command
      f877fed3
    • D
      Extend graphics event to include UNIX socket · 6aa27da2
      Daniel P. Berrange 提交于
      Not all VNC/SPICE servers use a TCP socket for their connections.
      It is possible to configure a UNIX socket server. The graphics
      event must thus include a UNIX socket address type.
      
      * include/libvirt/libvirt.h.in: Add UNIX socket address type
        for graphics event
      * src/qemu/qemu_monitor_json.c: Add 'unix' string to address
        type enum
      6aa27da2
    • J
      Use virXMLSaveFile when writing XML config · c0d9dfe2
      Jiri Denemark 提交于
      c0d9dfe2
  8. 27 10月, 2011 2 次提交
    • D
      Add a systemtap script for watching QEMU monitor interactions · 9b76b08a
      Daniel P. Berrange 提交于
      This change adds some systemtap/dtrace probes to the QEMU monitor
      client code. In particular it allows watching of all operations
      for a VM
      
      * examples/systemtap/qemu-monitor.stp: Watch all monitor commands
      * src/Makefile.am: Passing libdir/bindir/sbindir to dtrace2systemtap.pl
      * src/dtrace2systemtap.pl: Accept libdir/bindir/sbindir as args
        and look for '# binary:' comment to mark probes against libvirtd
        vs libvirt.so
      * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor_json.c,
        src/qemu/qemu_monitor_text.c: Add probes for key functions
      9b76b08a
    • E
      qemu: simplify use of HAVE_YAJL · 6889f33e
      Eric Blake 提交于
      Rather than making all clients of monitor commands that are JSON-only
      check whether yajl support was compiled in, it is simpler to just
      avoid setting the capability bit up front if we can't use the capability.
      
      * src/qemu/qemu_capabilities.c (qemuCapsComputeCmdFlags): Only set
      capability bit if we also have yajl library to use it.
      * src/qemu/qemu_driver.c (qemuDomainReboot): Drop #ifdefs.
      * src/qemu/qemu_process.c (qemuProcessStart): Likewise.
      * tests/qemuhelptest.c (testHelpStrParsing): Pass test even
      without yajl.
      * tests/qemuxml2argvtest.c (mymain): Simplify use of json flag.
      * tests/qemuxml2argvdata/qemuxml2argv-disk-drive-error-*.args:
      Update expected results to match.
      6889f33e
  9. 25 10月, 2011 4 次提交
    • M
      startupPolicy: Emit event on disk source dropping · baf2ff7e
      Michal Privoznik 提交于
      If a disk source gets dropped because it is not accessible,
      mgmt application might want to be informed about this. Therefore
      we need to emit an event. The event presented in this patch
      is however a bit superset of what written above. The reason is simple:
      an intention to be easily expanded, e.g. on 'user ejected disk
      in guest' events. Therefore, callback gets source string and disk alias
      (which should be unique among a domain) and reason (an integer);
      baf2ff7e
    • M
      qemu: implement startupPolicy · 12ba4322
      Michal Privoznik 提交于
      This patch implements on_missing feature in qemu driver.
      Upon qemu startup process an accessibility of CDROMs
      and floppy disks is checked. The source might get dropped
      if unavailable and on_missing is set accordingly.
      No event is emit thought. Look for follow up patch.
      12ba4322
    • M
      qemu: Move device alias assigning before command line construction · b8fbe5d5
      Michal Privoznik 提交于
      This patch is rather cosmetic as it only moves device alias
      assignation from command line construction just before that.
      However, it is needed in connotation of previous and next patch.
      b8fbe5d5
    • E
      qemu: avoid leaking uninit data from hotplug to dumpxml · 2c27dfae
      Eric Blake 提交于
      Detected by Coverity.  Both text and JSON monitors set only the
      bus and unit fields, which means driveAddr.controller spends
      life as garbage on the stack, and is then memcpy()'d into the
      in-memory representation which the user can see via dumpxml.
      
      * src/qemu/qemu_hotplug.c (qemuDomainAttachSCSIDisk): Only copy
      defined fields.
      2c27dfae
  10. 21 10月, 2011 3 次提交
    • E
      snapshot: simplify indentation of sysinfo · 9a220665
      Eric Blake 提交于
      The improvements to virBuffer, along with a paradigm shift to pass
      the original buffer through rather than creating a second buffer,
      allow us to shave off quite a few lines of code.
      
      * src/util/sysinfo.h (virSysinfoFormat): Alter signature.
      * src/util/sysinfo.c (virSysinfoFormat, virSysinfoBIOSFormat)
      (virSysinfoSystemFormat, virSysinfoProcessorFormat)
      (virSysinfoMemoryFormat): Change indentation parameter.
      * src/conf/domain_conf.c (virDomainSysinfoDefFormat): Adjust
      caller.
      * src/qemu/qemu_driver.c (qemuGetSysinfo): Likewise.
      9a220665
    • E
      snapshot: indent domain xml when nesting · 9cba3927
      Eric Blake 提交于
      <domainsnapshot> is the first public instance of <domain> being
      used as a sub-element, although we have two other private uses
      (runtime state, and migration cookie).  Although indentation has
      no effect on XML parsing, using it makes the output more consistent.
      
      This uses virBuffer auto-indentation to obtain the effect, for all
      but the portions of <domain> that are not generated a line at a
      time into the same virBuffer.  Further patches will clean up the
      remaining problems.
      
      * src/conf/domain_conf.h (virDomainDefFormatInternal): New prototype.
      * src/conf/domain_conf.c (virDomainDefFormatInternal): Export.
      (virDomainObjFormat, virDomainSnapshotDefFormat): Update callers.
      * src/libvirt_private.syms (domain_conf.h): Add new export.
      * src/qemu/qemu_migration.c (qemuMigrationCookieXMLFormat): Use
      new function.
      (qemuMigrationCookieXMLFormatStr): Update caller.
      9cba3927
    • T
      qemu: allow json in domxml-to-native · 755a09b5
      tangchen 提交于
      There is a little difference between the output of domxml-to-native and the actual commandline.
      No matter qemu is in control or readline mode, domxml-to-native always converts it to readline mode.
      
      That is because the parameter "monitor_json" for qemuBuildCommandLine() is always set to false
      in qemuDomainXMLToNative().
      Signed-off-by: Ntangchen <tangchen@cn.fujitsu.com>
      755a09b5
  11. 19 10月, 2011 3 次提交
  12. 18 10月, 2011 2 次提交
    • O
      qemu: Do not wait if the PCI device is not managed when reattaching · 7fb50e30
      Osier Yang 提交于
      Waiting for qemu-kvm cleaning up the PCI bar(s) mapping with long time
      while the device is not managed is just waste of time.
      7fb50e30
    • J
      Add AHCI support to qemu driver · c1bc3d89
      Jim Fehlig 提交于
      Tested with multiple AHCI controllers and multiple disks attached
      to a controller. E.g.,
      
          <disk type='file' device='disk'>
            <driver name='qemu' type='raw'/>
            <source file='/var/lib/libvirt/images/test/disk0.raw'/>
            <target dev='sda' bus='sata'/>
            <address type='drive' controller='0' bus='0' unit='0'/>
          </disk>
          <disk type='file' device='disk'>
            <driver name='qemu' type='raw'/>
            <source file='/var/lib/libvirt/images/test/disk1.raw'/>
            <target dev='sdb' bus='sata'/>
            <address type='drive' controller='0' bus='0' unit='1'/>
          </disk>
          <disk type='file' device='disk'>
            <driver name='qemu' type='raw'/>
            <source file='/var/lib/libvirt/images/test/disk2.raw'/>
            <target dev='sdc' bus='sata'/>
            <address type='drive' controller='1' bus='0' unit='0'/>
          </disk>
          <controller type='sata' index='0'>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
          </controller>
          <controller type='sata' index='1'>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
          </controller>
      c1bc3d89
  13. 17 10月, 2011 1 次提交
  14. 15 10月, 2011 3 次提交
    • O
      qemu: Honor the orginal PCI dev properties when reattaching · d0935478
      Osier Yang 提交于
      BZ# https://bugzilla.redhat.com/show_bug.cgi?id=736214
      
      The problem is caused by the original info of domain's PCI dev is
      maintained by qemu_driver->activePciHostdevs list, (E.g. dev->reprobe,
      which stands for whether need to reprobe driver for the dev when do
      reattachment). The fields (dev->reprobe, dev->unbind_from_stub, and
      dev->remove_slot) are initialized properly when preparing the PCI
      device for managed attachment. However, when do reattachment, it
      construct a complete new "pciDevice" without honoring the original
      dev info, and thus the dev won't get the original driver or can get
      other problem.
      
      This patch is to fix the problem by get the devs from list
      driver->activePciHostdevs.
      
      Tested with following 3 scenarios:
        * the PCI was bound to some driver not pci-stub before attaching
      
          result: the device will be bound to the original driver
      
        * the PCI was bound to pci-stub before attaching
      
          result: no driver reprobing, and still bound to pci-stub
      
        * The PCI was not bound to any driver
      
          result: no driver reprobing, and still not bound to any driver.
      d0935478
    • J
      Clarify semantics of virDomainMigrate2 · 5d784bd6
      Jiri Denemark 提交于
      Explicitly disallow conflicts between domain name from dxml and dname.
      5d784bd6
    • O
      qemu: Do not reattach PCI device used by other domain when shutdown · 24b8be89
      Osier Yang 提交于
      When failing on starting a domain, it tries to reattach all the PCI
      devices defined in the domain conf, regardless of whether the devices
      are still used by other domain. This will cause the devices to be deleted
      from the list qemu_driver->activePciHostdevs, thus the devices will be
      thought as usable even if it's not true. And following commands
      nodedev-{reattach,reset} will be successful.
      
      How to reproduce:
        1) Define two domains with same PCI device defined in the confs.
        2) # virsh start domain1
        3) # virsh start domain2
        4) # virsh nodedev-reattach $pci_device
      
      You will see the device will be reattached to host successfully.
      As pciDeviceReattach just check if the device is still used by
      other domain via checking if the device is in list driver->activePciHostdevs,
      however, the device is deleted from the list by step 2).
      
      This patch is to prohibit the bug by:
        1) Prohibit a domain starting or device attachment right at
           preparation period (qemuPrepareHostdevPCIDevices) if the
           device is in list driver->activePciHostdevs, which means
           it's used by other domain.
      
        2) Introduces a new field for struct _pciDevice, (const char *used_by),
           it will be set as the domain name at preparation period,
           (qemuPrepareHostdevPCIDevices). Thus we can prohibit deleting
           the device from driver->activePciHostdevs if it's still used by
           other domain when stopping the domain process.
      
      * src/pci.h (define two internal functions, pciDeviceSetUsedBy and
          pciDevceGetUsedBy)
      * src/pci.c (new field "const char *used_by" for struct _pciDevice,
          implementations for the two new functions)
      * src/libvirt_private.syms (Add the two new internal functions)
      * src/qemu_hostdev.h (Modify the definition of functions
          qemuPrepareHostdevPCIDevices, and qemuDomainReAttachHostdevDevices)
      * src/qemu_hostdev.c (Prohibit preparation and don't delete the
          device from activePciHostdevs list if it's still used by other domain)
      * src/qemu_hotplug.c (Update function usage, as the definitions are
          changed)
      Signed-off-by: NEric Blake <eblake@redhat.com>
      24b8be89
  15. 14 10月, 2011 6 次提交
    • E
      qemu: plug memory leak on migration · 16e7b5fa
      Eric Blake 提交于
      Detected by Coverity.  Leak introduced in commit 72de0d28.
      
      * src/qemu/qemu_migration.c (qemuMigrationCookieGraphicsXMLParse):
      Clean up on success.
      16e7b5fa
    • J
      qemu: Make sure BeginJob is always followed by EndJob · bf7676af
      Jiri Denemark 提交于
      Otherwise we can end up with a dangling job that can only be cleared by
      restarting libvirtd.
      bf7676af
    • J
      qemu: Log debug messages when changing job · dddbfcf6
      Jiri Denemark 提交于
      Log debug messages anytime we call *BeginJob* or *EndJob* so that it's
      easier to spot incorrect usage of domain job APIs.
      dddbfcf6
    • E
      qemu: fix text block info parsing · f043ff63
      Eric Blake 提交于
      Detected by Coverity.  p (the pointer to the string) is always true;
      when in reality, we wanted to know whether the integer value of the
      just-parsed string is '0' or '1'.  Logic bug since commit b1b5b51a.
      
      * src/qemu/qemu_monitor_text.c (qemuMonitorTextGetBlockInfo): Set
      results to proper value.
      f043ff63
    • E
      qemu: avoid text monitor null deref · 60be9e8c
      Eric Blake 提交于
      Detected by Coverity.  If, for some reason, our text monitor input
      does not match our assumptions, we end up incrementing p while it
      is NULL, then dereferencing the pointer 0x1, which will fault.
      
      * src/qemu/qemu_monitor_text.c
      (qemuMonitorTextGetBlockStatsParamsNumber): Rewrite to avoid
      deref of strchr failure.  Fix indentation.
      60be9e8c
    • E
      qemu: check for json allocation failure · ce521f24
      Eric Blake 提交于
      Detected by Coverity.  Introduced in commit b1b5b51a.
      
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONGetBlockInfo):
      Avoid null dereference.
      ce521f24
  16. 13 10月, 2011 2 次提交
    • M
      qemu: Check for domain being active on successful job acquire · 9bc9999b
      Michal Privoznik 提交于
      As this is needed. Although some functions check for domain
      being active before obtaining job, we need to check it after,
      because obtaining job unlocks domain object, during which
      a state of domain can be changed.
      9bc9999b
    • M
      qemu: Implement VIR_DUMP_RESET · 2050b61d
      Michal Privoznik 提交于
      This patch extends qemudDomainCoreDump so it supports new VIR_DUMP_RESET
      flag. If this flag is set, domain is reset on successful dump. However,
      this is needed to be done after we start CPUs.
      2050b61d