Skip to content

Commit 8850336

Browse files
rchatreAlex Williamson
authored andcommitted
vfio/pci: Move to single error path
Enabling and disabling of an interrupt involves several steps that can fail. Cleanup after failure is done when the error is encountered, resulting in some repetitive code. Support for dynamic contexts will introduce more steps during interrupt enabling and disabling. Transition to centralized exit path in preparation for dynamic contexts to eliminate duplicate error handling code. Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Acked-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/72dddae8aa710ce522a74130120733af61cffe4d.1683740667.git.reinette.chatre@intel.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
1 parent d977e0f commit 8850336

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

drivers/vfio/pci/vfio_pci_intrs.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -427,8 +427,8 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_core_device *vdev,
427427

428428
trigger = eventfd_ctx_fdget(fd);
429429
if (IS_ERR(trigger)) {
430-
kfree(ctx->name);
431-
return PTR_ERR(trigger);
430+
ret = PTR_ERR(trigger);
431+
goto out_free_name;
432432
}
433433

434434
/*
@@ -448,11 +448,8 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_core_device *vdev,
448448

449449
ret = request_irq(irq, vfio_msihandler, 0, ctx->name, trigger);
450450
vfio_pci_memory_unlock_and_restore(vdev, cmd);
451-
if (ret) {
452-
kfree(ctx->name);
453-
eventfd_ctx_put(trigger);
454-
return ret;
455-
}
451+
if (ret)
452+
goto out_put_eventfd_ctx;
456453

457454
ctx->producer.token = trigger;
458455
ctx->producer.irq = irq;
@@ -467,6 +464,12 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_core_device *vdev,
467464
ctx->trigger = trigger;
468465

469466
return 0;
467+
468+
out_put_eventfd_ctx:
469+
eventfd_ctx_put(trigger);
470+
out_free_name:
471+
kfree(ctx->name);
472+
return ret;
470473
}
471474

472475
static int vfio_msi_set_block(struct vfio_pci_core_device *vdev, unsigned start,

0 commit comments

Comments
 (0)