1. 19 7月, 2011 1 次提交
    • M
      vhost: vhost TX zero-copy support · bab632d6
      Michael S. Tsirkin 提交于
      >From: Shirley Ma <mashirle@us.ibm.com>
      
      This adds experimental zero copy support in vhost-net,
      disabled by default. To enable, set
      experimental_zcopytx module option to 1.
      
      This patch maintains the outstanding userspace buffers in the
      sequence it is delivered to vhost. The outstanding userspace buffers
      will be marked as done once the lower device buffers DMA has finished.
      This is monitored through last reference of kfree_skb callback. Two
      buffer indices are used for this purpose.
      
      The vhost-net device passes the userspace buffers info to lower device
      skb through message control. DMA done status check and guest
      notification are handled by handle_tx: in the worst case is all buffers
      in the vq are in pending/done status, so we need to notify guest to
      release DMA done buffers first before we get any new buffers from the
      vq.
      
      One known problem is that if the guest stops submitting
      buffers, buffers might never get used until some
      further action, e.g. device reset. This does not
      seem to affect linux guests.
      Signed-off-by: NShirley <xma@us.ibm.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bab632d6
  2. 30 5月, 2011 1 次提交
  3. 07 5月, 2011 1 次提交
  4. 09 3月, 2011 2 次提交
  5. 10 1月, 2011 1 次提交
  6. 09 12月, 2010 3 次提交
  7. 29 11月, 2010 1 次提交
  8. 04 11月, 2010 4 次提交
  9. 27 10月, 2010 1 次提交
  10. 12 10月, 2010 1 次提交
  11. 05 10月, 2010 1 次提交
    • J
      vhost: max s/g to match qemu · e0e9b406
      Jason Wang 提交于
      Qemu supports up to UIO_MAXIOV s/g so we have to match that because guest
      drivers may rely on this.
      
      Allocate indirect and log arrays dynamically to avoid using too much contigious
      memory and make the length of hdr array to match the header length since each
      iovec entry has a least one byte.
      
      Test with copying large files w/ and w/o migration in both linux and windows
      guests.
      Signed-off-by: NJason Wang <jasowang@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      e0e9b406
  12. 22 9月, 2010 1 次提交
  13. 06 9月, 2010 2 次提交
    • M
      vhost: error handling fix · 615cc221
      Michael S. Tsirkin 提交于
      vhost should set worker to NULL on cgroups attach failure,
      so that we won't try to destroy the worker again on close.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      615cc221
    • M
      vhost: fix attach to cgroups regression · 87d6a412
      Michael S. Tsirkin 提交于
      Since 2.6.36-rc1, non-root users of vhost-net fail to attach
      if they are in any cgroups.
      
      The reason is that when qemu uses vhost, vhost wants to attach
      its thread to all cgroups that qemu has.  But we got the API backwards,
      so a non-priveledged process (Qemu) tried to control
      the priveledged one (vhost), which fails.
      
      Fix this by switching to the new cgroup_attach_task_all,
      and running it from the vhost thread.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      87d6a412
  14. 02 9月, 2010 1 次提交
  15. 22 8月, 2010 1 次提交
  16. 28 7月, 2010 3 次提交
    • D
      vhost-net: mergeable buffers support · 8dd014ad
      David Stevens 提交于
      This adds support for mergeable buffers in vhost-net: this is needed
      for older guests without indirect buffer support, as well
      as for zero copy with some devices.
      
      Includes changes by Michael S. Tsirkin to make the
      patch as low risk as possible (i.e., close to no changes
      when feature is disabled).
      Signed-off-by: NDavid Stevens <dlstevens@us.ibm.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      8dd014ad
    • M
      vhost: apply cgroup to vhost workers · 9e3d1957
      Michael S. Tsirkin 提交于
      Apply the cgroup of the owner task to the created vhost worker.
      
      Based on patches from Sridhar Samudrala's and Tejun Heo.
      Later we'll need to also apply cpumask and probably priority
      of the owner process.
      
      Discussion on the best way to do this is still ongoing.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Sridhar Samudrala <samudrala.sridhar@gmail.com>
      Cc: Li Zefan <lizf@cn.fujitsu.com>
      9e3d1957
    • T
      vhost: replace vhost_workqueue with per-vhost kthread · c23f3445
      Tejun Heo 提交于
      Replace vhost_workqueue with per-vhost kthread.  Other than callback
      argument change from struct work_struct * to struct vhost_work *,
      there's no visible change to vhost_poll_*() interface.
      
      This conversion is to make each vhost use a dedicated kthread so that
      resource control via cgroup can be applied.
      
      Partially based on Sridhar Samudrala's patch.
      
      * Updated to use sub structure vhost_work instead of directly using
        vhost_poll at Michael's suggestion.
      
      * Added flusher wake_up() optimization at Michael's suggestion.
      
      Changes by MST:
      * Converted atomics/barrier use to a spinlock.
      * Create thread on SET_OWNER
      * Fix flushing
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Cc: Sridhar Samudrala <samudrala.sridhar@gmail.com>
      c23f3445
  17. 02 7月, 2010 1 次提交
  18. 27 6月, 2010 1 次提交
  19. 27 5月, 2010 4 次提交
  20. 25 5月, 2010 1 次提交
  21. 12 5月, 2010 1 次提交
    • M
      vhost: fix barrier pairing · 0d499356
      Michael S. Tsirkin 提交于
      According to memory-barriers.txt, an smp memory barrier in guest
      should always be paired with an smp memory barrier in host,
      and I quote "a lack of appropriate pairing is almost certainly an
      error". In case of vhost, failure to flush out used index
      update before looking at the interrupt disable flag
      could result in missed interrupts, resulting in
      networking hang under stress.
      
      This might happen when flags read bypasses used index write.
      So we see interrupts disabled and do not interrupt, at the
      same time guest writes flags value to enable interrupt,
      reads an old used index value, thinks that
      used ring is empty and waits for interrupt.
      
      Note: the barrier we pair with here is in
      drivers/virtio/virtio_ring.c, function
      vring_enable_cb.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Acked-by: NJuan Quintela <quintela@redhat.com>
      0d499356
  22. 14 4月, 2010 1 次提交
  23. 07 4月, 2010 1 次提交
  24. 30 3月, 2010 1 次提交
    • T
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking... · 5a0e3ad6
      Tejun Heo 提交于
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
      
      percpu.h is included by sched.h and module.h and thus ends up being
      included when building most .c files.  percpu.h includes slab.h which
      in turn includes gfp.h making everything defined by the two files
      universally available and complicating inclusion dependencies.
      
      percpu.h -> slab.h dependency is about to be removed.  Prepare for
      this change by updating users of gfp and slab facilities include those
      headers directly instead of assuming availability.  As this conversion
      needs to touch large number of source files, the following script is
      used as the basis of conversion.
      
        http://userweb.kernel.org/~tj/misc/slabh-sweep.py
      
      The script does the followings.
      
      * Scan files for gfp and slab usages and update includes such that
        only the necessary includes are there.  ie. if only gfp is used,
        gfp.h, if slab is used, slab.h.
      
      * When the script inserts a new include, it looks at the include
        blocks and try to put the new include such that its order conforms
        to its surrounding.  It's put in the include block which contains
        core kernel includes, in the same order that the rest are ordered -
        alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
        doesn't seem to be any matching order.
      
      * If the script can't find a place to put a new include (mostly
        because the file doesn't have fitting include block), it prints out
        an error message indicating which .h file needs to be added to the
        file.
      
      The conversion was done in the following steps.
      
      1. The initial automatic conversion of all .c files updated slightly
         over 4000 files, deleting around 700 includes and adding ~480 gfp.h
         and ~3000 slab.h inclusions.  The script emitted errors for ~400
         files.
      
      2. Each error was manually checked.  Some didn't need the inclusion,
         some needed manual addition while adding it to implementation .h or
         embedding .c file was more appropriate for others.  This step added
         inclusions to around 150 files.
      
      3. The script was run again and the output was compared to the edits
         from #2 to make sure no file was left behind.
      
      4. Several build tests were done and a couple of problems were fixed.
         e.g. lib/decompress_*.c used malloc/free() wrappers around slab
         APIs requiring slab.h to be added manually.
      
      5. The script was run on all .h files but without automatically
         editing them as sprinkling gfp.h and slab.h inclusions around .h
         files could easily lead to inclusion dependency hell.  Most gfp.h
         inclusion directives were ignored as stuff from gfp.h was usually
         wildly available and often used in preprocessor macros.  Each
         slab.h inclusion directive was examined and added manually as
         necessary.
      
      6. percpu.h was updated not to include slab.h.
      
      7. Build test were done on the following configurations and failures
         were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
         distributed build env didn't work with gcov compiles) and a few
         more options had to be turned off depending on archs to make things
         build (like ipr on powerpc/64 which failed due to missing writeq).
      
         * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
         * powerpc and powerpc64 SMP allmodconfig
         * sparc and sparc64 SMP allmodconfig
         * ia64 SMP allmodconfig
         * s390 SMP allmodconfig
         * alpha SMP allmodconfig
         * um on x86_64 SMP allmodconfig
      
      8. percpu.h modifications were reverted so that it could be applied as
         a separate patch and serve as bisection point.
      
      Given the fact that I had only a couple of failures from tests on step
      6, I'm fairly confident about the coverage of this conversion patch.
      If there is a breakage, it's likely to be something in one of the arch
      headers which should be easily discoverable easily on most builds of
      the specific arch.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Guess-its-ok-by: NChristoph Lameter <cl@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
      5a0e3ad6
  25. 18 3月, 2010 1 次提交
  26. 01 3月, 2010 3 次提交