From: Ian Jackson Date: Mon, 16 Mar 2009 18:15:47 +0000 (+0000) Subject: passthrough: msi/msix clean up on hotplug remove X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=58d9e58c4172a7f52d90a1c0a7a73fab5870f3de;p=xenclient%2Fioemu.git passthrough: msi/msix clean up on hotplug remove The passthrough MSI/MSI-X should be unbound and unmapped when unregister_real_device is called, this patch fix this. Signed-off-by: Qing He --- diff --git a/hw/pass-through.c b/hw/pass-through.c index 0b44daa0..ed69265d 100644 --- a/hw/pass-through.c +++ b/hw/pass-through.c @@ -3825,20 +3825,14 @@ int unregister_real_device(int php_slot) e_device, e_intx, 0); if ( rc < 0 ) { - /* TBD: unregister device in case of an error */ PT_LOG("Error: Unbinding of interrupt failed! rc=%d\n", rc); } } - else if (assigned_device->msi_trans_en) - { - rc = xc_domain_unbind_pt_irq(xc_handle, domid, assigned_device->msi->pirq, - PT_IRQ_TYPE_MSI_TRANSLATE, 0, - e_device, e_intx, 0); - if (rc < 0) - PT_LOG("Error: Unbinding pt irq for MSI-INTx failed! rc=%d\n", rc); - } - /* TODO: unmap passthrough MSI and MSI-X irqs */ + if (assigned_device->msi) + pt_msi_disable(assigned_device); + if (assigned_device->msix) + pt_msix_disable(assigned_device); /* delete all emulated config registers */ pt_config_delete(assigned_device);