[PATCH v3 49/62] arm/acpi: Map rest tables for Dom0

Stefano Stabellini stefano.stabellini at eu.citrix.com
Fri Nov 27 04:16:22 PST 2015


On Tue, 17 Nov 2015, shannon.zhao at linaro.org wrote:
> From: Shannon Zhao <shannon.zhao at linaro.org>
> 
> Map other reused tables for Dom0.

"Map all other tables to Dom0 using 1:1 mappings."


> Signed-off-by: Shannon Zhao <shannon.zhao at linaro.org>
> ---
>  xen/arch/arm/domain_build.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 6ae5761..da4e271 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -1359,6 +1359,29 @@ static int prepare_dtb(struct domain *d, struct kernel_info *kinfo)
>  #ifdef CONFIG_ACPI
>  #define XEN_HYPERVISOR_ID 0x000058656E564D4D  /* "XenVMM" */
>  
> +static void acpi_map_rest_tables(struct domain *d)

The name doesn't sound nice, "acpi_map_other_tables" would be better.
However this function is not actually mapping the other tables, it is
mapping *all* of them, including the original madt and fadt, right? I
think it would be best to avoid mapping the originals.


> +{
> +    int i;
> +    unsigned long res;
> +    u64 addr, size;

Add a comment that they are being mapped 1:1


> +    for( i = 0; i < acpi_gbl_root_table_list.count; i++ )
> +    {
> +        addr = acpi_gbl_root_table_list.tables[i].address;
> +        size = acpi_gbl_root_table_list.tables[i].length;
> +        res = map_regions(d,
> +                          paddr_to_pfn(addr & PAGE_MASK),
> +                          DIV_ROUND_UP(size, PAGE_SIZE),
> +                          paddr_to_pfn(addr & PAGE_MASK));
> +        if ( res )
> +        {
> +             panic(XENLOG_ERR "Unable to map 0x%"PRIx64
> +                   " - 0x%"PRIx64" in domain \n",
> +                   addr & PAGE_MASK, PAGE_ALIGN(addr + size) - 1);
> +        }
> +    }
> +}
> +
>  static int acpi_create_rsdp(struct domain *d, struct membank tbl_add[])
>  {
>  
> @@ -1711,6 +1734,8 @@ static int prepare_acpi(struct domain *d, struct kernel_info *kinfo)
>      if ( rc != 0 )
>          return rc;
>  
> +    acpi_map_rest_tables(d);
> +
>      return 0;
>  }
>  #else



More information about the linux-arm-kernel mailing list