Feng Liu
2023-Mar-10 05:34 UTC
[PATCH v2 1/3] virtio_pci_modern: Allow non power of 2 sizes for virtqueues
According to the Virtio Specification, the Queue Size parameter of a virtqueue corresponds to the maximum number of descriptors in that queue, and it does not have to be a power of 2 for packed virtqueues. However, the virtio_pci_modern driver enforced a power of 2 check for virtqueue sizes, which is unnecessary and restrictive. This commit removes that check, allowing virtqueues to have arbitrary sizes as specified by the Virtio Specification. To validate this change, we tested various virtqueue sizes for packed rings, including 128, 256, 512, 100, 200, 500, and 1000, with CONFIG_PAGE_POISONING enabled, and all tests passed successfully. Signed-off-by: Feng Liu <feliu at nvidia.com> Reviewed-by: Jiri Pirko <jiri at nvidia.com> Reviewed-by: Parav Pandit <parav at nvidia.com> Reviewed-by: Gavin Li <gavinl at nvidia.com> Reviewed-by: Bodong Wang <bodong at nvidia.com> Reviewed-by: David Edmondson <david.edmondson at oracle.com> --- v1 -> v2 feedbacks from Jason Wang and Michael S. Tsirkin - remove power_of_2 check of virtqueue size --- drivers/virtio/virtio_pci_modern.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c index 9e496e288cfa..6e713904d8e8 100644 --- a/drivers/virtio/virtio_pci_modern.c +++ b/drivers/virtio/virtio_pci_modern.c @@ -310,11 +310,6 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev, if (!num || vp_modern_get_queue_enable(mdev, index)) return ERR_PTR(-ENOENT); - if (!is_power_of_2(num)) { - dev_warn(&vp_dev->pci_dev->dev, "bad queue size %u", num); - return ERR_PTR(-EINVAL); - } - info->msix_vector = msix_vec; /* create the vring */ -- 2.34.1
Parav Pandit
2023-Mar-10 13:36 UTC
[PATCH v2 1/3] virtio_pci_modern: Allow non power of 2 sizes for virtqueues
> From: Feng Liu <feliu at nvidia.com> > Sent: Friday, March 10, 2023 12:34 AM> > - if (!is_power_of_2(num)) { > - dev_warn(&vp_dev->pci_dev->dev, "bad queue size %u", > num); > - return ERR_PTR(-EINVAL); > - } > -The check is still valid for split q. Maybe the right place for such a check is not the pci transport driver. But layer below where split vs packed q knowledge resides and hence, power of 2 check can be omitted for packed vq.