1. 20 6月, 2014 5 次提交
  2. 19 6月, 2014 9 次提交
    • M
      nodeinfo: Implement nodeGetFreePages · 38fa03f4
      Michal Privoznik 提交于
      And add stubs to other drivers like: lxc, qemu, uml and vbox.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      38fa03f4
    • M
      Introduce virNodeGetFreePages · 34f2d031
      Michal Privoznik 提交于
      The aim of the API is to get information on number of free pages
      on the system. The API behaves similar to the
      virNodeGetCellsFreeMemory(). User passes starting NUMA cell, the
      count of nodes that he's interested in, pages sizes (yes,
      multiple sizes can be queried at once) and the counts are
      returned in an array.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      34f2d031
    • M
      virCaps: expose pages info · 02129b7c
      Michal Privoznik 提交于
      There are two places where you'll find info on page sizes. The first
      one is under <cpu/> element, where all supported pages sizes are
      listed. Then the second one is under each <cell/> element which refers
      to concrete NUMA node. At this place, the size of page's pool is
      reported. So the capabilities XML looks something like this:
      
      <capabilities>
      
        <host>
          <uuid>01281cda-f352-cb11-a9db-e905fe22010c</uuid>
          <cpu>
            <arch>x86_64</arch>
            <model>Westmere</model>
            <vendor>Intel</vendor>
            <topology sockets='1' cores='1' threads='1'/>
            ...
            <pages unit='KiB' size='4'/>
            <pages unit='KiB' size='2048'/>
            <pages unit='KiB' size='1048576'/>
          </cpu>
          ...
          <topology>
            <cells num='4'>
              <cell id='0'>
                <memory unit='KiB'>4054408</memory>
                <pages unit='KiB' size='4'>1013602</pages>
                <pages unit='KiB' size='2048'>3</pages>
                <pages unit='KiB' size='1048576'>1</pages>
                <distances/>
                <cpus num='1'>
                  <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
                </cpus>
              </cell>
              <cell id='1'>
                <memory unit='KiB'>4071072</memory>
                <pages unit='KiB' size='4'>1017768</pages>
                <pages unit='KiB' size='2048'>3</pages>
                <pages unit='KiB' size='1048576'>1</pages>
                <distances/>
                <cpus num='1'>
                  <cpu id='1' socket_id='0' core_id='0' siblings='1'/>
                </cpus>
              </cell>
              ...
            </cells>
          </topology>
          ...
        </host>
      
        <guest/>
      
      </capabilities>
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      02129b7c
    • M
      virnuma: Introduce pages helpers · 35f1095e
      Michal Privoznik 提交于
      For future work we need two functions that fetches total number of
      pages and number of free pages for given NUMA node and page size
      (virNumaGetPageInfo()).
      
      Then we need to learn pages of what sizes are supported on given node
      (virNumaGetPages()).
      
      Note that system page size is disabled at the moment as there's one
      issue connected. If you have a NUMA node with huge pages allocated the
      kernel would return the normal size of memory for that node. It
      basically ignores the fact that huge pages steal size from the system
      memory. Until we resolve this, it's safer to not confuse users and
      hence not report any system pages yet.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      35f1095e
    • M
      nodeinfo: Rename nodeGetFreeMemory to nodeGetMemory · 99a63aed
      Michal Privoznik 提交于
      For future work we want to get info for not only the free memory
      but overall memory size too. That's why the function must have
      new signature too.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      99a63aed
    • M
      virnuma: Introduce virNumaNodeIsAvailable · 356c6f38
      Michal Privoznik 提交于
      Not on all hosts the set of NUMA nodes IDs is continuous. This is
      critical, because our code currently assumes the set doesn't contain
      holes. For instance in nodeGetFreeMemory() we can see the following
      pattern:
      
          if ((max_node = virNumaGetMaxNode()) < 0)
              return 0;
      
          for (n = 0; n <= max_node; n++) {
              ...
          }
      
      while it should be something like this:
      
          if ((max_node = virNumaGetMaxNode()) < 0)
              return 0;
      
          for (n = 0; n <= max_node; n++) {
              if (!virNumaNodeIsAvailable(n))
                  continue;
              ...
          }
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      356c6f38
    • E
      blockjob: use stable disk string in job event · 1bfe73a1
      Eric Blake 提交于
      When the block job event was first added, it was for block pull,
      where the active layer of the disk remains the same name.  It was
      also in a day where we only cared about local files, and so we
      always had a canonical absolute file name.  But two things have
      changed since then: we now have network disks, where determining
      a single absolute string does not really make sense; and we have
      two-phase jobs (copy and active commit) where the name of the
      active layer changes between the first event (ready, on the old
      name) and second (complete, on the pivoted name).
      
      Adam Litke reported that having an unstable string between events
      makes life harder for clients.  Furthermore, all of our API that
      operate on a particular disk of a domain accept multiple strings:
      not only the absolute name of the active layer, but also the
      destination device name (such as 'vda').  As this latter name is
      stable, even for network sources, it serves as a better string
      to supply in block job events.
      
      But backwards-compatibility demands that we should not change the
      name handed to users unless they explicitly request it.  Therefore,
      this patch adds a new event, BLOCK_JOB_2 (alas, I couldn't think of
      any nicer name - but at least Migrate2 and Migrate3 are precedent
      for a number suffix).  We must double up on emitting both old-style
      and new-style events according to what clients have registered for
      (see also how IOError and IOErrorReason emits double events, but
      there the difference was a larger struct rather than changed
      meaning of one of the struct members).
      
      Unfortunately, adding a new event isn't something that can easily
      be broken into pieces, so the commit is rather large.
      
      * include/libvirt/libvirt.h.in (virDomainEventID): Add a new id
      for VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2.
      (virConnectDomainEventBlockJobCallback): Document new semantics.
      * src/conf/domain_event.c (_virDomainEventBlockJob): Rename field,
      to ensure we catch all clients.
      (virDomainEventBlockJobNew): Add parameter.
      (virDomainEventBlockJobDispose)
      (virDomainEventBlockJobNewFromObj)
      (virDomainEventBlockJobNewFromDom)
      (virDomainEventDispatchDefaultFunc): Adjust clients.
      (virDomainEventBlockJob2NewFromObj)
      (virDomainEventBlockJob2NewFromDom): New functions.
      * src/conf/domain_event.h: Add new prototypes.
      * src/libvirt_private.syms (domain_event.h): Export new functions.
      * src/qemu/qemu_driver.c (qemuDomainBlockJobImpl): Generate two
      different events.
      * src/qemu/qemu_process.c (qemuProcessHandleBlockJob): Likewise.
      * src/remote/remote_protocol.x
      (remote_domain_event_block_job_2_msg): New struct.
      (REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB_2): New RPC.
      * src/remote/remote_driver.c
      (remoteDomainBuildEventBlockJob2): New handler.
      (remoteEvents): Register new event.
      * daemon/remote.c (remoteRelayDomainEventBlockJob2): New handler.
      (domainEventCallbacks): Register new event.
      * tools/virsh-domain.c (vshEventCallbacks): Likewise.
      (vshEventBlockJobPrint): Adjust client.
      * src/remote_protocol-structs: Regenerate.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      1bfe73a1
    • J
      Fix xmconfigtest · 64b60266
      Jim Fehlig 提交于
      Commit ac63014c introduced a regression in the conversion of Xen
      xm config to XML by emitting an empty <cmdline>.  Prior to this
      commit, <cmdline> was omitted if the xm config was missing (or
      contained an empty) 'extra='.
      64b60266
    • I
      xen: handle root= in xen-xm configuration files. · ac63014c
      Ian Campbell 提交于
      In addition to extra= xm supported a root= option which was supposed
      to be incorporated into the final command line. Handle that for "virsh
      domxml-from-native xen-xm". Tested with the libxl backend.
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      ac63014c
  3. 18 6月, 2014 3 次提交
  4. 17 6月, 2014 10 次提交
  5. 16 6月, 2014 5 次提交
    • M
      nodedev: Introduce <pci-express/> to PCI devices · 16ebf10f
      Michal Privoznik 提交于
      This new element is there to represent PCI-Express capabilities
      of a PCI devices, like link speed, number of lanes, etc.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      16ebf10f
    • M
      virpci: Introduce virPCIDeviceIsPCIExpress and friends · a22a7a5e
      Michal Privoznik 提交于
      These functions will handle PCIe devices and their link capabilities
      to query some info about it.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      a22a7a5e
    • E
      blockcommit: require base below top · 3e3c6ff1
      Eric Blake 提交于
      The block commit code looks for an explicit base file relative
      to the discovered top file; so for a chain of:
        base <- snap1 <- snap2 <- snap3
      and a command of:
        virsh blockcommit $dom vda --base snap2 --top snap1
      we got a sane message (here from libvirt 1.0.5):
      error: invalid argument: could not find base 'snap2' below 'snap1' in chain for 'vda'
      
      Meanwhile, recent refactoring has slightly reduced the quality of the
      libvirt error messages, by losing the phrase 'below xyz':
      error: invalid argument: could not find image 'snap2' in chain for 'snap3'
      
      But we had a one-off, where we were not excluding the top file
      itself in searching for the base; thankfully qemu still reports
      the error, but the quality is worse:
        virsh blockcommit $dom vda --base snap2 --top snap2
      error: internal error unable to execute QEMU command 'block-commit': Base '/snap2' not found
      
      Fix the one-off in blockcommit by changing the semantics of name
      lookup - if a starting point is specified, then the result must
      be below that point, rather than including that point.  The only
      other call to chain lookup was blockpull code, which was already
      forcing the lookup to omit the active layer and only needs a
      tweak to use the new semantics.
      
      This also fixes the bug exposed in the testsuite, where when doing
      a lookup pinned to an intermediate point in the chain, we were
      unable to return the name of the parent also in the chain.
      
      * src/util/virstoragefile.c (virStorageFileChainLookup): Change
      semantics for non-NULL startFrom.
      * src/qemu/qemu_driver.c (qemuDomainBlockJobImpl): Adjust caller,
      to keep existing semantics.
      * tests/virstoragetest.c (mymain): Adjust to expose new semantics.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      3e3c6ff1
    • P
      qemu: snapshot: Don't mark all block disks for metadata reuse · b77d3d9b
      Peter Krempa 提交于
      For block devices used as snapshot source the new snapshot code would
      set the reuse flag. This inhibits to take snapshot without specially
      preparing the block image before taking the snapshot.
      
      Fortunately this is not a regression as only the new way of specifying
      snapshot source is affected.
      
      For the followin snapshot XML:
       <domainsnapshot>
         <disks>
           <disk name='vda' type='block'>
             <driver type='qcow2'/>
             <source dev="/dev/andariel/testsnap" />
           </disk>
         </disks>
       </domainsnapshot>
      
      You'd get:
      error: internal error: unable to execute QEMU command 'transaction': Image is not in qcow2 format
      
      After this patch the snapshot is created successfully.
      b77d3d9b
    • P
      leaseshelper: fix another crash · 647bdf02
      Pavel Hrdina 提交于
      We create a 'lease_new' when we are adding new lease entry, then later
      in the code we add the 'lease_new' into a 'leases_array_new' which
      leads into the crash because we double free the 'lease_new'.
      
      To prevent the double free we set the 'lease_new' to NULL after
      successful append into the 'leases_array_new'.
      Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
      647bdf02
  6. 14 6月, 2014 4 次提交
  7. 13 6月, 2014 3 次提交
    • R
      bhyve: implement PCI address allocation · aad479dc
      Roman Bogorodskiy 提交于
      Automatically allocate PCI addresses for devices instead
      of hardcoding them in the driver code. The current
      allocation schema is to dedicate an entire slot for each devices.
      
      Also, allow having arbitrary number of devices.
      aad479dc
    • M
      virNetDevGetLinkInfo: Don't report link speed if NIC's not up · 90ba5ef1
      Michal Privoznik 提交于
      The kernel's more broken than one would think. Various drivers report
      various (usually spurious) values if the interface is in other state
      than 'up' . While on some we experience -EINVAL when read()-ing the
      speed sysfs file, with other drivers we might get anything from 0 to
      UINT_MAX. If that's the case it's better to not report link speed.
      Well, the interface is not up anyway.
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      90ba5ef1
    • E
      blockcommit: update error messages related to block jobs · 278c51af
      Eric Blake 提交于
      A future patch will add two-phase block commit jobs; as the
      mechanism for managing them is similar to managing a block copy
      job, existing errors should be made generic enough to occur
      for either job type.
      
      * src/conf/domain_conf.c (virDomainHasDiskMirror): Update
      comment.
      * src/qemu/qemu_driver.c (qemuDomainDefineXML)
      (qemuDomainSnapshotCreateXML, qemuDomainRevertToSnapshot)
      (qemuDomainBlockJobImpl, qemuDomainBlockCopy): Update error
      message.
      * src/qemu/qemu_hotplug.c (qemuDomainDetachDiskDevice): Likewise.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      278c51af
  8. 12 6月, 2014 1 次提交
    • M
      virNodeDevCapPCIDevParseXML: Initialize numa_node variable · bab45585
      Michal Privoznik 提交于
      With one of my recent patches (1c702778) libvirt's capable of
      reporting NUMA node locality for PCI devices. The node ID is
      stored in pci_dev.numa_node variable. However, since zero is
      valid NUMA node ID, the default is -1 as it is in kernel too.
      So, if the PCI device is not tied to any specific NUMA node, the
      default is then NOT printed into XML. Therefore, when parsing
      node device XML, the <node/> element is optional. But currently,
      if it's not there, we must set sane default, otherwise after
      parsing in the memory representation doesn't match the XML. We
      are already doing this in other place: udevProcessPCI().
      Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
      bab45585