lkml.org 
[lkml]   [2023]   [Oct]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH V2 09/18] vfio/pci: Move interrupt contexts to generic interrupt struct
    Date
    VFIO PCI interrupt management maintains per-interrupt
    context within an xarray using the interrupt vector as index.

    Move the per-interrupt context to the generic interrupt
    context in struct vfio_pci_intr_ctx to enable this context to
    be managed by a different backend.

    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    ---
    drivers/vfio/pci/vfio_pci_core.c | 1 -
    drivers/vfio/pci/vfio_pci_intrs.c | 9 +++++----
    include/linux/vfio_pci_core.h | 3 ++-
    3 files changed, 7 insertions(+), 6 deletions(-)

    diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
    index bf4de137ad2f..cf303a9555f0 100644
    --- a/drivers/vfio/pci/vfio_pci_core.c
    +++ b/drivers/vfio/pci/vfio_pci_core.c
    @@ -2162,7 +2162,6 @@ int vfio_pci_core_init_dev(struct vfio_device *core_vdev)
    INIT_LIST_HEAD(&vdev->vma_list);
    INIT_LIST_HEAD(&vdev->sriov_pfs_item);
    init_rwsem(&vdev->memory_lock);
    - xa_init(&vdev->ctx);
    vfio_pci_init_intr_ctx(vdev, &vdev->intr_ctx);

    return 0;
    diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
    index 9fc0a568d392..3c8fed88208c 100644
    --- a/drivers/vfio/pci/vfio_pci_intrs.c
    +++ b/drivers/vfio/pci/vfio_pci_intrs.c
    @@ -52,13 +52,13 @@ static
    struct vfio_pci_irq_ctx *vfio_irq_ctx_get(struct vfio_pci_core_device *vdev,
    unsigned long index)
    {
    - return xa_load(&vdev->ctx, index);
    + return xa_load(&vdev->intr_ctx.ctx, index);
    }

    static void vfio_irq_ctx_free(struct vfio_pci_core_device *vdev,
    struct vfio_pci_irq_ctx *ctx, unsigned long index)
    {
    - xa_erase(&vdev->ctx, index);
    + xa_erase(&vdev->intr_ctx.ctx, index);
    kfree(ctx);
    }

    @@ -72,7 +72,7 @@ vfio_irq_ctx_alloc(struct vfio_pci_core_device *vdev, unsigned long index)
    if (!ctx)
    return NULL;

    - ret = xa_insert(&vdev->ctx, index, ctx, GFP_KERNEL_ACCOUNT);
    + ret = xa_insert(&vdev->intr_ctx.ctx, index, ctx, GFP_KERNEL_ACCOUNT);
    if (ret) {
    kfree(ctx);
    return NULL;
    @@ -529,7 +529,7 @@ static void vfio_msi_disable(struct vfio_pci_core_device *vdev, bool msix)
    unsigned long i;
    u16 cmd;

    - xa_for_each(&vdev->ctx, i, ctx) {
    + xa_for_each(&vdev->intr_ctx.ctx, i, ctx) {
    vfio_virqfd_disable(&ctx->unmask);
    vfio_virqfd_disable(&ctx->mask);
    vfio_msi_set_vector_signal(vdev, i, -1, msix);
    @@ -809,6 +809,7 @@ void vfio_pci_init_intr_ctx(struct vfio_pci_core_device *vdev,
    intr_ctx->ops = &vfio_pci_intr_ops;
    intr_ctx->priv = vdev;
    mutex_init(&intr_ctx->igate);
    + xa_init(&intr_ctx->ctx);
    }
    EXPORT_SYMBOL_GPL(vfio_pci_init_intr_ctx);

    diff --git a/include/linux/vfio_pci_core.h b/include/linux/vfio_pci_core.h
    index b1c299188bf5..46521dd82a6b 100644
    --- a/include/linux/vfio_pci_core.h
    +++ b/include/linux/vfio_pci_core.h
    @@ -56,6 +56,7 @@ struct vfio_pci_region {
    * @igate: Protects members of struct vfio_pci_intr_ctx
    * @err_trigger: Eventfd associated with error reporting IRQ
    * @req_trigger: Eventfd associated with device request notification
    + * @ctx: Per-interrupt context indexed by vector
    */
    struct vfio_pci_intr_ctx {
    const struct vfio_pci_intr_ops *ops;
    @@ -63,6 +64,7 @@ struct vfio_pci_intr_ctx {
    struct mutex igate;
    struct eventfd_ctx *err_trigger;
    struct eventfd_ctx *req_trigger;
    + struct xarray ctx;
    };

    struct vfio_pci_intr_ops {
    @@ -98,7 +100,6 @@ struct vfio_pci_core_device {
    u8 *vconfig;
    struct perm_bits *msi_perm;
    spinlock_t irqlock;
    - struct xarray ctx;
    int irq_type;
    int num_regions;
    struct vfio_pci_region *region;
    --
    2.34.1
    \
     
     \ /
      Last update: 2023-10-06 18:43    [W:4.100 / U:1.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site