Message ID | 1511513681-12636-1-git-send-email-narmstrong@baylibre.com |
---|---|
State | Accepted |
Commit | 34dd853ce5f44d34bfb0358c73da2fe9f2a4e5d1 |
Delegated to: | Tom Rini |
Headers | show |
Series | [U-Boot] fat: Use cache aligned buffers for fat_opendir | expand |
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
Hi Neil, On Fri, Nov 24, 2017 at 6:54 AM, 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> Thanks for the fix: Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
On Fri, Nov 24, 2017 at 09:54:41AM +0100, Neil Armstrong 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> > Reviewed-by: Lukasz Majewski <lukma@denx.de> > Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com> Applied to u-boot/master, thanks!
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)
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(-)