Skip to content
Snippets Groups Projects
  1. Jul 24, 2013
    • Dor Laor's avatar
      Use wake_with scheme in order not to wake w/ the lock held · 2379771f
      Dor Laor authored
      This way it's possible to wake a thread while holding the lock
      that protects the thread pointer of going away. The lock itself
      won't be held by the waker and thus the wakee will be able to
      use it immedietly w/o ctx. Suggested by Nadav.
      2379771f
  2. Jul 18, 2013
  3. Jul 17, 2013
  4. Jul 11, 2013
    • Dor Laor's avatar
      Move from a request array approach back to allocation. · 5bcb95d9
      Dor Laor authored
      virtio_blk pre-allocates requests into a cache to avoid re-allocation
      (possibly an unneeded optimization with the current allocator).  However,
      it doesn't take into account that requests can be completed out-of-order,
      and simply reuses requests in a cyclic order. Noted by Avi although
      I had it made using a peak into the index ring but its too complex
      solution. There is no performance degradation w/ smp due to the good
      allocator we have today.
      5bcb95d9
  5. Jul 10, 2013
    • Dor Laor's avatar
      Allow parallel execution of {add|get}_buff, prevent fast path allocs · 350fa518
      Dor Laor authored
      virtio-vring and it's users (net/blk) were changed so no request
      header will be allocated on run time except for init. In order to
      do that, I have to change get_buf and break it into multiple parts:
      
              // Get the top item from the used ring
              void* get_buf_elem(u32 *len);
              // Let the host know we consumed the used entry
              // We separate that from get_buf_elem so no one
              // will re-cycle the request header location until
              // we're finished with it in the upper layer
              void get_buf_finalize();
              // GC the used items that were already read to be emptied
              // within the ring. Should be called by add_buf
              // It was separated from the get_buf flow to allow parallelism of the two
              void get_buf_gc();
      
      As a result, it was simple to get rid of the shared lock that protected
      _avail_head variable before. Today only the thread that calls add_buf
      updates this variable (add_buf calls get_buf_gc internally).
      
      There are two new locks instead:
        - virtio-net tx_gc lock - very rarely it can be accessed
          by the tx_gc thread or normally by the tx xmit thread
        - virtio-blk make_requests - there are parallel requests
      350fa518
    • Dor Laor's avatar
      Trivial: Move code above, preparation for preventing past path allocations for... · cc8cc19e
      Dor Laor authored
      Trivial: Move code above, preparation for preventing past path allocations for the virtio request data
      cc8cc19e
  6. Jul 04, 2013
  7. Jun 23, 2013
  8. Jun 18, 2013
  9. Jun 09, 2013
  10. Jun 06, 2013
    • Guy Zana's avatar
      msix: provide high priority handler when registering interrupt · 66066b07
      Guy Zana authored
      we have to disable virio interrupts before msix EOI so disabling
      must be done in the ISR handler context. This patch adds an std::function
      isr to the bindings.
      
      references to the rx and tx queues are saved as well (_rx_queue and _tx_queue),
      so they can be used in the ISR context.
      
      this patch reduces virtio net rx interrupts by a factor of 450.
      66066b07
  11. Mar 21, 2013
  12. Mar 11, 2013
  13. Mar 07, 2013
  14. Mar 05, 2013
    • Avi Kivity's avatar
      virtio: fold virtio_device into virtio_driver · 5c5b95fe
      Avi Kivity authored
      virtio_device is now a simple set of accessors around pci::device.  Since
      the only users of virtio_device are virtio_driver and its subclasses, we
      can simply fold it into virtio_driver, eliminating the middleman.
      
      Resolves two FIXMEs where we leaked virtio_device objects created during
      probing.
      5c5b95fe
    • Avi Kivity's avatar
      virtio-blk: unindent · b4f9d646
      Avi Kivity authored
      b4f9d646
    • Avi Kivity's avatar
      virtio-blk: don't use C99 designated initializers · 75d960fe
      Avi Kivity authored
      While a great feature, it's not supported in C++.  G++ does support it as an
      extension, but eclipse's static code analyzer does not, which causes a lot
      of false errors to be reported.
      75d960fe
  15. Mar 04, 2013
    • Avi Kivity's avatar
      pci: drop pci_ prefixes from pci types · 0b893167
      Avi Kivity authored
      pci::pci_device is redundant, use pci::device.
      0b893167
    • Avi Kivity's avatar
      virtio, pci: fix layering violation · 69767ef5
      Avi Kivity authored
      The pci layer knows about virtio devices and creates them, even though
      virtio is a higher layer.
      
      Fix by making virtio_device contain a reference to the pci device, instead
      of inheriting from it.  The functionality could probably be moved to
      pci_driver.
      69767ef5
  16. Feb 28, 2013
  17. Feb 22, 2013
  18. Feb 21, 2013
  19. Feb 17, 2013
  20. Feb 13, 2013
  21. Feb 12, 2013
  22. Feb 10, 2013
    • Dor Laor's avatar
      Register virtio-blk drivers as vblk%d · a5babb7d
      Dor Laor authored
      Discover that bio->bio_offset is zero while the data starts in
      the middle of the page so I adjusted the code accordingly.
      Will need to sort it out later on.
      a5babb7d
    • Dor Laor's avatar
      Remove the left over worker thread from ::load() call. · 9ff77946
      Dor Laor authored
      The logic is called as callback invoked by virtio interrupts.
      
      In addition, polish the test code. Before all of the write request
      had filled the ring and left no space for the read requests. Now I rotate
      between the two.
      9ff77946
Loading