diff mbox

[U-Boot,2/2] fat: replace LINEAR_PREFETCH_SIZE with PREFETCH_BLOCKS

Message ID 201108192337.46310.sshtylyov@ru.mvista.com
State Accepted
Commit 025421eab453fd41a3cc14a0fc48115b0dc4c287
Headers show

Commit Message

Sergei Shtylyov Aug. 19, 2011, 7:37 p.m. UTC
Currently in do_fat_read() when reading FAT sectors, we have to divide down
LINEAR_PREFETCH_SIZE by the sector size, whereas it's defined as 2 sectors
worth of bytes. In order to avoid redundant multiplication/division, introduce
#define PREFETCH_BLOCKS instead of #define LINEAR_PREFETCH_SIZE.

Signed-off-by: Sergei Shtylyov <sshtylyov@mvista.com>

---
Slight optimization atop of commit 3831530dcb7b71329c272ccd6181f8038b6a6dd0
(VFAT: fix processing of scattered long file name entries) and my recently
submitted patch fixing crash with big sector size.

The patch was generated atop of the below patches posted earlier:
http://marc.info/?l=u-boot&m=131283284822789
http://marc.info/?l=u-boot&m=131283289722891

 fs/fat/fat.c  |    9 ++++-----
 include/fat.h |    2 +-
 2 files changed, 5 insertions(+), 6 deletions(-)

Comments

Wolfgang Denk Oct. 1, 2011, 7:52 p.m. UTC | #1
Dear Sergei Shtylyov,

In message <201108192337.46310.sshtylyov@ru.mvista.com> you wrote:
> Currently in do_fat_read() when reading FAT sectors, we have to divide down
> LINEAR_PREFETCH_SIZE by the sector size, whereas it's defined as 2 sectors
> worth of bytes. In order to avoid redundant multiplication/division, introduce
> #define PREFETCH_BLOCKS instead of #define LINEAR_PREFETCH_SIZE.
> 
> Signed-off-by: Sergei Shtylyov <sshtylyov@mvista.com>
> 
> ---
> Slight optimization atop of commit 3831530dcb7b71329c272ccd6181f8038b6a6dd0
> (VFAT: fix processing of scattered long file name entries) and my recently
> submitted patch fixing crash with big sector size.
> 
> The patch was generated atop of the below patches posted earlier:
> http://marc.info/?l=u-boot&m=131283284822789
> http://marc.info/?l=u-boot&m=131283289722891
> 
>  fs/fat/fat.c  |    9 ++++-----
>  include/fat.h |    2 +-
>  2 files changed, 5 insertions(+), 6 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk
diff mbox

Patch

Index: u-boot/fs/fat/fat.c
===================================================================
--- u-boot.orig/fs/fat/fat.c
+++ u-boot/fs/fat/fat.c
@@ -440,10 +440,9 @@  get_vfatname (fsdata *mydata, int curclu
 {
 	dir_entry *realdent;
 	dir_slot *slotptr = (dir_slot *)retdent;
-	__u8 *buflimit = cluster + ((curclust == 0) ?
-					LINEAR_PREFETCH_SIZE :
-					(mydata->clust_size * mydata->sect_size)
-				   );
+	__u8 *buflimit = cluster + mydata->sect_size * ((curclust == 0) ?
+							PREFETCH_BLOCKS :
+							mydata->clust_size);
 	__u8 counter = (slotptr->id & ~LAST_LONG_ENTRY_MASK) & 0xff;
 	int idx = 0;
 
@@ -880,7 +879,7 @@  do_fat_read (const char *filename, void 
 		if (disk_read(cursect,
 				(mydata->fatsize == 32) ?
 				(mydata->clust_size) :
-				LINEAR_PREFETCH_SIZE / mydata->sect_size,
+				PREFETCH_BLOCKS,
 				do_fat_read_block) < 0) {
 			debug("Error: reading rootdir block\n");
 			goto exit;
Index: u-boot/include/fat.h
===================================================================
--- u-boot.orig/include/fat.h
+++ u-boot/include/fat.h
@@ -33,7 +33,7 @@ 
 /* Maximum Long File Name length supported here is 128 UTF-16 code units */
 #define VFAT_MAXLEN_BYTES	256 /* Maximum LFN buffer in bytes */
 #define VFAT_MAXSEQ		9   /* Up to 9 of 13 2-byte UTF-16 entries */
-#define LINEAR_PREFETCH_SIZE	(mydata->sect_size*2) /* Prefetch buffer size */
+#define PREFETCH_BLOCKS		2
 
 #define MAX_CLUSTSIZE	65536
 #define DIRENTSPERBLOCK	(mydata->sect_size / sizeof(dir_entry))