1. 25 8月, 2016 23 次提交
    • P
      qemu: Use modern vcpu hotplug approach if possible · 6d4ee77d
      Peter Krempa 提交于
      To allow unplugging the vcpus, hotplugging of vcpus on platforms which
      require to plug multiple logical vcpus at once or plugging them in an
      arbitrary order it's necessary to use the new device_add interface for
      vcpu hotplug.
      
      This patch adds support for the device_add interface using the old
      setvcpus API by implementing an algorithm to select the appropriate
      entities to plug in.
      6d4ee77d
    • P
      qemu: command: Add support for sparse vcpu topologies · 9eb9106e
      Peter Krempa 提交于
      Add support for using the new approach to hotplug vcpus using device_add
      during startup of qemu to allow sparse vcpu topologies.
      
      There are a few limitations imposed by qemu on the supported
      configuration:
      - vcpu0 needs to be always present and not hotpluggable
      - non-hotpluggable cpus need to be ordered at the beginning
      - order of the vcpus needs to be unique for every single hotpluggable
        entity
      
      Qemu also doesn't really allow to query the information necessary to
      start a VM with the vcpus directly on the commandline. Fortunately they
      can be hotplugged during startup.
      
      The new hotplug code uses the following approach:
      - non-hotpluggable vcpus are counted and put to the -smp option
      - qemu is started
      - qemu is queried for the necessary information
      - the configuration is checked
      - the hotpluggable vcpus are hotplugged
      - vcpus are started
      
      This patch adds a lot of checking code and enables the support to
      specify the individual vcpu element with qemu.
      9eb9106e
    • P
      qemu: process: Copy final vcpu order information into the vcpu definition · 20ef1232
      Peter Krempa 提交于
      The vcpu order information is extracted only for hotpluggable entities,
      while vcpu definitions belonging to the same hotpluggable entity need
      to all share the order information.
      
      We also can't overwrite it right away in the vcpu info detection code as
      the order is necessary to add the hotpluggable vcpus enabled on boot in
      the correct order.
      
      The helper will store the order information in places where we are
      certain that it's necessary.
      20ef1232
    • P
      qemu: command: Add helper to convert vcpu definition to JSON props · 8807f28b
      Peter Krempa 提交于
      For use on the monitor we need to format certain parts of the vcpu
      private definition into a JSON object. Add a helper.
      8807f28b
    • P
      qemu: migration: Prepare for non-contiguous vcpu configurations · 48e3d428
      Peter Krempa 提交于
      Introduce a new migration cookie flag that will be used for any
      configurations that are not compatible with libvirt that would not
      support the specific vcpu hotplug approach. This will make sure that old
      libvirt does not fail to reproduce the configuration correctly.
      48e3d428
    • P
      conf: Add XML for individual vCPU hotplug · 5847bc5c
      Peter Krempa 提交于
      Individual vCPU hotplug requires us to track the state of any vCPU. To
      allow this add the following XML:
      
      <domain>
        ...
        <vcpu current='2'>3</vcpu>
        <vcpus>
          <vcpu id='0' enabled='yes' hotpluggable='no' order='1'/>
          <vcpu id='1' enabled='yes' hotpluggable='yes' order='2'/>
          <vcpu id='1' enabled='no' hotpluggable='yes'/>
        </vcpus>
        ...
      
      The 'enabled' attribute allows to control the state of the vcpu.
      'hotpluggable' controls whether given vcpu can be hotplugged and 'order'
      allows to specify the order to add the vcpus.
      5847bc5c
    • P
    • P
      qemu: domain: Prepare for VCPUs vanishing while libvirt is not running · 133be0a9
      Peter Krempa 提交于
      Similarly to devices the guest may allow unplug of the VCPU if libvirt
      is down. To avoid problems, refresh the vcpu state on reconnect. Don't
      mess with the vcpu state otherwise.
      133be0a9
    • P
      qemu: domain: Extract cpu-hotplug related data · 6b4a23ff
      Peter Krempa 提交于
      Now that the monitor code gathers all the data we can extract it to
      relevant places either in the definition or the private data of a vcpu.
      
      As only thread id is broken for TCG guests we may extract the rest of
      the data and just skip assigning of the thread id. In case where qemu
      would allow cpu hotplug in TCG mode this will make it work eventually.
      6b4a23ff
    • P
      tests: cpu-hotplug: Add data for ppc64 without threads enabled · 04fce1d4
      Peter Krempa 提交于
      The reported data is unusual so add it to the test suite.
      04fce1d4
    • P
      tests: cpu-hotplug: Add data for ppc64 out-of-order hotplug · 1c455c47
      Peter Krempa 提交于
      Test the algorithm that extracts the order in which the vcpu entries
      were plugged in on a sample of data created by plugging in vcpus
      arbitrarily.
      1c455c47
    • P
      tests: cpu-hotplug: Add data for ppc64 platform including hotplug · d1145aad
      Peter Krempa 提交于
      Power 8 platform's basic hotpluggable unit is a core rather than a
      thread for x86_64 family. This introduces most of the complexity of the
      matching code and thus needs to be tested.
      
      The test data contain data captured from in-order cpu hotplug and
      unplug operations.
      d1145aad
    • P
      tests: cpu-hotplug: Add data for x86 hotplug with 11+ vcpus · 22e3bb33
      Peter Krempa 提交于
      During review it was reported that adding at least 11 vcpus creates a
      collision of prefixes in the monitor matching algorithm. Add a test case
      to verify that the problem won't happen.
      22e3bb33
    • P
      tests: Add test infrastructure for qemuMonitorGetCPUInfo · f8638471
      Peter Krempa 提交于
      As the combination algorithm is rather complex and ugly it's necessary
      to make sure it works properly. Add test suite infrastructure for
      testing it along with a basic test based on x86_64 platform.
      f8638471
    • P
      qemu: monitor: Add algorithm for combining query-(hotpluggable-)-cpus data · 9bbbc88a
      Peter Krempa 提交于
      For hotplug purposes it's necessary to retrieve data using
      query-hotpluggable-cpus while the old query-cpus API report thread IDs
      and order of hotplug.
      
      This patch adds code that merges the data using a rather non-trivial
      algorithm and fills the data to the qemuMonitorCPUInfo structure for
      adding to appropriate place in the domain definition.
      9bbbc88a
    • P
      qemu: monitor: Add support for calling query-hotpluggable-cpus · 1213f0f8
      Peter Krempa 提交于
      Add support for retrieving information regarding hotpluggable cpu units
      supported by qemu. Data returned by the command carries information
      needed to figure out the granularity of hotplug, the necessary cpu type
      name and the topology information.
      
      Note that qemu doesn't specify any particular order of the entries thus
      it's necessary sort them by socket_id, core_id and thread_id to the
      order libvirt expects.
      1213f0f8
    • P
      qemu: monitor: Extract QOM path from query-cpus reply · c91be16b
      Peter Krempa 提交于
      To allow matching up the data returned by query-cpus to entries in the
      query-hotpluggable-cpus reply for CPU hotplug it's necessary to extract
      the QOM path as it's the only link between the two.
      c91be16b
    • P
      qemu: capabilities: Extract availability of new cpu hotplug for machine types · 920bbe5c
      Peter Krempa 提交于
      QEMU reports whether 'query-hotpluggable-cpus' is supported for a given
      machine type. Extract and cache the information using the capability
      cache.
      
      When copying the capabilities for a new start of qemu, mask out the
      presence of QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS if the machine type
      doesn't support hotpluggable cpus.
      920bbe5c
    • P
      qemu: Forbid config when topology based cpu count doesn't match the config · ffa536e0
      Peter Krempa 提交于
      As of qemu commit:
      commit a32ef3bfc12c8d0588f43f74dcc5280885bbdb30
      Author: Thomas Huth <thuth@redhat.com>
      Date:   Wed Jul 22 15:59:50 2015 +0200
      
          vl: Add another sanity check to smp_parse() function
      
      v2.4.0-952-ga32ef3b
      
      configuration where the maximum CPU count doesn't match the topology is
      rejected. Prior to that only configurations where the topology would
      contain more cpus than the maximum count would be rejected.
      
      Use QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS as a relevant recent enough
      witness to avoid breaking old configs.
      ffa536e0
    • P
      f17ddfee
    • P
      qemu: monitor: Return struct from qemuMonitor(Text|Json)QueryCPUs · b3180425
      Peter Krempa 提交于
      Prepare to extract more data by returning an array of structs rather than
      just an array of thread ids. Additionally report fatal errors separately
      from qemu not being able to produce data.
      b3180425
    • P
      qemu: monitor: Return structures from qemuMonitorGetCPUInfo · 5b5f494a
      Peter Krempa 提交于
      The function will gradually add more returned data. Return a struct for
      every vCPU containing the data.
      5b5f494a
    • C
      storage_backend_rbd: fix typos · 6de1d22c
      Chen Hanxiao 提交于
      s/failed/failed to
      Signed-off-by: NChen Hanxiao <chenhanxiao@gmail.com>
      6de1d22c
  2. 24 8月, 2016 13 次提交
  3. 23 8月, 2016 1 次提交
  4. 22 8月, 2016 1 次提交
  5. 20 8月, 2016 2 次提交
    • J
      qemu: Fix crash hot plugging luks volume · b4478c16
      John Ferlan 提交于
      https://bugzilla.redhat.com/show_bug.cgi?id=1367259
      
      Crash occurs because 'secrets' is being dereferenced in call:
      
              if (qemuDomainSecretSetup(conn, priv, secinfo, disk->info.alias,
                                        VIR_SECRET_USAGE_TYPE_VOLUME, NULL,
                                        &src->encryption->secrets[0]->seclookupdef,
                                        true) < 0)
      
      (gdb) p *src->encryption
      $1 = {format = 2, nsecrets = 0, secrets = 0x0, encinfo = {cipher_size = 0,
          cipher_name = 0x0, cipher_mode = 0x0, cipher_hash = 0x0, ivgen_name = 0x0,
          ivgen_hash = 0x0}}
      (gdb) bt
          priv=priv@entry=0x7fffc03be160, disk=disk@entry=0x7fffb4002ae0)
          at qemu/qemu_domain.c:1087
          disk=0x7fffb4002ae0, vm=0x7fffc03a2580, driver=0x7fffc02ca390,
          conn=0x7fffb00009a0) at qemu/qemu_hotplug.c:355
      
      Upon entry to qemuDomainAttachVirtioDiskDevice, src->encryption points
      at a valid 'secret' buffer w/ nsecrets == 1; however, the call to
      qemuDomainDetermineDiskChain will call virStorageFileGetMetadata
      and eventually virStorageFileGetMetadataInternal where the src->encryption
      was overwritten when probing the volume.
      
      Commit id 'a48c7141' added code to virStorageFileGetMetadataInternal
      to determine if the disk/volume would use/need encryption and allocated
      a meta->encryption. This overwrote an existing encryption buffer
      already provided by the XML
      
      This patch adds a check for meta->encryption already present before
      just allocating and overwriting an existing buffer. It then checks the
      existing encryption data to ensure the XML provided format for the
      disk matches the expected format read from the disk and errors if there
      is a mismatch.
      b4478c16
    • L
      network: allow limiting a <forwarder> element to certain domains · 0b6336c2
      Laine Stump 提交于
      For some unknown reason the original implementation of the <forwarder>
      element only took advantage of part of the functionality in the
      dnsmasq feature it exposes - it allowed specifying the ip address of a
      DNS server which *all* DNS requests would be forwarded to, like this:
      
         <forwarder addr='192.168.123.25'/>
      
      This is a frontend for dnsmasq's "server" option, which also allows
      you to specify a domain that must be matched in order for a request to
      be forwarded to a particular server. This patch adds support for
      specifying the domain. For example:
      
         <forwarder domain='example.com' addr='192.168.1.1'/>
         <forwarder domain='www.example.com'/>
         <forwarder domain='travesty.org' addr='10.0.0.1'/>
      
      would forward requests for bob.example.com, ftp.example.com and
      joe.corp.example.com all to the DNS server at 192.168.1.1, but would
      forward requests for travesty.org and www.travesty.org to
      10.0.0.1. And due to the second line, requests for www.example.com,
      and odd.www.example.com would be resolved by the libvirt network's own
      DNS server (i.e. thery wouldn't be immediately forwarded) even though
      they also match 'example.com' - the match is given to the entry with
      the longest matching domain. DNS requests not matching any of the
      entries would be resolved by the libvirt network's own DNS server.
      
      Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1331796
      0b6336c2