[PATCH v3 38/62] arm/acpi: Add placeholder for efi and acpi load address

Stefano Stabellini stefano.stabellini at eu.citrix.com
Thu Nov 26 08:02:01 PST 2015


On Tue, 17 Nov 2015, Shannon Zhao wrote:
> On 2015/11/17 19:58, Julien Grall wrote:
> > Hi Shannon,
> > 
> > On 17/11/15 09:40, shannon.zhao at linaro.org wrote:
> >> From: Shannon Zhao <shannon.zhao at linaro.org>
> >>
> >> EFI table, memory description table and some of acpi tables will be
> >> placed after DOM0 memory space. Add placeholder for the starting address
> >> for loading in DOM0 and the size of new added tables. Also add a
> >> placeholder to store the new created tables.
> >>
> >> Signed-off-by: Parth Dixit <parth.dixit at linaro.org>
> >> Signed-off-by: Shannon Zhao <shannon.zhao at linaro.org>
> >> ---
> >>  xen/include/asm-arm/domain.h | 5 +++++
> >>  1 file changed, 5 insertions(+)
> >>
> >> diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h
> >> index 1e61f30..91272e5 100644
> >> --- a/xen/include/asm-arm/domain.h
> >> +++ b/xen/include/asm-arm/domain.h
> >> @@ -125,6 +125,11 @@ struct arch_domain
> >>      } vuart;
> >>  
> >>      unsigned int evtchn_irq;
> >> +#ifdef CONFIG_ACPI
> >> +    void *efi_acpi_table;
> >> +    paddr_t efi_acpi_gpa;
> >> +    paddr_t efi_acpi_len;
> >> +#endif
> > 
> > Why do you need this in the arch_domain? AFAICT those 3 variables should
> > only be used while building DOM0, so a better place would be in struct
> > kernel_info (see xen/arch/arm/kernel.h).
> > 
> 
> Since I use efi_acpi_table to store the allocated pages pointer which
> are used to store newly created ACPI and EFI tables.
> See [PATCH v3 40/62]:
> +    order = get_order_from_bytes(d->arch.efi_acpi_len);
> +    d->arch.efi_acpi_table = alloc_xenheap_pages(order, 0);
> 
> And it free these pages when destroying this domain:
> +#ifdef CONFIG_ACPI
> +    free_xenheap_pages(d->arch.efi_acpi_table,
> +                       get_order_from_bytes(d->arch.efi_acpi_len));
> +#endif
> 
> efi_acpi_gpa might not need.

If you need to free the memory at domain destruction, it could make
sense to store the pointer in struct arch_domain, even if it only
happens for dom0. However you could come up with a single struct and add
a pointer to it in arch_domain to limit the per-domain overhead.



More information about the linux-arm-kernel mailing list