[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] ioemu: unmap INTx interrupt on hot-remove
This patch unmaps INTx interrupt on hot-remove. Please apply this patch after applying the following patch. [Xen-devel] [PATCH] ioemu: msi/msix clean up on hotplug remove Thanks, -- Yuji Shimada Signed-off-by: Yuji Shimada <shimada-yxb@xxxxxxxxxxxxxxx> diff --git a/hw/pass-through.c b/hw/pass-through.c index ee52960..4e7f447 100644 --- a/hw/pass-through.c +++ b/hw/pass-through.c @@ -46,6 +46,8 @@ struct dpci_infos { } dpci_infos; +char mapped_machine_irq[PT_NR_IRQS] = {0}; + /* prototype */ static uint32_t pt_common_reg_init(struct pt_dev *ptdev, struct pt_reg_info_tbl *reg, uint32_t real_offset); @@ -3657,6 +3659,7 @@ struct pt_dev * register_real_device(PCIBus *e_bus, { machine_irq = pirq; assigned_device->machine_irq = pirq; + mapped_machine_irq[machine_irq]++; } } @@ -3737,6 +3740,19 @@ int unregister_real_device(int php_slot) if (assigned_device->msix) pt_msix_disable(assigned_device); + if (machine_irq) + { + mapped_machine_irq[machine_irq]--; + + if (mapped_machine_irq[machine_irq] == 0) + { + rc = xc_physdev_unmap_pirq(xc_handle, domid, machine_irq); + + if (rc < 0) + PT_LOG("Error: Unmaping of interrupt failed! rc=%d\n", rc); + } + } + /* delete all emulated config registers */ pt_config_delete(assigned_device); diff --git a/hw/pass-through.h b/hw/pass-through.h index e86d311..6679fc2 100644 --- a/hw/pass-through.h +++ b/hw/pass-through.h @@ -40,6 +40,7 @@ #define PT_MACHINE_IRQ_AUTO (0xFFFFFFFF) #define PT_VIRT_DEVFN_AUTO (-1) +#define PT_NR_IRQS (256) /* Misc PCI constants that should be moved to a separate library :) */ #define PCI_CONFIG_SIZE (256) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |