Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[SCSI] pm8001: fix endian issue with code optimization.

Data type of the 'tag' field of 'fw_flash_Update_resp' should be __le32.

Data type of 'pHeader' should be __le32. Remove 2nd cast to 'piomb'.

Signed-off-by: Santosh Nayak <santoshprasadnayak@gmail.com>
Acked-by: Jack Wang <jack_wang@usish.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>

authored by

Santosh Nayak and committed by
James Bottomley
fd00f7c1 c6f5c930

+4 -4
+3 -3
drivers/scsi/pm8001/pm8001_hwi.c
··· 3357 3357 struct fw_control_ex fw_control_context; 3358 3358 struct fw_flash_Update_resp *ppayload = 3359 3359 (struct fw_flash_Update_resp *)(piomb + 4); 3360 - u32 tag = ppayload->tag; 3360 + u32 tag = le32_to_cpu(ppayload->tag); 3361 3361 struct pm8001_ccb_info *ccb = &pm8001_ha->ccb_info[tag]; 3362 3362 status = le32_to_cpu(ppayload->status); 3363 3363 memcpy(&fw_control_context, ··· 3703 3703 */ 3704 3704 static void process_one_iomb(struct pm8001_hba_info *pm8001_ha, void *piomb) 3705 3705 { 3706 - u32 pHeader = (u32)*(u32 *)piomb; 3707 - u8 opc = (u8)(pHeader & 0xFFF); 3706 + __le32 pHeader = *(__le32 *)piomb; 3707 + u8 opc = (u8)((le32_to_cpu(pHeader)) & 0xFFF); 3708 3708 3709 3709 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("process_one_iomb:")); 3710 3710
+1 -1
drivers/scsi/pm8001/pm8001_hwi.h
··· 599 599 * 600 600 */ 601 601 struct fw_flash_Update_resp { 602 - dma_addr_t tag; 602 + __le32 tag; 603 603 __le32 status; 604 604 u32 reserved[13]; 605 605 } __attribute__((packed, aligned(4)));