mirror of https://gitee.com/openkylin/linux.git
virtio-pci-modern: introduce helper for setting/geting queue size
This patch introduces helper for setting/getting queue size for modern device. Signed-off-by: Jason Wang <jasowang@redhat.com> Link: https://lore.kernel.org/r/20210104065503.199631-13-jasowang@redhat.com Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
dc2e648198
commit
75658afbab
|
@ -262,6 +262,36 @@ static bool vp_modern_get_queue_enable(struct virtio_pci_modern_device *mdev,
|
|||
return vp_ioread16(&mdev->common->queue_enable);
|
||||
}
|
||||
|
||||
/*
|
||||
* vp_modern_set_queue_size - set size for a virtqueue
|
||||
* @mdev: the modern virtio-pci device
|
||||
* @index: the queue index
|
||||
* @size: the size of the virtqueue
|
||||
*/
|
||||
static void vp_modern_set_queue_size(struct virtio_pci_modern_device *mdev,
|
||||
u16 index, u16 size)
|
||||
{
|
||||
vp_iowrite16(index, &mdev->common->queue_select);
|
||||
vp_iowrite16(size, &mdev->common->queue_size);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* vp_modern_get_queue_size - get size for a virtqueue
|
||||
* @mdev: the modern virtio-pci device
|
||||
* @index: the queue index
|
||||
*
|
||||
* Returns the size of the virtqueue
|
||||
*/
|
||||
static u16 vp_modern_get_queue_size(struct virtio_pci_modern_device *mdev,
|
||||
u16 index)
|
||||
{
|
||||
vp_iowrite16(index, &mdev->common->queue_select);
|
||||
|
||||
return vp_ioread16(&mdev->common->queue_size);
|
||||
|
||||
}
|
||||
|
||||
/* virtio config->finalize_features() implementation */
|
||||
static int vp_finalize_features(struct virtio_device *vdev)
|
||||
{
|
||||
|
@ -487,7 +517,7 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev,
|
|||
vp_iowrite16(index, &cfg->queue_select);
|
||||
|
||||
/* Check if queue is either not available or already active. */
|
||||
num = vp_ioread16(&cfg->queue_size);
|
||||
num = vp_modern_get_queue_size(mdev, index);
|
||||
if (!num || vp_modern_get_queue_enable(mdev, index))
|
||||
return ERR_PTR(-ENOENT);
|
||||
|
||||
|
@ -510,7 +540,7 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev,
|
|||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
/* activate the queue */
|
||||
vp_iowrite16(virtqueue_get_vring_size(vq), &cfg->queue_size);
|
||||
vp_modern_set_queue_size(mdev, index, virtqueue_get_vring_size(vq));
|
||||
vp_modern_queue_address(mdev, index, virtqueue_get_desc_addr(vq),
|
||||
virtqueue_get_avail_addr(vq),
|
||||
virtqueue_get_used_addr(vq));
|
||||
|
|
Loading…
Reference in New Issue