From: Jiri Pirko <[email protected]>
Currently the admin queue command execution is serialized by a lock.
This patchsets lifts this limitation allowing to execute admin queue
commands in parallel. To do that, admin queue processing needs to be
converted from polling to interrupt based completion. Note that admin
queue is treated as a slow path virtqueue. That means that under
circumstance there are not enough vectors available, the admin queue
will share config vector.
Patches #1-#11 are preparations, making things a bit smoother as well.
Worth mentioning is Patch #5, which introduces another vector
allocation fallback for slow path virtqueues.
Patch #12 implements interrupt based completion for admin queue.
Patch #13 finally removes the admin queue serialization lock.
Please note that this patchset prepares ground for control queue vector
implementation as well, treating it as a slow path virtqueue as well.
---
v1->v2:
- rebased
- added slow path vector allocation fallback
- fixed couple of bugs and issues
- see individual patches for detailed changelog
Jiri Pirko (13):
virtio_pci: push out single vq find code to vp_find_one_vq_msix()
virtio_pci: simplify vp_request_msix_vectors() call a bit
virtio_pci: pass vector policy enum to vp_find_vqs_msix()
virtio_pci: pass vector policy enum to vp_find_one_vq_msix()
virtio_pci: introduce vector allocation fallback for slow path
virtqueues
virtio_pci_modern: treat vp_dev->admin_vq.info.vq pointer as static
virtio: push out code to vp_avq_index()
virtio_pci: pass vq info as an argument to vp_setup_vq()
virtio: create admin queues alongside other virtqueues
virtio_pci_modern: create admin queue of queried size
virtio_pci_modern: pass cmd as an identification token
virtio_pci_modern: use completion instead of busy loop to wait on
admin cmd result
virtio_pci_modern: remove admin queue serialization lock
drivers/virtio/virtio.c | 28 +----
drivers/virtio/virtio_pci_common.c | 190 +++++++++++++++++++++++------
drivers/virtio/virtio_pci_common.h | 16 ++-
drivers/virtio/virtio_pci_modern.c | 159 +++++++++++-------------
include/linux/virtio.h | 3 +
include/linux/virtio_config.h | 2 -
6 files changed, 239 insertions(+), 159 deletions(-)
--
2.45.2