Re: [U-Boot] [PATCH] fs/fat: Fix 'CACHE: Misaligned operation at range' warnings

2017-09-26 Thread Tom Rini
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

2017-09-26 Thread Tuomas Tynkkynen
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