lkml.org 
[lkml]   [2022]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 07/11] vduse: Support set/get_vq_affinity callbacks
    Date
    Since we already support irq callback affinity management,
    let's implement the set/get_vq_affinity callbacks to make
    it possible for the virtio device driver to change or be
    aware of the affinity. This would make it possible for the
    virtio-blk driver to build the blk-mq queues based on the
    irq callback affinity.

    Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
    ---
    drivers/vdpa/vdpa_user/vduse_dev.c | 24 ++++++++++++++++++++++++
    1 file changed, 24 insertions(+)

    diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c
    index 90c2896039d9..6507a78abc9d 100644
    --- a/drivers/vdpa/vdpa_user/vduse_dev.c
    +++ b/drivers/vdpa/vdpa_user/vduse_dev.c
    @@ -739,6 +739,28 @@ static void vduse_vq_update_effective_cpu(struct vduse_virtqueue *vq)
    spin_unlock(&vq->irq_affinity_lock);
    }

    +static int vduse_vdpa_set_vq_affinity(struct vdpa_device *vdpa, u16 idx,
    + const struct cpumask *cpu_mask)
    +{
    + struct vduse_dev *dev = vdpa_to_vduse(vdpa);
    +
    + cpumask_copy(&dev->vqs[idx]->irq_affinity, cpu_mask);
    + vduse_vq_update_effective_cpu(dev->vqs[idx]);
    +
    + return 0;
    +}
    +
    +static const struct cpumask *
    +vduse_vdpa_get_vq_affinity(struct vdpa_device *vdpa, u16 idx)
    +{
    + struct vduse_dev *dev = vdpa_to_vduse(vdpa);
    +
    + if (dev->vqs[idx]->irq_effective_cpu == -1)
    + return NULL;
    +
    + return &dev->vqs[idx]->irq_affinity;
    +}
    +
    static void vduse_vdpa_set_irq_affinity(struct vdpa_device *vdpa,
    struct irq_affinity *desc)
    {
    @@ -807,6 +829,8 @@ static const struct vdpa_config_ops vduse_vdpa_config_ops = {
    .get_config = vduse_vdpa_get_config,
    .set_config = vduse_vdpa_set_config,
    .get_generation = vduse_vdpa_get_generation,
    + .set_vq_affinity = vduse_vdpa_set_vq_affinity,
    + .get_vq_affinity = vduse_vdpa_get_vq_affinity,
    .set_irq_affinity = vduse_vdpa_set_irq_affinity,
    .reset = vduse_vdpa_reset,
    .set_map = vduse_vdpa_set_map,
    --
    2.20.1
    \
     
     \ /
      Last update: 2022-12-05 10:04    [W:3.883 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site