[SCSI] aacraid: fix big endian issues
authorSalyzyn, Mark <Mark_Salyzyn@adaptec.com>
Tue, 8 Jan 2008 20:48:25 +0000 (12:48 -0800)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Wed, 23 Jan 2008 17:29:19 +0000 (11:29 -0600)
Big endian systems issues discovered in the aacraid driver. Somewhat
reverses a patch from November 7th of last year that removed swap
operations because they formerly were being assigned to an u8 array
when they should have been assigned to an le32 array.

This patch is largely inert for any little endian processor
architecture. It resolves a bug in delivering the BlinkLED AIF event
to registered applications when the adapter or associated hardware was
reset due to ill health. A rare corner case occurrence, also largely
unnoticed by any as it was a new (untested!) feature.

Signed-off-by: Mark Salyzyn <aacraid@adaptec.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/aacraid/aachba.c
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/comminit.c
drivers/scsi/aacraid/commsup.c
drivers/scsi/aacraid/linit.c
drivers/scsi/aacraid/rx.c

index 94577c03a23adb4df682113fd6ddfb557ae1f934..3cddcc0901b24a57cd778df52a5be1911eb27056 100644 (file)
@@ -1325,10 +1325,9 @@ int aac_get_adapter_info(struct aac_dev* dev)
                          (int)sizeof(dev->supplement_adapter_info.VpdInfo.Tsid),
                          dev->supplement_adapter_info.VpdInfo.Tsid);
                }
-               if (!aac_check_reset ||
-                   ((aac_check_reset != 1) &&
-                    (dev->supplement_adapter_info.SupportedOptions2 &
-                     cpu_to_le32(AAC_OPTION_IGNORE_RESET)))) {
+               if (!aac_check_reset || ((aac_check_reset != 1) &&
+                 (dev->supplement_adapter_info.SupportedOptions2 &
+                 AAC_OPTION_IGNORE_RESET))) {
                        printk(KERN_INFO "%s%d: Reset Adapter Ignored\n",
                          dev->name, dev->id);
                }
index 6d4e24cea3dc72e6c8c4d05ef7f16c1637990c97..07def72610044a1f731d10b12338f0d4c95352c7 100644 (file)
@@ -869,9 +869,9 @@ struct aac_supplement_adapter_info
        __le32  SupportedOptions2;
        __le32  ReservedGrowth[1];
 };
-#define AAC_FEATURE_FALCON     0x00000010
-#define AAC_OPTION_MU_RESET    0x00000001
-#define AAC_OPTION_IGNORE_RESET        0x00000002
+#define AAC_FEATURE_FALCON     cpu_to_le32(0x00000010)
+#define AAC_OPTION_MU_RESET    cpu_to_le32(0x00000001)
+#define AAC_OPTION_IGNORE_RESET        cpu_to_le32(0x00000002)
 #define AAC_SIS_VERSION_V3     3
 #define AAC_SIS_SLOT_UNKNOWN   0xFF
 
index 8736813a029657b494d143b93f7b83f484523693..89cc8b7b42a2028f515f5e3fbe150c621d311405 100644 (file)
@@ -301,10 +301,10 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)
        if ((!aac_adapter_sync_cmd(dev, GET_ADAPTER_PROPERTIES,
                0, 0, 0, 0, 0, 0, status+0, status+1, status+2, NULL, NULL)) &&
                        (status[0] == 0x00000001)) {
-               if (status[1] & AAC_OPT_NEW_COMM_64)
+               if (status[1] & le32_to_cpu(AAC_OPT_NEW_COMM_64))
                        dev->raw_io_64 = 1;
                if (dev->a_ops.adapter_comm &&
-                   (status[1] & AAC_OPT_NEW_COMM))
+                   (status[1] & le32_to_cpu(AAC_OPT_NEW_COMM)))
                        dev->comm_interface = AAC_COMM_MESSAGE;
                if ((dev->comm_interface == AAC_COMM_MESSAGE) &&
                    (status[2] > dev->base_size)) {
index 81cdac166d4b97d59abc868ec3f3edf9272371d8..e82d89ccaf15fbe781b864b99a494f98fc3ca405 100644 (file)
@@ -1343,11 +1343,11 @@ int aac_check_health(struct aac_dev * aac)
                        fib->data = hw_fib->data;
                        aif = (struct aac_aifcmd *)hw_fib->data;
                        aif->command = cpu_to_le32(AifCmdEventNotify);
-                       aif->seqnum = cpu_to_le32(0xFFFFFFFF);
-                       aif->data[0] = AifEnExpEvent;
-                       aif->data[1] = AifExeFirmwarePanic;
-                       aif->data[2] = AifHighPriority;
-                       aif->data[3] = BlinkLED;
+                       aif->seqnum = cpu_to_le32(0xFFFFFFFF);
+                       ((__le32 *)aif->data)[0] = cpu_to_le32(AifEnExpEvent);
+                       ((__le32 *)aif->data)[1] = cpu_to_le32(AifExeFirmwarePanic);
+                       ((__le32 *)aif->data)[2] = cpu_to_le32(AifHighPriority);
+                       ((__le32 *)aif->data)[3] = cpu_to_le32(BlinkLED);
 
                        /*
                         * Put the FIB onto the
@@ -1377,10 +1377,9 @@ int aac_check_health(struct aac_dev * aac)
 
        printk(KERN_ERR "%s: Host adapter BLINK LED 0x%x\n", aac->name, BlinkLED);
 
-       if (!aac_check_reset ||
-           ((aac_check_reset != 1) &&
-            (aac->supplement_adapter_info.SupportedOptions2 &
-             cpu_to_le32(AAC_OPTION_IGNORE_RESET))))
+       if (!aac_check_reset || ((aac_check_reset != 1) &&
+               (aac->supplement_adapter_info.SupportedOptions2 &
+                       AAC_OPTION_IGNORE_RESET)))
                goto out;
        host = aac->scsi_host_ptr;
        if (aac->thread->pid != current->pid)
index e6bdc930d52881e212fcf5acdb8e055ace949716..742e1a8edc60a5035549aa6cd081824f0f0a233a 100644 (file)
@@ -614,11 +614,11 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
         * support a register, instead of a commanded, reset.
         */
        if ((aac->supplement_adapter_info.SupportedOptions2 &
-            cpu_to_le32(AAC_OPTION_MU_RESET)) &&
-           aac_check_reset &&
-           ((aac_check_reset != 1) ||
-            (aac->supplement_adapter_info.SupportedOptions2 &
-             cpu_to_le32(AAC_OPTION_IGNORE_RESET))))
+          AAC_OPTION_MU_RESET) &&
+         aac_check_reset &&
+         ((aac_check_reset != 1) ||
+          (aac->supplement_adapter_info.SupportedOptions2 &
+           AAC_OPTION_IGNORE_RESET)))
                aac_reset_adapter(aac, 2); /* Bypass wait for command quiesce */
        return SUCCESS; /* Cause an immediate retry of the command with a ten second delay after successful tur */
 }
index 9b831519a6faad5aceb9685ad93074b499e58866..a08bbf1fd76c9613681b7c1048e5241fae65620b 100644 (file)
@@ -465,7 +465,7 @@ static int aac_rx_restart_adapter(struct aac_dev *dev, int bled)
        u32 var;
 
        if (!(dev->supplement_adapter_info.SupportedOptions2 &
-           cpu_to_le32(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);