mtip32xx: Fix to make lba address correct in big-endian systems
PATCH 2/3 mtip32xx: Fix to make lba address correct in big-endian systems
Earlier lba address was assigned directly to lba_low and lba_low_ex, which would result in a different number (bytes reversed) in big-endian systems. Now assigning lba address byte-by-byte to fis.
Reported-by Dan Carpenter <[email protected]>
Signed-off-by Selvan Mani <[email protected]>
Signed-off-by Asai Thambi S P <[email protected]>
--- drivers/block/mtip32xx/mtip32xx.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
drivers/block/mtip32xx/mtip32xx.c +6 -2
@@ -2465,8 +2465,12 @@ static void mtip_hw_submit_io(struct driver_data *dd, sector_t start, fis->opts =1 <<7 ; fis->command = (dir ==READ ?ATA_CMD_FPDMA_READ :ATA_CMD_FPDMA_WRITE ); - *((unsigned int *) &fis->lba_low) = (start &0xFFFFFF ); - *((unsigned int *) &fis->lba_low_ex) = ((start >>24 ) &0xFFFFFF ); + fis->lba_low = start &0xFF ; + fis->lba_mid = (start >>8 ) &0xFF ; + fis->lba_hi = (start >>16 ) &0xFF ; + fis->lba_low_ex = (start >>24 ) &0xFF ; + fis->lba_mid_ex = (start >>32 ) &0xFF ; + fis->lba_hi_ex = (start >>40 ) &0xFF ; fis->device =1 <<6 ; fis->features = nsect &0xFF ; fis->features_ex = (nsect >>8 ) &0xFF ;
Signature · 1 line
1.7.1