lkml.org 
[lkml]   [2020]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V2 10/14] virtio-pci-modern: introduce helper to get notification offset
    Date
    This patch introduces help to get notification offset of modern device.

    Signed-off-by: Jason Wang <jasowang@redhat.com>
    ---
    drivers/virtio/virtio_pci_modern.c | 21 ++++++++++++++++-----
    1 file changed, 16 insertions(+), 5 deletions(-)

    diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
    index 0b86a36998c8..8f1f274724be 100644
    --- a/drivers/virtio/virtio_pci_modern.c
    +++ b/drivers/virtio/virtio_pci_modern.c
    @@ -267,6 +267,21 @@ static u16 vp_modern_get_num_queues(struct virtio_pci_modern_device *mdev)
    return vp_ioread16(&mdev->common->num_queues);
    }

    +/*
    + * vp_modern_get_queue_notify_off - get notification offset for a virtqueue
    + * @mdev: the modern virtio-pci device
    + * @index: the queue index
    + *
    + * Returns the notification offset for a virtqueue
    + */
    +static u16 vp_modern_get_queue_notify_off(struct virtio_pci_modern_device *mdev,
    + u16 index)
    +{
    + vp_iowrite16(index, &mdev->common->queue_select);
    +
    + return vp_ioread16(&mdev->common->queue_notify_off);
    +}
    +
    /* virtio config->finalize_features() implementation */
    static int vp_finalize_features(struct virtio_device *vdev)
    {
    @@ -453,7 +468,6 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev,
    {

    struct virtio_pci_modern_device *mdev = &vp_dev->mdev;
    - struct virtio_pci_common_cfg __iomem *cfg = mdev->common;
    struct virtqueue *vq;
    u16 num, off;
    int err;
    @@ -461,9 +475,6 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev,
    if (index >= vp_modern_get_num_queues(mdev))
    return ERR_PTR(-ENOENT);

    - /* Select the queue we're interested in */
    - vp_iowrite16(index, &cfg->queue_select);
    -
    /* Check if queue is either not available or already active. */
    num = vp_modern_get_queue_size(mdev, index);
    if (!num || vp_modern_get_queue_enable(mdev, index))
    @@ -475,7 +486,7 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev,
    }

    /* get offset of notification word for this vq */
    - off = vp_ioread16(&cfg->queue_notify_off);
    + off = vp_modern_get_queue_notify_off(mdev, index);

    info->msix_vector = msix_vec;

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-11-26 10:40    [W:4.336 / U:0.432 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site