[U-Boot] [PATCH] Revert "part: Allocate only one legacy_mbr buffer"

Alexey Brodkin Alexey.Brodkin at synopsys.com
Wed Sep 4 12:57:39 UTC 2019

Hi Faiz,


> >>> I guess what you really want to do is to allocate buffer for "mbr"
> >>> dynamically of size which is max(sizeof(legacy_mbr), dev_desc->blksz).
> >>>
> >>
> >> With the assumption that blksz is always greater than
> >> sizeof(legacy_mbr), this should work:
> >>
> >> ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr, DIV_ROUND_UP(dev_desc->blksz,
> >> sizeof(legacy_mbr)));
> >
> > No this won't work. See ALLOC_CACHE_ALIGN_BUFFER does static allocation
> > in compile-time while blksz is set in runtime.
> >
> > That's why I mentioned switch to runtime allocation.
> >
> Hmm. So the problem isn't as much about allocating too much in the
> buffer but about using dynamically determined size for static array
> declaration.

In fact it was a problem of huge static allocation I discovered just by
chance building U-Boot for a very memory-limited device, see [1].

> This is being used all over this disk/part_dos.c file.
> Shouldn't we fix all of that? Not sure how it has been working all along.

That part I don't quite understand. What's being used, where and how?
And what's the problem with dynamic allocation of the buffer for MBR?

[1] https://elinux.org/images/d/d6/U-Boot-Bootloader-for-IoT-Platform-Alexey-Brodkin-Synopsys-2.pdf


More information about the U-Boot mailing list