Hi huacai,
It breaks with compatible issue since acpi table is changed, and test
case qtest-loongarch64/bios-tables-test fails to run.
LoongArch VM compatibility is not perfect now, one method is to modify
test case at the same time, another method is to add extra option in
order to support aligned GED ACPI address.
Does this issue must be fixed now? With ACPI spec, 5.2.12.20 Core
Programmable Interrupt Controller (CORE PIC) Structure, ACPI Processor
ID is not aligned also, its size is 4 byte and offset is 3 bytes.
If it must be fixed, the test case should be modified also together with
the patch. If not, it can be record as pending bug, will solve it if VM
compatibility method is decided.
Regards
Bibo Mao
On 2025/9/22 下午10:15, Huacai Chen wrote:
From: Huacai Chen <[email protected]>
Now VIRT_GED_CPUHP_ADDR is not aligned to 4 bytes, but if Linux kernel
is built with ACPI_MISALIGNMENT_NOT_SUPPORTED, it assumes the alignment,
otherwise we get ACPI errors at boot phase:
ACPI Error: AE_AML_ALIGNMENT, Returned by Handler for [SystemMemory]
(20250404/evregion-301)
ACPI Error: Aborting method \_SB.CPUS.CSTA due to previous error
(AE_AML_ALIGNMENT) (20250404/psparse-529)
ACPI Error: Aborting method \_SB.CPUS.C000._STA due to previous error
(AE_AML_ALIGNMENT) (20250404/psparse-529)
ACPI Error: Method execution failed \_SB.CPUS.C000._STA due to previous error
(AE_AML_ALIGNMENT) (20250404/uteval-68)
VIRT_GED_MEM_ADDR and VIRT_GED_REG_ADDR are already aligned now, but use
QEMU_ALIGN_UP() to explicitly align them can make code more robust.
Reported-by: Nathan Chancellor <[email protected]>
Suggested-by: WANG Rui <[email protected]>
Signed-off-by: Huacai Chen <[email protected]>
---
include/hw/loongarch/virt.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/hw/loongarch/virt.h b/include/hw/loongarch/virt.h
index 602feab0f0..be4f5d603f 100644
--- a/include/hw/loongarch/virt.h
+++ b/include/hw/loongarch/virt.h
@@ -28,9 +28,9 @@
#define VIRT_LOWMEM_SIZE 0x10000000
#define VIRT_HIGHMEM_BASE 0x80000000
#define VIRT_GED_EVT_ADDR 0x100e0000
-#define VIRT_GED_MEM_ADDR (VIRT_GED_EVT_ADDR + ACPI_GED_EVT_SEL_LEN)
-#define VIRT_GED_REG_ADDR (VIRT_GED_MEM_ADDR + MEMORY_HOTPLUG_IO_LEN)
-#define VIRT_GED_CPUHP_ADDR (VIRT_GED_REG_ADDR + ACPI_GED_REG_COUNT)
+#define VIRT_GED_MEM_ADDR QEMU_ALIGN_UP(VIRT_GED_EVT_ADDR +
ACPI_GED_EVT_SEL_LEN, 4)
+#define VIRT_GED_REG_ADDR QEMU_ALIGN_UP(VIRT_GED_MEM_ADDR +
MEMORY_HOTPLUG_IO_LEN, 4)
+#define VIRT_GED_CPUHP_ADDR QEMU_ALIGN_UP(VIRT_GED_REG_ADDR +
ACPI_GED_REG_COUNT, 4)
#define COMMAND_LINE_SIZE 512