Commit 1eff1ad0 authored by Konrad Rzeszutek Wilk's avatar Konrad Rzeszutek Wilk

xen/irq: The Xen hypervisor cleans up the PIRQs if the other domain forgot.

And if the other domain forgot to clean up its PIRQs we don't need
to fail the operation. Just take a note of it and continue on.
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent e6197acc
...@@ -728,7 +728,14 @@ int xen_destroy_irq(int irq) ...@@ -728,7 +728,14 @@ int xen_destroy_irq(int irq)
unmap_irq.pirq = info->u.pirq.pirq; unmap_irq.pirq = info->u.pirq.pirq;
unmap_irq.domid = info->u.pirq.domid; unmap_irq.domid = info->u.pirq.domid;
rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap_irq); rc = HYPERVISOR_physdev_op(PHYSDEVOP_unmap_pirq, &unmap_irq);
if (rc) { /* If another domain quits without making the pci_disable_msix
* call, the Xen hypervisor takes care of freeing the PIRQs
* (free_domain_pirqs).
*/
if ((rc == -ESRCH && info->u.pirq.domid != DOMID_SELF))
printk(KERN_INFO "domain %d does not have %d anymore\n",
info->u.pirq.domid, info->u.pirq.pirq);
else if (rc) {
printk(KERN_WARNING "unmap irq failed %d\n", rc); printk(KERN_WARNING "unmap irq failed %d\n", rc);
goto out; goto out;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment