Hello Julien,

On 12/21/25 11:28 AM, Julien Grall wrote:
--- a/xen/arch/arm/gic.c
+++ b/xen/arch/arm/gic.c
@@ -418,8 +418,18 @@ unsigned long gic_get_hwdom_madt_size(const struct domain *d)
  {
      unsigned long madt_size;
  +    struct acpi_subtable_header *header;
+    struct acpi_madt_generic_interrupt *host_gicc;

For both variables, you don't seem to modify the content. So I think they should be const.

Only|host_gicc| can be made|const|. If|header| is also declared as|const|, we 
get a compilation error:
  arch/arm/gic.c: In function ‘gic_get_hwdom_madt_size’:
  ./include/xen/kernel.h:20:46: error: initialization discards ‘const’ 
qualifier from pointer target type [-Werror=discarded-qualifiers]
     20 |         typeof_field(type, member) *__mptr = (ptr);             \
        |                                              ^
  arch/arm/gic.c:428:17: note: in expansion of macro ‘container_of’
    428 |     host_gicc = container_of(header, struct 
acpi_madt_generic_interrupt,

It is probably better to leave|header| non-const here, rather than introducing 
a cast such as:
  host_gicc = container_of((struct acpi_subtable_header *)header, ...)

Thanks.

~ Oleksii


+
+    header = acpi_table_get_entry_madt(ACPI_MADT_TYPE_GENERIC_INTERRUPT, 0);
+    if ( !header )
+        panic("Can't get GICC entry");
+
+    host_gicc = container_of(header, struct acpi_madt_generic_interrupt,
+                             header);
+
      madt_size = sizeof(struct acpi_table_madt)
-                + ACPI_MADT_GICC_LENGTH * d->max_vcpus
+                + host_gicc->header.length * d->max_vcpus
                  + sizeof(struct acpi_madt_generic_distributor)
                  + gic_hw_ops->get_hwdom_extra_madt_size(d);

Reply via email to