Sysace: Don't enable IRQ until after interrupt handler is registered
authorGrant Likely <grant.likely@secretlab.ca>
Thu, 4 Oct 2007 06:52:40 +0000 (08:52 +0200)
committerJens Axboe <axboe@carl.home.kernel.dk>
Wed, 10 Oct 2007 07:26:00 +0000 (09:26 +0200)
The previous patch to move the interrupt handler registration moved it
below enabling interrupts which could be a problem if the device is on
a shared interrupt line.  This patch fixes the order.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
drivers/block/xsysace.c

index 5b73471ada78d267fd737dbd2b7e587c90cf8782..9e7652dcde6cd46f1d1d19c2fa0462f8754d9536 100644 (file)
@@ -1005,11 +1005,6 @@ static int __devinit ace_setup(struct ace_device *ace)
        ace_out(ace, ACE_CTRL, ACE_CTRL_FORCECFGMODE |
                ACE_CTRL_DATABUFRDYIRQ | ACE_CTRL_ERRORIRQ);
 
-       /* Enable interrupts */
-       val = ace_in(ace, ACE_CTRL);
-       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);
@@ -1020,6 +1015,11 @@ static int __devinit ace_setup(struct ace_device *ace)
                }
        }
 
+       /* Enable interrupts */
+       val = ace_in(ace, ACE_CTRL);
+       val |= ACE_CTRL_DATABUFRDYIRQ | ACE_CTRL_ERRORIRQ;
+       ace_out(ace, ACE_CTRL, val);
+
        /* Print the identification */
        dev_info(ace->dev, "Xilinx SystemACE revision %i.%i.%i\n",
                 (version >> 12) & 0xf, (version >> 8) & 0x0f, version & 0xff);