diff mbox series

[v2,14/14] efi_memory: rename variable to highlight overlap with free memory

Message ID 20241008181435.1753814-15-sughosh.ganu@linaro.org
State Superseded
Headers show
Series Make EFI memory allocations synchronous with LMB | expand

Commit Message

Sughosh Ganu Oct. 8, 2024, 6:14 p.m. UTC
The functions to add a memory region to the EFI memory map have a
variable, overlap_only_ram, which is used to indicate if a new memory
region needs to be carved out from the free, or conventional
memory. The name overlap_only_ram is a bit confusing, as other
allocated memory regions, like boot-services code and data are also
part of the RAM memory. Rename the variable to highlight the fact that
it is the free/conventional memory that is being referred to in this
context.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
---
Changes since V1: New patch

 include/efi_loader.h        | 16 +++++++-----
 lib/efi_loader/efi_memory.c | 51 ++++++++++++++++++++-----------------
 2 files changed, 37 insertions(+), 30 deletions(-)

Comments

Ilias Apalodimas Oct. 11, 2024, 10:59 a.m. UTC | #1
Hi Sughosh,

On Tue, 8 Oct 2024 at 21:15, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
>
> The functions to add a memory region to the EFI memory map have a
> variable, overlap_only_ram, which is used to indicate if a new memory
> region needs to be carved out from the free, or conventional
> memory.

This is a bit confusing. Conventional memory is free memory.
Isn't it this from conventional or non-conventional memory?

> The name overlap_only_ram is a bit confusing, as other
> allocated memory regions, like boot-services code and data are also
> part of the RAM memory. Rename the variable to highlight the fact that
> it is the free/conventional memory that is being referred to in this
> context.

overlap_conventional should be even better?

Thanks
/Ilias
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> ---
> Changes since V1: New patch
>
>  include/efi_loader.h        | 16 +++++++-----
>  lib/efi_loader/efi_memory.c | 51 ++++++++++++++++++++-----------------
>  2 files changed, 37 insertions(+), 30 deletions(-)
>
> diff --git a/include/efi_loader.h b/include/efi_loader.h
> index 0d5555c7597..c3512c63a50 100644
> --- a/include/efi_loader.h
> +++ b/include/efi_loader.h
> @@ -788,15 +788,17 @@ efi_status_t efi_add_memory_map(u64 start, u64 size, int memory_type);
>  /**
>   * efi_add_memory_map_pg() - add pages to the memory map
>   *
> - * @start:             start address, must be a multiple of EFI_PAGE_SIZE
> - * @pages:             number of pages to add
> - * @memory_type:       type of memory added
> - * @overlap_only_ram:  region may only overlap RAM
> - * Return:             status code
> + * @start:                     start address, must be a multiple of
> + *                             EFI_PAGE_SIZE
> + * @pages:                     number of pages to add
> + * @memory_type:               type of memory added
> + * @overlap_only_freemem:      region may only overlap free(conventional)
> + *                             memory
> + * Return:                     status code
>   */
>  efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
> -                                         int memory_type,
> -                                         bool overlap_only_ram);
> +                                  int memory_type,
> +                                  bool overlap_only_freemem);
>
>  /* Called by board init to initialize the EFI drivers */
>  efi_status_t efi_driver_init(void);
> diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
> index 0f25094dbf8..97b89a97a2e 100644
> --- a/lib/efi_loader/efi_memory.c
> +++ b/lib/efi_loader/efi_memory.c
> @@ -173,17 +173,19 @@ static void efi_mem_sort(void)
>  /**
>   * efi_mem_carve_out() - unmap memory region
>   *
> - * @map:               memory map
> - * @carve_desc:                memory region to unmap
> - * @overlap_only_ram:  the carved out region may only overlap RAM
> - * Return:             the number of overlapping pages which have been
> - *                     removed from the map,
> - *                     EFI_CARVE_NO_OVERLAP, if the regions don't overlap,
> - *                     EFI_CARVE_OVERLAPS_NONRAM, if the carve and map overlap,
> - *                     and the map contains anything but free ram
> - *                     (only when overlap_only_ram is true),
> - *                     EFI_CARVE_LOOP_AGAIN, if the mapping list should be
> - *                     traversed again, as it has been altered.
> + * @map:                       memory map
> + * @carve_desc:                        memory region to unmap
> + * @overlap_only_freemem:      the carved out region may only overlap free,
> + *                             or conventional memory
> + * Return:                     the number of overlapping pages which have been
> + *                             removed from the map,
> + *                             EFI_CARVE_NO_OVERLAP, if the regions don't
> + *                             overlap, EFI_CARVE_OVERLAPS_NONRAM, if the carve
> + *                             and map overlap, and the map contains anything
> + *                             but free ram(only when overlap_only_freemem is
> + *                             true),
> + *                             EFI_CARVE_LOOP_AGAIN, if the mapping list should
> + *                             be traversed again, as it has been altered.
>   *
>   * Unmaps all memory occupied by the carve_desc region from the list entry
>   * pointed to by map.
> @@ -193,7 +195,7 @@ static void efi_mem_sort(void)
>   */
>  static s64 efi_mem_carve_out(struct efi_mem_list *map,
>                              struct efi_mem_desc *carve_desc,
> -                            bool overlap_only_ram)
> +                            bool overlap_only_freemem)
>  {
>         struct efi_mem_list *newmap;
>         struct efi_mem_desc *map_desc = &map->desc;
> @@ -208,7 +210,7 @@ static s64 efi_mem_carve_out(struct efi_mem_list *map,
>                 return EFI_CARVE_NO_OVERLAP;
>
>         /* We're overlapping with non-RAM, warn the caller if desired */
> -       if (overlap_only_ram && (map_desc->type != EFI_CONVENTIONAL_MEMORY))
> +       if (overlap_only_freemem && (map_desc->type != EFI_CONVENTIONAL_MEMORY))
>                 return EFI_CARVE_OVERLAPS_NONRAM;
>
>         /* Sanitize carve_start and carve_end to lie within our bounds */
> @@ -258,15 +260,17 @@ static s64 efi_mem_carve_out(struct efi_mem_list *map,
>  /**
>   * efi_add_memory_map_pg() - add pages to the memory map
>   *
> - * @start:             start address, must be a multiple of EFI_PAGE_SIZE
> - * @pages:             number of pages to add
> - * @memory_type:       type of memory added
> - * @overlap_only_ram:  region may only overlap RAM
> - * Return:             status code
> + * @start:                     start address, must be a multiple of
> + *                             EFI_PAGE_SIZE
> + * @pages:                     number of pages to add
> + * @memory_type:               type of memory added
> + * @overlap_only_freemem:      region may only overlap free(conventional)
> + *                             memory
> + * Return:                     status code
>   */
>  efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
> -                                         int memory_type,
> -                                         bool overlap_only_ram)
> +                                  int memory_type,
> +                                  bool overlap_only_freemem)
>  {
>         struct efi_mem_list *lmem;
>         struct efi_mem_list *newlist;
> @@ -275,7 +279,8 @@ efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
>         struct efi_event *evt;
>
>         EFI_PRINT("%s: 0x%llx 0x%llx %d %s\n", __func__,
> -                 start, pages, memory_type, overlap_only_ram ? "yes" : "no");
> +                 start, pages, memory_type, overlap_only_freemem ?
> +                 "yes" : "no");
>
>         if (memory_type >= EFI_MAX_MEMORY_TYPE)
>                 return EFI_INVALID_PARAMETER;
> @@ -312,7 +317,7 @@ efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
>                         s64 r;
>
>                         r = efi_mem_carve_out(lmem, &newlist->desc,
> -                                             overlap_only_ram);
> +                                             overlap_only_freemem);
>                         switch (r) {
>                         case EFI_CARVE_OUT_OF_RESOURCES:
>                                 free(newlist);
> @@ -348,7 +353,7 @@ efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
>                 }
>         } while (carve_again);
>
> -       if (overlap_only_ram && (carved_pages != pages)) {
> +       if (overlap_only_freemem && (carved_pages != pages)) {
>                 /*
>                  * The payload wanted to have RAM overlaps, but we overlapped
>                  * with an unallocated region. Error out.
> --
> 2.34.1
>
Sughosh Ganu Oct. 12, 2024, 7:41 a.m. UTC | #2
On Fri, 11 Oct 2024 at 16:29, Ilias Apalodimas
<ilias.apalodimas@linaro.org> wrote:
>
> Hi Sughosh,
>
> On Tue, 8 Oct 2024 at 21:15, Sughosh Ganu <sughosh.ganu@linaro.org> wrote:
> >
> > The functions to add a memory region to the EFI memory map have a
> > variable, overlap_only_ram, which is used to indicate if a new memory
> > region needs to be carved out from the free, or conventional
> > memory.
>
> This is a bit confusing. Conventional memory is free memory.
> Isn't it this from conventional or non-conventional memory?

Okay, I will try to frame this sentence better.

>
> > The name overlap_only_ram is a bit confusing, as other
> > allocated memory regions, like boot-services code and data are also
> > part of the RAM memory. Rename the variable to highlight the fact that
> > it is the free/conventional memory that is being referred to in this
> > context.
>
> overlap_conventional should be even better?

Indeed, it is much better. Will change. Thanks.

-sughosh

>
> Thanks
> /Ilias
> >
> > Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> > ---
> > Changes since V1: New patch
> >
> >  include/efi_loader.h        | 16 +++++++-----
> >  lib/efi_loader/efi_memory.c | 51 ++++++++++++++++++++-----------------
> >  2 files changed, 37 insertions(+), 30 deletions(-)
> >
> > diff --git a/include/efi_loader.h b/include/efi_loader.h
> > index 0d5555c7597..c3512c63a50 100644
> > --- a/include/efi_loader.h
> > +++ b/include/efi_loader.h
> > @@ -788,15 +788,17 @@ efi_status_t efi_add_memory_map(u64 start, u64 size, int memory_type);
> >  /**
> >   * efi_add_memory_map_pg() - add pages to the memory map
> >   *
> > - * @start:             start address, must be a multiple of EFI_PAGE_SIZE
> > - * @pages:             number of pages to add
> > - * @memory_type:       type of memory added
> > - * @overlap_only_ram:  region may only overlap RAM
> > - * Return:             status code
> > + * @start:                     start address, must be a multiple of
> > + *                             EFI_PAGE_SIZE
> > + * @pages:                     number of pages to add
> > + * @memory_type:               type of memory added
> > + * @overlap_only_freemem:      region may only overlap free(conventional)
> > + *                             memory
> > + * Return:                     status code
> >   */
> >  efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
> > -                                         int memory_type,
> > -                                         bool overlap_only_ram);
> > +                                  int memory_type,
> > +                                  bool overlap_only_freemem);
> >
> >  /* Called by board init to initialize the EFI drivers */
> >  efi_status_t efi_driver_init(void);
> > diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
> > index 0f25094dbf8..97b89a97a2e 100644
> > --- a/lib/efi_loader/efi_memory.c
> > +++ b/lib/efi_loader/efi_memory.c
> > @@ -173,17 +173,19 @@ static void efi_mem_sort(void)
> >  /**
> >   * efi_mem_carve_out() - unmap memory region
> >   *
> > - * @map:               memory map
> > - * @carve_desc:                memory region to unmap
> > - * @overlap_only_ram:  the carved out region may only overlap RAM
> > - * Return:             the number of overlapping pages which have been
> > - *                     removed from the map,
> > - *                     EFI_CARVE_NO_OVERLAP, if the regions don't overlap,
> > - *                     EFI_CARVE_OVERLAPS_NONRAM, if the carve and map overlap,
> > - *                     and the map contains anything but free ram
> > - *                     (only when overlap_only_ram is true),
> > - *                     EFI_CARVE_LOOP_AGAIN, if the mapping list should be
> > - *                     traversed again, as it has been altered.
> > + * @map:                       memory map
> > + * @carve_desc:                        memory region to unmap
> > + * @overlap_only_freemem:      the carved out region may only overlap free,
> > + *                             or conventional memory
> > + * Return:                     the number of overlapping pages which have been
> > + *                             removed from the map,
> > + *                             EFI_CARVE_NO_OVERLAP, if the regions don't
> > + *                             overlap, EFI_CARVE_OVERLAPS_NONRAM, if the carve
> > + *                             and map overlap, and the map contains anything
> > + *                             but free ram(only when overlap_only_freemem is
> > + *                             true),
> > + *                             EFI_CARVE_LOOP_AGAIN, if the mapping list should
> > + *                             be traversed again, as it has been altered.
> >   *
> >   * Unmaps all memory occupied by the carve_desc region from the list entry
> >   * pointed to by map.
> > @@ -193,7 +195,7 @@ static void efi_mem_sort(void)
> >   */
> >  static s64 efi_mem_carve_out(struct efi_mem_list *map,
> >                              struct efi_mem_desc *carve_desc,
> > -                            bool overlap_only_ram)
> > +                            bool overlap_only_freemem)
> >  {
> >         struct efi_mem_list *newmap;
> >         struct efi_mem_desc *map_desc = &map->desc;
> > @@ -208,7 +210,7 @@ static s64 efi_mem_carve_out(struct efi_mem_list *map,
> >                 return EFI_CARVE_NO_OVERLAP;
> >
> >         /* We're overlapping with non-RAM, warn the caller if desired */
> > -       if (overlap_only_ram && (map_desc->type != EFI_CONVENTIONAL_MEMORY))
> > +       if (overlap_only_freemem && (map_desc->type != EFI_CONVENTIONAL_MEMORY))
> >                 return EFI_CARVE_OVERLAPS_NONRAM;
> >
> >         /* Sanitize carve_start and carve_end to lie within our bounds */
> > @@ -258,15 +260,17 @@ static s64 efi_mem_carve_out(struct efi_mem_list *map,
> >  /**
> >   * efi_add_memory_map_pg() - add pages to the memory map
> >   *
> > - * @start:             start address, must be a multiple of EFI_PAGE_SIZE
> > - * @pages:             number of pages to add
> > - * @memory_type:       type of memory added
> > - * @overlap_only_ram:  region may only overlap RAM
> > - * Return:             status code
> > + * @start:                     start address, must be a multiple of
> > + *                             EFI_PAGE_SIZE
> > + * @pages:                     number of pages to add
> > + * @memory_type:               type of memory added
> > + * @overlap_only_freemem:      region may only overlap free(conventional)
> > + *                             memory
> > + * Return:                     status code
> >   */
> >  efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
> > -                                         int memory_type,
> > -                                         bool overlap_only_ram)
> > +                                  int memory_type,
> > +                                  bool overlap_only_freemem)
> >  {
> >         struct efi_mem_list *lmem;
> >         struct efi_mem_list *newlist;
> > @@ -275,7 +279,8 @@ efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
> >         struct efi_event *evt;
> >
> >         EFI_PRINT("%s: 0x%llx 0x%llx %d %s\n", __func__,
> > -                 start, pages, memory_type, overlap_only_ram ? "yes" : "no");
> > +                 start, pages, memory_type, overlap_only_freemem ?
> > +                 "yes" : "no");
> >
> >         if (memory_type >= EFI_MAX_MEMORY_TYPE)
> >                 return EFI_INVALID_PARAMETER;
> > @@ -312,7 +317,7 @@ efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
> >                         s64 r;
> >
> >                         r = efi_mem_carve_out(lmem, &newlist->desc,
> > -                                             overlap_only_ram);
> > +                                             overlap_only_freemem);
> >                         switch (r) {
> >                         case EFI_CARVE_OUT_OF_RESOURCES:
> >                                 free(newlist);
> > @@ -348,7 +353,7 @@ efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
> >                 }
> >         } while (carve_again);
> >
> > -       if (overlap_only_ram && (carved_pages != pages)) {
> > +       if (overlap_only_freemem && (carved_pages != pages)) {
> >                 /*
> >                  * The payload wanted to have RAM overlaps, but we overlapped
> >                  * with an unallocated region. Error out.
> > --
> > 2.34.1
> >
diff mbox series

Patch

diff --git a/include/efi_loader.h b/include/efi_loader.h
index 0d5555c7597..c3512c63a50 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -788,15 +788,17 @@  efi_status_t efi_add_memory_map(u64 start, u64 size, int memory_type);
 /**
  * efi_add_memory_map_pg() - add pages to the memory map
  *
- * @start:		start address, must be a multiple of EFI_PAGE_SIZE
- * @pages:		number of pages to add
- * @memory_type:	type of memory added
- * @overlap_only_ram:	region may only overlap RAM
- * Return:		status code
+ * @start:			start address, must be a multiple of
+ *				EFI_PAGE_SIZE
+ * @pages:			number of pages to add
+ * @memory_type:		type of memory added
+ * @overlap_only_freemem:	region may only overlap free(conventional)
+ *				memory
+ * Return:			status code
  */
 efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
-					  int memory_type,
-					  bool overlap_only_ram);
+				   int memory_type,
+				   bool overlap_only_freemem);
 
 /* Called by board init to initialize the EFI drivers */
 efi_status_t efi_driver_init(void);
diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
index 0f25094dbf8..97b89a97a2e 100644
--- a/lib/efi_loader/efi_memory.c
+++ b/lib/efi_loader/efi_memory.c
@@ -173,17 +173,19 @@  static void efi_mem_sort(void)
 /**
  * efi_mem_carve_out() - unmap memory region
  *
- * @map:		memory map
- * @carve_desc:		memory region to unmap
- * @overlap_only_ram:	the carved out region may only overlap RAM
- * Return:		the number of overlapping pages which have been
- *			removed from the map,
- *			EFI_CARVE_NO_OVERLAP, if the regions don't overlap,
- *			EFI_CARVE_OVERLAPS_NONRAM, if the carve and map overlap,
- *			and the map contains anything but free ram
- *			(only when overlap_only_ram is true),
- *			EFI_CARVE_LOOP_AGAIN, if the mapping list should be
- *			traversed again, as it has been altered.
+ * @map:			memory map
+ * @carve_desc:			memory region to unmap
+ * @overlap_only_freemem:	the carved out region may only overlap free,
+ *				or conventional memory
+ * Return:			the number of overlapping pages which have been
+ *				removed from the map,
+ *				EFI_CARVE_NO_OVERLAP, if the regions don't
+ *				overlap, EFI_CARVE_OVERLAPS_NONRAM, if the carve
+ *				and map overlap, and the map contains anything
+ *				but free ram(only when overlap_only_freemem is
+ *				true),
+ *				EFI_CARVE_LOOP_AGAIN, if the mapping list should
+ *				be traversed again, as it has been altered.
  *
  * Unmaps all memory occupied by the carve_desc region from the list entry
  * pointed to by map.
@@ -193,7 +195,7 @@  static void efi_mem_sort(void)
  */
 static s64 efi_mem_carve_out(struct efi_mem_list *map,
 			     struct efi_mem_desc *carve_desc,
-			     bool overlap_only_ram)
+			     bool overlap_only_freemem)
 {
 	struct efi_mem_list *newmap;
 	struct efi_mem_desc *map_desc = &map->desc;
@@ -208,7 +210,7 @@  static s64 efi_mem_carve_out(struct efi_mem_list *map,
 		return EFI_CARVE_NO_OVERLAP;
 
 	/* We're overlapping with non-RAM, warn the caller if desired */
-	if (overlap_only_ram && (map_desc->type != EFI_CONVENTIONAL_MEMORY))
+	if (overlap_only_freemem && (map_desc->type != EFI_CONVENTIONAL_MEMORY))
 		return EFI_CARVE_OVERLAPS_NONRAM;
 
 	/* Sanitize carve_start and carve_end to lie within our bounds */
@@ -258,15 +260,17 @@  static s64 efi_mem_carve_out(struct efi_mem_list *map,
 /**
  * efi_add_memory_map_pg() - add pages to the memory map
  *
- * @start:		start address, must be a multiple of EFI_PAGE_SIZE
- * @pages:		number of pages to add
- * @memory_type:	type of memory added
- * @overlap_only_ram:	region may only overlap RAM
- * Return:		status code
+ * @start:			start address, must be a multiple of
+ *				EFI_PAGE_SIZE
+ * @pages:			number of pages to add
+ * @memory_type:		type of memory added
+ * @overlap_only_freemem:	region may only overlap free(conventional)
+ *				memory
+ * Return:			status code
  */
 efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
-					  int memory_type,
-					  bool overlap_only_ram)
+				   int memory_type,
+				   bool overlap_only_freemem)
 {
 	struct efi_mem_list *lmem;
 	struct efi_mem_list *newlist;
@@ -275,7 +279,8 @@  efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
 	struct efi_event *evt;
 
 	EFI_PRINT("%s: 0x%llx 0x%llx %d %s\n", __func__,
-		  start, pages, memory_type, overlap_only_ram ? "yes" : "no");
+		  start, pages, memory_type, overlap_only_freemem ?
+		  "yes" : "no");
 
 	if (memory_type >= EFI_MAX_MEMORY_TYPE)
 		return EFI_INVALID_PARAMETER;
@@ -312,7 +317,7 @@  efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
 			s64 r;
 
 			r = efi_mem_carve_out(lmem, &newlist->desc,
-					      overlap_only_ram);
+					      overlap_only_freemem);
 			switch (r) {
 			case EFI_CARVE_OUT_OF_RESOURCES:
 				free(newlist);
@@ -348,7 +353,7 @@  efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
 		}
 	} while (carve_again);
 
-	if (overlap_only_ram && (carved_pages != pages)) {
+	if (overlap_only_freemem && (carved_pages != pages)) {
 		/*
 		 * The payload wanted to have RAM overlaps, but we overlapped
 		 * with an unallocated region. Error out.