From: Jiri Pirko <jiri@xxxxxxxxxx> 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. --- v2->v3: - removed forgotten struct member docs in patch #9 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 | 4 - 6 files changed, 239 insertions(+), 161 deletions(-) -- 2.45.2