summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Grall <julien.grall@arm.com>2020-09-30 12:25:05 +0100
committerAlex Bennée <alex.bennee@linaro.org>2020-09-30 12:54:40 +0100
commite680dde6fd53f87fd1e43ffe80cc2f9f3069b059 (patch)
tree74640df426c243648d6b23cc8ed0e84b53bd4bae
parenta34a93acb94796cb859d6f718bb341250e4c16f5 (diff)
xen/arm: gic-v2: acpi: Use the correct length for the GICC structure
The length of the GICC structure in the MADT ACPI table differs between version 5.1 and 6.0, although there are no other relevant differences. Use the BAD_MADT_GICC_ENTRY macro, which was specifically designed to overcome this issue. Signed-off-by: Julien Grall <julien.grall@arm.com> Signed-off-by: Andre Przywara <andre.przywara@arm.com> Message-Id: <20200930112507.8375-3-andre.przywara@arm.com>
-rw-r--r--xen/arch/arm/acpi/boot.c2
-rw-r--r--xen/arch/arm/gic-v2.c5
-rw-r--r--xen/arch/arm/gic-v3.c2
3 files changed, 5 insertions, 4 deletions
diff --git a/xen/arch/arm/acpi/boot.c b/xen/arch/arm/acpi/boot.c
index 779b5fde34..5dfe0838f2 100644
--- a/xen/arch/arm/acpi/boot.c
+++ b/xen/arch/arm/acpi/boot.c
@@ -131,7 +131,7 @@ acpi_parse_gic_cpu_interface(struct acpi_subtable_header *header,
struct acpi_madt_generic_interrupt *processor =
container_of(header, struct acpi_madt_generic_interrupt, header);
- if ( BAD_MADT_ENTRY(processor, end) )
+ if ( BAD_MADT_GICC_ENTRY(processor, end) )
return -EINVAL;
acpi_table_print_madt_entry(header);
diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c
index 0f747538db..0e5f232019 100644
--- a/xen/arch/arm/gic-v2.c
+++ b/xen/arch/arm/gic-v2.c
@@ -1136,7 +1136,8 @@ static int gicv2_make_hwdom_madt(const struct domain *d, u32 offset)
host_gicc = container_of(header, struct acpi_madt_generic_interrupt,
header);
- size = sizeof(struct acpi_madt_generic_interrupt);
+
+ size = ACPI_MADT_GICC_LENGTH;
/* Add Generic Interrupt */
for ( i = 0; i < d->max_vcpus; i++ )
{
@@ -1165,7 +1166,7 @@ gic_acpi_parse_madt_cpu(struct acpi_subtable_header *header,
struct acpi_madt_generic_interrupt *processor =
container_of(header, struct acpi_madt_generic_interrupt, header);
- if ( BAD_MADT_ENTRY(processor, end) )
+ if ( BAD_MADT_GICC_ENTRY(processor, end) )
return -EINVAL;
/* Read from APIC table and fill up the GIC variables */
diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c
index 0f6cbf6224..ce202402c0 100644
--- a/xen/arch/arm/gic-v3.c
+++ b/xen/arch/arm/gic-v3.c
@@ -1558,7 +1558,7 @@ gic_acpi_parse_madt_cpu(struct acpi_subtable_header *header,
struct acpi_madt_generic_interrupt *processor =
container_of(header, struct acpi_madt_generic_interrupt, header);
- if ( BAD_MADT_ENTRY(processor, end) )
+ if ( BAD_MADT_GICC_ENTRY(processor, end) )
return -EINVAL;
/* Read from APIC table and fill up the GIC variables */