1. 26 9月, 2013 1 次提交
  2. 25 9月, 2013 19 次提交
    • D
      Fix leak of command line args in qemuParseCommandLine · 145de7b8
      Daniel P. Berrange 提交于
      If qemuParseCommandLine finds an arg it does not understand
      it adds it to the QEMU passthrough custom arg list. If the
      qemuParseCommandLine method hits an error for any reason
      though, it just does 'VIR_FREE(cmd)' on the custom arg list.
      This means all actual args / env vars are leaked. Introduce
      a qemuDomainCmdlineDefFree method to be used for cleanup.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      145de7b8
    • D
      Fix leak in qemuParseCommandLine on OOM · 94e6b94a
      Daniel P. Berrange 提交于
      If the call to virDomainControllerInsert fails in
      qemuParseCommandLine, the controller struct is leaked.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      94e6b94a
    • D
      Fix leak in qemuStringToArgvEnv upon OOM · b391b191
      Daniel P. Berrange 提交于
      The 'qemuStringToArgvEnv' method splits up a string of command
      line env/args to an 'arglist' array. It then copies env vars
      to a 'progenv' array and args to a 'progargv' array. When
      copyin the env vars, it NULL-ifies the element in 'arglist'
      that is copied.
      
      Upon OOM the 'virStringListFree' is called on progenv and
      arglist. Unfortunately, because the elements in 'arglist'
      related to env vars have been set to NULL, the call to
      virStringListFree(arglist) doesn't free anything, even
      though some non-NULL args vars still exist later in the
      array.
      
      To fix this leak, stop NULL-ifying the 'arglist' elements,
      and change the cleanup code to only free elements in the
      'arglist' array, not 'progenv'.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      b391b191
    • D
      Fix missing jump to error cleanup in qemuParseCommandLineDisk · 6bb7f19e
      Daniel P. Berrange 提交于
      In a number of places in qemuParseCommandLineDisk, an error
      is reported, but no 'goto error' jump is used. This causes
      failure to report OOM conditions to the caller.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      6bb7f19e
    • D
      Fix leak in qemuParseCommandLineDisk on OOM · fbf82783
      Daniel P. Berrange 提交于
      If OOM occurs in qemuParseCommandLineDisk some intermediate
      variables will be leaked when parsing Sheepdog or RBD disks.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      fbf82783
    • D
      Fix leak on OOM in qemuBuildCommandLine dealing with sound card · 86139a40
      Daniel P. Berrange 提交于
      The qemuBuildCommandLine code for parsing sound cards will leak
      an intermediate variable if an OOM occurs. Move the free'ing of
      the variable earlier to avoid the leak.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      86139a40
    • D
      Fix failure to honour OOM status in qemuParseNBDString · a72d25f4
      Daniel P. Berrange 提交于
      In qemuParseNBDString, if the virURIParse fails, the
      error is not reported to the caller. Instead execution
      falls through to the non-URI codepath causing memory
      leaks later on.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      a72d25f4
    • D
      Avoid leak in qemuParseRBDString on failure of qemuAddRBDHost · d7e9f9f7
      Daniel P. Berrange 提交于
      If qemuAddRBDHost fails due to parsing problems or OOM, then
      qemuParseRBDString cleanup is skipped causing a memory leak.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      d7e9f9f7
    • D
      Fix leak of address string in qemuDomainPCIAddressGetNextSlot · e7b7a201
      Daniel P. Berrange 提交于
      qemuDomainPCIAddressGetNextSlot has a loop for finding
      compatible PCI buses. In the loop body it creates a
      PCI address string, but never frees this. This causes
      a leak if the loop executes more than one iteration,
      or if a call in the loop body fails.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      e7b7a201
    • L
      qemu: prefer to put a Q35 machine's dmi-to-pci-bridge at 00:1E.0 · 386ebb47
      Laine Stump 提交于
      This resolves one of the issues listed in:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      
      00:1E.0 is the location of this controller on at least some actual Q35
      hardware, so we try to replicate the placement. The bridge should work
      just as well in any other location though, so if 00:1E.0 isn't
      available, just allow it to be auto-assigned anywhere appropriate.
      386ebb47
    • L
      qemu: turn if into switch in qemuDomainValidateDevicePCISlotsQ35 · c484fe16
      Laine Stump 提交于
      This will make it simpler to add checks for other types of
      controllers.
      
      This is a prerequisite for patches to resolve:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      c484fe16
    • L
      qemu: support ich9-intel-hda audio device · b83d26f6
      Laine Stump 提交于
      This resolves one of the issues in:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      
      This device is identical to qemu's "intel-hda" device (known as "ich6"
      in libvirt), but has a different PCI device ID (which matches the ID
      of the hda audio built into the ich9 chipset, of course). It's not
      supported in earlier versions of qemu, so it requires a capability
      bit.
      b83d26f6
    • L
      qemu: replace multiple strcmps with a switch on an enum · 8e0dab3a
      Laine Stump 提交于
      I'm not sure why this code was written to compare the strings that it
      had just retrieved from an enum->string conversion, rather than just
      look at the original enum values, but this yields the same results,
      and is much more efficient (especially as you add more devices).
      
      This is a prerequisite for patches to resolve:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      8e0dab3a
    • L
      qemu: allow some PCI devices to be attached to PCIe slots · 07af5192
      Laine Stump 提交于
      Part of the resolution to:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      
      Although most devices available in qemu area defined as PCI devices,
      and strictly speaking should only be attached via a PCI slot, in
      practice qemu allows them to be attached to a PCIe slot and sometimes
      this makes sense.
      
      For example, The UHCI and EHCI USB controllers are usually attached
      directly to the PCIe "root complex" (i.e. PCIe slots) on real
      hardware, so that should be possible for a Q35-based qemu virtual
      machine as well.
      
      We still want to prefer a standard PCI slot when auto-assigning
      addresses, though, and in general to disallow attaching PCI devices
      via PCIe slots.
      
      This patch makes that possible by adding a new
      QEMU_PCI_CONNECT_TYPE_EITHER_IF_CONFIG flag. Three things are done
      with this flag:
      
      1) It is set for the "pcie-root" controller
      
      2) qemuCollectPCIAddress() now has a set of nested switches that set
      this "EITHER" flag for devices that we want to allow connecting to
      pcie-root when specifically requested in the config.
      
      3) qemuDomainPCIAddressFlagsCompatible() adds this new flag to the
      "flagsMatchMask" if the address being checked came from config rather
      than being newly auto-allocated by libvirt (this knowledge is
      conveniently already available in the "fromConfig" arg).
      
      Now any device having the EITHER flag set can be connected to
      pcie-root if explicitly requested, but auto-allocated addresses for
      those devices will still be standard PCI slots instead.
      
      This patch only loosens the restrictions on devices that have been
      specifically requested, but the setup is such that it should be fairly
      easy to add new devices.
      07af5192
    • L
      qemu: eliminate redundant if clauses in qemuCollectPCIAddress · fbd9be48
      Laine Stump 提交于
      Replace them with switch cases. This will make it more efficient when
      we add exceptions for more controller types, and other device types.
      
      This is a prerequisite for patches to resolve:
      
         https://bugzilla.redhat.com/show_bug.cgi?id=1003983
      fbd9be48
    • P
      qemu: Wire up better early error reporting · ef29de14
      Peter Krempa 提交于
      The previous patches added infrastructure to report better errors from
      monitor in some cases. This patch finalizes this "feature" by enabling
      this enhanced error reporting on early phases of VM startup. In these
      phases the possibility of qemu producing a useful error message is
      really high compared to running it during the whole life cycle. After
      the start up is complete, the feature is disabled to provide the usual
      error messages so that users are not confused by possibly irrelevant
      messages that may be in the domain log.
      
      The original motivation to do this enhancement is to capture errors when
      using VFIO device passthrough, where qemu reports errors after the
      monitor is initialized and the existing error catching code couldn't
      catch this producing a unhelpful message:
      
       # virsh start test
       error: Failed to start domain test
       error: Unable to read from monitor: Connection reset by peer
      
      With this change, the message is changed to:
      
       # virsh start test
       error: Failed to start domain test
       error: internal error: early end of file from monitor: possible problem:
       qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: vfio: error, group 8 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.
       qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: vfio: failed to get group 8
       qemu-system-x86_64: -device vfio-pci,host=00:1a.0,id=hostdev0,bus=pci.0,addr=0x5: Device 'vfio-pci' could not be initialized
      ef29de14
    • P
      qemu: monitor: Produce better errors on monitor hangup · 90139a62
      Peter Krempa 提交于
      Change the monitor error code to add the ability to access the qemu log
      file using a file descriptor so that we can dig in it for a more useful
      error message. The error is now logged on monitor hangups and overwrites
      a possible lesser error. A hangup on the monitor usualy means that qemu
      has crashed and there's a significant chance it produced a useful error
      message.
      
      The functionality will be latent until the next patch.
      90139a62
    • P
      qemu: monitor: Add infrastructure to access VM logs for better err msgs · 8519e9ec
      Peter Krempa 提交于
      Early VM startup errors usually produce a better error message in the
      machine log file. Currently we were accessing it only when the process
      exited during certain phases of startup. This will help adding a more
      comprehensive error extraction for early qemu startup phases.
      
      This patch adds infrastructure to keep a file descriptor for the machine
      log file that will be used in case an error happens.
      8519e9ec
    • P
      qemu_process: Make qemuProcessReadLog() more versatile and reusable · 310651a5
      Peter Krempa 提交于
      Teach the function to skip character device definitions printed by qemu
      at startup in addition to libvirt log messages and make it usable from
      outside of qemu_process.c. Also add documentation about the func.
      310651a5
  3. 24 9月, 2013 9 次提交
  4. 20 9月, 2013 2 次提交
    • M
      qemu: Fix seamless SPICE migration · 484cc321
      Martin Kletzander 提交于
      Since the wait is done during migration (still inside
      QEMU_ASYNC_JOB_MIGRATION_OUT), the code should enter the monitor as such
      in order to prohibit all other jobs from interfering in the meantime.
      This patch fixes bug #1009886 in which qemuDomainGetBlockInfo was
      waiting on the monitor condition and after GetSpiceMigrationStatus
      mangled its internal data, the daemon crashed.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1009886
      484cc321
    • L
      qemu: use "ide" as device name for implicit SATA controller on Q35 · 30bb4c4b
      Laine Stump 提交于
      This resolves https://bugzilla.redhat.com/show_bug.cgi?id=1008903
      
      The Q35 machinetype has an implicit SATA controller at 00:1F.2 which
      isn't given the "expected" id of ahci0 by qemu when it's created. The
      original suggested solution to this problem was to not specify any
      controller for the disks that use the default controller and just
      specify "unit=n" instead; qemu should then use the first IDE or SATA
      controller for the disk.
      
      Unfortunately, this "solution" is ignorant of the fact that in the
      case of SATA disks, the "unit" attribute in the disk XML is actually
      *not* being used for the unit, but is instead used to specify the
      "bus" number; each SATA controller has 6 buses, and each bus only
      allows a single unit. This makes it nonsensical to specify unit='n'
      where n is anything other than 0. It also means that the only way to
      connect more than a single device to the implicit SATA controller is
      to explicitly give the bus names, which happen to be "ide.$n", where
      $n can be replaced by the disk's "unit" number.
      30bb4c4b
  5. 18 9月, 2013 1 次提交
  6. 17 9月, 2013 8 次提交