We save now the IRQ number returned from bind_evtchn_to_irqhandler.
That value is now used by 'unbind_from_irqhandler' instead of
improper event channel number.
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
drivers/xen/pcifront/pcifront.h | 2 ++
drivers/xen/pcifront/xenbus.c | 12 ++++++++++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/xen/pcifront/pcifront.h b/drivers/xen/pcifront/pcifront.h
index 82364c4..909726b 100644
--- a/drivers/xen/pcifront/pcifront.h
+++ b/drivers/xen/pcifront/pcifront.h
@@ -31,6 +31,8 @@ struct pcifront_device {
int evtchn;
int gnt_ref;
+ int irq;
+
/* Lock this when doing any operations in sh_info */
spinlock_t sh_info_lock;
struct xen_pci_sharedinfo *sh_info;
diff --git a/drivers/xen/pcifront/xenbus.c b/drivers/xen/pcifront/xenbus.c
index c2ef1de..8d8c2ca 100644
--- a/drivers/xen/pcifront/xenbus.c
+++ b/drivers/xen/pcifront/xenbus.c
@@ -49,6 +49,7 @@ static struct pcifront_device *alloc_pdev(struct
xenbus_device *xdev)
pdev->evtchn = INVALID_EVTCHN;
pdev->gnt_ref = INVALID_GRANT_REF;
+ pdev->irq = -1;
INIT_WORK(&pdev->op_work, pcifront_do_aer);
@@ -66,7 +67,7 @@ static void free_pdev(struct pcifront_device *pdev)
/*For PCIE_AER error handling job*/
flush_scheduled_work();
- unbind_from_irqhandler(pdev->evtchn, pdev);
+ unbind_from_irqhandler(pdev->irq, pdev);
if (pdev->evtchn != INVALID_EVTCHN)
xenbus_free_evtchn(pdev->xdev, pdev->evtchn);
@@ -95,8 +96,15 @@ static int pcifront_publish_info(struct pcifront_device
*pdev)
if (err)
goto out;
- bind_evtchn_to_irqhandler(pdev->evtchn, pcifront_handler_aer,
+ err = bind_evtchn_to_irqhandler(pdev->evtchn, pcifront_handler_aer,
0, "pcifront", pdev);
+ if (err < 0) {
+ xenbus_free_evtchn(pdev->xdev, pdev->evtchn);
+ xenbus_dev_fatal(pdev->xdev, err, "Failed to bind evtchn to "
+ "irqhandler.\n");
+ return err;
+ }
+ pdev->irq = err;
do_publish:
err = xenbus_transaction_start(&trans);
--
1.6.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|