Messages in this thread Patch in this message |  | | | From | Zach Brown <> | | Subject | [PATCH] [qla2xxx] only free_irq() after request_irq() succeeds | | Date | Mon, 10 Apr 2006 16:39:36 -0700 (PDT) |
| |
[qla2xxx] only free_irq() after request_irq() succeeds
If qla2x00_probe_one() fails before calling request_irq() but gets to qla2x00_free_device() then it will mistakenly tree to free an irq it didn't request. It's chosing to free based on ha->pdev->irq which is always set.
host->irq is set after request_irq() succeeds so let's use that to decide to free or not.
This was observed and tested when a silly set of circumstances lead to firmware loading failing on a 2100.
Signed-off-by: Zach Brown <zach.brown@oracle.com> --- drivers/scsi/qla2xxx/qla_os.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) Index: 2.6.17-rc1-mm2-qlafreeirq/drivers/scsi/qla2xxx/qla_os.c =================================================================== --- 2.6.17-rc1-mm2-qlafreeirq.orig/drivers/scsi/qla2xxx/qla_os.c +++ 2.6.17-rc1-mm2-qlafreeirq/drivers/scsi/qla2xxx/qla_os.c @@ -1700,8 +1700,8 @@ qla2x00_free_device(scsi_qla_host_t *ha) ha->flags.online = 0; /* Detach interrupts */ - if (ha->pdev->irq) - free_irq(ha->pdev->irq, ha); + if (ha->host->irq) + free_irq(ha->host->irq, ha); /* release io space registers */ if (ha->iobase) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |