public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [RFC PATCH 00/31] Make U-Boot memory reservations coherent
@ 2024-06-07 18:52 Sughosh Ganu
  2024-06-07 18:52 ` [RFC PATCH 01/31] lmb: remove the unused lmb_is_reserved() function Sughosh Ganu
                   ` (32 more replies)
  0 siblings, 33 replies; 127+ messages in thread
From: Sughosh Ganu @ 2024-06-07 18:52 UTC (permalink / raw)
  To: u-boot
  Cc: Tom Rini, Ilias Apalodimas, Heinrich Schuchardt, Simon Glass,
	Marek Vasut, Mark Kettenis, Fabio Estevam


The aim of this patch series is to fix the current state of
incoherence between modules when it comes to memory usage. The primary
issue that this series is trying to fix is that the EFI memory module
which is responsible for allocating and freeing memory, does not have
any visibility of the memory that is being used by the LMB
module. This is further complicated by the fact that the LMB
allocations are caller specific -- the LMB memory map is not global
nor persistent. This means that the memory "allocated" by the LMB
module might be relevant only for a given function. Hence one of the
requirements for making the memory usage visible across modules is to
make LMB allocations persistent and global, and then have means to
communicate the use of memory across modules.

The first set of patches in this series work on making the LMB memory
map persistent and global. This is being done keeping in mind the
usage of LMB memory by platforms where the same memory region can be
used to load multiple different images. What is not allowed is to
overwrite memory that has been allocated by the other module,
currently the EFI memory module. This is being achieved by introducing
a new flag, LMB_NOOVERWRITE, which represents memory which cannot be
re-requested once allocated.

The second set of patches are then introducing a notification
mechanism to indicate any changes to a respective module's memory
map. This way, any memory allocation/reservation by a module gets
notified to any interested listners, who then update their memory map
accordingly, thus keeping memory usage coherent.

Todo's
------
I have run these patches through CI, but the LMB unit tests need an
overhaul. I have currently marked these tests for manual run, as
running these would obviously tamper the LMB memory map, thus
affecting subsequent tests. The current set of LMB tests are written
with the assumption of local LMB memory maps. This needs to be
reworked.

Secondly, there needs to be a test written for testing the various
scenarios of memory being allocated and freed by different modules,
namely LMB and EFI. I have written a couple of commands for testing
the changes that I have made -- I have also included these temporary
commands to assist anyone who might want to test these changes. But I
will be working on adding a more comprehensive test.

Lastly, as the series touches common code, there is obviously an
increase in the size of the image, moreover since the LMB memory is
now persistent, and the variables do not reside on the stack. I want
to check if there can be ways of decreasing the size impact of the
changes.


Sughosh Ganu (31):
  lmb: remove the unused lmb_is_reserved() function
  lmb: staticize __lmb_alloc_base()
  lmb: make the lmb reservations persistent
  lmb: remove local instances of the lmb structure variable
  lmb: pass a flag to image_setup_libfdt() for lmb reservations
  lmb: reserve and add common memory regions post relocation
  lmb: remove lmb_init_and_reserve_range() function
  lmb: replcace the lmb_init_and_reserve() function
  lmb: allow for resizing lmb regions
  event: add events to notify memory map changes
  lib: Kconfig: add a config symbol for getting memory map updates
  add a function to check if an address is in RAM memory
  efi_memory: notify of any changes to the EFI memory map
  lmb: notify of any changes to the LMB memory map
  efi_memory: add an event handler to update memory map
  lmb: add an event handler to update memory map
  lmb: remove call to efi_lmb_reserve()
  sandbox: iommu: remove lmb allocation in the driver
  zynq: lmb: do not add to lmb map before relocation
  test: cedit: use allocated address for reading file
  test: event: update the expected event dump output
  test: lmb: run the LMB tests only on sandbox
  test: lmb: initialise the lmb structure before tests
  test: lmb: add a test case for checking overlapping region add
  test: lmb: adjust the test case to handle overlapping regions
  test: lmb: run lmb tests only manually
  test: bdinfo: dump the global LMB memory map
  cmd: bdinfo: only dump the current LMB memory
  temp: mx6sabresd: bump up the size limit of the board
  temp: cmd: efi_mem: add a command to test efi alloc/free
  temp: cmd: efi: add a command to dump EFI memory map

 arch/arc/lib/cache.c                 |   4 +-
 arch/arm/lib/stack.c                 |   4 +-
 arch/arm/mach-apple/board.c          |  17 +-
 arch/arm/mach-snapdragon/board.c     |  17 +-
 arch/arm/mach-stm32mp/dram_init.c    |   8 +-
 arch/arm/mach-stm32mp/stm32mp1/cpu.c |   6 +-
 arch/m68k/lib/bootm.c                |   7 +-
 arch/microblaze/lib/bootm.c          |   4 +-
 arch/mips/lib/bootm.c                |  11 +-
 arch/nios2/lib/bootm.c               |   4 +-
 arch/powerpc/cpu/mpc85xx/mp.c        |   4 +-
 arch/powerpc/include/asm/mp.h        |   4 +-
 arch/powerpc/lib/bootm.c             |  14 +-
 arch/riscv/lib/bootm.c               |   4 +-
 arch/sandbox/cpu/cpu.c               |   5 +
 arch/sh/lib/bootm.c                  |   4 +-
 arch/x86/lib/bootm.c                 |   4 +-
 arch/xtensa/lib/bootm.c              |   4 +-
 board/xilinx/common/board.c          |  33 --
 boot/bootm.c                         |  26 +-
 boot/bootm_os.c                      |   5 +-
 boot/image-board.c                   |  34 +--
 boot/image-fdt.c                     |  36 +--
 cmd/Makefile                         |   2 +
 cmd/bdinfo.c                         |   5 +-
 cmd/booti.c                          |   2 +-
 cmd/bootz.c                          |   2 +-
 cmd/efi_map_dump.c                   |  28 ++
 cmd/efi_memory.c                     | 155 ++++++++++
 cmd/elf.c                            |   2 +-
 cmd/load.c                           |   7 +-
 common/board_r.c                     |  20 ++
 common/event.c                       |   4 +
 configs/mx6sabresd_defconfig         |   2 +-
 drivers/iommu/apple_dart.c           |   8 +-
 drivers/iommu/sandbox_iommu.c        |  17 +-
 fs/fs.c                              |   7 +-
 include/efi_loader.h                 |   2 +
 include/event.h                      |  28 ++
 include/image.h                      |  27 +-
 include/lmb.h                        |  96 +++---
 lib/Kconfig                          |  10 +
 lib/efi_loader/efi_dt_fixup.c        |   2 +-
 lib/efi_loader/efi_helper.c          |   2 +-
 lib/efi_loader/efi_memory.c          | 127 +++++++-
 lib/lmb.c                            | 442 ++++++++++++++++++---------
 net/tftp.c                           |   5 +-
 net/wget.c                           |   5 +-
 test/boot/cedit.c                    |   5 +-
 test/cmd/bdinfo.c                    |  22 +-
 test/lib/Makefile                    |   2 +-
 test/lib/lmb.c                       | 274 +++++++++--------
 test/py/tests/test_event_dump.py     |   2 +
 53 files changed, 1001 insertions(+), 570 deletions(-)
 create mode 100644 cmd/efi_map_dump.c
 create mode 100644 cmd/efi_memory.c

-- 
2.34.1



^ permalink raw reply	[flat|nested] 127+ messages in thread

end of thread, other threads:[~2024-06-19  3:03 UTC | newest]

Thread overview: 127+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-07 18:52 [RFC PATCH 00/31] Make U-Boot memory reservations coherent Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 01/31] lmb: remove the unused lmb_is_reserved() function Sughosh Ganu
2024-06-10  9:33   ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 02/31] lmb: staticize __lmb_alloc_base() Sughosh Ganu
2024-06-10  9:37   ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 03/31] lmb: make the lmb reservations persistent Sughosh Ganu
2024-06-10 21:17   ` Ilias Apalodimas
2024-06-10 11:23     ` Heinrich Schuchardt
2024-06-10 16:55       ` Tom Rini
2024-06-11 18:52   ` Simon Glass
2024-06-07 18:52 ` [RFC PATCH 04/31] lmb: remove local instances of the lmb structure variable Sughosh Ganu
2024-06-11 18:52   ` Simon Glass
2024-06-11 21:01     ` Tom Rini
2024-06-11 22:08       ` Simon Glass
2024-06-11 22:55         ` Tom Rini
2024-06-12  2:41           ` Simon Glass
2024-06-12  5:41             ` Ilias Apalodimas
2024-06-12  6:13             ` Heinrich Schuchardt
2024-06-12 17:22             ` Tom Rini
2024-06-12 20:24               ` Simon Glass
2024-06-12 21:40                 ` Tom Rini
2024-06-13 15:22                   ` Simon Glass
2024-06-13 15:42                     ` Tom Rini
2024-06-13 16:59                       ` Simon Glass
2024-06-13 17:27                         ` Heinrich Schuchardt
2024-06-13 18:17                           ` Sughosh Ganu
2024-06-13 19:06                             ` Simon Glass
2024-06-13 19:05                           ` Simon Glass
2024-06-13 20:11                             ` Heinrich Schuchardt
2024-06-14  5:58                               ` Ilias Apalodimas
2024-06-19  3:01                                 ` Simon Glass
2024-06-19  3:03                               ` Simon Glass
2024-06-13 20:06                         ` Tom Rini
2024-06-07 18:52 ` [RFC PATCH 05/31] lmb: pass a flag to image_setup_libfdt() for lmb reservations Sughosh Ganu
2024-06-10 17:12   ` Tom Rini
2024-06-07 18:52 ` [RFC PATCH 06/31] lmb: reserve and add common memory regions post relocation Sughosh Ganu
2024-06-10 17:30   ` Tom Rini
2024-06-07 18:52 ` [RFC PATCH 07/31] lmb: remove lmb_init_and_reserve_range() function Sughosh Ganu
2024-06-10 17:30   ` Tom Rini
2024-06-10 21:42   ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 08/31] lmb: replcace the lmb_init_and_reserve() function Sughosh Ganu
2024-06-10 17:31   ` Tom Rini
2024-06-11  8:50     ` Sughosh Ganu
2024-06-11 13:57       ` Tom Rini
2024-06-07 18:52 ` [RFC PATCH 09/31] lmb: allow for resizing lmb regions Sughosh Ganu
2024-06-10 12:03   ` Ilias Apalodimas
2024-06-10 12:20     ` Sughosh Ganu
2024-06-10 12:47       ` Ilias Apalodimas
2024-06-10 12:57         ` Sughosh Ganu
2024-06-10 14:21           ` Ilias Apalodimas
2024-06-10 14:33             ` Sughosh Ganu
2024-06-10 12:54       ` Heinrich Schuchardt
2024-06-10 13:01         ` Sughosh Ganu
2024-06-11  9:17   ` Heinrich Schuchardt
2024-06-11  9:50     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 10/31] event: add events to notify memory map changes Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 11/31] lib: Kconfig: add a config symbol for getting memory map updates Sughosh Ganu
2024-06-08  3:53   ` Heinrich Schuchardt
2024-06-08  4:34     ` Heinrich Schuchardt
2024-06-10 11:44   ` Ilias Apalodimas
2024-06-10 11:47     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 12/31] add a function to check if an address is in RAM memory Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 13/31] efi_memory: notify of any changes to the EFI memory map Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 14/31] lmb: notify of any changes to the LMB " Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 15/31] efi_memory: add an event handler to update " Sughosh Ganu
2024-06-10 12:09   ` Ilias Apalodimas
2024-06-10 12:25     ` Sughosh Ganu
2024-06-10 14:17       ` Ilias Apalodimas
2024-06-10 14:52         ` Sughosh Ganu
2024-06-10 14:54           ` Sughosh Ganu
2024-06-11  6:19           ` Ilias Apalodimas
2024-06-10 15:12   ` Heinrich Schuchardt
2024-06-10 15:42     ` Sughosh Ganu
2024-06-10 15:54       ` Simon Glass
2024-06-12  6:45         ` Ilias Apalodimas
2024-06-12  7:11           ` Sughosh Ganu
2024-06-11 10:17   ` Heinrich Schuchardt
2024-06-11 10:27     ` Sughosh Ganu
2024-06-11 14:36     ` Tom Rini
2024-06-11 18:52       ` Simon Glass
2024-06-11 21:01         ` Tom Rini
2024-06-11 22:22           ` Simon Glass
2024-06-11 22:54             ` Tom Rini
2024-06-12  2:42               ` Simon Glass
2024-06-12  5:48                 ` Ilias Apalodimas
2024-06-12  6:20                   ` Sughosh Ganu
2024-06-12 20:24                   ` Simon Glass
2024-06-12  6:06                 ` Heinrich Schuchardt
2024-06-12 20:24                   ` Simon Glass
2024-06-07 18:52 ` [RFC PATCH 16/31] lmb: " Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 17/31] lmb: remove call to efi_lmb_reserve() Sughosh Ganu
2024-06-10 11:46   ` Ilias Apalodimas
2024-06-11  9:11   ` Heinrich Schuchardt
2024-06-11  9:49     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 18/31] sandbox: iommu: remove lmb allocation in the driver Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 19/31] zynq: lmb: do not add to lmb map before relocation Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 20/31] test: cedit: use allocated address for reading file Sughosh Ganu
2024-06-11 18:52   ` Simon Glass
2024-06-07 18:52 ` [RFC PATCH 21/31] test: event: update the expected event dump output Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 22/31] test: lmb: run the LMB tests only on sandbox Sughosh Ganu
2024-06-10 17:44   ` Tom Rini
2024-06-11  8:55     ` Sughosh Ganu
2024-06-11  9:56       ` Heinrich Schuchardt
2024-06-11 10:09         ` Sughosh Ganu
2024-06-11 14:05       ` Tom Rini
2024-06-11 14:06         ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 23/31] test: lmb: initialise the lmb structure before tests Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 24/31] test: lmb: add a test case for checking overlapping region add Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 25/31] test: lmb: adjust the test case to handle overlapping regions Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 26/31] test: lmb: run lmb tests only manually Sughosh Ganu
2024-06-08  4:39   ` Heinrich Schuchardt
2024-06-10  6:22     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 27/31] test: bdinfo: dump the global LMB memory map Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 28/31] cmd: bdinfo: only dump the current LMB memory Sughosh Ganu
2024-06-08  3:59   ` Heinrich Schuchardt
2024-06-10 11:42     ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 29/31] temp: mx6sabresd: bump up the size limit of the board Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 30/31] temp: cmd: efi_mem: add a command to test efi alloc/free Sughosh Ganu
2024-06-08  3:37   ` Heinrich Schuchardt
2024-06-10  6:44     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 31/31] temp: cmd: efi: add a command to dump EFI memory map Sughosh Ganu
2024-06-08  3:28   ` Heinrich Schuchardt
2024-06-10  6:45     ` Sughosh Ganu
2024-06-10 21:05 ` [RFC PATCH 00/31] Make U-Boot memory reservations coherent Tom Rini
2024-06-11  9:01   ` Sughosh Ganu
2024-06-11 14:39     ` Tom Rini
2024-06-11 18:52 ` Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox