diff mbox series

[v2,3/3] xen/arm: Extend the memory overlap check to include EfiACPIReclaimMemory

Message ID 20221214031654.2815589-4-Henry.Wang@arm.com (mailing list archive)
State Superseded
Headers show
Series Memory region overlap check in device tree | expand

Commit Message

Henry Wang Dec. 14, 2022, 3:16 a.m. UTC
Similarly as the static regions and boot modules, memory regions with
EfiACPIReclaimMemory type (defined in bootinfo.acpi if CONFIG_ACPI is
enabled) should also not be overlapping with memory regions in
bootinfo.reserved_mem and bootinfo.modules.

Therefore, this commit reuses the `meminfo_overlap_check()` to further
extends the check in function `check_reserved_regions_overlap()` so that
memory regions in bootinfo.acpi are included. If any error occurs in the
extended `check_reserved_regions_overlap()`, the `meminfo_add_bank()`
defined in `efi-boot.h` will return early.

Signed-off-by: Henry Wang <Henry.Wang@arm.com>
---
v1 -> v2:
1. Rebase on top of patch #1 and #2.
---
 xen/arch/arm/efi/efi-boot.h | 10 ++++++++--
 xen/arch/arm/setup.c        |  6 ++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

Comments

Stefano Stabellini Jan. 25, 2023, 12:57 a.m. UTC | #1
On Wed, 14 Dec 2022, Henry Wang wrote:
> Similarly as the static regions and boot modules, memory regions with
> EfiACPIReclaimMemory type (defined in bootinfo.acpi if CONFIG_ACPI is
> enabled) should also not be overlapping with memory regions in
> bootinfo.reserved_mem and bootinfo.modules.
> 
> Therefore, this commit reuses the `meminfo_overlap_check()` to further
> extends the check in function `check_reserved_regions_overlap()` so that
> memory regions in bootinfo.acpi are included. If any error occurs in the
> extended `check_reserved_regions_overlap()`, the `meminfo_add_bank()`
> defined in `efi-boot.h` will return early.
> 
> Signed-off-by: Henry Wang <Henry.Wang@arm.com>

Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>


> ---
> v1 -> v2:
> 1. Rebase on top of patch #1 and #2.
> ---
>  xen/arch/arm/efi/efi-boot.h | 10 ++++++++--
>  xen/arch/arm/setup.c        |  6 ++++++
>  2 files changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/xen/arch/arm/efi/efi-boot.h b/xen/arch/arm/efi/efi-boot.h
> index 43a836c3a7..6121ba1f2f 100644
> --- a/xen/arch/arm/efi/efi-boot.h
> +++ b/xen/arch/arm/efi/efi-boot.h
> @@ -161,13 +161,19 @@ static bool __init meminfo_add_bank(struct meminfo *mem,
>                                      EFI_MEMORY_DESCRIPTOR *desc)
>  {
>      struct membank *bank;
> +    paddr_t start = desc->PhysicalStart;
> +    paddr_t size = desc->NumberOfPages * EFI_PAGE_SIZE;
>  
>      if ( mem->nr_banks >= NR_MEM_BANKS )
>          return false;
> +#ifdef CONFIG_ACPI
> +    if ( check_reserved_regions_overlap(start, size) )
> +        return false;
> +#endif
>  
>      bank = &mem->bank[mem->nr_banks];
> -    bank->start = desc->PhysicalStart;
> -    bank->size = desc->NumberOfPages * EFI_PAGE_SIZE;
> +    bank->start = start;
> +    bank->size = size;
>  
>      mem->nr_banks++;
>  
> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
> index ba0152f868..a0cb2dd588 100644
> --- a/xen/arch/arm/setup.c
> +++ b/xen/arch/arm/setup.c
> @@ -342,6 +342,12 @@ int __init check_reserved_regions_overlap(paddr_t region_start,
>                                     region_start, region_end) )
>          return -EINVAL;
>  
> +#ifdef CONFIG_ACPI
> +    /* Check if input region is overlapping with ACPI EfiACPIReclaimMemory */
> +    if ( meminfo_overlap_check(&bootinfo.acpi, region_start, region_end) )
> +        return -EINVAL;
> +#endif
> +
>      return 0;
>  }
>  
> -- 
> 2.25.1
>
diff mbox series

Patch

diff --git a/xen/arch/arm/efi/efi-boot.h b/xen/arch/arm/efi/efi-boot.h
index 43a836c3a7..6121ba1f2f 100644
--- a/xen/arch/arm/efi/efi-boot.h
+++ b/xen/arch/arm/efi/efi-boot.h
@@ -161,13 +161,19 @@  static bool __init meminfo_add_bank(struct meminfo *mem,
                                     EFI_MEMORY_DESCRIPTOR *desc)
 {
     struct membank *bank;
+    paddr_t start = desc->PhysicalStart;
+    paddr_t size = desc->NumberOfPages * EFI_PAGE_SIZE;
 
     if ( mem->nr_banks >= NR_MEM_BANKS )
         return false;
+#ifdef CONFIG_ACPI
+    if ( check_reserved_regions_overlap(start, size) )
+        return false;
+#endif
 
     bank = &mem->bank[mem->nr_banks];
-    bank->start = desc->PhysicalStart;
-    bank->size = desc->NumberOfPages * EFI_PAGE_SIZE;
+    bank->start = start;
+    bank->size = size;
 
     mem->nr_banks++;
 
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index ba0152f868..a0cb2dd588 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -342,6 +342,12 @@  int __init check_reserved_regions_overlap(paddr_t region_start,
                                    region_start, region_end) )
         return -EINVAL;
 
+#ifdef CONFIG_ACPI
+    /* Check if input region is overlapping with ACPI EfiACPIReclaimMemory */
+    if ( meminfo_overlap_check(&bootinfo.acpi, region_start, region_end) )
+        return -EINVAL;
+#endif
+
     return 0;
 }