mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-18 03:44:27 +08:00
cciss: detect bad alignment of scsi commands at build time
cciss: detect bad alignment of scsi commands at build time Incidentally fix some nearby c++ style comments. Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
58daa9ce96
commit
1b7d0d28ad
@ -4496,7 +4496,7 @@ static int __init cciss_init(void)
|
||||
* 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");
|
||||
|
||||
|
@ -167,10 +167,13 @@ typedef struct _SGDescriptor_struct {
|
||||
#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)
|
||||
|
@ -93,11 +93,15 @@ static struct scsi_host_template cciss_driver_template = {
|
||||
};
|
||||
|
||||
#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()
|
||||
@ -202,9 +206,9 @@ scsi_cmd_stack_setup(int ctlr, struct cciss_scsi_adapter_data_t *sa)
|
||||
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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user