• Ben Hutchings's avatar
    bfa: Fix undefined bit shift on big-endian architectures with 32-bit DMA address · 03a6c3ff
    Ben Hutchings authored
    bfa_swap_words() shifts its argument (assumed to be 64-bit) by 32 bits
    each way.  In two places the argument type is dma_addr_t, which may be
    32-bit, in which case the effect of the bit shift is undefined:
    
    drivers/scsi/bfa/bfa_fcpim.c: In function 'bfa_ioim_send_ioreq':
    drivers/scsi/bfa/bfa_fcpim.c:2497:4: warning: left shift count >= width of type [enabled by default]
        addr = bfa_sgaddr_le(sg_dma_address(sg));
        ^
    drivers/scsi/bfa/bfa_fcpim.c:2497:4: warning: right shift count >= width of type [enabled by default]
    drivers/scsi/bfa/bfa_fcpim.c:2509:4: warning: left shift count >= width of type [enabled by default]
        addr = bfa_sgaddr_le(sg_dma_address(sg));
        ^
    drivers/scsi/bfa/bfa_fcpim.c:2509:4: warning: right shift count >= width of type [enabled by default]
    
    Avoid this by adding casts to u64 in bfa_swap_words().
    
    Compile-tested only.
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Acked-by: default avatarAnil Gurumurthy <anil.gurumurthy@qlogic.com>
    Cc: stable@vger.kernel.org
    Fixes: f16a1750 ('[SCSI] bfa: remove all OS wrappers')
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    03a6c3ff
bfa_ioc.h 32.7 KB