Skip to contentSkip to conversation

fs/fat: align disk buffers on cache line to enable DMA and cache

PATCH Superseded Eric Nelson 5 participants 9 messages Mar 4, 2012 – Apr 24, 2012 VFAT/FAT/msdos filesystem

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 fs/fat: align disk buffers on cache line to enable DMA and cache

---
 fs/fat/fat.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)
fs/fat/fat.c +8 -6
index 1f95eb4..f3c48bb 100644
@@ -31,6 +31,8 @@
 #include <fat.h>
 #include <asm/byteorder.h>
 #include <part.h>
+#include <malloc.h>
+#include <linux/compiler.h>
 
 /*
  * Convert a string to lowercase.
@@ -62,7 +64,7 @@ static int disk_read(__u32 block, __u32 nr_blocks, void *buf)
 
 int fat_register_device (block_dev_desc_t * dev_desc, int part_no)
 {
-	unsigned char buffer[dev_desc->blksz];
+	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
 
 	/* First close any currently found FAT filesystem */
 	cur_dev = NULL;
@@ -293,7 +295,7 @@ get_cluster (fsdata *mydata, __u32 clustnum, __u8 *buffer,
 		return -1;
 	}
 	if (size % mydata->sect_size) {
-		__u8 tmpbuf[mydata->sect_size];
+		ALLOC_CACHE_ALIGN_BUFFER(__u8, tmpbuf, mydata->sect_size);
 
 		idx = size / mydata->sect_size;
 		ret = disk_read(startsect + idx, 1, tmpbuf);
@@ -428,8 +430,8 @@ static int slot2str (dir_slot *slotptr, char *l_name, int *idx)
  * into 'retdent'
  * Return 0 on success, -1 otherwise.
  */
-__attribute__ ((__aligned__ (__alignof__ (dir_entry))))
-__u8 get_vfatname_block[MAX_CLUSTSIZE];
+__u8 get_vfatname_block[MAX_CLUSTSIZE]
+	__aligned(ARCH_DMA_MINALIGN);
 
 static int
 get_vfatname (fsdata *mydata, int curclust, __u8 *cluster,
@@ -709,7 +711,7 @@ read_bootsectandvi (boot_sector *bs, volume_info *volinfo, int *fatsize)
 		return -1;
 	}
 
-	block = malloc(cur_dev->blksz);
+	block = memalign(ARCH_DMA_MINALIGN, cur_dev->blksz);
 	if (block == NULL) {
 		debug("Error: allocating block\n");
 		return -1;
@@ -828,7 +830,7 @@ do_fat_read (const char *filename, void *buffer, unsigned long maxsize,
 	}
 
 	mydata->fatbufnum = -1;
-	mydata->fatbuf = malloc(FATBUFSIZE);
+	mydata->fatbuf = memalign(ARCH_DMA_MINALIGN, FATBUFSIZE);
 	if (mydata->fatbuf == NULL) {
 		debug("Error: allocating memory\n");
 		return -1;
Signature · 1 line
1.7.9
#1 lore raw

PATCH v2 1/1 fs/fat: align disk buffers on cache line to enable DMA and cache

Quoted 20 lines · Eric Nelson
---
  fs/fat/fat.c |   14 ++++++++------
  1 files changed, 8 insertions(+), 6 deletions(-)
fs/fat/fat.c +2 -0
index 1f95eb4..f3c48bb 100644
@@ -31,6 +31,8 @@
  #include<fat.h>
  #include<asm/byteorder.h>
  #include<part.h>
+#include<malloc.h>
+#include<linux/compiler.h>
 
  /*
   * Convert a string to lowercase.

fs/fat/fat.c static int disk_read(__u32 block, __u32 nr_blocks, void *buf) · line 67

Quoted 6 lines
fs/fat/fat.c +1 -1
@@ -62,7 +64,7 @@ static int disk_read(__u32 block, __u32 nr_blocks, void *buf)
 
  int fat_register_device (block_dev_desc_t * dev_desc, int part_no)
  {
-	unsigned char buffer[dev_desc->blksz];
+	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
<snip>

Hi Wolfgang,

Have you had a chance to review this patch? Is there another maintainer for fs/fat?

Please let me know if you need this updated.

There's another patch that was acked by Mike but is otherwise lingering here:

	http://lists.denx.de/pipermail/u-boot/2012-March/119309.html

Both of these are needed before enabling the data cache on i.MX6 when using the FAT filesystem.

Regards,

Eric

#2 lore raw

PATCH v2 1/1 fs/fat: align disk buffers on cache line to enable DMA and cache

Quoted 36 lines · Eric Nelson
Quoted 20 lines · Eric Nelson

---
fs/fat/fat.c | 14 ++++++++------

1 files changed, 8 insertions(+), 6 deletions(-)
fs/fat/fat.c +2 -0
index 1f95eb4..f3c48bb 100644
@@ -31,6 +31,8 @@
 #include<fat.h>
 #include<asm/byteorder.h>
 #include<part.h>
+#include<malloc.h>
+#include<linux/compiler.h>
 
 /*
 * Convert a string to lowercase.

fs/fat/fat.c static int disk_read(__u32 block, __u32 nr_blocks, · line 68

Quoted 7 lines
fs/fat/fat.c +1 -1
@@ -62,7 +64,7 @@ static int disk_read(__u32 block, __u32 nr_blocks,
 void *buf)
 
 int fat_register_device (block_dev_desc_t * dev_desc, int part_no)
 {
- unsigned char buffer[dev_desc->blksz];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
<snip>

Hi Wolfgang,

Have you had a chance to review this patch? Is there another maintainer for fs/fat?

Please let me know if you need this updated.

Quoted 8 lines

There's another patch that was acked by Mike but is otherwise lingering here:

http://lists.denx.de/pipermail/u-boot/2012-March/119309.html

Both of these are needed before enabling the data cache on i.MX6 when using
the FAT filesystem.

Anybody likes to comment/apply this patch?

Many thanks!

Dirk

#3 lore raw

PATCH v2 1/1 fs/fat: align disk buffers on cache line to enable DMA and cache

Hello Dirk,

Quoted 40 lines · On Sat, 24 Mar 2012 08:18:38 +0100 Dirk Behme <[email protected]> wrote:
Quoted 39 lines · Eric Nelson
Quoted 20 lines · Eric Nelson

---
fs/fat/fat.c | 14 ++++++++------

1 files changed, 8 insertions(+), 6 deletions(-)
fs/fat/fat.c +2 -0
index 1f95eb4..f3c48bb 100644
@@ -31,6 +31,8 @@
 #include<fat.h>
 #include<asm/byteorder.h>
 #include<part.h>
+#include<malloc.h>
+#include<linux/compiler.h>
 
 /*
 * Convert a string to lowercase.

fs/fat/fat.c static int disk_read(__u32 block, __u32 nr_blocks, · line 68

Quoted 7 lines
fs/fat/fat.c +1 -1
@@ -62,7 +64,7 @@ static int disk_read(__u32 block, __u32 nr_blocks,
 void *buf)
 
 int fat_register_device (block_dev_desc_t * dev_desc, int part_no)
 {
- unsigned char buffer[dev_desc->blksz];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
<snip>

Hi Wolfgang,

Have you had a chance to review this patch? Is there another maintainer for fs/fat?

Please let me know if you need this updated.

There's another patch that was acked by Mike but is otherwise lingering here:

Quoted 7 lines
Quoted 5 lines

http://lists.denx.de/pipermail/u-boot/2012-March/119309.html

Both of these are needed before enabling the data cache on i.MX6 when using
the FAT filesystem.

Anybody likes to comment/apply this patch?

Both, this patch and the patch referenced by the above link were submitted when the merge window was closed. So, the patches will probably be applied to next when rc1 is out, unless Wolfgang decides to accept them for coming release.

Thanks,
Anatolij

#4 lore raw

PATCH v2 1/1 fs/fat: align disk buffers on cache line to enable DMA and cache

Quoted 51 lines · Anatolij Gustschin

Hello Dirk,

Quoted 46 lines · On Sat, 24 Mar 2012 08:18:38 +0100 Dirk Behme<[email protected]> wrote:
Quoted 44 lines · Eric Nelson
Quoted 20 lines · Eric Nelson

---
fs/fat/fat.c | 14 ++++++++------

1 files changed, 8 insertions(+), 6 deletions(-)
fs/fat/fat.c +2 -0
index 1f95eb4..f3c48bb 100644
@@ -31,6 +31,8 @@
 #include<fat.h>
 #include<asm/byteorder.h>
 #include<part.h>
+#include<malloc.h>
+#include<linux/compiler.h>
 
 /*
 * Convert a string to lowercase.

fs/fat/fat.c static int disk_read(__u32 block, __u32 nr_blocks, · line 68

Quoted 7 lines
fs/fat/fat.c +1 -1
@@ -62,7 +64,7 @@ static int disk_read(__u32 block, __u32 nr_blocks,
 void *buf)
 
 int fat_register_device (block_dev_desc_t * dev_desc, int part_no)
 {
- unsigned char buffer[dev_desc->blksz];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
<snip>

Hi Wolfgang,

Have you had a chance to review this patch? Is there another maintainer for fs/fat?

Please let me know if you need this updated.

There's another patch that was acked by Mike but is otherwise lingering here:

http://lists.denx.de/pipermail/u-boot/2012-March/119309.html

Both of these are needed before enabling the data cache on i.MX6 when using
the FAT filesystem.

Quoted 6 lines
Quoted 1 line

Anybody likes to comment/apply this patch?

Both, this patch and the patch referenced by the above link were submitted when the merge window was closed. So, the patches will probably be applied to next when rc1 is out, unless Wolfgang decides to accept them for coming release.

Ok, thanks!

Do we have a -next branch for stuff like this, then?

Best regards

dirk

#5 lore raw

PATCH v2 1/1 fs/fat: align disk buffers on cache line to enable DMA and cache

On Tue, 27 Mar 2012 18:28:21 +0200
Dirk Behme <[email protected]> wrote:
...

Quoted 10 lines
Quoted 6 lines
Quoted 1 line

Anybody likes to comment/apply this patch?

Both, this patch and the patch referenced by the above link were submitted when the merge window was closed. So, the patches will probably be applied to next when rc1 is out, unless Wolfgang decides to accept them for coming release.

Ok, thanks!

Do we have a -next branch for stuff like this, then?

AFAIK, Wolfgang updates u-boot.git next branch when -rc1 is out. After a release this next branch is merged into u-boot.git master.

Best regards,

Anatolij

#6 lore raw

PATCH v2 1/1 fs/fat: align disk buffers on cache line to enable DMA and cache

Quoted 10 lines · Anatolij Gustschin

On Tue, 27 Mar 2012 18:28:21 +0200
Dirk Behme <[email protected]> wrote:
...

Quoted 7 lines
Quoted 6 lines
Quoted 1 line

Anybody likes to comment/apply this patch?

Both, this patch and the patch referenced by the above link were submitted when the merge window was closed. So, the patches will probably be applied to next when rc1 is out, unless Wolfgang decides to accept them for coming release.

Quoted 6 lines
Quoted 3 lines

Ok, thanks!

Do we have a -next branch for stuff like this, then?

AFAIK, Wolfgang updates u-boot.git next branch when -rc1 is out. After a release this next branch is merged into u-boot.git master.

All of that said, I can't imagine Wolfgang objecting to a u-boot-staging/you/next branch so things aren't lost and there's clear intention to submitters as well.

Signature · 1 line
Tom
#7 lore raw

PATCH v2 1/1 fs/fat: align disk buffers on cache line to enable DMA and cache

In reply to Dirk Behme
Quoted 52 lines · Dirk Behme
Quoted 51 lines · Anatolij Gustschin

Hello Dirk,

Quoted 46 lines · On Sat, 24 Mar 2012 08:18:38 +0100 Dirk Behme<[email protected]> wrote:
Quoted 36 lines · Eric Nelson
Quoted 20 lines · Eric Nelson

---
fs/fat/fat.c | 14 ++++++++------

1 files changed, 8 insertions(+), 6 deletions(-)
fs/fat/fat.c +2 -0
index 1f95eb4..f3c48bb 100644
@@ -31,6 +31,8 @@
 #include<fat.h>
 #include<asm/byteorder.h>
 #include<part.h>
+#include<malloc.h>
+#include<linux/compiler.h>
 
 /*
 * Convert a string to lowercase.

fs/fat/fat.c static int disk_read(__u32 block, __u32 nr_blocks, · line 68

Quoted 7 lines
fs/fat/fat.c +1 -1
@@ -62,7 +64,7 @@ static int disk_read(__u32 block, __u32 nr_blocks,
 void *buf)
 
 int fat_register_device (block_dev_desc_t * dev_desc, int part_no)
 {
- unsigned char buffer[dev_desc->blksz];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
<snip>

Hi Wolfgang,

Have you had a chance to review this patch? Is there another maintainer for fs/fat?

Please let me know if you need this updated.

Quoted 8 lines

There's another patch that was acked by Mike but is otherwise lingering here:

http://lists.denx.de/pipermail/u-boot/2012-March/119309.html

Both of these are needed before enabling the data cache on i.MX6 when using
the FAT filesystem.

Anybody likes to comment/apply this patch?

Quoted 8 lines
Quoted 4 lines

Both, this patch and the patch referenced by the above link were submitted when the merge window was closed. So, the patches will probably be applied to next when rc1 is out, unless Wolfgang decides to accept them for coming release.

Ok, thanks!

Do we have a -next branch for stuff like this, then?

There should be a -next from Wolfgang for

http://patchwork.ozlabs.org/patch/144462/

http://patchwork.ozlabs.org/patch/151799/

now :)

Best regards

Dirk