[U-Boot-Users] [PATCH] fs: make the static array to dynamic allocation

Current fat.c have three 64KB static array, it makes the BSS section larger. Change the static to dynamic allocation.
Signed-off-by: Dave Liu daveliu@freescale.com --- fs/fat/fat.c | 38 +++++++++++++++++++++++++++++++++++--- 1 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 49c78ed..8e054a6 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -28,6 +28,7 @@ #include <common.h> #include <config.h> #include <fat.h> +#include <malloc.h> #include <asm/byteorder.h> #include <part.h>
@@ -65,6 +66,37 @@ int disk_read (__u32 startblock, __u32 getsize, __u8 * bufptr) return -1; }
+__u8 *get_vfatname_block; +__u8 *get_dentfromdir_block; +__u8 *do_fat_read_block; +static int fat_mem_done = 0; +static int fat_memory_alloc(void) +{ + if (fat_mem_done) + return 0; + + get_vfatname_block = (__u8 *)malloc(MAX_CLUSTSIZE); + if (!get_vfatname_block) { + printf("alloc get_vfatname_block failed\n\r"); + return -1; + } + + get_dentfromdir_block = (__u8 *)malloc(MAX_CLUSTSIZE); + if (!get_dentfromdir_block) { + printf("alloc get_dentfromdir_block failed\n\r"); + return -1; + } + + do_fat_read_block = (__u8 *)malloc(MAX_CLUSTSIZE); + if (!do_fat_read_block) { + printf("alloc do_fat_read_block failed\n\r"); + return -1; + } + + fat_mem_done = 1; + + return 0; +}
int fat_register_device(block_dev_desc_t *dev_desc, int part_no) @@ -72,6 +104,9 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no) unsigned char buffer[SECTOR_SIZE]; disk_partition_t info;
+ if (fat_memory_alloc()) + printf("fat memory alloc failed\n\r"); + if (!dev_desc->block_read) return -1; cur_dev = dev_desc; @@ -435,7 +470,6 @@ slot2str(dir_slot *slotptr, char *l_name, int *idx) * into 'retdent' * Return 0 on success, -1 otherwise. */ -__u8 get_vfatname_block[MAX_CLUSTSIZE]; static int get_vfatname(fsdata *mydata, int curclust, __u8 *cluster, dir_entry *retdent, char *l_name) @@ -521,7 +555,6 @@ mkcksum(const char *str) * Get the directory entry associated with 'filename' from the directory * starting at 'startsect' */ -__u8 get_dentfromdir_block[MAX_CLUSTSIZE]; static dir_entry *get_dentfromdir (fsdata * mydata, int startsect, char *filename, dir_entry * retdent, int dols) @@ -727,7 +760,6 @@ read_bootsectandvi(boot_sector *bs, volume_info *volinfo, int *fatsize) }
-__u8 do_fat_read_block[MAX_CLUSTSIZE]; /* Block buffer */ long do_fat_read (const char *filename, void *buffer, unsigned long maxsize, int dols)

On Jun 26, 2008, at 9:50 AM, Dave Liu wrote:
Current fat.c have three 64KB static array, it makes the BSS section larger. Change the static to dynamic allocation.
Signed-off-by: Dave Liu daveliu@freescale.com
fs/fat/fat.c | 38 +++++++++++++++++++++++++++++++++++--- 1 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 49c78ed..8e054a6 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -28,6 +28,7 @@ #include <common.h> #include <config.h> #include <fat.h> +#include <malloc.h> #include <asm/byteorder.h> #include <part.h>
@@ -65,6 +66,37 @@ int disk_read (__u32 startblock, __u32 getsize, __u8 * bufptr) return -1; }
+__u8 *get_vfatname_block; +__u8 *get_dentfromdir_block; +__u8 *do_fat_read_block; +static int fat_mem_done = 0; +static int fat_memory_alloc(void) +{
- if (fat_mem_done)
return 0;
- get_vfatname_block = (__u8 *)malloc(MAX_CLUSTSIZE);
do you really need the cast?
- if (!get_vfatname_block) {
printf("alloc get_vfatname_block failed\n\r");
return -1;
- }
- get_dentfromdir_block = (__u8 *)malloc(MAX_CLUSTSIZE);
ditto.
- if (!get_dentfromdir_block) {
printf("alloc get_dentfromdir_block failed\n\r");
return -1;
- }
- do_fat_read_block = (__u8 *)malloc(MAX_CLUSTSIZE);
ditto
- if (!do_fat_read_block) {
printf("alloc do_fat_read_block failed\n\r");
return -1;
- }
- fat_mem_done = 1;
- return 0;
+}
- k

In message 1214491834-27033-1-git-send-email-daveliu@freescale.com you wrote:
Current fat.c have three 64KB static array, it makes the BSS section larger. Change the static to dynamic allocation.
So what's the benefit? BSS size doesn't matter - itr comes for free. It get's initialized automatically.
You add more than 30 lines of code instead, plus a lot of string space, plus a new failure mode (malloc failed) that didn't exist before.
Looks like a pessimizing patch to me, but maybe you just did not describe which problem you are trying to fix?
Best regards,
Wolfgang Denk
participants (3)
-
Dave Liu
-
Kumar Gala
-
Wolfgang Denk