summaryrefslogtreecommitdiff
path: root/plat
diff options
context:
space:
mode:
authorRoberto Vargas <roberto.vargas@arm.com>2017-11-23 12:03:46 +0000
committerRoberto Vargas <roberto.vargas@arm.com>2017-12-13 09:13:37 +0000
commite19e40af9717542ad70e8b9479bca7373b8609fe (patch)
tree7a5b1e6aaa670856e5769a88cd1c741c82578df7 /plat
parente2ff5ef8618c0d1213f783875bf15a6e601a2d48 (diff)
io: block: fix block_read/write may read/write overlap buffer
The block operations were trying to optimize the number of memory copies, and it tried to use directly the buffer supplied by the user to them. This was a mistake because it created too many corner cases: 1- It was possible to generate unaligned operations to unaligned buffers. Drivers that were using DMA transfer failed in that case. 2- It was possible to generate read operations with sizes that weren't a multiple of the block size. Some low level drivers assumed that condition and they calculated the number of blocks dividing the number of bytes by the size of the block, without considering the remaining bytes. 3- The block_* operations didn't control the number of bytes actually copied to memory, because the low level drivers were writing directly to the user buffer. This patch rewrite block_read and block_write to use always the device buffer, which the platform ensures that has the correct aligment and the correct size. Change-Id: I5e479bb7bc137e6ec205a8573eb250acd5f40420 Signed-off-by: Qixiang Xu <qixiang.xu@arm.com> Signed-off-by: Roberto Vargas <roberto.vargas@arm.com>
Diffstat (limited to 'plat')
0 files changed, 0 insertions, 0 deletions