[SCSI] megaraid_sas: Fix bug where AENs could be lost in probe() and resume()
authoradam radford <aradford@gmail.com>
Thu, 12 May 2011 01:34:29 +0000 (18:34 -0700)
committerJames Bottomley <jbottomley@parallels.com>
Tue, 24 May 2011 16:35:34 +0000 (12:35 -0400)
Signed-off-by: Adam Radford <aradford@gmail.com>
Signed-off-by: James Bottomley <jbottomley@parallels.com>
drivers/scsi/megaraid/megaraid_sas_base.c

index a32b6ba..f43ab03 100644 (file)
@@ -4115,6 +4115,14 @@ megasas_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
        megasas_mgmt_info.max_index++;
 
        /*
+        * Register with SCSI mid-layer
+        */
+       if (megasas_io_attach(instance))
+               goto fail_io_attach;
+
+       instance->unload = 0;
+
+       /*
         * Initiate AEN (Asynchronous Event Notification)
         */
        if (megasas_start_aen(instance)) {
@@ -4122,13 +4130,6 @@ megasas_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
                goto fail_start_aen;
        }
 
-       /*
-        * Register with SCSI mid-layer
-        */
-       if (megasas_io_attach(instance))
-               goto fail_io_attach;
-
-       instance->unload = 0;
        return 0;
 
       fail_start_aen:
@@ -4383,12 +4384,6 @@ megasas_resume(struct pci_dev *pdev)
 
        instance->instancet->enable_intr(instance->reg_set);
 
-       /*
-        * Initiate AEN (Asynchronous Event Notification)
-        */
-       if (megasas_start_aen(instance))
-               printk(KERN_ERR "megasas: Start AEN failed\n");
-
        /* Initialize the cmd completion timer */
        if (poll_mode_io)
                megasas_start_timer(instance, &instance->io_completion_timer,
@@ -4396,6 +4391,12 @@ megasas_resume(struct pci_dev *pdev)
                                MEGASAS_COMPLETION_TIMER_INTERVAL);
        instance->unload = 0;
 
+       /*
+        * Initiate AEN (Asynchronous Event Notification)
+        */
+       if (megasas_start_aen(instance))
+               printk(KERN_ERR "megasas: Start AEN failed\n");
+
        return 0;
 
 fail_irq: