1. 08 4月, 2013 24 次提交
    • D
      Rename virCgroupMounted to virCgroupHasController & make it more robust · dca927c8
      Daniel P. Berrange 提交于
      The virCgroupMounted method is badly named, since a controller can be
      mounted, but disabled in the current object. Rename the method to be
      virCgroupHasController. Also make it tolerant to a  NULL virCgroupPtr
      and out-of-range controller index, to avoid duplication of these
      checks in all callers
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      dca927c8
    • O
      qemu: Allow volume type disk for device 'lun' · 70bb34eb
      Osier Yang 提交于
      This allows one use block type volume as the disk source for device
      'lun'.
      70bb34eb
    • O
      qemu: Support sgio setting for volume type disk · a9762b73
      Osier Yang 提交于
      a9762b73
    • O
      qemu: Support shareable volume type disk · 464d4e55
      Osier Yang 提交于
      Since the source is already translated before. This just adds the
      checking. Move !disk->shared and !disk->src to improve the performance
      a bit.
      464d4e55
    • O
      qemu: Translate the pool disk source earlier · 60b78b33
      Osier Yang 提交于
      To support "shareable" for volume type disk, we have to translate
      the source before trying to add the shared disk entry. To achieve
      the goal, this moves the helper qemuTranslateDiskSourcePool into
      src/qemu/qemu_conf.c, and introduce an internal only member (voltype)
      for struct _virDomainDiskSourcePoolDef, to record the underlying
      volume type for use when building the drive string.
      
      Later patch will support "shareable" volume type disk.
      60b78b33
    • O
      Support seclabels for volume type disk · 664270b8
      Osier Yang 提交于
      "seclabels" is only valid for 'file' or 'block' type storage volume.
      664270b8
    • O
      Support startupPolicy for 'volume' disk · 43404fee
      Osier Yang 提交于
      "startupPolicy" is only valid for file type storage volume, otherwise
      it fails on starting the domain.
      43404fee
    • O
      qemu: Translate the pool disk source when building drive string · db94a1d3
      Osier Yang 提交于
      This adds a new helper qemuTranslateDiskSourcePool which uses the
      storage pool/vol APIs to translate the disk source before building
      the drive string. Network volume is not supported yet. Disk chain
      for volume type disk may be supported later, but before I'm confident
      it doesn't break anything, it's just disabled now.
      db94a1d3
    • O
      Introduce new XMLs to specify disk source using libvirt storage · 4bc331c8
      Osier Yang 提交于
      With this patch, one can specify the disk source using libvirt
      storage like:
      
        <disk type='volume' device='disk'>
          <driver name='qemu' type='raw' cache='none'/>
          <source pool='default' volume='fc18.img'/>
          <target dev='vdb' bus='virtio'/>
        </disk>
      
      "seclabels" and "startupPolicy" are not supported for this new
      disk type ("volume"). They will be supported in later patches.
      
      docs/formatdomain.html.in:
        * Add documents for new XMLs
      docs/schemas/domaincommon.rng:
        * Add rng for new XMLs;
      src/conf/domain_conf.h:
        * New struct for 'volume' type disk source (virDomainDiskSourcePoolDef)
        * Add VIR_DOMAIN_DISK_TYPE_VOLUME for enum virDomainDiskType
      src/conf/domain_conf.c:
        * New helper virDomainDiskSourcePoolDefParse to parse the 'volume'
          type disk source.
        * New helper virDomainDiskSourcePoolDefFree to free the source def
          if 'volume' type disk.
      tests/qemuxml2argvdata/qemuxml2argv-disk-source-pool.xml:
      tests/qemuxml2xmltest.c:
        * New test
      4bc331c8
    • O
      conf: New helper virDomainDiskSourceDefFormat to format the disk source · a05b0fc1
      Osier Yang 提交于
      The code to format disk source is long enough to have a helper.
      a05b0fc1
    • O
      storage: Guess the parent if it's not specified for vHBA · f5a61087
      Osier Yang 提交于
      This finds the parent for vHBA by iterating over all the HBA
      which supports vport_ops capability on the host, and return
      the first one which is online, not saturated (vports in use
      is less than max_vports).
      f5a61087
    • O
      storage: Add startPool and stopPool for scsi backend · 34f96510
      Osier Yang 提交于
      startPool creates the vHBA if it's not existed yet, stopPool destroys
      the vHBA. Also to support autostart, checkPool will creates the vHBA
      if it's not existed yet.
      34f96510
    • O
      util: Add helper to get the scsi host name by iterating over sysfs · b52fbad1
      Osier Yang 提交于
      The helper iterates over sysfs, to find out the matched scsi host
      name by comparing the wwnn,wwpn pair. It will be used by checkPool
      and refreshPool of storage scsi backend. New helper getAdapterName
      is introduced in storage_backend_scsi.c, which uses the new util
      helper virGetFCHostNameByWWN to get the fc_host adapter name.
      b52fbad1
    • O
      phyp: Prohibit fc_host adapter for phyp driver · b78db1c3
      Osier Yang 提交于
      It's possible to support fc_host adapter for phyp driver too, but
      at this stage I'd like to not allow it when I'm not that clear
      how it works.
      b78db1c3
    • O
      storage: Move virStorageBackendSCSIGetHostNumber into iscsi backend · 6cf9a5bb
      Osier Yang 提交于
      It's only used by iscsi backend.
      6cf9a5bb
    • O
      storage: Make the adapter name be consistent with node device driver · c1f63a9b
      Osier Yang 提交于
      node device driver names the HBA like "scsi_host5", but storage
      driver uses "host5", which could make the user confused. This
      changes them to be consistent. However, for back-compat reason,
      adapter name like "host5" is still supported.
      c1f63a9b
    • O
      New XML attributes for storage pool source adapter · 9f781da6
      Osier Yang 提交于
      This introduces 4 new attributes for storage pool source adapter.
      E.g.
      
      <adapter type='fc_host' parent='scsi_host5' wwnn='20000000c9831b4b' wwpn='10000000c9831b4b'/>
      
      Attribute 'type' can be either 'scsi_host' or 'fc_host', and defaults
      to 'scsi_host' if attribute 'name' is specified. I.e. It's optional
      for 'scsi_host' adapter, for back-compat reason. However, mandatory
      for 'fc_host' adapter and any new future adapter types. Attribute
      'parent' is to specify the parent for the fc_host adapter.
      
      * docs/formatstorage.html.in:
        - Add documents for the 4 new attrs
      * docs/schemas/storagepool.rng:
        - Add RNG schema
      * src/conf/storage_conf.c:
        - Parse and format the new XMLs
      * src/conf/storage_conf.h:
        - New struct virStoragePoolSourceAdapter, replace "char *adapter" with it;
        - New enum virStoragePoolSourceAdapterType
      * src/libvirt_private.syms:
        - Export TypeToString and TypeFromString
      * src/phyp/phyp_driver.c:
        - Replace "adapter" with "adapter.data.name", which is member of the union
          of the new struct virStoragePoolSourceAdapter now. Later patch will
          add the checking, as "adapter.data.name" is only valid for "scsi_host"
          adapter.
      * src/storage/storage_backend_scsi.c:
        - Like above
      * tests/storagepoolxml2xmlin/pool-scsi-type-scsi-host.xml:
      * tests/storagepoolxml2xmlin/pool-scsi-type-fc-host.xml:
        - New test for 'fc_host' and "scsi_host" adapter
      * tests/storagepoolxml2xmlout/pool-scsi.xml:
        - Change the expected output, as the 'type' defaults to 'scsi_host' if 'name"
          specified now
      * tests/storagepoolxml2xmlout/pool-scsi-type-scsi-host.xml:
      * tests/storagepoolxml2xmlout/pool-scsi-type-fc-host.xml:
        - New test
      * tests/storagepoolxml2xmltest.c:
        - Include the test
      9f781da6
    • D
      Avoid cast alignment warnings in port allocator test · 2d777045
      Daniel P. Berrange 提交于
      To avoid
      
      virportallocatortest.c: In function 'bind':
      virportallocatortest.c:34:33: warning: cast increases required alignment of target type [-Wcast-align]
           struct sockaddr_in *saddr = (struct sockaddr_in *)addr;
                                       ^
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      2d777045
    • D
      Disable cast-align warnings in various places · e57aaa6f
      Daniel P. Berrange 提交于
      There are a number of places which generate cast alignment
      warnings, which are difficult or impossible to address. Use
      pragmas to disable the warnings in these few places
      
      conf/nwfilter_conf.c: In function 'virNWFilterRuleDetailsParse':
      conf/nwfilter_conf.c:1806:16: warning: cast increases required alignment of target type [-Wcast-align]
               item = (nwItemDesc *)((char *)nwf + att[idx].dataIdx);
      conf/nwfilter_conf.c: In function 'virNWFilterRuleDefDetailsFormat':
      conf/nwfilter_conf.c:3238:16: warning: cast increases required alignment of target type [-Wcast-align]
               item = (nwItemDesc *)((char *)def + att[i].dataIdx);
      
      storage/storage_backend_mpath.c: In function 'virStorageBackendCreateVols':
      storage/storage_backend_mpath.c:247:17: warning: cast increases required alignment of target type [-Wcast-align]
               names = (struct dm_names *)(((char *)names) + next);
      
      nwfilter/nwfilter_dhcpsnoop.c: In function 'virNWFilterSnoopDHCPDecode':
      nwfilter/nwfilter_dhcpsnoop.c:994:15: warning: cast increases required alignment of target type [-Wcast-align]
               pip = (struct iphdr *) pep->eh_data;
      nwfilter/nwfilter_dhcpsnoop.c:1004:11: warning: cast increases required alignment of target type [-Wcast-align]
           pup = (struct udphdr *) ((char *) pip + (pip->ihl << 2));
      
      nwfilter/nwfilter_learnipaddr.c: In function 'procDHCPOpts':
      nwfilter/nwfilter_learnipaddr.c:327:33: warning: cast increases required alignment of target type [-Wcast-align]
                       uint32_t *tmp = (uint32_t *)&dhcpopt->value;
      nwfilter/nwfilter_learnipaddr.c: In function 'learnIPAddressThread':
      nwfilter/nwfilter_learnipaddr.c:501:43: warning: cast increases required alignment of target type [-Wcast-align]
                           struct iphdr *iphdr = (struct iphdr*)(packet +
      nwfilter/nwfilter_learnipaddr.c:538:43: warning: cast increases required alignment of target type [-Wcast-align]
                           struct iphdr *iphdr = (struct iphdr*)(packet +
      nwfilter/nwfilter_learnipaddr.c:544:48: warning: cast increases required alignment of target type [-Wcast-align]
                               struct udphdr *udphdr= (struct udphdr *)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      e57aaa6f
    • D
      Copy struct inotify_event entries to avoid alignment problems · 7e6aabc6
      Daniel P. Berrange 提交于
      When reading the inotify FD, we get back a sequence of
      struct inotify_event, each with variable length data following.
      It is not safe to simply cast from the char *buf to the
      struct inotify_event struct since this may violate data
      alignment rules. Thus we must copy from the char *buf
      into the struct inotify_event instance before accessing
      the data.
      
      uml/uml_driver.c: In function 'umlInotifyEvent':
      uml/uml_driver.c:327:13: warning: cast increases required alignment of target type [-Wcast-align]
               e = (struct inotify_event *)tmp;
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      7e6aabc6
    • D
      Use VIR_ALLOC_VAR instead of VIR_ALLOC_N for creating virObject · c4f9edf1
      Daniel P. Berrange 提交于
      The current way virObject instances are allocated using
      VIR_ALLOC_N causes alignment warnings
      
      util/virobject.c: In function 'virObjectNew':
      util/virobject.c:195:11: error: cast increases required alignment of target type [-Werror=cast-align]
      
      Changing to use VIR_ALLOC_VAR will avoid the need todo
      the casts entirely.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      c4f9edf1
    • D
      Avoid casts between unsigned char * and struct nlmsghdr · e95de74d
      Daniel P. Berrange 提交于
      The virNetlinkCommand() method takes an 'unsigned char **'
      parameter to be filled with the received netlink message.
      The callers then immediately cast this to 'struct nlmsghdr',
      triggering (bogus) warnings about increasing alignment
      requirements
      
      util/virnetdev.c: In function 'virNetDevLinkDump':
      util/virnetdev.c:1300:12: warning: cast increases required alignment of target type [-Wcast-align]
           resp = (struct nlmsghdr *)*recvbuf;
                  ^
      util/virnetdev.c: In function 'virNetDevSetVfConfig':
      util/virnetdev.c:1429:12: warning: cast increases required alignment of target type [-Wcast-align]
           resp = (struct nlmsghdr *)recvbuf;
      
      Since all callers cast to 'struct nlmsghdr' we can avoid
      the warning problem entirely by simply changing the
      signature of virNetlinkCommand to return a 'struct nlmsghdr **'
      instead of 'unsigned char **'. The way we do the cast inside
      virNetlinkCommand does not have any alignment issues.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      e95de74d
    • D
      Rewrite keycode map to avoid a struct · d27efd8e
      Daniel P. Berrange 提交于
      Playing games with field offsets in a struct causes all sorts
      of alignment warnings on ARM platforms
      
      util/virkeycode.c: In function '__virKeycodeValueFromString':
      util/virkeycode.c:26:7: warning: cast increases required alignment of target type [-Wcast-align]
           (*(typeof(field_type) *)((char *)(object) + field_offset))
             ^
      util/virkeycode.c:91:28: note: in expansion of macro 'getfield'
               const char *name = getfield(virKeycodes + i, const char *, name_offset);
                                  ^
      util/virkeycode.c:26:7: warning: cast increases required alignment of target type [-Wcast-align]
           (*(typeof(field_type) *)((char *)(object) + field_offset))
             ^
      util/virkeycode.c:94:20: note: in expansion of macro 'getfield'
                   return getfield(virKeycodes + i, unsigned short, code_offset);
                          ^
      util/virkeycode.c: In function '__virKeycodeValueTranslate':
      util/virkeycode.c:26:7: warning: cast increases required alignment of target type [-Wcast-align]
           (*(typeof(field_type) *)((char *)(object) + field_offset))
             ^
      util/virkeycode.c:127:13: note: in expansion of macro 'getfield'
               if (getfield(virKeycodes + i, unsigned short, from_offset) == key_value)
                   ^
      util/virkeycode.c:26:7: warning: cast increases required alignment of target type [-Wcast-align]
           (*(typeof(field_type) *)((char *)(object) + field_offset))
             ^
      util/virkeycode.c:128:20: note: in expansion of macro 'getfield'
                   return getfield(virKeycodes + i, unsigned short, to_offset);
      
      There is no compelling reason to use a struct for the keycode
      tables. It can easily just use an array of arrays instead,
      avoiding all alignment problems
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      d27efd8e
    • D
      Add a test suite for keycode mapping functions · 15d8511b
      Daniel P. Berrange 提交于
      Validate that translations between different keycode sets
      are functioning.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      15d8511b
  2. 06 4月, 2013 5 次提交
    • O
      qemu: Error out if the bitmap for pinning is all clear · fd1432c7
      Osier Yang 提交于
      For both "live" and "config" changes of vcpupin and emulatorpin, an
      all clear bitmap doesn't make sense, and it can just cause corruptions.
      E.g (similar for emulatorpin).
      
      % virsh vcpupin hame 0 8,^8 --config
      
      % virsh vcpupin hame
      VCPU: CPU Affinity
      ----------------------------------
         0:
         1: 0-63
         2: 0-63
         3: 0-63
      
      % virsh dumpxml hame | grep cpuset
          <vcpupin vcpu='0' cpuset=''/>
      
      % virsh start hame
      error: Failed to start domain hame
      error: An error occurred, but the cause is unknown
      fd1432c7
    • O
      1acfc171
    • O
      qemu: Support multiple queue virtio-scsi · d4bf0a93
      Osier Yang 提交于
      This introduce a new attribute "num_queues" (same with the good name
      QEMU uses) for virtio-scsi controller. An example of the XML:
      
      <controller type='scsi' index='0' model='virtio-scsi' num_queues='8'/>
      
      The corresponding QEMU command line:
      
      -device virtio-scsi-pci,id=scsi0,num_queues=8,bus=pci.0,addr=0x3 \
      d4bf0a93
    • E
      build: check correct protocol.o file · 5899e09e
      Eric Blake 提交于
      By default, libtool builds two .o files for every .lo rule:
      src/foo.o - static builds
      src/.libs/foo.o - shared library builds
      
      But since commit ad42b34b disabled static builds, src/foo.o is
      no longer built by default.  On a fresh checkout, this means our
      protocol check rules using pdwtags were testing a missing file,
      and thanks to a lousy behavior of pdwtags happily giving no output
      and 0 exit status (http://bugzilla.redhat.com/949034), we were
      merely claiming that "dwarves is too old" and skipping the test.
      
      However, if you swap between branches and do incremental builds,
      such as building v0.10.2-maint and then switching back to master,
      you end up with src/foo.o being leftover from its 0.10.2 state,
      and then 'make check' fails because the .o file does not match
      the protocol-structs file due to API additions in the meantime.
      
      A simpler fix would be to always look in .libs for the .o to
      be parsed; but since it is possible to pass ./configure options
      to tell libtool to do a static-only build with no shared .o,
      I went with the approach of finding the newest of the two files,
      whenever both exist.
      
      * src/Makefile.am (PDWTAGS): Ensure we test just-built file.
      5899e09e
    • E
      build: use proper pod for nested bulleted VIRSH_DEBUG list · 00d69b4a
      Eric Blake 提交于
      Newer pod (hello rawhide) complains if you attempt to mix bullets
      and non-bullets in the same list:
      
      virsh.pod around line 3177: Expected text after =item, not a bullet
      
      As our intent was to nest an inner list, we make that explicit to
      keep pod happy.
      
      * tools/virsh.pod (ENVIRONMENT): Use correct pod syntax.
      00d69b4a
  3. 05 4月, 2013 11 次提交
    • P
      qemu: Remove maximum cpu limit when setting processor count using the API · ce65b435
      Peter Krempa 提交于
      When setting processor count for a domain using the API libvirt enforced
      a maximum processor count, while it isn't enforced when taking the XML path.
      
      This patch removes the check to match the XML.
      ce65b435
    • D
      Don't create dirs in cgroup controllers we don't want to use · 56f27b3b
      Daniel P. Berrange 提交于
      Currently when getting an instance of virCgroupPtr we will
      create the path in all cgroup controllers. Only at the virt
      driver layer are we attempting to filter controllers. This
      is bad because the mere act of creating the dirs in the
      controllers can have a functional impact on the kernel,
      particularly for performance.
      
      Update the virCgroupForDriver() method to accept a bitmask
      of controllers to use. Only create dirs in the controllers
      that are requested. When creating cgroups for domains,
      respect the active controller list from the parent cgroup
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      56f27b3b
    • D
      Rename virCgroupGetAppRoot to virCgroupForSelf · 804a809a
      Daniel P. Berrange 提交于
      The virCgroupGetAppRoot is not clear in its meaning. Change
      to virCgroupForSelf to highlight that this returns the
      cgroup config for the caller's process
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      804a809a
    • D
      Ensure LD_PRELOAD exists before running test case · b1d3154a
      Daniel P. Berrange 提交于
      The linker will ignore LD_PRELOAD libraries which do not
      exist, just printing a warning message. This is not helpful
      for the test suite which will be utterly fubar without the
      preload library present. Add an explicit test for existence
      of the library to protect against this
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      b1d3154a
    • D
      Refactor RNG schema for resource tuning · 8ef2b2c5
      Daniel P. Berrange 提交于
      Split the "resource" define out into multiple smaller
      defines, one for each type of resource tuning parameter.
      This makes the schema a bit clearer to read
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      8ef2b2c5
    • P
      rpc: Fix connection close callback race condition and memory corruption/crash · 8ad126e6
      Peter Krempa 提交于
      The last Viktor's effort to fix the race and memory corruption unfortunately
      wasn't complete in the case the close callback was not registered in an
      connection. At that time, the trail of event's that I'll describe later could
      still happen and corrupt the memory or cause a crash of the client (including
      the daemon in case of a p2p migration).
      
      Consider the following prerequisities and trail of events:
      Let's have a remote connection to a hypervisor that doesn't have a close
      callback registered and the client is using the event loop. The crash happens in
      cooperation of 2 threads. Thread E is the event loop and thread W is the worker
      that does some stuff. R denotes the remote client.
      
      1.) W - The client finishes everything and sheds the last reference on the client
      2.) W - The virObject stuff invokes virConnectDispose that invokes doRemoteClose
      3.) W - the remote close method invokes the REMOTE_PROC_CLOSE RPC method.
      4.) W - The thread is preempted at this point.
      5.) R - The remote side receives the close and closes the socket.
      6.) E - poll() wakes up due to the closed socket and invokes the close callback
      7.) E - The event loop is preempted right before remoteClientCloseFunc is called
      8.) W - The worker now finishes, and frees the conn object.
      9.) E - The remoteClientCloseFunc accesses the now-freed conn object in the
              attempt to retrieve pointer for the real close callback.
      10.) Kaboom, corrupted memory/segfault.
      
      This patch tries to fix this by introducing a new object that survives the
      freeing of the connection object. We can't increase the reference count on the
      connection object itself or the connection would never be closed, as the
      connection is closed only when the reference count reaches zero.
      
      The new object - virConnectCloseCallbackData - is a lockable object that keeps
      the pointers to the real user registered callback and ensures that the
      connection callback is either not called if the connection was already freed or
      that the connection isn't freed while this is being called.
      8ad126e6
    • P
      virsh: Register and unregister the close callback also in cmdConnect · 69ab0756
      Peter Krempa 提交于
      This patch improves the error message after disconnecting from the
      hypervisor and adds the close callback operations required not to leak
      the callback reference.
      69ab0756
    • P
      virsh: Move cmdConnect from virsh-host.c to virsh.c · ca9e73eb
      Peter Krempa 提交于
      The function is used to establish connection so it should be in the main
      virsh file. This movement also enables further improvements done in next
      patches.
      
      Note that the "connect" command has moved from the host section of virsh to the
      main section. It is now listed by 'virsh help virsh' instead of 'virsh help
      host'.
      ca9e73eb
    • V
      virsh: Unregister the connection close notifier upon termination · e964ba27
      Viktor Mihajlovski 提交于
      Before closing the connection we unregister the close callback
      to prevent a reference leak.
      
      Further, the messages on virConnectClose != 0 are a bit more specific
      now.
      Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
      e964ba27
    • V
      libvirt: Increase connection reference count for callbacks · 03a43efa
      Viktor Mihajlovski 提交于
      By adjusting the reference count of the connection object we
      prevent races between callback function and virConnectClose.
      Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
      03a43efa
    • P
      virCaps: get rid of defaultConsoleTargetType callback · 482e5f15
      Peter Krempa 提交于
      This patch refactors various places to allow removing of the
      defaultConsoleTargetType callback from the virCaps structure.
      
      A new console character device target type is introduced -
      VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE - to mark that no type was
      specified in the XML. This type is at the end converted to the standard
      VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL. Other types that are
      different from this default have to be processed separately in the
      device post parse callback.
      482e5f15