Skip to content

Commit 5c03d45

Browse files
committed
Don't allocate memory larger than cluster size for DMA buf.
1 parent 08e1d65 commit 5c03d45

File tree

1 file changed

+11
-33
lines changed

1 file changed

+11
-33
lines changed

fatfs/src/dc.c

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -852,20 +852,14 @@ DRESULT disk_read (
852852
int rv;
853853

854854
if (count > 1 && mnt->dev_dma) {
855-
#ifdef FATFS_USE_DMA_BUF
856-
if ((uintptr_t)buff & 31) {
857-
if (count <= mnt->fs->csize) {
858-
dest = mnt->dmabuf;
859-
}
860-
else {
861-
dest = (uint8_t *)memalign(32, count << dev->l_block_size);
862-
}
863-
}
864-
dev = mnt->dev_dma;
865-
#else
866855
if (((uintptr_t)buff & 31) == 0) {
867856
dev = mnt->dev_dma;
868857
}
858+
#ifdef FATFS_USE_DMA_BUF
859+
else if (count <= mnt->fs->csize) {
860+
dest = mnt->dmabuf;
861+
dev = mnt->dev_dma;
862+
}
869863
#endif
870864
}
871865

@@ -878,10 +872,6 @@ DRESULT disk_read (
878872
#ifdef FATFS_USE_DMA_BUF
879873
if (dest != buff) {
880874
memcpy(buff, dest, count << dev->l_block_size);
881-
882-
if (dest != mnt->dmabuf) {
883-
free(dest);
884-
}
885875
}
886876
#endif
887877

@@ -911,21 +901,15 @@ DRESULT disk_write (
911901
int rv;
912902

913903
if (count > 1 && mnt->dev_dma) {
914-
#ifdef FATFS_USE_DMA_BUF
915-
if ((uintptr_t)buff & 31) {
916-
if (count <= mnt->fs->csize) {
917-
src = mnt->dmabuf;
918-
}
919-
else {
920-
src = (uint8_t *)memalign(32, count << dev->l_block_size);
921-
}
922-
memcpy(src, buff, count << dev->l_block_size);
923-
}
924-
dev = mnt->dev_dma;
925-
#else
926904
if (((uintptr_t)buff & 31) == 0) {
927905
dev = mnt->dev_dma;
928906
}
907+
#ifdef FATFS_USE_DMA_BUF
908+
else if (count <= mnt->fs->csize) {
909+
src = mnt->dmabuf;
910+
dev = mnt->dev_dma;
911+
memcpy(src, buff, count << dev->l_block_size);
912+
}
929913
#endif
930914
}
931915

@@ -935,12 +919,6 @@ DRESULT disk_write (
935919

936920
rv = dev->write_blocks(dev, sector, count, src);
937921

938-
#ifdef FATFS_USE_DMA_BUF
939-
if (src != buff && src != mnt->dmabuf) {
940-
free(src);
941-
}
942-
#endif
943-
944922
if (rv < 0) {
945923
DBG((DBG_ERROR, "FATFS: %s[%d] %s error: %d\n",
946924
__func__, pdrv,

0 commit comments

Comments
 (0)