Dear Benoît, On Wed, 2016-07-13 at 12:56 +0200, Benoît Thébaudeau wrote: > Dear Tien Fong Chee, > > On Jul 13, 2016 at 11:01 AM, Tien Fong Chee wrote: > > Single 64KB get_contents_vfatname_block global variable would be > > used for > > all FAT implementation instead of allocating additional two global > > variables > > which are get_denfromdir_block and do_fat_read_at_block. This > > implementation > > can help in saving up 128KB memory space. > > > > Signed-off-by: Tien Fong Chee <tfc...@altera.com> > > Cc: Dinh Nguyen <dingu...@opensource.altera.com> > > Cc: Dinh Nguyen <dinh.li...@gmail.com> > > Cc: ChinLiang <cl...@altera.com> > > Cc: Vagrant Cascadian <vagr...@debian.org> > > Cc: Simon Glass <s...@chromium.org> > > Cc: Stephen Warren <swar...@nvidia.com> > > Cc: Benoît Thébaudeau <ben...@wsystem.com> > > --- > > fs/fat/fat.c | 6 ++---- > > 1 files changed, 2 insertions(+), 4 deletions(-) > > > > diff --git a/fs/fat/fat.c b/fs/fat/fat.c > > index 826bd85..5d1afe6 100644 > > --- a/fs/fat/fat.c > > +++ b/fs/fat/fat.c > > @@ -579,8 +579,7 @@ static __u8 mkcksum(const char name[8], const > > char ext[3]) > > * Get the directory entry associated with 'filename' from the > > directory > > * starting at 'startsect' > > */ > > -__u8 get_dentfromdir_block[MAX_CLUSTSIZE] > > - __aligned(ARCH_DMA_MINALIGN); > > +__u8 *get_dentfromdir_block = get_contents_vfatname_block; > > > > static dir_entry *get_dentfromdir(fsdata *mydata, int startsect, > > char *filename, dir_entry > > *retdent, > > @@ -811,8 +810,7 @@ exit: > > return ret; > > } > > > > -__u8 do_fat_read_at_block[MAX_CLUSTSIZE] > > - __aligned(ARCH_DMA_MINALIGN); > > +__u8 *do_fat_read_at_block = get_contents_vfatname_block; > > > > int do_fat_read_at(const char *filename, loff_t pos, void *buffer, > > loff_t maxsize, int dols, int dogetsize, loff_t > > *size) > > This probably breaks at least fat_write.c, which uses: > memcpy(get_dentfromdir_block, get_contents_vfatname_block, > > Best regards, > Benoît
With this patch, this line code "memcpy(get_dentfromdir_block, get_contents_vfatname_block," is not required anymore since both get_dentfromdir_block and get_contents_vfatname_block are sharing the same content and memory. So, this line code can be removed or leaving in there. However, there is only one place within fill_dir_slot_buffer function where it can corrupt the the global memory, and it is fixed by replacing with local buffer. This was sent out with another patch called "[PATCH 1/2] fs/fat/fatwrite: Local variable as buffer to store dir_slot entries". Overall, applying these two patches, a lot memory space can be saved and fitting into small OCRAM, but need to be very careful when modifying the code related to global memory. Best regards, Tien Fong _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot