Re: [U-Boot] [PATCH] fs/fat: Fix 'CACHE: Misaligned operation at range' warnings
On Tue, Sep 26, 2017 at 03:21:25PM +0300, Tuomas Tynkkynen wrote: > The 'block' field of fat_itr needs to be properly aligned for DMA and > while it does have '__aligned(ARCH_DMA_MINALIGN)', the fat_itr structure > itself needs to be properly aligned as well. > > While at it use malloc_cache_aligned() for other aligned allocations in > the file. > > Fixes: 2460098cffacd1 ("fs/fat: Reduce stack usage") > Signed-off-by: Tuomas Tynkkynen> --- > fs/fat/fat.c | 10 +- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/fs/fat/fat.c b/fs/fat/fat.c > index 3d3e17e8fa..35941c1498 100644 > --- a/fs/fat/fat.c > +++ b/fs/fat/fat.c > @@ -495,7 +495,7 @@ read_bootsectandvi(boot_sector *bs, volume_info *volinfo, > int *fatsize) > return -1; > } > > - block = memalign(ARCH_DMA_MINALIGN, cur_dev->blksz); > + block = malloc_cache_aligned(cur_dev->blksz); > if (block == NULL) { > debug("Error: allocating block\n"); > return -1; > @@ -599,7 +599,7 @@ static int get_fs_info(fsdata *mydata) > > mydata->fatbufnum = -1; > mydata->fat_dirty = 0; > - mydata->fatbuf = memalign(ARCH_DMA_MINALIGN, FATBUFSIZE); > + mydata->fatbuf = malloc_cache_aligned(FATBUFSIZE); > if (mydata->fatbuf == NULL) { > debug("Error: allocating memory\n"); > return -1; > @@ -1038,7 +1038,7 @@ int fat_exists(const char *filename) > fat_itr *itr; > int ret; > > - itr = malloc(sizeof(fat_itr)); > + itr = malloc_cache_aligned(sizeof(fat_itr)); > ret = fat_itr_root(itr, ); > if (ret) > return 0; Coverity has informed me that I also introduced a resource leak here by not freeing on failure of fat_itr_root (in each case). Can you please v2 where those are freed and add Reported-by: Coverity (CID: 167225, 167233, 167234) ? Thanks! -- Tom signature.asc Description: Digital signature ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
[U-Boot] [PATCH] fs/fat: Fix 'CACHE: Misaligned operation at range' warnings
The 'block' field of fat_itr needs to be properly aligned for DMA and while it does have '__aligned(ARCH_DMA_MINALIGN)', the fat_itr structure itself needs to be properly aligned as well. While at it use malloc_cache_aligned() for other aligned allocations in the file. Fixes: 2460098cffacd1 ("fs/fat: Reduce stack usage") Signed-off-by: Tuomas Tynkkynen--- fs/fat/fat.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 3d3e17e8fa..35941c1498 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -495,7 +495,7 @@ read_bootsectandvi(boot_sector *bs, volume_info *volinfo, int *fatsize) return -1; } - block = memalign(ARCH_DMA_MINALIGN, cur_dev->blksz); + block = malloc_cache_aligned(cur_dev->blksz); if (block == NULL) { debug("Error: allocating block\n"); return -1; @@ -599,7 +599,7 @@ static int get_fs_info(fsdata *mydata) mydata->fatbufnum = -1; mydata->fat_dirty = 0; - mydata->fatbuf = memalign(ARCH_DMA_MINALIGN, FATBUFSIZE); + mydata->fatbuf = malloc_cache_aligned(FATBUFSIZE); if (mydata->fatbuf == NULL) { debug("Error: allocating memory\n"); return -1; @@ -1038,7 +1038,7 @@ int fat_exists(const char *filename) fat_itr *itr; int ret; - itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, ); if (ret) return 0; @@ -1055,7 +1055,7 @@ int fat_size(const char *filename, loff_t *size) fat_itr *itr; int ret; - itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, ); if (ret) return ret; @@ -1089,7 +1089,7 @@ int file_fat_read_at(const char *filename, loff_t pos, void *buffer, fat_itr *itr; int ret; - itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, ); if (ret) return ret; -- 2.13.0 ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot