Hi NuttX,

*Days of debugging, out of memory problems when opening files.*
Last couple days I've struggled with an annoying problem where opening
files were throwing out-of-memory errors even when I have way more than
enough memory left.

After changing the config, changing code and uploading atleast 100 times,
trying new things, I have discovered that I could specifically only open 8
files before the ENOMEM error.

So I started digging and found out that a couple boards such as
STMF429ZI have a source file called {arch here}_dma_alloc.c with a #define
called "BOARD_DMA_ALLOC_POOL_SIZE".
This is a constant set to 8 * 512.
Interesting... This is used for the granule allocator and is enabled by
configuring CONFIG_GRAN and CONFIG_FAT_DMAMEMORY.

After disabling these, it worked. I can make many files now without errors.

*TLDR*
opening multiple files returns *unexplained* -ENOMEM (out of memory) when
there is plenty of memory left.
Caused by constant CONFIG_FAT_DMAMEMORY (8*512) in multiple board's
{arch}_dma_alloc.c granular allocator.
Fixed by disabling CONFIG_FAT_DMAMEMORY

*My hardware*
STM32H743 custom board
SD card with 4 wide SDIO
USB MSC master


*Solution?*I'm sure there is a brilliant reason why
BOARD_DMA_ALLOC_POOL_SIZE is specifically set to 8*512, but I think it is
very important to document this.
Another great addition would be to throw a specific error message when this
out of memory problem happens. Something hinting towards
BOARD_DMA_ALLOC_POOL_SIZE, FAT_DMAMEMORY or similar.

What do we think?

Best,

Kevin (Keever50 or Martinimarter at github)

Reply via email to