[PATCH v2 0/8] lmb: Add config for the number of memory and reserved regions

Patrick Delaunay patrick.delaunay at foss.st.com
Wed Mar 10 10:16:24 CET 2021


Hi,

It is the V2 of [1]

I propose a update of the lmb library to allow the configuration
with Kconfig of the number of memory regions and of reserved regions
in lmb library with:
- CONFIG_LMB_RESERVED_REGIONS
- CONFIG_LMB_MEMORY_REGIONS

This serie avoids issue on stm32mp15 platform,
as the kernel device tree defines many and non contiguous reserved
regions.

It is based on latest memblock library in kernel (it was a preliminary
step for dynamic allocation of regions array to avoid any static limitation).

PS: in patch 1, I manage CONFIG_LMB dependency in lib/Kconfig file, with
	default y depends on ...
    but it can  do also in each arch by an imply or a select
    as it is done in [2].
    I am not sure what is the best solution for this dependency.

In this V2 series, I keep the default value of 8 regions defined in
struct lmb_region with:
- CONFIG_LMB_USE_MAX_REGIONS = n
- CONFIG_LMB_MAX_REGIONS = 8

When the array is located in struct lmb_region
(with CONFIG_LMB_USE_MAX_REGIONS = n), the compiler do some
optimization useful for size-constraint target, for example
the nokia_rx51 target increases by 152 bytes.

arm: (for 3/3 boards) all +50.7 bss +2.7 text +48.0
 nokia_rx51     : all +152 bss +8 text +144
   u-boot: add: 2/0, grow: 5/-2 bytes: 192/-40 (152)
     function                                   old     new   delta
     lmb_remove_region                            -      96     +96
     lmb_init                                     -      44     +44
     lmb_add_region                             416     440     +24
     __lmb_alloc_base                           224     236     +12
     images                                     288     296      +8
     lmb_overlaps_region                         80      84      +4
     lmb_alloc_addr                             108     112      +4
     lmb_init_and_reserve_range                  56      36     -20
     lmb_init_and_reserve                       100      80     -20

But it is not the case for all platform (STM32MP15 for example).

To optimize this size impact, I reduce the the regions array size
and add a test on overflow management in the lmb, but it is not enough.

So I try to optimized the lmb code to avoid the size impact when
CONFIG_LMB_USE_MAX_REGIONS = y but it is not working
and I prefer kept a code align with Linux kernel memblock library
and kept the current behavior a this.

With v2 the CI/CD build is now OK [3]

[1] lmb: Add config for the number of memory and reserved regions
http://patchwork.ozlabs.org/project/uboot/list/?series=227570&state=*

[2] arch: Move NEEDS_MANUAL_RELOC symbol to Kconfig
http://patchwork.ozlabs.org/project/uboot/list/?series=212154&state=*

[3] https://source.denx.de/u-boot/custodians/u-boot-stm/-/pipelines/6616


Changes in v2:
- add a max parameter extracted from v1 [3/5]
- new in v2: introduced MAX_LMB_REGIONS
- new in V2: reduce size impact by correct regions array size
- new in V2: add test for overflow protection in lmb libary
- rework v1 [4/5] to keep current optimization by default
  when CONFIG_LMB_USE_MAX_REGIONS=n
- Add CONFIG_LMB_USE_MAX_REGIONS=n and reduce LMB_MEMORY_REGIONS
  to reduce the used size in stack

Patrick Delaunay (8):
  lmb: move CONFIG_LMB in Kconfig
  lmb: remove lmb_region.size
  lmb: add a max parameter in the struct lmb_region
  lmb: move MAX_LMB_REGIONS value in Kconfig
  lmb: correct size of the regions array
  test: lmb: add test for overflow protection in lmb_add_region
  lmb: Add 2 config to define the max number of regions
  configs: stm32mp15: increase the number of reserved memory region in
    lmb

 arch/arc/include/asm/config.h        |  2 -
 arch/arm/include/asm/config.h        |  1 -
 arch/m68k/include/asm/config.h       |  1 -
 arch/microblaze/include/asm/config.h |  2 -
 arch/mips/include/asm/config.h       |  1 -
 arch/nds32/include/asm/config.h      |  1 -
 arch/powerpc/include/asm/config.h    |  1 -
 arch/riscv/include/asm/config.h      |  1 -
 arch/sh/include/asm/config.h         |  2 -
 arch/x86/include/asm/config.h        |  1 -
 arch/xtensa/include/asm/config.h     |  2 -
 configs/stm32mp15_basic_defconfig    |  3 ++
 configs/stm32mp15_trusted_defconfig  |  3 ++
 include/configs/10m50_devboard.h     |  5 ---
 include/configs/3c120_devboard.h     |  5 ---
 include/configs/sandbox.h            |  2 -
 include/configs/x86-common.h         |  2 -
 include/image.h                      |  2 +-
 include/lmb.h                        | 40 +++++++++++++++--
 lib/Kconfig                          | 44 ++++++++++++++++++-
 lib/lmb.c                            | 17 +++++---
 scripts/config_whitelist.txt         |  1 -
 test/lib/lmb.c                       | 64 ++++++++++++++++++++++++++++
 23 files changed, 160 insertions(+), 43 deletions(-)

-- 
2.17.1



More information about the U-Boot mailing list