* boundary. Given that we use pci_alloc_consistent() to allocate an
         * array of them, the size must be a multiple of 8 bytes.
         */
-       BUILD_BUG_ON(sizeof(CommandList_struct) % 8);
+       BUILD_BUG_ON(sizeof(CommandList_struct) % COMMANDLIST_ALIGNMENT);
 
        printk(KERN_INFO DRIVER_NAME "\n");
 
 
 #define CMD_MSG_TIMEOUT 0x05
 #define CMD_MSG_STALE  0xff
 
-/* This structure needs to be divisible by 8 for new
- * indexing method.  PAD_32 and PAD_64 can be adjusted
- * independently as needed for 32-bit and 64-bits systems.
+/* This structure needs to be divisible by COMMANDLIST_ALIGNMENT
+ * because low bits of the address are used to to indicate that
+ * whether the tag contains an index or an address.  PAD_32 and
+ * PAD_64 can be adjusted independently as needed for 32-bit
+ * and 64-bits systems.
  */
+#define COMMANDLIST_ALIGNMENT (8)
 #define IS_64_BIT ((sizeof(long) - 4)/4)
 #define IS_32_BIT (!IS_64_BIT)
 #define PAD_32 (0)
 
 };
 
 #pragma pack(1)
+
+#define SCSI_PAD_32 4
+#define SCSI_PAD_64 4
+
 struct cciss_scsi_cmd_stack_elem_t {
        CommandList_struct cmd;
        ErrorInfo_struct Err;
        __u32 busaddr;
-       __u32 pad;
+       u8 pad[IS_32_BIT * SCSI_PAD_32 + IS_64_BIT * SCSI_PAD_64];
 };
 
 #pragma pack()
        stk = &sa->cmd_stack; 
        size = sizeof(struct cciss_scsi_cmd_stack_elem_t) * CMD_STACK_SIZE;
 
-       // pci_alloc_consistent guarantees 32-bit DMA address will
-       // be used
-
+       /* Check alignment, see cciss_cmd.h near CommandList_struct def. */
+       BUILD_BUG_ON((sizeof(*stk->pool) % COMMANDLIST_ALIGNMENT) != 0);
+       /* pci_alloc_consistent guarantees 32-bit DMA address will be used */
        stk->pool = (struct cciss_scsi_cmd_stack_elem_t *)
                pci_alloc_consistent(hba[ctlr]->pdev, size, &stk->cmd_pool_handle);