[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.