From 55b523b7d4ab885142f77d388007eb5490ba6bf4 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Tue, 18 Sep 2012 08:05:28 +0000 Subject: ext4: cache-align buffers so the invalidation works DMA buffer cache invalidation requires that buffers have cache-aligned buffer locations and sizes. Use memalign() and ALLOC_CACHE_ALIGN_BUFFER() to ensure this. On Tegra at least, without this fix, the following fail commands fail in u-boot-master/ext4, but succeeded at the branch's branch point in u-boot/master. With this fix, the commands work again: ext2ls mmc 0:1 / ext2load mmc 0:1 /boot/zImage Cc: Uma Shankar Cc: Manjunatha C Achar Cc: Iqbal Shareef Cc: Hakgoo Lee Cc: Wolfgang Denk Cc: Tom Rini Signed-off-by: Stephen Warren --- fs/ext4/dev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'fs/ext4/dev.c') diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c index fb62f24..9e85228 100644 --- a/fs/ext4/dev.c +++ b/fs/ext4/dev.c @@ -62,7 +62,7 @@ int ext4fs_set_blk_dev(block_dev_desc_t *rbdd, int part) int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf) { - char sec_buf[SECTOR_SIZE]; + ALLOC_CACHE_ALIGN_BUFFER(char, sec_buf, SECTOR_SIZE); unsigned block_len; /* Check partition boundaries */ @@ -107,7 +107,7 @@ int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf) block_len = byte_len & ~(SECTOR_SIZE - 1); if (block_len == 0) { - u8 p[SECTOR_SIZE]; + ALLOC_CACHE_ALIGN_BUFFER(u8, p, SECTOR_SIZE); block_len = SECTOR_SIZE; ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc->dev, -- cgit v1.1