Patch "mmc: block: fix packed command header endianness" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
mmc: block: fix packed command header endianness
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mmc-block-fix-packed-command-header-endianness.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
f68381a70bb2b26c31b13fdaf67c778f92fd32b4Mon Sep 17 00:00:00 2001
From: Taras Kondratiuk <[email protected]>
Date: Wed, 13 Jul 2016 22:05:38 +0000
Subject: mmc: block: fix packed command header endianness
From: Taras Kondratiuk <[email protected]>
commit f68381a70bb2b26c31b13fdaf67c778f92fd32b4 upstream.
The code that fills packed command header assumes that CPU runs in little-endian mode. Hence the header is malformed in big-endian mode and causes MMC data transfer errors:
[ 563.200828] mmcblk0: error -110 transferring data, sector 2048, nr 8, cmd response 0x900, card status 0xc40 [ 563.219647] mmcblk0: packed cmd failed, nr 2, sectors 16, failure index: -1
Convert header data to LE.
--- drivers/mmc/card/block.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/mmc/card/block.c +6 -6
@@ -1767,8 +1767,8 @@ static void mmc_blk_packed_hdr_wrq_prep( packed_cmd_hdr = packed->cmd_hdr;memset (packed_cmd_hdr,0 ,sizeof (packed->cmd_hdr)); - packed_cmd_hdr[0 ] = (packed->nr_entries <<16 ) | - (PACKED_CMD_WR <<8 ) |PACKED_CMD_VER ; + packed_cmd_hdr[0 ] =cpu_to_le32 ((packed->nr_entries <<16 ) | + (PACKED_CMD_WR <<8 ) |PACKED_CMD_VER ); hdr_blocks =mmc_large_sector (card) ?8 :1 ;/*
@@ -1782,14 +1782,14 @@ static void mmc_blk_packed_hdr_wrq_prep( ((brq->data.blocks * brq->data.blksz) >= card->ext_csd.data_tag_unit_size);/* Argument of CMD23 */ - packed_cmd_hdr[(i *2 )] = + packed_cmd_hdr[(i *2 )] =cpu_to_le32 ( (do_rel_wr ?MMC_CMD23_ARG_REL_WR :0 ) | (do_data_tag ?MMC_CMD23_ARG_TAG_REQ :0 ) | -blk_rq_sectors (prq); +blk_rq_sectors (prq));/* Argument of CMD18 or CMD25 */ - packed_cmd_hdr[((i *2 )) +1 ] = + packed_cmd_hdr[((i *2 )) +1 ] =cpu_to_le32 (mmc_card_blockaddr (card) ? -blk_rq_pos (prq) :blk_rq_pos (prq) <<9 ; +blk_rq_pos (prq) :blk_rq_pos (prq) <<9 ); packed->blocks +=blk_rq_sectors (prq); i++; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/mmc-block-fix-packed-command-header-endianness.patch