@@ -793,6 +793,18 @@ static int vfio_pci_set_req_trigger(struct vfio_pci_intr_ctx *intr_ctx,
count, flags, data);
}
+static void _vfio_pci_init_intr_ctx(struct vfio_pci_intr_ctx *intr_ctx)
+{
+ intr_ctx->irq_type = VFIO_PCI_NUM_IRQS;
+ mutex_init(&intr_ctx->igate);
+ xa_init(&intr_ctx->ctx);
+}
+
+static void _vfio_pci_release_intr_ctx(struct vfio_pci_intr_ctx *intr_ctx)
+{
+ mutex_destroy(&intr_ctx->igate);
+}
+
struct vfio_pci_intr_ops vfio_pci_intr_ops = {
.set_intx_mask = vfio_pci_set_intx_mask,
.set_intx_unmask = vfio_pci_set_intx_unmask,
@@ -806,17 +818,15 @@ struct vfio_pci_intr_ops vfio_pci_intr_ops = {
void vfio_pci_init_intr_ctx(struct vfio_pci_core_device *vdev,
struct vfio_pci_intr_ctx *intr_ctx)
{
- intr_ctx->irq_type = VFIO_PCI_NUM_IRQS;
+ _vfio_pci_init_intr_ctx(intr_ctx);
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);
void vfio_pci_release_intr_ctx(struct vfio_pci_intr_ctx *intr_ctx)
{
- mutex_destroy(&intr_ctx->igate);
+ _vfio_pci_release_intr_ctx(intr_ctx);
}
EXPORT_SYMBOL_GPL(vfio_pci_release_intr_ctx);
struct vfio_pci_intr_ctx is the context associated with interrupts of a virtual device. The interrupt context is initialized with backend specific data required by the particular interrupt management backend as well as common initialization required by all interrupt management backends. Split interrupt context initialization into common and interrupt management backend specific calls. The entrypoint will be the initialization of a particular interrupt management backend which in turn calls the common initialization. Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> --- drivers/vfio/pci/vfio_pci_intrs.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)