All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: Shannon Zhao <zhaoshenglong@huawei.com>, xen-devel@lists.xen.org
Cc: sstabellini@kernel.org, wei.liu2@citrix.com,
	ian.jackson@eu.citrix.com, peter.huangpeng@huawei.com,
	shannon.zhao@linaro.org, boris.ostrovsky@oracle.com
Subject: Re: [PATCH v2 13/17] libxl/arm: Link all ACPI tables into one buffer
Date: Thu, 23 Jun 2016 18:10:49 +0100	[thread overview]
Message-ID: <576C1819.9090103@arm.com> (raw)
In-Reply-To: <1466651824-6964-14-git-send-email-zhaoshenglong@huawei.com>

Hi Shannon,

On 23/06/16 04:17, Shannon Zhao wrote:
> From: Shannon Zhao <shannon.zhao@linaro.org>
>
> Link all ACPI tables into one buffer, fill in the addresses of
> tables and update checksum of each table.

Is there any reason to not allocate the acpitable_blob buffer before 
hand (and even reallocate if not enough space) and write the table 
directly in it?

Regards,

>
> Reserve a memory map space for ACPI tables.
>
> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
> ---
>   tools/libxl/libxl_arm_acpi.c  | 58 +++++++++++++++++++++++++++++++++++++++++++
>   xen/include/public/arch-arm.h |  4 +++
>   2 files changed, 62 insertions(+)
>
> diff --git a/tools/libxl/libxl_arm_acpi.c b/tools/libxl/libxl_arm_acpi.c
> index d8779af..263b5de 100644
> --- a/tools/libxl/libxl_arm_acpi.c
> +++ b/tools/libxl/libxl_arm_acpi.c
> @@ -285,6 +285,63 @@ static void calculate_checksum(void *table, uint32_t checksum_offset,
>       p[checksum_offset] = -sum;
>   }
>
> +static void link_acpi_tables(libxl__gc *gc, struct xc_dom_image *dom)
> +{
> +    uint64_t offset = 0;
> +    struct acpi_table_xsdt *xsdt;
> +    struct acpi_table_rsdp *rsdp;
> +    struct acpi_table_fadt *fadt;
> +
> +    assert(dom->acpitable_size <= GUEST_ACPI_SIZE);
> +    dom->acpitable_blob = libxl__zalloc(gc, dom->acpitable_size);
> +
> +    rsdp = (struct acpi_table_rsdp *)(dom->acpitable_blob + offset);
> +    memcpy(dom->acpitable_blob + offset, acpitables[RSDP].table,
> +           acpitables[RSDP].size);
> +    offset += ROUNDUP(acpitables[RSDP].size, 3);
> +
> +    xsdt = (struct acpi_table_xsdt *)(dom->acpitable_blob + offset);
> +    memcpy(dom->acpitable_blob + offset, acpitables[XSDT].table,
> +           acpitables[XSDT].size);
> +    rsdp->xsdt_physical_address = GUEST_ACPI_BASE + offset;
> +    calculate_checksum(rsdp, offsetof(struct acpi_table_header, checksum),
> +                       acpitables[RSDP].size);
> +    offset += ROUNDUP(acpitables[XSDT].size, 3);
> +
> +    memcpy(dom->acpitable_blob + offset, acpitables[MADT].table,
> +           acpitables[MADT].size);
> +    calculate_checksum(dom->acpitable_blob + offset,
> +                       offsetof(struct acpi_table_header, checksum),
> +                       acpitables[MADT].size);
> +    xsdt->table_offset_entry[0] = GUEST_ACPI_BASE + offset;
> +    offset += ROUNDUP(acpitables[MADT].size, 3);
> +
> +    memcpy(dom->acpitable_blob + offset, acpitables[GTDT].table,
> +           acpitables[GTDT].size);
> +    calculate_checksum(dom->acpitable_blob + offset,
> +                       offsetof(struct acpi_table_header, checksum),
> +                       acpitables[GTDT].size);
> +    xsdt->table_offset_entry[1] = GUEST_ACPI_BASE + offset;
> +    offset += ROUNDUP(acpitables[GTDT].size, 3);
> +
> +    fadt = (struct acpi_table_fadt *)(dom->acpitable_blob + offset);
> +    memcpy(dom->acpitable_blob + offset, acpitables[FADT].table,
> +           acpitables[FADT].size);
> +    xsdt->table_offset_entry[2] = GUEST_ACPI_BASE + offset;
> +    calculate_checksum(xsdt, offsetof(struct acpi_table_header, checksum),
> +                       acpitables[XSDT].size);
> +    offset += ROUNDUP(acpitables[FADT].size, 3);
> +
> +    memcpy(dom->acpitable_blob + offset, acpitables[DSDT].table,
> +           acpitables[DSDT].size);
> +    calculate_checksum(dom->acpitable_blob + offset,
> +                       offsetof(struct acpi_table_header, checksum),
> +                       acpitables[DSDT].size);
> +    fadt->dsdt = GUEST_ACPI_BASE + offset;
> +    calculate_checksum(fadt, offsetof(struct acpi_table_header, checksum),
> +                       acpitables[FADT].size);
> +}
> +
>   int libxl__prepare_acpi(libxl__gc *gc, libxl_domain_build_info *info,
>                           libxl__domain_build_state *state,
>                           struct xc_dom_image *dom)
> @@ -314,6 +371,7 @@ int libxl__prepare_acpi(libxl__gc *gc, libxl_domain_build_info *info,
>
>       make_acpi_fadt(gc, dom);
>       make_acpi_dsdt(gc, dom);
> +    link_acpi_tables(gc, dom);
>
>       return 0;
>   }
> diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
> index 05e4a58..0911d16 100644
> --- a/xen/include/public/arch-arm.h
> +++ b/xen/include/public/arch-arm.h
> @@ -407,6 +407,10 @@ typedef uint64_t xen_callback_t;
>   #define GUEST_GICV3_GICR0_BASE     0x03020000ULL    /* vCPU0 - vCPU127 */
>   #define GUEST_GICV3_GICR0_SIZE     0x01000000ULL
>
> +/* ACPI tables physical address */
> +#define GUEST_ACPI_BASE 0x20000000ULL
> +#define GUEST_ACPI_SIZE 0x00200000ULL
> +
>   /*
>    * 16MB == 4096 pages reserved for guest to use as a region to map its
>    * grant table in.
>

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2016-06-23 17:10 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-23  3:16 [PATCH v2 00/17] Xen ARM DomU ACPI support Shannon Zhao
2016-06-23  3:16 ` [PATCH v2 01/17] libxl/arm: Factor out codes for generating DTB Shannon Zhao
2016-06-23  3:16 ` [PATCH v2 02/17] libxc: Add placeholders for ACPI tables blob and size Shannon Zhao
2016-06-23  3:16 ` [PATCH v2 03/17] libxl/arm: Add a configuration option for ARM DomU ACPI Shannon Zhao
2016-06-23 13:39   ` Stefano Stabellini
2016-06-23 14:34     ` Shannon Zhao
2016-06-27 10:40       ` Julien Grall
2016-07-07 15:30         ` Wei Liu
2016-07-12  3:40           ` Shannon Zhao
2016-07-12  9:22             ` Julien Grall
2016-07-12 11:33               ` Wei Liu
2016-07-12 14:17                 ` Shannon Zhao
2016-07-12 14:33                   ` Wei Liu
2016-07-12 14:45                     ` Shannon Zhao
2016-07-13  7:54                 ` Shannon Zhao
2016-07-13  9:20                   ` Julien Grall
2016-07-13  9:48                     ` Shannon Zhao
2016-07-13 10:03                       ` Julien Grall
2016-07-15  8:00                         ` Shannon Zhao
2016-07-15  8:07                           ` Shannon Zhao
2016-07-18 19:40                             ` Stefano Stabellini
2016-07-19 10:40                               ` Wei Liu
2016-07-19 10:44                               ` Ian Jackson
2016-06-23 15:53   ` Julien Grall
2016-06-23  3:16 ` [PATCH v2 04/17] libxl/arm: prepare for constructing ACPI tables Shannon Zhao
2016-06-23 13:37   ` Stefano Stabellini
2016-06-23 14:23     ` Shannon Zhao
2016-06-23 14:27       ` Stefano Stabellini
2016-06-23 16:18   ` Julien Grall
2016-06-23  3:16 ` [PATCH v2 05/17] libxl/arm: Construct ACPI RSDP table Shannon Zhao
2016-06-23  3:16 ` [PATCH v2 06/17] libxl/arm: Construct ACPI XSDT table Shannon Zhao
2016-06-23  3:16 ` [PATCH v2 07/17] libxl/arm: Construct ACPI GTDT table Shannon Zhao
2016-06-23 15:00   ` Stefano Stabellini
2016-06-23 16:19     ` Julien Grall
2016-06-23 16:26   ` Julien Grall
2016-06-23 16:58     ` Julien Grall
2016-06-27  1:44     ` Shannon Zhao
2016-06-27 10:17       ` Julien Grall
2016-06-29  9:29         ` Shannon Zhao
2016-06-29  9:42           ` Julien Grall
2016-06-29 13:41             ` Shannon Zhao
2016-07-05 16:42         ` Stefano Stabellini
2016-07-06  9:50           ` Julien Grall
2016-07-06 10:16             ` Stefano Stabellini
2016-06-23  3:16 ` [PATCH v2 08/17] libxl/arm: Factor MPIDR computing codes out as a helper Shannon Zhao
2016-06-23 16:29   ` Julien Grall
2016-06-23  3:16 ` [PATCH v2 09/17] libxl/arm: Construct ACPI MADT table Shannon Zhao
2016-06-23 16:36   ` Julien Grall
2016-06-23  3:16 ` [PATCH v2 10/17] libxl/arm: Construct ACPI FADT table Shannon Zhao
2016-06-23  3:16 ` [PATCH v2 11/17] libxl/arm: Construct ACPI DSDT table Shannon Zhao
2016-06-23 14:50   ` Stefano Stabellini
2016-06-23 16:42     ` Julien Grall
2016-06-27  1:50       ` Shannon Zhao
2016-06-23 17:03   ` Julien Grall
2016-06-27  6:01     ` Shannon Zhao
2016-06-27 10:29       ` Julien Grall
2016-06-27 12:05         ` Boris Ostrovsky
2016-06-28 11:03           ` Shannon Zhao
2016-06-28 13:41             ` Boris Ostrovsky
2016-06-29 18:58               ` Boris Ostrovsky
2016-07-01  7:58                 ` Shannon Zhao
2016-07-01 10:18                   ` Julien Grall
2016-07-01 14:42                     ` Boris Ostrovsky
2016-07-01 15:14                       ` Julien Grall
2016-06-23  3:16 ` [PATCH v2 12/17] libxl/arm: Add a helper to calculate the ACPI table checksum Shannon Zhao
2016-06-23 17:05   ` Julien Grall
2016-06-23  3:17 ` [PATCH v2 13/17] libxl/arm: Link all ACPI tables into one buffer Shannon Zhao
2016-06-23 17:10   ` Julien Grall [this message]
2016-06-23  3:17 ` [PATCH v2 14/17] libxl/arm: Factor finalise_one_memory_node as a gerneric function Shannon Zhao
2016-06-23  3:17 ` [PATCH v2 15/17] libxl/arm: Add ACPI module Shannon Zhao
2016-06-23 18:35   ` Julien Grall
2016-06-25  3:22     ` Shannon Zhao
2016-06-27  9:48       ` Julien Grall
2016-06-23  3:17 ` [PATCH v2 16/17] libxc/xc_dom_arm: Copy ACPI tables to guest space Shannon Zhao
2016-06-23 18:46   ` Julien Grall
2016-06-27  6:25     ` Shannon Zhao
2016-06-27 10:49       ` Julien Grall
2016-06-27 12:11         ` Boris Ostrovsky
2016-07-05 17:13     ` Stefano Stabellini
2016-07-06  9:46       ` Julien Grall
2016-07-06 10:12         ` Stefano Stabellini
2016-07-12  3:47           ` Shannon Zhao
2016-07-12  9:25             ` Julien Grall
2016-07-12 11:35             ` Wei Liu
2016-07-12 14:42               ` Shannon Zhao
2016-07-12 14:50                 ` Wei Liu
2016-07-12 14:57                   ` Shannon Zhao
2016-07-12 15:08                     ` Boris Ostrovsky
2016-07-12 15:13                       ` Wei Liu
2016-07-12 15:21                         ` Boris Ostrovsky
2016-07-12 16:05                           ` Wei Liu
2016-07-12 16:10                       ` Julien Grall
2016-07-12 16:58                         ` Boris Ostrovsky
2016-07-13 15:22                           ` Julien Grall
2016-07-13 17:08                             ` Boris Ostrovsky
2016-07-14 11:15                               ` Wei Liu
2016-07-15  9:39                                 ` Shannon Zhao
2016-07-19 10:38                                   ` Wei Liu
2016-07-20  6:52                                     ` Shannon Zhao
2016-07-20  9:32                                       ` Wei Liu
2016-07-25  7:56                                         ` Shannon Zhao
2016-07-28 11:10                                           ` Julien Grall
2016-07-14 11:29                               ` Julien Grall
2016-07-14 13:37                             ` Stefano Stabellini
2016-07-20 12:33                               ` Julien Grall
2016-07-20 13:33                                 ` Boris Ostrovsky
2016-07-20 13:41                                   ` Julien Grall
2016-07-20 14:09                                     ` Boris Ostrovsky
2016-07-20 17:28                                       ` Stefano Stabellini
2016-07-20 19:51                                         ` Boris Ostrovsky
2016-07-21 17:53                                           ` Stefano Stabellini
2016-07-21 18:23                                             ` Julien Grall
2016-07-21 18:54                                               ` Stefano Stabellini
2016-07-21 19:14                                                 ` Julien Grall
2016-07-21 21:15                                                   ` Stefano Stabellini
2016-07-25  8:38                                                     ` George Dunlap
2016-07-25  9:46                                                       ` Julien Grall
2016-07-25 22:06                                                       ` Stefano Stabellini
2016-07-25 22:46                                                         ` Boris Ostrovsky
2016-07-25 23:40                                                           ` Stefano Stabellini
2016-07-26  1:17                                                             ` Boris Ostrovsky
2016-07-28 11:06                                                               ` Julien Grall
2016-07-28 12:42                                                                 ` Shannon Zhao
2016-08-02 11:01                                                                   ` Wei Liu
2016-08-03 19:20                                                                     ` Julien Grall
2016-08-04 10:17                                                                       ` Wei Liu
2016-08-02 11:01                                                                 ` Wei Liu
2016-07-07 15:35     ` Wei Liu
2016-06-23  3:17 ` [PATCH v2 17/17] libxl/arm: Initialize domain param HVM_PARAM_CALLBACK_IRQ Shannon Zhao
2016-06-23 18:48   ` Julien Grall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=576C1819.9090103@arm.com \
    --to=julien.grall@arm.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=peter.huangpeng@huawei.com \
    --cc=shannon.zhao@linaro.org \
    --cc=sstabellini@kernel.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    --cc=zhaoshenglong@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.