[PATCH v2] acpi: fix compilation for 32-bit
Ahmad Fatoum
a.fatoum at pengutronix.de
Thu Aug 15 04:44:55 PDT 2024
From: Ahmad Fatoum <ahmad at a3f.at>
Build test on x86 fails due to pointer cast and because of forcing the
bigger alignment on the flexible array.
The problematic pointer cast is for the XSDT, which is 64-bit-only, so
let's fix the cast and return an error if we somehow see an XSDT on
32-bit.
For the flexible array, let's use the size of the pointer for the
alignment.
Signed-off-by: Ahmad Fatoum <ahmad at a3f.at>
---
v1 -> v2:
- fix CI x86_64 breakage, by keeping the packed/aligned specifiction
as is, but changing it to 32-bit on 32-bit systems.
---
drivers/bus/acpi.c | 6 ++++--
include/acpi.h | 2 +-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/bus/acpi.c b/drivers/bus/acpi.c
index 593617073345..61178db0c8db 100644
--- a/drivers/bus/acpi.c
+++ b/drivers/bus/acpi.c
@@ -174,10 +174,12 @@ static int acpi_register_devices(struct bus_type *bus)
sig = "RSDT";
root = (struct acpi_rsdt *)(unsigned long)rsdp->rsdt_addr;
entry_count = (root->sdt.len - sizeof(struct acpi_rsdt)) / sizeof(u32);
- } else {
+ } else if (sizeof(void *) == 8) {
sig = "XSDT";
- root = (struct acpi_rsdt *)((struct acpi2_rsdp *)rsdp)->xsdt_addr;
+ root = (struct acpi_rsdt *)(uintptr_t)((struct acpi2_rsdp *)rsdp)->xsdt_addr;
entry_count = (root->sdt.len - sizeof(struct acpi_rsdt)) / sizeof(u64);
+ } else {
+ return -EIO;
}
if (acpi_sigcmp(sig, root->sdt.signature)) {
diff --git a/include/acpi.h b/include/acpi.h
index 0756f94501cc..fc0da30610a6 100644
--- a/include/acpi.h
+++ b/include/acpi.h
@@ -115,7 +115,7 @@ struct __packed acpi_sdt { /* system description table header */
struct __packed acpi_rsdt { /* system description table header */
struct acpi_sdt sdt;
- struct acpi_sdt * __aligned(8) entries[];
+ struct acpi_sdt *__aligned(sizeof(void *)) entries[];
};
struct acpi_driver {
--
2.39.2
More information about the barebox
mailing list