]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/aacraid/rx.c
Merge branch 'linus' into x86/memory-corruption-check
[linux-2.6-omap-h63xx.git] / drivers / scsi / aacraid / rx.c
index 73eef3dc5dc629d0056a1e8ba2178a1205bc9f4e..073208b0f622cf6148d86418f384bbf5fa8f3f5c 100644 (file)
@@ -39,7 +39,6 @@
 #include <linux/completion.h>
 #include <linux/time.h>
 #include <linux/interrupt.h>
-#include <asm/semaphore.h>
 
 #include <scsi/scsi_host.h>
 
@@ -465,7 +464,7 @@ static int aac_rx_restart_adapter(struct aac_dev *dev, int bled)
        u32 var;
 
        if (!(dev->supplement_adapter_info.SupportedOptions2 &
-         le32_to_cpu(AAC_OPTION_MU_RESET)) || (bled >= 0) || (bled == -2)) {
+         AAC_OPTION_MU_RESET) || (bled >= 0) || (bled == -2)) {
                if (bled)
                        printk(KERN_ERR "%s%d: adapter kernel panic'd %x.\n",
                                dev->name, dev->id, bled);
@@ -549,7 +548,9 @@ int _aac_rx_init(struct aac_dev *dev)
        dev->OIMR = status = rx_readb (dev, MUnit.OIMR);
        if ((((status & 0x0c) != 0x0c) || aac_reset_devices || reset_devices) &&
          !aac_rx_restart_adapter(dev, 0))
-               ++restart;
+               /* Make sure the Hardware FIFO is empty */
+               while ((++restart < 512) &&
+                 (rx_readl(dev, MUnit.OutboundQueue) != 0xFFFFFFFFL));
        /*
         *      Check to see if the board panic'd while booting.
         */
@@ -623,8 +624,11 @@ int _aac_rx_init(struct aac_dev *dev)
        if (aac_init_adapter(dev) == NULL)
                goto error_iounmap;
        aac_adapter_comm(dev, dev->comm_interface);
-       if (request_irq(dev->scsi_host_ptr->irq, dev->a_ops.adapter_intr,
+       dev->msi = aac_msi && !pci_enable_msi(dev->pdev);
+       if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr,
                        IRQF_SHARED|IRQF_DISABLED, "aacraid", dev) < 0) {
+               if (dev->msi)
+                       pci_disable_msi(dev->pdev);
                printk(KERN_ERR "%s%d: Interrupt unavailable.\n",
                        name, instance);
                goto error_iounmap;