1. 09 3月, 2012 14 次提交
    • O
      virsh: Use option alias for outmoded "--persistent" · 1e31b835
      Osier Yang 提交于
      Since VIR_DOMAIN_AFFECT_{LIVE,CONFIG,CURRENT} was created,
      all new virsh commands use "--config" to represents the
      persistent changing. This patch add "--config" option
      for the old commands which still use "--persistent",
      and "--persistent" is now alias of "--config".
      
      tools/virsh.c: (use "--config", and "--persistent" is
          alias of "--config" now).
          cmdDomIfSetLink, cmdDomIfGetLink, cmdAttachDevice,
          cmdDetachDevice, cmdUpdateDevice, cmdAttachInterface,
          cmdDetachInterface, cmdAttachDisk, cmdDetachDisk
      
      toos/virsh.pod: Update docs of the changed commands, and
          add some missed docs for "--config" (detach-interface,
          detach-disk, and detach-device).
      1e31b835
    • L
      remove daemon/probes.h from .gitignore · f51be165
      Laine Stump 提交于
      The file daemon/probes.h used to be generated as part of a build, but
      is no longer used. However, a stale copy of it lying around could
      cause a build to fail. Removing it from .gitignore will make it more
      likely someone will notice that they have it lying around.
      f51be165
    • L
      util: consolidate duplicated error messages in pci.c · b8e47850
      Laine Stump 提交于
      This is nearly identical to an earlier patch for virnetlink.c.
      
      There are special stub versions of all public functions in this file
      that are compiled when the platform isn't linux. Each of these
      functions had an almost identical message, differing only in the
      function name included in the message. Since log messages already
      contain the function name, we can just define a const char* with the
      common part of the string, and use that same string for all the log
      messages.
      
      If nothing else, this at least makes for less strings that need
      translating...
      b8e47850
    • L
      qemu: eliminate memory leak in qemuDomainUpdateDeviceConfig · 7a23ba09
      Laine Stump 提交于
      This function was freeing a virDomainNetDef with
      VIR_FREE(). virDomainNetDef is a complex structure with many pointers
      to other dynamically allocated data; to properly free it
      virDomainNetDefFree() must be called instead, otherwise several
      strings (and potentially other things) will be leaked.
      7a23ba09
    • L
      qemu: support persistent hotplug of <hostdev> devices · edb6fc3a
      Laine Stump 提交于
      For some reason, although live hotplug of <hostdev> devices is
      supported, persistent hotplug is not. This patch adds the proper
      VIR_DOMAIN_DEVICE_HOSTDEV cases to the switches in
      qemuDomainAttachDeviceConfig and qemuDomainDetachDeviceConfig.
      edb6fc3a
    • L
      util: standardize return from functions calling virNetlinkCommand · 0208face
      Laine Stump 提交于
      There are several functions that call virNetlinkCommand, and they all
      follow a common pattern, with three exit labels: err_exit (or
      cleanup), malformed_resp, and buffer_too_small. All three of these
      labels do their own cleanup and have their own return. However, the
      malformed_resp label usually frees the same items as the
      cleanup/err_exit label, and the buffer_too_small label just doesn't
      free recvbuf (because it's known to always be NULL at the time we goto
      buffer_too_small.
      
      In order to simplify and standardize the code, I've made the following
      changes to all of these functions:
      
      1) err_exit is replaced with the more libvirt-ish "cleanup", which
         makes sense because in all cases this code is also executed in the
         case of success, so labelling it err_exit may be confusing.
      
      2) rc is initialized to -1, and set to 0 just before the cleanup
         label. Any code that currently sets rc = -1 is made to instead goto
         cleanup.
      
      3) malformed_resp and buffer_too_small just log their error and goto
         cleanup. This gives us a single return path, and a single place to
         free up resources.
      
      4) In one instance, rather then logging an error immediately, a char*
         msg was pointed to an error string, then goto cleanup (and cleanup
         would log an error if msg != NULL). It takes no more lines of code
         to just log the message as we encounter it.
      
      This patch should have 0 functional effects.
      0208face
    • L
      util: eliminate device object leaks related to virDomain*Remove*() · f985773d
      Laine Stump 提交于
      There are several functions in domain_conf.c that remove a device
      object from the domain's list of that object type, but don't free the
      object or return it to the caller to free. In many cases this isn't a
      problem because the caller already had a pointer to the object and
      frees it afterward, but in several cases the removed object was just
      left floating around with no references to it.
      
      In particular, the function qemuDomainDetachDeviceConfig() calls
      functions to locate and remove net (virDomainNetRemoveByMac), disk
      (virDomainDiskRemoveByName()), and lease (virDomainLeaseRemove())
      devices, but neither it nor its caller qemuDomainModifyDeviceConfig()
      ever obtain a pointer to the device being removed, much less free it.
      
      This patch modifies the following "remove" functions to return a
      pointer to the device object being removed from the domain device
      arrays, to give the caller the option of freeing the device object
      using that pointer if needed. In places where the object was
      previously leaked, it is now freed:
      
        virDomainDiskRemove
        virDomainDiskRemoveByName
        virDomainNetRemove
        virDomainNetRemoveByMac
        virDomainHostdevRemove
        virDomainLeaseRemove
        virDomainLeaseRemoveAt
      
      The functions that had been leaking:
      
        libxlDomainDetachConfig - leaked a virDomainDiskDef
        qemuDomainDetachDeviceConfig - could leak a virDomainDiskDef,
                                  a virDomainNetDef, or a
                                  virDomainLeaseDef
        qemuDomainDetachLease   - leaked a virDomainLeaseDef
      f985773d
    • L
      qemu: don't 'remove' hostdev objects from domain if operation fails · b59e5984
      Laine Stump 提交于
      There were certain paths through the hostdev detach code that could
      lead to the lower level function failing (and not removing the object
      from the domain's hostdevs list), but the higher level function
      free'ing the hostdev object anyway. This would leave a stale
      hostdevdef pointer in the list, which would surely cause a problem
      eventually.
      
      This patch relocates virDomainHostdevRemove from the lower level
      functions qemuDomainDetachThisHostDevice and
      qemuDomainDetachHostPciDevice, to their caller
      qemuDomainDetachThisHostDevice, placing it just before the call to
      virDomainHostdevDefFree. This makes it easy to verify that either both
      operations are done, or neither.
      
      NB: The "dangling pointer" part of this problem was introduced in
      commit 13d5a6, so it is not present in libvirt versions prior to
      0.9.9. Earlier versions would return failure in certain cases even
      though the the device object was removed/deleted, but the removal and
      deletion operations would always both happen or neither.
      b59e5984
    • L
      util: make virDomainLeaseDefFree global · 8845d293
      Laine Stump 提交于
      It will be used in a different file in an upcoming patch.
      8845d293
    • L
      util: consolidate duplicated error messages in virnetlink.c · 879bcee0
      Laine Stump 提交于
      There are special stub versions of all public functions in this file
      that are compiled when either libnl isn't available or the platform
      isn't linux. Each of these functions had two almost identical message,
      differing only in the function name included in the message. Since log
      messages already contain the function name, we can just define a const
      char* with the common part of the string, and use that same string for
      all the log messages.
      
      Also, rather than doing #if defined ... #else ... #endif *inside the
      error log macro invocation*, this patch does #if defined ... just
      once, using it to decide which single string to define. This turns the
      error log in each function from 6 lines, to 1 line.
      879bcee0
    • L
      util: log error on OOM in virNetDevOpenvswitchAddPort · d403b84c
      Laine Stump 提交于
      OOM conditions silently returned failure.
      d403b84c
    • A
      Attach vm-id to Open vSwitch interfaces. · ac8bbdbd
      Ansis Atteka 提交于
      This patch will allow OpenFlow controllers to identify which interface
      belongs to a particular VM by using the Domain UUID.
      
      ovs-vsctl get Interface vnet0 external_ids
      {attached-mac="52:54:00:8C:55:2C", iface-id="83ce45d6-3639-096e-ab3c-21f66a05f7fa", iface-status=active, vm-id="142a90a7-0acc-ab92-511c-586f12da8851"}
      
      V2 changes:
      Replaced vm-uuid with vm-id. There was a discussion in Open vSwitch
      mailinglist that we should stick with the same DB key postfixes for the
      sake of consistency (e.g iface-id, vm-id ...).
      ac8bbdbd
    • L
      util: whitespace change to virNetDevOpenvswitchAddPort · 38e56abb
      Laine Stump 提交于
      The indentation on the final lines of the function was off by four
      spaces, making me wonder for a second if there was something
      missing. (There wasn't.)
      38e56abb
    • L
      util: add stub pciConfigAddressToSysfsFile for non-linux platforms · 09d22af1
      Laine Stump 提交于
      Absence of this stub function caused a build failure on mingw32.
      09d22af1
  2. 08 3月, 2012 23 次提交
    • E
      rpc: generalize solution for VPATH builds · 4d2e8355
      Eric Blake 提交于
      Commit 5d4b0c4c tried to fix certain classes of VPATH builds,
      but was too limited.  In particular, Guannan Ren reported:
      
      >    For example: The libvirt source code resides in /home/testuser,
      >                 I make dist in /tmp/buildvpath, the XDR routine .c file will
      >                 include full path of the header file like:
      >
      >                 #include "/home/testuser/src/rpc/virnetprotocol.h"
      >                 #include "internal.h"
      >                 #include <arpa/inet.h>
      >
      >    If we distribute the tarball to another machine to compile,
      >    it will report error as follows:
      >
      >    rpc/virnetprotocol.c:7:59: fatal error:
      >    /home/testuser/src/rpc/virnetprotocol.h: No such file or directory
      
      * src/rpc/genprotocol.pl: Fix more include lines.
      4d2e8355
    • P
      xml: Clean up schemas to use shared data types instead of local · cdab483e
      Peter Krempa 提交于
      The schema files contained duplicate data types that can be shared from
      the basictypes.rng file.
      cdab483e
    • M
      util: Don't overflow on errno in virFileAccessibleAs · f05fb6c5
      Michal Privoznik 提交于
      If we need to virFork() to check assess() under different
      UID+GID we need to translate returned status via WEXITSTATUS().
      Otherwise, we may return values greater than 255 which is
      obviously wrong.
      f05fb6c5
    • P
      sanlock: Use STREQ_NULLABLE instead of STREQ on strings that may be null · 96b41f63
      Peter Krempa 提交于
      The function sanlock_inquire can return NULL in the state string if the
      message consists only of a header. The return value is arbitrary and
      sent by the server. We should proceed carefully while touching such
      pointers.
      96b41f63
    • P
      sanlock: Fix condition left crippled while debugging · 3bf5f042
      Peter Krempa 提交于
      3bf5f042
    • M
      qemu: Don't parse device twice in attach/detach · 1e0534a7
      Michal Privoznik 提交于
      Some members are generated during XML parse (e.g. MAC address of
      an interface); However, with current implementation, if we
      are plugging a device both to persistent and live config,
      we parse given XML twice: first time for live, second for config.
      This is wrong then as the second time we are not guaranteed
      to generate same values as we did for the first time.
      To prevent that we need to create a copy of DeviceDefPtr;
      This is done through format/parse process instead of writing
      functions for deep copy as it is easier to maintain:
      adding new field to any virDomain*DefPtr doesn't require change
      of copying function.
      1e0534a7
    • M
      qemu: Fix startupPolicy for snapshot-revert · b819b3b7
      Michal Privoznik 提交于
      Currently, startupPolicy='requisite' was determining cold boot
      by migrateFrom != NULL. That means, if domain was started up
      with migrateFrom set we didn't require disk source path and allowed
      it to be dropped. However, on snapshot-revert domain wasn't migrated
      but according to documentation, requisite should drop disk source
      as well.
      b819b3b7
    • E
      virsh: improve memory unit parsing · 210ed0e8
      Eric Blake 提交于
      The last vestige of the inaccurate 'kilobytes' when we meant 1024 is
      now gone.  And virsh is now useful for setting memory in units other
      than KiB.
      
      * tools/virsh.c (cmdSetmem, cmdSetmaxmem): Use new helper routine,
      allow passing bogus arguments on to hypervisor to test driver
      sanity checking, and fix leak on parse error.
      (vshMemtuneGetSize): New helper.
      (cmdMemtune): Use it.
      * tools/virsh.pod (setmem, setmaxmem, memtune): Document this.
      210ed0e8
    • E
      virsh: improve storage unit parsing · ab95da40
      Eric Blake 提交于
      Now can now do:
      
      virsh vol-resize $vol 10M
      virsh blockresize $dom $vol 10M
      
      to get both interfaces to resize to 10MiB.  The remaining wart
      is that vol-resize defaults to bytes, but blockresize defaults
      to KiB, but we can't break existing scripts; oh well, it's no
      worse than the same wart of the underlying virDomainBlockResize.
      
      The API for virStorageVolResize states that capacity must always
      be positive, and that the presence of shrink and delta flags is
      what implies a negative change.
      
      * tools/virsh.c (vshCommandOptScaledInt): New function.
      (cmdVolResize): Don't pass negative size.
      (cmdVolSize): Rename...
      (vshVolSize): ...and use new helper routine.
      (cmdBlockResize): Use new helper routine, and support new bytes
      flag.
      * tools/virsh.pod (NOTES): Document suffixes.
      (blockresize, vol-create-as, vol-resize): Point to notes.
      ab95da40
    • E
      virsh: add command aliases, and rename nodedev-detach · af3f9aab
      Eric Blake 提交于
      Just because our public API has a typo doesn't mean that virsh
      has to keep the typo.
      
      * tools/virsh.c (VSH_CMD_FLAG_ALIAS): New flag.
      (nodedevCmds): Use it.
      (cmdHelp): Omit alias commands.
      (cmdNodeDeviceDettach): Rename...
      (cmdNodeDeviceDetach): ...to this.
      * tools/virsh.pod (nodedev-detach): Document it.
      af3f9aab
    • E
      virsh: use option aliases · 3d150d32
      Eric Blake 提交于
      Command line interfaces should use dash, not underscore, as many
      keyboard layouts allow that to be typed with fewer shift key presses.
      
      Also, the US spelling of --tunneled gets more google hits than the
      UK spelling of --tunnelled.
      
      * tools/virsh.c (opts_migrate): Allow US variant.
      (opts_blkdeviotune): Prefer - over _.
      * tools/virsh.pod (blkdeviotune): Fix spelling.
      3d150d32
    • E
      virsh: add option aliases · 1c56b9fe
      Eric Blake 提交于
      In the past, we have created some virsh options with less-than-stellar
      names.  For back-compat reasons, those names must continue to parse,
      but we don't want to document them in help output.  This introduces
      a new option type, an alias, which points to a canonical option name
      later in the option list.
      
      I'm actually quite impressed that our code has already been factored
      to do all option parsing through common entry points, such that I
      got this added in relatively few lines of code!
      
      * tools/virsh.c (VSH_OT_ALIAS): New option type.
      (opts_echo): Hook up an alias, for easy testing.
      (vshCmddefOptParse, vshCmddefHelp, vshCmddefGetOption): Allow for
      aliases.
      * tools/virsh.pod (NOTES): Document promise of back-compat.
      * tests/virshtest.c (mymain): Test new feature.
      1c56b9fe
    • E
      xml: allow scaled memory on input · 2e22f23b
      Eric Blake 提交于
      Output is still in kibibytes, but input can now be in different
      scales for ease of typing.
      
      * src/conf/domain_conf.c (virDomainParseMemory): New helper.
      (virDomainDefParseXML): Use it when parsing.
      * docs/schemas/domaincommon.rng: Expand XML; rename memoryKBElement
      to memoryElement and update callers.
      * docs/formatdomain.html.in (elementsMemoryAllocation): Document
      scaling.
      * tests/qemuxml2argvdata/qemuxml2argv-memtune.xml: Adjust test.
      * tests/qemuxml2xmltest.c: Likewise.
      * tests/qemuxml2xmloutdata/qemuxml2xmlout-memtune.xml: New file.
      2e22f23b
    • E
      xml: use better types for memory values · 4888f0fb
      Eric Blake 提交于
      Using 'unsigned long' for memory values is risky on 32-bit platforms,
      as a PAE guest can have more than 4GiB memory.  Our API is
      (unfortunately) locked at 'unsigned long' and a scale of 1024, but
      the rest of our system should consistently use 64-bit values,
      especially since the previous patch centralized overflow checking.
      
      * src/conf/domain_conf.h (_virDomainDef): Always use 64-bit values
      for memory.  Change hugepage_backed to a bool.
      * src/conf/domain_conf.c (virDomainDefParseXML)
      (virDomainDefCheckABIStability, virDomainDefFormatInternal): Fix
      clients.
      * src/vmx/vmx.c (virVMXFormatConfig): Likewise.
      * src/xenxs/xen_sxpr.c (xenParseSxpr, xenFormatSxpr): Likewise.
      * src/xenxs/xen_xm.c (xenXMConfigGetULongLong): New function.
      (xenXMConfigGetULong, xenXMConfigSetInt): Avoid truncation.
      (xenParseXM, xenFormatXM): Fix clients.
      * src/phyp/phyp_driver.c (phypBuildLpar): Likewise.
      * src/openvz/openvz_driver.c (openvzDomainSetMemoryInternal):
      Likewise.
      * src/vbox/vbox_tmpl.c (vboxDomainDefineXML): Likewise.
      * src/qemu/qemu_command.c (qemuBuildCommandLine): Likewise.
      * src/qemu/qemu_process.c (qemuProcessStart): Likewise.
      * src/qemu/qemu_monitor.h (qemuMonitorGetBalloonInfo): Likewise.
      * src/qemu/qemu_monitor_text.h (qemuMonitorTextGetBalloonInfo):
      Likewise.
      * src/qemu/qemu_monitor_text.c (qemuMonitorTextGetBalloonInfo):
      Likewise.
      * src/qemu/qemu_monitor_json.h (qemuMonitorJSONGetBalloonInfo):
      Likewise.
      * src/qemu/qemu_monitor_json.c (qemuMonitorJSONGetBalloonInfo):
      Likewise.
      * src/qemu/qemu_driver.c (qemudDomainGetInfo)
      (qemuDomainGetXMLDesc): Likewise.
      * src/uml/uml_conf.c (umlBuildCommandLine): Likewise.
      4888f0fb
    • E
      xml: use long long internally, to centralize overflow checks · 73b99771
      Eric Blake 提交于
      On 64-bit platforms, unsigned long and unsigned long long are
      identical, so we don't have to worry about overflow checks.
      On 32-bit platforms, anywhere we narrow unsigned long long back
      to unsigned long, we have to worry about overflow; it's easier
      to do this in one place by having most of the code use the same
      or wider types, and only doing the narrowing at the last minute.
      Therefore, the memory set commands remain unsigned long, and
      the memory get command now centralizes the overflow check into
      libvirt.c, so that drivers don't have to repeat the work.
      
      This also fixes a bug where xen returned the wrong value on
      failure (most APIs return -1 on failure, but getMaxMemory
      must return 0 on failure).
      
      * src/driver.h (virDrvDomainGetMaxMemory): Use long long.
      * src/libvirt.c (virDomainGetMaxMemory): Raise overflow.
      * src/test/test_driver.c (testGetMaxMemory): Fix driver.
      * src/rpc/gendispatch.pl (name_to_ProcName): Likewise.
      * src/xen/xen_hypervisor.c (xenHypervisorGetMaxMemory): Likewise.
      * src/xen/xen_driver.c (xenUnifiedDomainGetMaxMemory): Likewise.
      * src/xen/xend_internal.c (xenDaemonDomainGetMaxMemory):
      Likewise.
      * src/xen/xend_internal.h (xenDaemonDomainGetMaxMemory):
      Likewise.
      * src/xen/xm_internal.c (xenXMDomainGetMaxMemory): Likewise.
      * src/xen/xm_internal.h (xenXMDomainGetMaxMemory): Likewise.
      * src/xen/xs_internal.c (xenStoreDomainGetMaxMemory): Likewise.
      * src/xen/xs_internal.h (xenStoreDomainGetMaxMemory): Likewise.
      * src/xenapi/xenapi_driver.c (xenapiDomainGetMaxMemory):
      Likewise.
      * src/esx/esx_driver.c (esxDomainGetMaxMemory): Likewise.
      * src/libxl/libxl_driver.c (libxlDomainGetMaxMemory): Likewise.
      * src/qemu/qemu_driver.c (qemudDomainGetMaxMemory): Likewise.
      * src/lxc/lxc_driver.c (lxcDomainGetMaxMemory): Likewise.
      * src/uml/uml_driver.c (umlDomainGetMaxMemory): Likewise.
      73b99771
    • E
      xml: drop unenforced minimum memory limit from RNG · 1b1402b9
      Eric Blake 提交于
      The test domain allows <memory>0</memory>, but the RNG was stating
      that memory had to be at least 4096000 bytes.  Hypervisors should
      enforce their own limits, rather than complicating the RNG.
      
      Meanwhile, some copy and paste had introduced some fishy constructs
      in various unit tests.
      
      * docs/schemas/domaincommon.rng (memoryKB, memoryKBElement): Drop
      limit that isn't enforced in code.
      * src/conf/domain_conf.c (virDomainDefParseXML): Require current
      <= maximum.
      * tests/qemuxml2argvdata/*.xml: Fix offenders.
      1b1402b9
    • E
      storage: support more scaling suffixes · 2e148612
      Eric Blake 提交于
      Disk manufacturers are fond of quoting sizes in powers of 10,
      rather than powers of 2 (after all, 2.1 GB sounds larger than
      2.0 GiB, even though the exact opposite is true).  So, we might
      as well follow coreutils' lead in supporting three types of
      suffix: single letter ${u} (which we already had) and ${u}iB
      for the power of 2, and ${u}B for power of 10.
      
      Additionally, it is impossible to create a file with more than
      2**63 bytes, since off_t is signed (if you have enough storage
      to even create one 8EiB file, I'm jealous).  This now reports
      failure up front rather than down the road when the kernel
      finally refuses an impossible size.
      
      * docs/schemas/basictypes.rng (unit): Add suffixes.
      * src/conf/storage_conf.c (virStorageSize): Use new function.
      * docs/formatstorage.html.in: Document it.
      * tests/storagevolxml2xmlin/vol-file-backing.xml: Test it.
      * tests/storagevolxml2xmlin/vol-file.xml: Likewise.
      2e148612
    • E
      xml: output memory unit for clarity · 26545784
      Eric Blake 提交于
      Make it obvious to 'dumpxml' readers what unit we are using,
      since our default of KiB for memory (1024) differs from qemu's
      default of MiB; and differs from our use of bytes for storage.
      
      Tests were updated via:
      
      $ find tests/*data tests/*out -name '*.xml' | \
        xargs sed -i 's/<\(memory\|currentMemory\|hard_limit\|soft_limit\|min_guarantee\|swap_hard_limit\)>/<\1 unit='"'KiB'>/"
      $ find tests/*data tests/*out -name '*.xml' | \
        xargs sed -i 's/<\(capacity\|allocation\|available\)>/<\1 unit='"'bytes'>/"
      
      followed by a few fixes for the stragglers.
      
      Note that with this patch, the RNG for <memory> still forbids
      validation of anything except unit='KiB', since the code silently
      ignores the attribute; a later patch will expand <memory> to allow
      scaled input in the code and update the RNG to match.
      
      * docs/schemas/basictypes.rng (unit): Add 'bytes'.
      (scaledInteger): New define.
      * docs/schemas/storagevol.rng (sizing): Use it.
      * docs/schemas/storagepool.rng (sizing): Likewise.
      * docs/schemas/domaincommon.rng (memoryKBElement): New define; use
      for memory elements.
      * src/conf/storage_conf.c (virStoragePoolDefFormat)
      (virStorageVolDefFormat): Likewise.
      * src/conf/domain_conf.h (_virDomainDef): Document unit used
      internally.
      * src/conf/storage_conf.h (_virStoragePoolDef, _virStorageVolDef):
      Likewise.
      * tests/*data/*.xml: Update all tests.
      * tests/*out/*.xml: Likewise.
      * tests/define-dev-segfault: Likewise.
      * tests/openvzutilstest.c (testReadNetworkConf): Likewise.
      * tests/qemuargv2xmltest.c (blankProblemElements): Likewise.
      26545784
    • E
      xml: share 'unit' in RNG · cb7583e1
      Eric Blake 提交于
      The code supported unit='E' for "exabyte", but the RNG did not;
      conversely, the RNG supported "z" and "y" but the code did not
      (I'm jealous if you have that much storage, particularly since
      it won't fit in 64-bit off_t).  Also, the code supported
      <allocation unit='...'>, but not the RNG.
      
      In an effort to make 'unit' more worthwhile in future patches,
      it's easier to share it between files.
      
      In making this factorization, note that absFilePath is more
      permissive than 'path', so storage pools and storage volumes
      will now validate with a wider set of file names than before.
      I don't think this should be a problem in practice.
      
      * docs/schemas/storagepool.rng: Include basic types, rather than
      repeating things here.
      * docs/schemas/storagevol.rng: Likewise.
      * docs/schemas/basictypes.rng: Add 'unsignedLong', 'unit', and fix
      to match storage code.
      cb7583e1
    • E
      util: new function for scaling numbers · 0d90823e
      Eric Blake 提交于
      Scaling an integer based on a suffix is something we plan on reusing
      in several contexts: XML parsing, virsh CLI parsing, and possibly
      elsewhere.  Make it easy to reuse, as well as adding in support for
      powers of 1000.
      
      * src/util/util.h (virScaleInteger): New function.
      * src/util/util.c (virScaleInteger): Implement it.
      * src/libvirt_private.syms (util.h): Export it.
      0d90823e
    • E
      api: add overflow error · 239fb8c4
      Eric Blake 提交于
      Overflow can be user-induced, so it deserves more than being called
      an internal error.  Note that in general, 32-bit platforms have
      far more places to trigger this error (anywhere the public API
      used 'unsigned long' but the other side of the connection is a
      64-bit server); but some are possible on 64-bit platforms (where
      the public API computes the product of two numbers).
      
      * include/libvirt/virterror.h (VIR_ERR_OVERFLOW): New error.
      * src/util/virterror.c (virErrorMsg): Translate it.
      * src/libvirt.c (virDomainSetVcpusFlags, virDomainGetVcpuPinInfo)
      (virDomainGetVcpus, virDomainGetCPUStats): Use it.
      * daemon/remote.c (HYPER_TO_TYPE): Likewise.
      * src/qemu/qemu_driver.c (qemuDomainBlockResize): Likewise.
      239fb8c4
    • E
      docs: use correct terminology for 1024 bytes · 9dfdeadc
      Eric Blake 提交于
      Yes, I like kilobytes better than kibibytes (when I say kilobytes,
      I generally mean 1024).  But since the term is ambiguous, it can't
      hurt to say what we mean, by using both the correct name and
      calling out the numeric equivalent.
      
      * src/libvirt.c (virDomainGetMaxMemory, virDomainSetMaxMemory)
      (virDomainSetMemory, virDomainSetMemoryFlags)
      (virNodeGetFreeMemory): Tweak wording.
      * docs/formatdomain.html.in: Likewise.
      * docs/formatstorage.html.in: Likewise.
      9dfdeadc
    • L
      util: fix build mingw (and all non-linux) build failure · 861707b9
      Laine Stump 提交于
      ATTRIBUTE_UNUSED was accidentally forgotten on one arg of a stub
      function for functionality that's not present on non-linux
      platforms. This causes a non-linux build with
      --enable-compile-warnings=error to fail.
      861707b9
  3. 07 3月, 2012 3 次提交
    • E
      rpc: allow truncated return for virDomainGetCPUStats · 462dc569
      Eric Blake 提交于
      The RPC code assumed that the array returned by the driver would be
      fully populated; that is, ncpus on entry resulted in ncpus * return
      value on exit.  However, while we don't support holes in the middle
      of ncpus, we do want to permit the case of ncpus on entry being
      longer than the array returned by the driver (that is, it should be
      safe for the caller to pass ncpus=128 on entry, and the driver will
      stop populating the array when it hits max_id).
      
      Additionally, a successful return implies that the caller will then
      use virTypedParamArrayClear on the entire array; for this to not
      free uninitialized memory, the driver must ensure that all skipped
      entries are explicitly zeroed (the RPC driver did this, but not
      the qemu driver).
      
      There are now three cases:
      server 0.9.10 and client 0.9.10 or newer: No impact - there were no
      hypervisor drivers that supported cpu stats
      
      server 0.9.11 or newer and client 0.9.10: if the client calls with
      ncpus beyond the max, then the rpc call will fail on the client side
      and disconnect the client, but the server is no worse for the wear
      
      server 0.9.11 or newer and client 0.9.11: the server can return a
      truncated array and the client will do just fine
      
      I reproduced the problem by using a host with 2 CPUs, and doing:
      virsh cpu-stats $dom --start 1 --count 2
      
      * daemon/remote.c (remoteDispatchDomainGetCPUStats): Allow driver
      to omit tail of array.
      * src/remote/remote_driver.c (remoteDomainGetCPUStats):
      Accommodate driver that omits tail of array.
      * src/libvirt.c (virDomainGetCPUStats): Document this.
      * src/qemu/qemu_driver.c (qemuDomainGetPercpuStats): Clear all
      unpopulated entries.
      462dc569
    • L
    • D
      af4d39f8