
On Fri, 24 Nov 2017 09:54:41 +0100 Neil Armstrong narmstrong@baylibre.com wrote:
Before this patch one could receive following errors when executing "fatls" command on machine with cache enabled (ex i.MX6Q) :
=> fatls mmc 0:1 CACHE: Misaligned operation at range [4f59dfc8, 4f59e7c8] CACHE: Misaligned operation at range [4f59dfc8, 4f59e7c8] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x4f59dfc8 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x4f59e7c8 CACHE: Misaligned operation at range [4f59dfc8, 4f59e7c8] CACHE: Misaligned operation at range [4f59dfc8, 4f59e7c8] ERROR: v7_outer_cache_inval_range - start address is not aligned - 0x4f59dfc8 ERROR: v7_outer_cache_inval_range - stop address is not aligned - 0x4f59e7c8
To alleviate this problem - the calloc()s have been replaced with malloc_cache_aligned() and memset().
After those changes the buffers are properly aligned (with both start address and size) to SoC cache line.
Fixes: 09fa964bba80 ("fs/fat: Fix 'CACHE: Misaligned operation at range' warnings") Suggested-by: Lukasz Majewski lukma@denx.de Signed-off-by: Neil Armstrong narmstrong@baylibre.com
fs/fat/fat.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 7fe7843..d16883f 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -1149,11 +1149,13 @@ typedef struct {
int fat_opendir(const char *filename, struct fs_dir_stream **dirsp) {
- fat_dir *dir = calloc(1, sizeof(*dir));
fat_dir *dir; int ret;
dir = malloc_cache_aligned(sizeof(*dir)); if (!dir) return -ENOMEM;
memset(dir, 0, sizeof(*dir));
ret = fat_itr_root(&dir->itr, &dir->fsdata); if (ret)
Reviewed-by: Lukasz Majewski lukma@denx.de
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de