Sysace: Move IRQ handler registration to occur after FSM is initialized

The FSM needs to be initialized before it is safe to call the ISR

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
Grant Likely 2007-10-01 16:33:54 +02:00 committed by Jens Axboe
parent 4a24d8610d
commit 32f6fff47d

View File

@ -949,15 +949,6 @@ static int __devinit ace_setup(struct ace_device *ace)
if (!ace->baseaddr)
goto err_ioremap;
if (ace->irq != NO_IRQ) {
rc = request_irq(ace->irq, ace_interrupt, 0, "systemace", ace);
if (rc) {
/* Failure - fall back to polled mode */
dev_err(ace->dev, "request_irq failed\n");
ace->irq = NO_IRQ;
}
}
/*
* Initialize the state machine tasklet and stall timer
*/
@ -1015,6 +1006,16 @@ static int __devinit ace_setup(struct ace_device *ace)
val |= ACE_CTRL_DATABUFRDYIRQ | ACE_CTRL_ERRORIRQ;
ace_out(ace, ACE_CTRL, val);
/* Now we can hook up the irq handler */
if (ace->irq != NO_IRQ) {
rc = request_irq(ace->irq, ace_interrupt, 0, "systemace", ace);
if (rc) {
/* Failure - fall back to polled mode */
dev_err(ace->dev, "request_irq failed\n");
ace->irq = NO_IRQ;
}
}
/* Print the identification */
dev_info(ace->dev, "Xilinx SystemACE revision %i.%i.%i\n",
(version >> 12) & 0xf, (version >> 8) & 0x0f, version & 0xff);
@ -1035,8 +1036,6 @@ static int __devinit ace_setup(struct ace_device *ace)
blk_cleanup_queue(ace->queue);
err_blk_initq:
iounmap(ace->baseaddr);
if (ace->irq != NO_IRQ)
free_irq(ace->irq, ace);
err_ioremap:
dev_info(ace->dev, "xsysace: error initializing device at 0x%lx\n",
ace->physaddr);