* [PATCH REPOST v4 1/4] acpi: Add machine option to disable SPCR table
2025-05-28 10:53 [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Li Chen
@ 2025-05-28 10:53 ` Li Chen
2025-05-28 10:53 ` [PATCH REPOST v4 2/4] tests/qtest/bios-tables-test: Add test for disabling SPCR on AArch64 Li Chen
` (4 subsequent siblings)
5 siblings, 0 replies; 18+ messages in thread
From: Li Chen @ 2025-05-28 10:53 UTC (permalink / raw)
To: Peter Maydell, Shannon Zhao, Michael S. Tsirkin, Igor Mammedov,
Ani Sinha, Eduardo Habkost, Marcel Apfelbaum,
Philippe Mathieu-Daudé, Yanan Wang, Zhao Liu, Song Gao,
Jiaxun Yang, Sunil V L, Palmer Dabbelt, Alistair Francis,
Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
Cc: Li Chen, Bibo Mao, Gavin Shan
From: Li Chen <chenl311@chinatelecom.cn>
The ACPI SPCR (Serial Port Console Redirection) table allows firmware
to specify a preferred serial console device to the operating system.
On ARM64 systems, Linux by default respects this table: even if the
kernel command line does not include a hardware serial console (e.g.,
"console=ttyAMA0"), the kernel still register the serial device
referenced by SPCR as a printk console.
While this behavior is standard-compliant, it can lead to situations
where guest console behavior is influenced by platform firmware rather
than user-specified configuration. To make guest console behavior more
predictable and under user control, this patch introduces a machine
option to explicitly disable SPCR table exposure:
-machine spcr=off
By default, the option is enabled (spcr=on), preserving existing
behavior. When disabled, QEMU will omit the SPCR table from the guest's
ACPI namespace, ensuring that only consoles explicitly declared in the
kernel command line are registered.
Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
Reviewed-by: Bibo Mao <maobibo@loongson.cn>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Gavin Shan <gshan@redhat.com>
Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
---
Notes:
Changes since v3: 1. Add Reviewed-by from Sunil V L <sunilvl@ventanamicro.com>
2. rename enable_spcr to acpi_spcr_enabled as
suggested by Philippe Mathieu-Daudé
Changes since V2: Add Reviewed-by from Gavin Shan <gshan@redhat.com>
for the first patch and fix style issue.
Changes since V1: add Reviewed-by and Acked-by
hw/arm/virt-acpi-build.c | 5 ++++-
hw/core/machine.c | 22 ++++++++++++++++++++++
hw/loongarch/virt-acpi-build.c | 4 +++-
hw/riscv/virt-acpi-build.c | 5 ++++-
include/hw/boards.h | 1 +
qemu-options.hx | 5 +++++
6 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 7e8e0f0298..d77d16cbd3 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -936,7 +936,10 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
}
acpi_add_table(table_offsets, tables_blob);
- spcr_setup(tables_blob, tables->linker, vms);
+
+ if (ms->acpi_spcr_enabled) {
+ spcr_setup(tables_blob, tables->linker, vms);
+ }
acpi_add_table(table_offsets, tables_blob);
build_dbg2(tables_blob, tables->linker, vms);
diff --git a/hw/core/machine.c b/hw/core/machine.c
index c3f3a5020d..4438eeff54 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -595,6 +595,20 @@ static void machine_set_nvdimm(Object *obj, bool value, Error **errp)
ms->nvdimms_state->is_enabled = value;
}
+static bool machine_get_spcr(Object *obj, Error **errp)
+{
+ MachineState *ms = MACHINE(obj);
+
+ return ms->acpi_spcr_enabled;
+}
+
+static void machine_set_spcr(Object *obj, bool value, Error **errp)
+{
+ MachineState *ms = MACHINE(obj);
+
+ ms->acpi_spcr_enabled = value;
+}
+
static bool machine_get_hmat(Object *obj, Error **errp)
{
MachineState *ms = MACHINE(obj);
@@ -1299,6 +1313,14 @@ static void machine_initfn(Object *obj)
"Table (HMAT)");
}
+ /* SPCR */
+ ms->acpi_spcr_enabled = true;
+ object_property_add_bool(obj, "spcr", machine_get_spcr, machine_set_spcr);
+ object_property_set_description(obj, "spcr",
+ "Set on/off to enable/disable "
+ "ACPI Serial Port Console Redirection "
+ "Table (spcr)");
+
/* default to mc->default_cpus */
ms->smp.cpus = mc->default_cpus;
ms->smp.max_cpus = mc->default_cpus;
diff --git a/hw/loongarch/virt-acpi-build.c b/hw/loongarch/virt-acpi-build.c
index 073b6de75c..15a56280a0 100644
--- a/hw/loongarch/virt-acpi-build.c
+++ b/hw/loongarch/virt-acpi-build.c
@@ -557,7 +557,9 @@ static void acpi_build(AcpiBuildTables *tables, MachineState *machine)
acpi_add_table(table_offsets, tables_blob);
build_srat(tables_blob, tables->linker, machine);
acpi_add_table(table_offsets, tables_blob);
- spcr_setup(tables_blob, tables->linker, machine);
+
+ if (machine->acpi_spcr_enabled)
+ spcr_setup(tables_blob, tables->linker, machine);
if (machine->numa_state->num_nodes) {
if (machine->numa_state->have_numa_distance) {
diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c
index 8b5683dbde..ee1416d264 100644
--- a/hw/riscv/virt-acpi-build.c
+++ b/hw/riscv/virt-acpi-build.c
@@ -894,7 +894,10 @@ static void virt_acpi_build(RISCVVirtState *s, AcpiBuildTables *tables)
}
acpi_add_table(table_offsets, tables_blob);
- spcr_setup(tables_blob, tables->linker, s);
+
+ if (ms->acpi_spcr_enabled) {
+ spcr_setup(tables_blob, tables->linker, s);
+ }
acpi_add_table(table_offsets, tables_blob);
{
diff --git a/include/hw/boards.h b/include/hw/boards.h
index a7b1fcffae..e29fadd300 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -444,6 +444,7 @@ struct MachineState {
SmpCache smp_cache;
struct NVDIMMState *nvdimms_state;
struct NumaState *numa_state;
+ bool acpi_spcr_enabled;
};
/*
diff --git a/qemu-options.hx b/qemu-options.hx
index 7eb8e02b4b..eac8730692 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -38,6 +38,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
" nvdimm=on|off controls NVDIMM support (default=off)\n"
" memory-encryption=@var{} memory encryption object to use (default=none)\n"
" hmat=on|off controls ACPI HMAT support (default=off)\n"
+ " spcr=on|off controls ACPI SPCR support (default=on)\n"
#ifdef CONFIG_POSIX
" aux-ram-share=on|off allocate auxiliary guest RAM as shared (default: off)\n"
#endif
@@ -105,6 +106,10 @@ SRST
Enables or disables ACPI Heterogeneous Memory Attribute Table
(HMAT) support. The default is off.
+ ``spcr=on|off``
+ Enables or disables ACPI Serial Port Console Redirection Table
+ (SPCR) support. The default is on.
+
``aux-ram-share=on|off``
Allocate auxiliary guest RAM as an anonymous file that is
shareable with an external process. This option applies to
--
2.49.0
^ permalink raw reply related [flat|nested] 18+ messages in thread* [PATCH REPOST v4 2/4] tests/qtest/bios-tables-test: Add test for disabling SPCR on AArch64
2025-05-28 10:53 [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Li Chen
2025-05-28 10:53 ` [PATCH REPOST v4 1/4] " Li Chen
@ 2025-05-28 10:53 ` Li Chen
2025-05-28 10:53 ` [PATCH REPOST v4 3/4] tests/qtest/bios-tables-test: Add test for disabling SPCR on RISC-V Li Chen
` (3 subsequent siblings)
5 siblings, 0 replies; 18+ messages in thread
From: Li Chen @ 2025-05-28 10:53 UTC (permalink / raw)
To: Peter Maydell, Shannon Zhao, Michael S. Tsirkin, Igor Mammedov,
Ani Sinha, Eduardo Habkost, Marcel Apfelbaum,
Philippe Mathieu-Daudé, Yanan Wang, Zhao Liu, Song Gao,
Jiaxun Yang, Sunil V L, Palmer Dabbelt, Alistair Francis,
Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
Cc: Li Chen
From: Li Chen <chenl311@chinatelecom.cn>
Add ACPI SPCR table test case for ARM when SPCR was off.
Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
---
tests/qtest/bios-tables-test.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
index 0a333ec435..d2a1aa7fb3 100644
--- a/tests/qtest/bios-tables-test.c
+++ b/tests/qtest/bios-tables-test.c
@@ -1789,6 +1789,24 @@ static void test_acpi_aarch64_virt_tcg_pxb(void)
free_test_data(&data);
}
+static void test_acpi_aarch64_virt_tcg_acpi_spcr(void)
+{
+ test_data data = {
+ .machine = "virt",
+ .arch = "aarch64",
+ .tcg_only = true,
+ .uefi_fl1 = "pc-bios/edk2-aarch64-code.fd",
+ .uefi_fl2 = "pc-bios/edk2-arm-vars.fd",
+ .cd = "tests/data/uefi-boot-images/bios-tables-test.aarch64.iso.qcow2",
+ .ram_start = 0x40000000ULL,
+ .scan_len = 128ULL * 1024 * 1024,
+ .variant = ".acpispcr",
+ };
+
+ test_acpi_one("-cpu cortex-a57 "
+ " -machine spcr=off", &data);
+ free_test_data(&data);
+}
static void test_acpi_tcg_acpi_hmat(const char *machine, const char *arch)
{
test_data data = {};
@@ -2583,6 +2601,8 @@ int main(int argc, char *argv[])
qtest_add_func("acpi/virt/pxb", test_acpi_aarch64_virt_tcg_pxb);
qtest_add_func("acpi/virt/oem-fields",
test_acpi_aarch64_virt_oem_fields);
+ qtest_add_func("acpi/virt/acpispcr",
+ test_acpi_aarch64_virt_tcg_acpi_spcr);
if (qtest_has_device("virtio-iommu-pci")) {
qtest_add_func("acpi/virt/viot", test_acpi_aarch64_virt_viot);
}
--
2.49.0
^ permalink raw reply related [flat|nested] 18+ messages in thread* [PATCH REPOST v4 3/4] tests/qtest/bios-tables-test: Add test for disabling SPCR on RISC-V
2025-05-28 10:53 [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Li Chen
2025-05-28 10:53 ` [PATCH REPOST v4 1/4] " Li Chen
2025-05-28 10:53 ` [PATCH REPOST v4 2/4] tests/qtest/bios-tables-test: Add test for disabling SPCR on AArch64 Li Chen
@ 2025-05-28 10:53 ` Li Chen
2025-05-28 10:53 ` [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware Li Chen
` (2 subsequent siblings)
5 siblings, 0 replies; 18+ messages in thread
From: Li Chen @ 2025-05-28 10:53 UTC (permalink / raw)
To: Peter Maydell, Shannon Zhao, Michael S. Tsirkin, Igor Mammedov,
Ani Sinha, Eduardo Habkost, Marcel Apfelbaum,
Philippe Mathieu-Daudé, Yanan Wang, Zhao Liu, Song Gao,
Jiaxun Yang, Sunil V L, Palmer Dabbelt, Alistair Francis,
Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
Cc: Li Chen
From: Li Chen <chenl311@chinatelecom.cn>
Add ACPI SPCR table test case for RISC-V when SPCR was off.
Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
---
Notes:
Changes since v3: Add Reviewed-by from Sunil V L <sunilvl@ventanamicro.com>
tests/qtest/bios-tables-test.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
index d2a1aa7fb3..44de152a36 100644
--- a/tests/qtest/bios-tables-test.c
+++ b/tests/qtest/bios-tables-test.c
@@ -1807,6 +1807,26 @@ static void test_acpi_aarch64_virt_tcg_acpi_spcr(void)
" -machine spcr=off", &data);
free_test_data(&data);
}
+
+static void test_acpi_riscv_virt_tcg_acpi_spcr(void)
+{
+ test_data data = {
+ .machine = "virt",
+ .arch = "riscv64",
+ .tcg_only = true,
+ .uefi_fl1 = "pc-bios/edk2-riscv-code.fd",
+ .uefi_fl2 = "pc-bios/edk2-riscv-vars.fd",
+ .cd = "tests/data/uefi-boot-images/bios-tables-test.riscv64.iso.qcow2",
+ .ram_start = 0x80000000ULL,
+ .scan_len = 128ULL * 1024 * 1024,
+ .variant = ".acpispcr",
+ };
+
+ test_acpi_one("-cpu rva22s64 "
+ "-machine spcr=off", &data);
+ free_test_data(&data);
+}
+
static void test_acpi_tcg_acpi_hmat(const char *machine, const char *arch)
{
test_data data = {};
@@ -2612,6 +2632,8 @@ int main(int argc, char *argv[])
qtest_add_func("acpi/virt", test_acpi_riscv64_virt_tcg);
qtest_add_func("acpi/virt/numamem",
test_acpi_riscv64_virt_tcg_numamem);
+ qtest_add_func("acpi/virt/acpispcr",
+ test_acpi_riscv_virt_tcg_acpi_spcr);
}
}
ret = g_test_run();
--
2.49.0
^ permalink raw reply related [flat|nested] 18+ messages in thread* [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-05-28 10:53 [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Li Chen
` (2 preceding siblings ...)
2025-05-28 10:53 ` [PATCH REPOST v4 3/4] tests/qtest/bios-tables-test: Add test for disabling SPCR on RISC-V Li Chen
@ 2025-05-28 10:53 ` Li Chen
2025-07-14 18:45 ` Michael S. Tsirkin
2025-05-30 12:10 ` [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Michael S. Tsirkin
2025-06-19 11:47 ` Li Chen
5 siblings, 1 reply; 18+ messages in thread
From: Li Chen @ 2025-05-28 10:53 UTC (permalink / raw)
To: Peter Maydell, Shannon Zhao, Michael S. Tsirkin, Igor Mammedov,
Ani Sinha, Eduardo Habkost, Marcel Apfelbaum,
Philippe Mathieu-Daudé, Yanan Wang, Zhao Liu, Song Gao,
Jiaxun Yang, Sunil V L, Palmer Dabbelt, Alistair Francis,
Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
Cc: Li Chen
From: Li Chen <chenl311@chinatelecom.cn>
The virt machines always instantiate a PL011/16550 at UART0 and
describe it in ACPI (DSDT device node plus optional SPCR table). When
the command line contains “-serial none” there is no backend attached to
that UART, yet the guest still discovers it via ACPI and may try to use
it as a console, causing unexpected results.
And also explicitly add "-serial stdio" in bios-tables-test.c to allow
serial device creation, otherwise DSDT assert would get failure because
"-nodefaults" will not create uart device by default:
```
stderr:
acpi-test: Warning! DSDT binary file mismatch. Actual [aml:/tmp/aml-BMOL72], Expected [aml:tests/data/acpi/aarch64/virt/DSDT].
See source file tests/qtest/bios-tables-test.c for instructions on how to update expected files.
acpi-test: Warning! DSDT mismatch. Actual [asl:/tmp/asl-RNOL72.dsl, aml:/tmp/aml-BMOL72], Expected [asl:/tmp/asl-ZVQL72.dsl, aml:tests/data/acpi/aarch64/virt/DS
DT].
```
Suggested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
---
Notes:
Changes since v3: 1. Add Reviewed-by from Sunil V L <sunilvl@ventanamicro.com>
2. Explicitly add "-serial stdio" to pass DSDT assert
hw/arm/virt-acpi-build.c | 15 +++++++++------
hw/riscv/virt-acpi-build.c | 7 +++++--
include/system/system.h | 2 ++
system/vl.c | 5 +++++
tests/qtest/bios-tables-test.c | 5 +++--
5 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index d77d16cbd3..c26aedb1b1 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -59,6 +59,7 @@
#include "hw/acpi/viot.h"
#include "hw/virtio/virtio-acpi.h"
#include "target/arm/multiprocessing.h"
+#include "system/system.h"
#define ARM_SPI_BASE 32
@@ -821,11 +822,13 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
*/
scope = aml_scope("\\_SB");
acpi_dsdt_add_cpus(scope, vms);
- acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0],
- (irqmap[VIRT_UART0] + ARM_SPI_BASE), 0);
- if (vms->second_ns_uart_present) {
- acpi_dsdt_add_uart(scope, &memmap[VIRT_UART1],
- (irqmap[VIRT_UART1] + ARM_SPI_BASE), 1);
+ if (serial_exist()) {
+ acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0],
+ (irqmap[VIRT_UART0] + ARM_SPI_BASE), 0);
+ if (vms->second_ns_uart_present) {
+ acpi_dsdt_add_uart(scope, &memmap[VIRT_UART1],
+ (irqmap[VIRT_UART1] + ARM_SPI_BASE), 1);
+ }
}
if (vmc->acpi_expose_flash) {
acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]);
@@ -937,7 +940,7 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
acpi_add_table(table_offsets, tables_blob);
- if (ms->acpi_spcr_enabled) {
+ if (ms->acpi_spcr_enabled && serial_exist()) {
spcr_setup(tables_blob, tables->linker, vms);
}
diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c
index ee1416d264..80bf3c3cec 100644
--- a/hw/riscv/virt-acpi-build.c
+++ b/hw/riscv/virt-acpi-build.c
@@ -39,6 +39,7 @@
#include "qapi/error.h"
#include "qemu/error-report.h"
#include "system/reset.h"
+#include "system/system.h"
#define ACPI_BUILD_TABLE_SIZE 0x20000
#define ACPI_BUILD_INTC_ID(socket, index) ((socket << 24) | (index))
@@ -474,7 +475,9 @@ static void build_dsdt(GArray *table_data,
memmap[VIRT_APLIC_S].size, "RSCV0002");
}
- acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0], UART0_IRQ);
+ if (serial_exist())
+ acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0], UART0_IRQ);
+
if (virt_is_iommu_sys_enabled(s)) {
acpi_dsdt_add_iommu_sys(scope, &memmap[VIRT_IOMMU_SYS], IOMMU_SYS_IRQ);
}
@@ -895,7 +898,7 @@ static void virt_acpi_build(RISCVVirtState *s, AcpiBuildTables *tables)
acpi_add_table(table_offsets, tables_blob);
- if (ms->acpi_spcr_enabled) {
+ if (ms->acpi_spcr_enabled && serial_exist()) {
spcr_setup(tables_blob, tables->linker, s);
}
diff --git a/include/system/system.h b/include/system/system.h
index a7effe7dfd..ca1af38432 100644
--- a/include/system/system.h
+++ b/include/system/system.h
@@ -75,6 +75,8 @@ extern unsigned int nb_prom_envs;
/* Return the Chardev for serial port i, or NULL if none */
Chardev *serial_hd(int i);
+bool serial_exist(void);
+
/* parallel ports */
#define MAX_PARALLEL_PORTS 3
diff --git a/system/vl.c b/system/vl.c
index fd402b8ff8..e340ee3a95 100644
--- a/system/vl.c
+++ b/system/vl.c
@@ -1485,6 +1485,11 @@ Chardev *serial_hd(int i)
return NULL;
}
+bool serial_exist(void)
+{
+ return serial_hd(0) ? true : false;
+}
+
static bool parallel_parse(const char *devname, Error **errp)
{
static int index = 0;
diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
index 44de152a36..452566fa86 100644
--- a/tests/qtest/bios-tables-test.c
+++ b/tests/qtest/bios-tables-test.c
@@ -824,10 +824,11 @@ static char *test_acpi_create_args(test_data *data, const char *params)
/*
* TODO: convert '-drive if=pflash' to new syntax (see e33763be7cd3)
* when arm/virt boad starts to support it.
+ * NOTE: Explicitly add "-serial stdio" to enable uart in DSDT.
*/
if (data->cd) {
args = g_strdup_printf("-machine %s%s %s -accel tcg "
- "-nodefaults -nographic "
+ "-nodefaults -serial stdio -nographic "
"-drive if=pflash,format=raw,file=%s,readonly=on "
"-drive if=pflash,format=raw,file=%s,snapshot=on -cdrom %s %s",
data->machine, data->machine_param ?: "",
@@ -835,7 +836,7 @@ static char *test_acpi_create_args(test_data *data, const char *params)
data->uefi_fl1, data->uefi_fl2, data->cd, params ? params : "");
} else {
args = g_strdup_printf("-machine %s%s %s -accel tcg "
- "-nodefaults -nographic "
+ "-nodefaults -serial stdio -nographic "
"-drive if=pflash,format=raw,file=%s,readonly=on "
"-drive if=pflash,format=raw,file=%s,snapshot=on %s",
data->machine, data->machine_param ?: "",
--
2.49.0
^ permalink raw reply related [flat|nested] 18+ messages in thread* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-05-28 10:53 ` [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware Li Chen
@ 2025-07-14 18:45 ` Michael S. Tsirkin
2025-07-16 11:41 ` Li Chen
0 siblings, 1 reply; 18+ messages in thread
From: Michael S. Tsirkin @ 2025-07-14 18:45 UTC (permalink / raw)
To: Li Chen
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum, Philippe Mathieu-Daudé,
Yanan Wang, Zhao Liu, Song Gao, Jiaxun Yang, Sunil V L,
Palmer Dabbelt, Alistair Francis, Weiwei Li, qemu-arm, qemu-devel,
qemu-riscv, Li Chen
On Wed, May 28, 2025 at 06:53:38PM +0800, Li Chen wrote:
> From: Li Chen <chenl311@chinatelecom.cn>
>
> The virt machines always instantiate a PL011/16550 at UART0 and
> describe it in ACPI (DSDT device node plus optional SPCR table). When
> the command line contains “-serial none” there is no backend attached to
> that UART, yet the guest still discovers it via ACPI and may try to use
> it as a console, causing unexpected results.
>
> And also explicitly add "-serial stdio" in bios-tables-test.c to allow
> serial device creation, otherwise DSDT assert would get failure because
> "-nodefaults" will not create uart device by default:
>
> ```
> stderr:
> acpi-test: Warning! DSDT binary file mismatch. Actual [aml:/tmp/aml-BMOL72], Expected [aml:tests/data/acpi/aarch64/virt/DSDT].
> See source file tests/qtest/bios-tables-test.c for instructions on how to update expected files.
> acpi-test: Warning! DSDT mismatch. Actual [asl:/tmp/asl-RNOL72.dsl, aml:/tmp/aml-BMOL72], Expected [asl:/tmp/asl-ZVQL72.dsl, aml:tests/data/acpi/aarch64/virt/DS
> DT].
> ```
>
> Suggested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
> Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
will need to be rebased updating loongarch too, now.
> ---
>
> Notes:
> Changes since v3: 1. Add Reviewed-by from Sunil V L <sunilvl@ventanamicro.com>
> 2. Explicitly add "-serial stdio" to pass DSDT assert
>
> hw/arm/virt-acpi-build.c | 15 +++++++++------
> hw/riscv/virt-acpi-build.c | 7 +++++--
> include/system/system.h | 2 ++
> system/vl.c | 5 +++++
> tests/qtest/bios-tables-test.c | 5 +++--
> 5 files changed, 24 insertions(+), 10 deletions(-)
>
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index d77d16cbd3..c26aedb1b1 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -59,6 +59,7 @@
> #include "hw/acpi/viot.h"
> #include "hw/virtio/virtio-acpi.h"
> #include "target/arm/multiprocessing.h"
> +#include "system/system.h"
>
> #define ARM_SPI_BASE 32
>
> @@ -821,11 +822,13 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> */
> scope = aml_scope("\\_SB");
> acpi_dsdt_add_cpus(scope, vms);
> - acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0],
> - (irqmap[VIRT_UART0] + ARM_SPI_BASE), 0);
> - if (vms->second_ns_uart_present) {
> - acpi_dsdt_add_uart(scope, &memmap[VIRT_UART1],
> - (irqmap[VIRT_UART1] + ARM_SPI_BASE), 1);
> + if (serial_exist()) {
> + acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0],
> + (irqmap[VIRT_UART0] + ARM_SPI_BASE), 0);
> + if (vms->second_ns_uart_present) {
> + acpi_dsdt_add_uart(scope, &memmap[VIRT_UART1],
> + (irqmap[VIRT_UART1] + ARM_SPI_BASE), 1);
> + }
> }
> if (vmc->acpi_expose_flash) {
> acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]);
> @@ -937,7 +940,7 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
>
> acpi_add_table(table_offsets, tables_blob);
>
> - if (ms->acpi_spcr_enabled) {
> + if (ms->acpi_spcr_enabled && serial_exist()) {
> spcr_setup(tables_blob, tables->linker, vms);
> }
>
> diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c
> index ee1416d264..80bf3c3cec 100644
> --- a/hw/riscv/virt-acpi-build.c
> +++ b/hw/riscv/virt-acpi-build.c
> @@ -39,6 +39,7 @@
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> #include "system/reset.h"
> +#include "system/system.h"
>
> #define ACPI_BUILD_TABLE_SIZE 0x20000
> #define ACPI_BUILD_INTC_ID(socket, index) ((socket << 24) | (index))
> @@ -474,7 +475,9 @@ static void build_dsdt(GArray *table_data,
> memmap[VIRT_APLIC_S].size, "RSCV0002");
> }
>
> - acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0], UART0_IRQ);
> + if (serial_exist())
> + acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0], UART0_IRQ);
> +
coding style violation
> if (virt_is_iommu_sys_enabled(s)) {
> acpi_dsdt_add_iommu_sys(scope, &memmap[VIRT_IOMMU_SYS], IOMMU_SYS_IRQ);
> }
> @@ -895,7 +898,7 @@ static void virt_acpi_build(RISCVVirtState *s, AcpiBuildTables *tables)
>
> acpi_add_table(table_offsets, tables_blob);
>
> - if (ms->acpi_spcr_enabled) {
> + if (ms->acpi_spcr_enabled && serial_exist()) {
> spcr_setup(tables_blob, tables->linker, s);
> }
>
> diff --git a/include/system/system.h b/include/system/system.h
> index a7effe7dfd..ca1af38432 100644
> --- a/include/system/system.h
> +++ b/include/system/system.h
> @@ -75,6 +75,8 @@ extern unsigned int nb_prom_envs;
> /* Return the Chardev for serial port i, or NULL if none */
> Chardev *serial_hd(int i);
>
> +bool serial_exist(void);
> +
> /* parallel ports */
>
> #define MAX_PARALLEL_PORTS 3
> diff --git a/system/vl.c b/system/vl.c
> index fd402b8ff8..e340ee3a95 100644
> --- a/system/vl.c
> +++ b/system/vl.c
> @@ -1485,6 +1485,11 @@ Chardev *serial_hd(int i)
> return NULL;
> }
>
> +bool serial_exist(void)
> +{
> + return serial_hd(0) ? true : false;
> +}
> +
serial_exists
> static bool parallel_parse(const char *devname, Error **errp)
> {
> static int index = 0;
> diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
> index 44de152a36..452566fa86 100644
> --- a/tests/qtest/bios-tables-test.c
> +++ b/tests/qtest/bios-tables-test.c
> @@ -824,10 +824,11 @@ static char *test_acpi_create_args(test_data *data, const char *params)
> /*
> * TODO: convert '-drive if=pflash' to new syntax (see e33763be7cd3)
> * when arm/virt boad starts to support it.
> + * NOTE: Explicitly add "-serial stdio" to enable uart in DSDT.
> */
> if (data->cd) {
> args = g_strdup_printf("-machine %s%s %s -accel tcg "
> - "-nodefaults -nographic "
> + "-nodefaults -serial stdio -nographic "
> "-drive if=pflash,format=raw,file=%s,readonly=on "
> "-drive if=pflash,format=raw,file=%s,snapshot=on -cdrom %s %s",
> data->machine, data->machine_param ?: "",
> @@ -835,7 +836,7 @@ static char *test_acpi_create_args(test_data *data, const char *params)
> data->uefi_fl1, data->uefi_fl2, data->cd, params ? params : "");
> } else {
> args = g_strdup_printf("-machine %s%s %s -accel tcg "
> - "-nodefaults -nographic "
> + "-nodefaults -serial stdio -nographic "
> "-drive if=pflash,format=raw,file=%s,readonly=on "
> "-drive if=pflash,format=raw,file=%s,snapshot=on %s",
> data->machine, data->machine_param ?: "",
> --
> 2.49.0
^ permalink raw reply [flat|nested] 18+ messages in thread* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-07-14 18:45 ` Michael S. Tsirkin
@ 2025-07-16 11:41 ` Li Chen
2025-07-16 11:42 ` Michael S. Tsirkin
0 siblings, 1 reply; 18+ messages in thread
From: Li Chen @ 2025-07-16 11:41 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv,
Li Chen
Hi Michael,
Thanks for your kind review! All issues below have been fixed in v5:
https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
---- On Tue, 15 Jul 2025 02:45:31 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> On Wed, May 28, 2025 at 06:53:38PM +0800, Li Chen wrote:
> > From: Li Chen <chenl311@chinatelecom.cn>
> >
> > The virt machines always instantiate a PL011/16550 at UART0 and
> > describe it in ACPI (DSDT device node plus optional SPCR table). When
> > the command line contains “-serial none” there is no backend attached to
> > that UART, yet the guest still discovers it via ACPI and may try to use
> > it as a console, causing unexpected results.
> >
> > And also explicitly add "-serial stdio" in bios-tables-test.c to allow
> > serial device creation, otherwise DSDT assert would get failure because
> > "-nodefaults" will not create uart device by default:
> >
> > ```
> > stderr:
> > acpi-test: Warning! DSDT binary file mismatch. Actual [aml:/tmp/aml-BMOL72], Expected [aml:tests/data/acpi/aarch64/virt/DSDT].
> > See source file tests/qtest/bios-tables-test.c for instructions on how to update expected files.
> > acpi-test: Warning! DSDT mismatch. Actual [asl:/tmp/asl-RNOL72.dsl, aml:/tmp/aml-BMOL72], Expected [asl:/tmp/asl-ZVQL72.dsl, aml:tests/data/acpi/aarch64/virt/DS
> > DT].
> > ```
> >
> > Suggested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> > Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
> > Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
>
>
> will need to be rebased updating loongarch too, now.
>
>
> > ---
> >
> > Notes:
> > Changes since v3: 1. Add Reviewed-by from Sunil V L <sunilvl@ventanamicro.com>
> > 2. Explicitly add "-serial stdio" to pass DSDT assert
> >
> > hw/arm/virt-acpi-build.c | 15 +++++++++------
> > hw/riscv/virt-acpi-build.c | 7 +++++--
> > include/system/system.h | 2 ++
> > system/vl.c | 5 +++++
> > tests/qtest/bios-tables-test.c | 5 +++--
> > 5 files changed, 24 insertions(+), 10 deletions(-)
> >
> > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> > index d77d16cbd3..c26aedb1b1 100644
> > --- a/hw/arm/virt-acpi-build.c
> > +++ b/hw/arm/virt-acpi-build.c
> > @@ -59,6 +59,7 @@
> > #include "hw/acpi/viot.h"
> > #include "hw/virtio/virtio-acpi.h"
> > #include "target/arm/multiprocessing.h"
> > +#include "system/system.h"
> >
> > #define ARM_SPI_BASE 32
> >
> > @@ -821,11 +822,13 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
> > */
> > scope = aml_scope("\\_SB");
> > acpi_dsdt_add_cpus(scope, vms);
> > - acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0],
> > - (irqmap[VIRT_UART0] + ARM_SPI_BASE), 0);
> > - if (vms->second_ns_uart_present) {
> > - acpi_dsdt_add_uart(scope, &memmap[VIRT_UART1],
> > - (irqmap[VIRT_UART1] + ARM_SPI_BASE), 1);
> > + if (serial_exist()) {
> > + acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0],
> > + (irqmap[VIRT_UART0] + ARM_SPI_BASE), 0);
> > + if (vms->second_ns_uart_present) {
> > + acpi_dsdt_add_uart(scope, &memmap[VIRT_UART1],
> > + (irqmap[VIRT_UART1] + ARM_SPI_BASE), 1);
> > + }
> > }
> > if (vmc->acpi_expose_flash) {
> > acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]);
> > @@ -937,7 +940,7 @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
> >
> > acpi_add_table(table_offsets, tables_blob);
> >
> > - if (ms->acpi_spcr_enabled) {
> > + if (ms->acpi_spcr_enabled && serial_exist()) {
> > spcr_setup(tables_blob, tables->linker, vms);
> > }
> >
> > diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c
> > index ee1416d264..80bf3c3cec 100644
> > --- a/hw/riscv/virt-acpi-build.c
> > +++ b/hw/riscv/virt-acpi-build.c
> > @@ -39,6 +39,7 @@
> > #include "qapi/error.h"
> > #include "qemu/error-report.h"
> > #include "system/reset.h"
> > +#include "system/system.h"
> >
> > #define ACPI_BUILD_TABLE_SIZE 0x20000
> > #define ACPI_BUILD_INTC_ID(socket, index) ((socket << 24) | (index))
> > @@ -474,7 +475,9 @@ static void build_dsdt(GArray *table_data,
> > memmap[VIRT_APLIC_S].size, "RSCV0002");
> > }
> >
> > - acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0], UART0_IRQ);
> > + if (serial_exist())
> > + acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0], UART0_IRQ);
> > +
>
> coding style violation
>
> > if (virt_is_iommu_sys_enabled(s)) {
> > acpi_dsdt_add_iommu_sys(scope, &memmap[VIRT_IOMMU_SYS], IOMMU_SYS_IRQ);
> > }
> > @@ -895,7 +898,7 @@ static void virt_acpi_build(RISCVVirtState *s, AcpiBuildTables *tables)
> >
> > acpi_add_table(table_offsets, tables_blob);
> >
> > - if (ms->acpi_spcr_enabled) {
> > + if (ms->acpi_spcr_enabled && serial_exist()) {
> > spcr_setup(tables_blob, tables->linker, s);
> > }
> >
> > diff --git a/include/system/system.h b/include/system/system.h
> > index a7effe7dfd..ca1af38432 100644
> > --- a/include/system/system.h
> > +++ b/include/system/system.h
> > @@ -75,6 +75,8 @@ extern unsigned int nb_prom_envs;
> > /* Return the Chardev for serial port i, or NULL if none */
> > Chardev *serial_hd(int i);
> >
> > +bool serial_exist(void);
> > +
> > /* parallel ports */
> >
> > #define MAX_PARALLEL_PORTS 3
> > diff --git a/system/vl.c b/system/vl.c
> > index fd402b8ff8..e340ee3a95 100644
> > --- a/system/vl.c
> > +++ b/system/vl.c
> > @@ -1485,6 +1485,11 @@ Chardev *serial_hd(int i)
> > return NULL;
> > }
> >
> > +bool serial_exist(void)
> > +{
> > + return serial_hd(0) ? true : false;
> > +}
> > +
>
> serial_exists
>
>
> > static bool parallel_parse(const char *devname, Error **errp)
> > {
> > static int index = 0;
> > diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
> > index 44de152a36..452566fa86 100644
> > --- a/tests/qtest/bios-tables-test.c
> > +++ b/tests/qtest/bios-tables-test.c
> > @@ -824,10 +824,11 @@ static char *test_acpi_create_args(test_data *data, const char *params)
> > /*
> > * TODO: convert '-drive if=pflash' to new syntax (see e33763be7cd3)
> > * when arm/virt boad starts to support it.
> > + * NOTE: Explicitly add "-serial stdio" to enable uart in DSDT.
> > */
> > if (data->cd) {
> > args = g_strdup_printf("-machine %s%s %s -accel tcg "
> > - "-nodefaults -nographic "
> > + "-nodefaults -serial stdio -nographic "
> > "-drive if=pflash,format=raw,file=%s,readonly=on "
> > "-drive if=pflash,format=raw,file=%s,snapshot=on -cdrom %s %s",
> > data->machine, data->machine_param ?: "",
> > @@ -835,7 +836,7 @@ static char *test_acpi_create_args(test_data *data, const char *params)
> > data->uefi_fl1, data->uefi_fl2, data->cd, params ? params : "");
> > } else {
> > args = g_strdup_printf("-machine %s%s %s -accel tcg "
> > - "-nodefaults -nographic "
> > + "-nodefaults -serial stdio -nographic "
> > "-drive if=pflash,format=raw,file=%s,readonly=on "
> > "-drive if=pflash,format=raw,file=%s,snapshot=on %s",
> > data->machine, data->machine_param ?: "",
>
>
>
>
> > --
> > 2.49.0
>
>
Regards,
Li
^ permalink raw reply [flat|nested] 18+ messages in thread* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-07-16 11:41 ` Li Chen
@ 2025-07-16 11:42 ` Michael S. Tsirkin
2025-07-16 11:59 ` Li Chen
0 siblings, 1 reply; 18+ messages in thread
From: Michael S. Tsirkin @ 2025-07-16 11:42 UTC (permalink / raw)
To: Li Chen
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv,
Li Chen
On Wed, Jul 16, 2025 at 07:41:11PM +0800, Li Chen wrote:
> Hi Michael,
>
> Thanks for your kind review! All issues below have been fixed in v5:
> https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
Past soft freeze now: I tagged this but pls remind me after the release
to help make sure it's not lost.
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-07-16 11:42 ` Michael S. Tsirkin
@ 2025-07-16 11:59 ` Li Chen
2025-09-18 23:38 ` Li Chen
0 siblings, 1 reply; 18+ messages in thread
From: Li Chen @ 2025-07-16 11:59 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv,
Li Chen
Hi Michael,
---- On Wed, 16 Jul 2025 19:42:42 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> On Wed, Jul 16, 2025 at 07:41:11PM +0800, Li Chen wrote:
> > Hi Michael,
> >
> > Thanks for your kind review! All issues below have been fixed in v5:
> > https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
>
> Past soft freeze now: I tagged this but pls remind me after the release
> to help make sure it's not lost.
>
Ok.
Regards,
Li
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-07-16 11:59 ` Li Chen
@ 2025-09-18 23:38 ` Li Chen
2025-12-10 12:23 ` Li Chen
0 siblings, 1 reply; 18+ messages in thread
From: Li Chen @ 2025-09-18 23:38 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv,
Li Chen
Hi Michael,
---- On Wed, 16 Jul 2025 19:59:14 +0800 Li Chen <me@linux.beauty> wrote ---
> Hi Michael,
>
> ---- On Wed, 16 Jul 2025 19:42:42 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> > On Wed, Jul 16, 2025 at 07:41:11PM +0800, Li Chen wrote:
> > > Hi Michael,
> > >
> > > Thanks for your kind review! All issues below have been fixed in v5:
> > > https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
> >
> > Past soft freeze now: I tagged this but pls remind me after the release
> > to help make sure it's not lost.
Gentle reminder: This patch is still missing from the latest master branch, but can apply without
any conflict. Can it be included in 10.2?
Regards,
Li.
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-09-18 23:38 ` Li Chen
@ 2025-12-10 12:23 ` Li Chen
2025-12-10 12:53 ` Michael S. Tsirkin
0 siblings, 1 reply; 18+ messages in thread
From: Li Chen @ 2025-12-10 12:23 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
Hi Michael,
---- On Fri, 19 Sep 2025 07:38:56 +0800 Li Chen <me@linux.beauty> wrote ---
> Hi Michael,
>
> ---- On Wed, 16 Jul 2025 19:59:14 +0800 Li Chen <me@linux.beauty> wrote ---
> > Hi Michael,
> >
> > ---- On Wed, 16 Jul 2025 19:42:42 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> > > On Wed, Jul 16, 2025 at 07:41:11PM +0800, Li Chen wrote:
> > > > Hi Michael,
> > > >
> > > > Thanks for your kind review! All issues below have been fixed in v5:
> > > > https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
> > >
> > > Past soft freeze now: I tagged this but pls remind me after the release
> > > to help make sure it's not lost.
>
> Gentle reminder: This patch is still missing from the latest master branch, but can apply without
> any conflict. Can it be included in 10.2?
>
> Regards,
> Li.
>
>
Sorry for bothering again. But I'm still unable to find this patch in the latest master branch, though it applies without conflicts now.
Could it be merged now?
Regards,
Li
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-12-10 12:23 ` Li Chen
@ 2025-12-10 12:53 ` Michael S. Tsirkin
2025-12-11 0:03 ` Li Chen
0 siblings, 1 reply; 18+ messages in thread
From: Michael S. Tsirkin @ 2025-12-10 12:53 UTC (permalink / raw)
To: Li Chen
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
On Wed, Dec 10, 2025 at 08:23:21PM +0800, Li Chen wrote:
> Hi Michael,
>
> ---- On Fri, 19 Sep 2025 07:38:56 +0800 Li Chen <me@linux.beauty> wrote ---
> > Hi Michael,
> >
> > ---- On Wed, 16 Jul 2025 19:59:14 +0800 Li Chen <me@linux.beauty> wrote ---
> > > Hi Michael,
> > >
> > > ---- On Wed, 16 Jul 2025 19:42:42 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> > > > On Wed, Jul 16, 2025 at 07:41:11PM +0800, Li Chen wrote:
> > > > > Hi Michael,
> > > > >
> > > > > Thanks for your kind review! All issues below have been fixed in v5:
> > > > > https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
> > > >
> > > > Past soft freeze now: I tagged this but pls remind me after the release
> > > > to help make sure it's not lost.
> >
> > Gentle reminder: This patch is still missing from the latest master branch, but can apply without
> > any conflict. Can it be included in 10.2?
> >
> > Regards,
> > Li.
> >
> >
>
> Sorry for bothering again. But I'm still unable to find this patch in the latest master branch, though it applies without conflicts now.
>
> Could it be merged now?
>
> Regards,
> Li
you still need to update loongarch, I think. otherwise these tests will
fail.
--
MST
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-12-10 12:53 ` Michael S. Tsirkin
@ 2025-12-11 0:03 ` Li Chen
2025-12-11 7:43 ` Michael S. Tsirkin
0 siblings, 1 reply; 18+ messages in thread
From: Li Chen @ 2025-12-11 0:03 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
Hi Tsirkin,
---- On Wed, 10 Dec 2025 20:53:01 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> On Wed, Dec 10, 2025 at 08:23:21PM +0800, Li Chen wrote:
> > Hi Michael,
> >
> > ---- On Fri, 19 Sep 2025 07:38:56 +0800 Li Chen <me@linux.beauty> wrote ---
> > > Hi Michael,
> > >
> > > ---- On Wed, 16 Jul 2025 19:59:14 +0800 Li Chen <me@linux.beauty> wrote ---
> > > > Hi Michael,
> > > >
> > > > ---- On Wed, 16 Jul 2025 19:42:42 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> > > > > On Wed, Jul 16, 2025 at 07:41:11PM +0800, Li Chen wrote:
> > > > > > Hi Michael,
> > > > > >
> > > > > > Thanks for your kind review! All issues below have been fixed in v5:
> > > > > > https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
> > > > >
> > > > > Past soft freeze now: I tagged this but pls remind me after the release
> > > > > to help make sure it's not lost.
> > >
> > > Gentle reminder: This patch is still missing from the latest master branch, but can apply without
> > > any conflict. Can it be included in 10.2?
> > >
> > > Regards,
> > > Li.
> > >
> > >
> >
> > Sorry for bothering again. But I'm still unable to find this patch in the latest master branch, though it applies without conflicts now.
> >
> > Could it be merged now?
> >
> > Regards,
> > Li
>
> you still need to update loongarch, I think. otherwise these tests will
> fail.
Yes, it seems that tap stdout is polluted by serial stdio.
I'll address the stdout pollution from -serial stdio by redirecting serial output to /dev/null using -serial null in the next version.
This will still create the serial device but prevent it from writing to the console.
Regards,
Li
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-12-11 0:03 ` Li Chen
@ 2025-12-11 7:43 ` Michael S. Tsirkin
2025-12-11 10:25 ` Li Chen
0 siblings, 1 reply; 18+ messages in thread
From: Michael S. Tsirkin @ 2025-12-11 7:43 UTC (permalink / raw)
To: Li Chen
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
On Thu, Dec 11, 2025 at 08:03:05AM +0800, Li Chen wrote:
> Hi Tsirkin,
>
> ---- On Wed, 10 Dec 2025 20:53:01 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> > On Wed, Dec 10, 2025 at 08:23:21PM +0800, Li Chen wrote:
> > > Hi Michael,
> > >
> > > ---- On Fri, 19 Sep 2025 07:38:56 +0800 Li Chen <me@linux.beauty> wrote ---
> > > > Hi Michael,
> > > >
> > > > ---- On Wed, 16 Jul 2025 19:59:14 +0800 Li Chen <me@linux.beauty> wrote ---
> > > > > Hi Michael,
> > > > >
> > > > > ---- On Wed, 16 Jul 2025 19:42:42 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> > > > > > On Wed, Jul 16, 2025 at 07:41:11PM +0800, Li Chen wrote:
> > > > > > > Hi Michael,
> > > > > > >
> > > > > > > Thanks for your kind review! All issues below have been fixed in v5:
> > > > > > > https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
> > > > > >
> > > > > > Past soft freeze now: I tagged this but pls remind me after the release
> > > > > > to help make sure it's not lost.
> > > >
> > > > Gentle reminder: This patch is still missing from the latest master branch, but can apply without
> > > > any conflict. Can it be included in 10.2?
> > > >
> > > > Regards,
> > > > Li.
> > > >
> > > >
> > >
> > > Sorry for bothering again. But I'm still unable to find this patch in the latest master branch, though it applies without conflicts now.
> > >
> > > Could it be merged now?
> > >
> > > Regards,
> > > Li
> >
> > you still need to update loongarch, I think. otherwise these tests will
> > fail.
>
> Yes, it seems that tap stdout is polluted by serial stdio.
>
> I'll address the stdout pollution from -serial stdio by redirecting serial output to /dev/null using -serial null in the next version.
> This will still create the serial device but prevent it from writing to the console.
>
> Regards,
>
> Li
I don't know about that, what I meant is that loongaarch also has SPCR
so it's expected tables have to be updated.
--
MST
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware
2025-12-11 7:43 ` Michael S. Tsirkin
@ 2025-12-11 10:25 ` Li Chen
0 siblings, 0 replies; 18+ messages in thread
From: Li Chen @ 2025-12-11 10:25 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
Hi Michael,
---- On Thu, 11 Dec 2025 15:43:45 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> On Thu, Dec 11, 2025 at 08:03:05AM +0800, Li Chen wrote:
> > Hi Tsirkin,
> >
> > ---- On Wed, 10 Dec 2025 20:53:01 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> > > On Wed, Dec 10, 2025 at 08:23:21PM +0800, Li Chen wrote:
> > > > Hi Michael,
> > > >
> > > > ---- On Fri, 19 Sep 2025 07:38:56 +0800 Li Chen <me@linux.beauty> wrote ---
> > > > > Hi Michael,
> > > > >
> > > > > ---- On Wed, 16 Jul 2025 19:59:14 +0800 Li Chen <me@linux.beauty> wrote ---
> > > > > > Hi Michael,
> > > > > >
> > > > > > ---- On Wed, 16 Jul 2025 19:42:42 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> > > > > > > On Wed, Jul 16, 2025 at 07:41:11PM +0800, Li Chen wrote:
> > > > > > > > Hi Michael,
> > > > > > > >
> > > > > > > > Thanks for your kind review! All issues below have been fixed in v5:
> > > > > > > > https://lore.kernel.org/qemu-devel/20250716111959.404917-5-me@linux.beauty/T/#m696cee9a95646add1b74b866c3d6761aa4c5c762
> > > > > > >
> > > > > > > Past soft freeze now: I tagged this but pls remind me after the release
> > > > > > > to help make sure it's not lost.
> > > > >
> > > > > Gentle reminder: This patch is still missing from the latest master branch, but can apply without
> > > > > any conflict. Can it be included in 10.2?
> > > > >
> > > > > Regards,
> > > > > Li.
> > > > >
> > > > >
> > > >
> > > > Sorry for bothering again. But I'm still unable to find this patch in the latest master branch, though it applies without conflicts now.
> > > >
> > > > Could it be merged now?
> > > >
> > > > Regards,
> > > > Li
> > >
> > > you still need to update loongarch, I think. otherwise these tests will
> > > fail.
> >
> > Yes, it seems that tap stdout is polluted by serial stdio.
> >
> > I'll address the stdout pollution from -serial stdio by redirecting serial output to /dev/null using -serial null in the next version.
> > This will still create the serial device but prevent it from writing to the console.
> >
> > Regards,
> >
> > Li
>
> I don't know about that, what I meant is that loongaarch also has SPCR
> so it's expected tables have to be updated.
My apologies, I misunderstood your previous comment. I just found I already added LoongArch support in v5 [1] months ago. I've now fixed the tap
parsing error and submitted v6 of the patch [2]. And now all tests can pass.
[1]: https://patchew.org/QEMU/20250716111959.404917-1-me@linux.beauty/20250716111959.404917-5-me@linux.beauty/
[2]: https://lore.kernel.org/qemu-devel/20251211102025.873506-1-me@linux.beauty/T/#u
Regards,
Li
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table
2025-05-28 10:53 [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Li Chen
` (3 preceding siblings ...)
2025-05-28 10:53 ` [PATCH REPOST v4 4/4] acpi/virt: suppress UART device & SPCR when guest has no serial hardware Li Chen
@ 2025-05-30 12:10 ` Michael S. Tsirkin
2025-06-11 7:43 ` Li Chen
2025-06-19 11:47 ` Li Chen
5 siblings, 1 reply; 18+ messages in thread
From: Michael S. Tsirkin @ 2025-05-30 12:10 UTC (permalink / raw)
To: Li Chen
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum, Philippe Mathieu-Daudé,
Yanan Wang, Zhao Liu, Song Gao, Jiaxun Yang, Sunil V L,
Palmer Dabbelt, Alistair Francis, Weiwei Li, qemu-arm, qemu-devel,
qemu-riscv, Li Chen
On Wed, May 28, 2025 at 06:53:34PM +0800, Li Chen wrote:
> From: Li Chen <chenl311@chinatelecom.cn>
>
> (REPOST because the previous post failed to send to qemu-devel/qemu-riscv/qemu-arm,
> see https://lore.kernel.org/qemu-devel/1971648603b.dce1f5d22901195.6702025346547333607@linux.beauty/T/#u)
>
> This series introduces a new machine option, spcr=on|off, allowing users
> to disable the ACPI SPCR (Serial Port Console Redirection) table.
> By default, SPCR is enabled. Disabling it can help ensure that the guest's
> console behavior is determined solely by kernel command-line parameters
> on arch like arm64, avoiding unintended serial console configurations imposed
> by firmware.
>
> Also add tests on AArch64 and RISC-V virt machines using TCG and UEFI boot.
>
> Changes since v3:
> - Add Reviewed-by from Sunil V L <sunilvl@ventanamicro.com> for patch 1, 3, and 4.
> - rename enable_spcr to acpi_spcr_enabled as suggested by Philippe Mathieu-Daudé.
> Changes since v2:
> - Omit UART device from DSDT and SPCR construction if no serial device is present,
> as suggested by Philippe Mathieu-Daudé.
> - Add Reviewed-by from Gavin Shan <gshan@redhat.com> for the first patch and fix style issue.
>
> Changes since v1:
> - Add bios-tables-test for RISC-V and ARM as suggested by
> - Add Acked-by from Michael S. Tsirkin for the first patch
> - Add Reviewed-by from Bibo Mao for the first patch
>
> Li Chen (4):
> acpi: Add machine option to disable SPCR table
> tests/qtest/bios-tables-test: Add test for disabling SPCR on AArch64
> tests/qtest/bios-tables-test: Add test for disabling SPCR on RISC-V
> acpi/virt: suppress UART device & SPCR when guest has no serial
> hardware
Who's merging this?
> hw/arm/virt-acpi-build.c | 18 ++++++++-----
> hw/core/machine.c | 22 ++++++++++++++++
> hw/loongarch/virt-acpi-build.c | 4 ++-
> hw/riscv/virt-acpi-build.c | 10 ++++++--
> include/hw/boards.h | 1 +
> include/system/system.h | 2 ++
> qemu-options.hx | 5 ++++
> system/vl.c | 5 ++++
> tests/qtest/bios-tables-test.c | 47 ++++++++++++++++++++++++++++++++--
> 9 files changed, 103 insertions(+), 11 deletions(-)
>
> --
> 2.49.0
^ permalink raw reply [flat|nested] 18+ messages in thread* Re: [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table
2025-05-30 12:10 ` [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Michael S. Tsirkin
@ 2025-06-11 7:43 ` Li Chen
0 siblings, 0 replies; 18+ messages in thread
From: Li Chen @ 2025-06-11 7:43 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Peter Maydell, Shannon Zhao, Igor Mammedov, Ani Sinha,
Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv,
Li Chen
Hi Michael,
---- On Fri, 30 May 2025 20:10:52 +0800 Michael S. Tsirkin <mst@redhat.com> wrote ---
> On Wed, May 28, 2025 at 06:53:34PM +0800, Li Chen wrote:
> > From: Li Chen <chenl311@chinatelecom.cn>
> >
> > (REPOST because the previous post failed to send to qemu-devel/qemu-riscv/qemu-arm,
> > see https://lore.kernel.org/qemu-devel/1971648603b.dce1f5d22901195.6702025346547333607@linux.beauty/T/#u)
> >
> > This series introduces a new machine option, spcr=on|off, allowing users
> > to disable the ACPI SPCR (Serial Port Console Redirection) table.
> > By default, SPCR is enabled. Disabling it can help ensure that the guest's
> > console behavior is determined solely by kernel command-line parameters
> > on arch like arm64, avoiding unintended serial console configurations imposed
> > by firmware.
> >
> > Also add tests on AArch64 and RISC-V virt machines using TCG and UEFI boot.
> >
> > Changes since v3:
> > - Add Reviewed-by from Sunil V L <sunilvl@ventanamicro.com> for patch 1, 3, and 4.
> > - rename enable_spcr to acpi_spcr_enabled as suggested by Philippe Mathieu-Daudé.
> > Changes since v2:
> > - Omit UART device from DSDT and SPCR construction if no serial device is present,
> > as suggested by Philippe Mathieu-Daudé.
> > - Add Reviewed-by from Gavin Shan <gshan@redhat.com> for the first patch and fix style issue.
> >
> > Changes since v1:
> > - Add bios-tables-test for RISC-V and ARM as suggested by
> > - Add Acked-by from Michael S. Tsirkin for the first patch
> > - Add Reviewed-by from Bibo Mao for the first patch
> >
> > Li Chen (4):
> > acpi: Add machine option to disable SPCR table
> > tests/qtest/bios-tables-test: Add test for disabling SPCR on AArch64
> > tests/qtest/bios-tables-test: Add test for disabling SPCR on RISC-V
> > acpi/virt: suppress UART device & SPCR when guest has no serial
> > hardware
>
> Who's merging this?
Sorry for the late reply.
If I understand correctly, you are asking who can merge this series?
Per get_maintainer result:
firstlove@archlinux ~/p/qemu (spcr)> ./scripts/get_maintainer.pl *.patch
./scripts/get_maintainer.pl: file 'v4-0000-cover-letter.patch' doesn't appear to be a patch. Add -f to options?
Peter Maydell <peter.maydell@linaro.org> (maintainer:Virt)
Shannon Zhao <shannon.zhaosl@gmail.com> (maintainer:ARM ACPI Subsystem)
I think Peter Maydell and Shannon Zhao would be the appropriate maintainers to merge it.
If this is not what you meant, please correct me.
Regards,
Li
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table
2025-05-28 10:53 [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Li Chen
` (4 preceding siblings ...)
2025-05-30 12:10 ` [PATCH REPOST v4 0/4] acpi: Add machine option to disable SPCR table Michael S. Tsirkin
@ 2025-06-19 11:47 ` Li Chen
5 siblings, 0 replies; 18+ messages in thread
From: Li Chen @ 2025-06-19 11:47 UTC (permalink / raw)
To: Peter Maydell, Shannon Zhao, Michael S. Tsirkin, Igor Mammedov,
Ani Sinha, Eduardo Habkost, Marcel Apfelbaum,
"Philippe Mathieu-Daudé", Yanan Wang, Zhao Liu,
Song Gao, Jiaxun Yang, Sunil V L, Palmer Dabbelt,
Alistair Francis, Weiwei Li, qemu-arm, qemu-devel, qemu-riscv
Cc: Li Chen
Gentle ping incase of forgotten.
---- On Wed, 28 May 2025 18:53:34 +0800 Li Chen <me@linux.beauty> wrote ---
> From: Li Chen <chenl311@chinatelecom.cn>
>
> (REPOST because the previous post failed to send to qemu-devel/qemu-riscv/qemu-arm,
> see https://lore.kernel.org/qemu-devel/1971648603b.dce1f5d22901195.6702025346547333607@linux.beauty/T/#u)
>
> This series introduces a new machine option, spcr=on|off, allowing users
> to disable the ACPI SPCR (Serial Port Console Redirection) table.
> By default, SPCR is enabled. Disabling it can help ensure that the guest's
> console behavior is determined solely by kernel command-line parameters
> on arch like arm64, avoiding unintended serial console configurations imposed
> by firmware.
>
> Also add tests on AArch64 and RISC-V virt machines using TCG and UEFI boot.
>
> Changes since v3:
> - Add Reviewed-by from Sunil V L <sunilvl@ventanamicro.com> for patch 1, 3, and 4.
> - rename enable_spcr to acpi_spcr_enabled as suggested by Philippe Mathieu-Daudé.
> Changes since v2:
> - Omit UART device from DSDT and SPCR construction if no serial device is present,
> as suggested by Philippe Mathieu-Daudé.
> - Add Reviewed-by from Gavin Shan <gshan@redhat.com> for the first patch and fix style issue.
>
> Changes since v1:
> - Add bios-tables-test for RISC-V and ARM as suggested by
> - Add Acked-by from Michael S. Tsirkin for the first patch
> - Add Reviewed-by from Bibo Mao for the first patch
>
> Li Chen (4):
> acpi: Add machine option to disable SPCR table
> tests/qtest/bios-tables-test: Add test for disabling SPCR on AArch64
> tests/qtest/bios-tables-test: Add test for disabling SPCR on RISC-V
> acpi/virt: suppress UART device & SPCR when guest has no serial
> hardware
>
> hw/arm/virt-acpi-build.c | 18 ++++++++-----
> hw/core/machine.c | 22 ++++++++++++++++
> hw/loongarch/virt-acpi-build.c | 4 ++-
> hw/riscv/virt-acpi-build.c | 10 ++++++--
> include/hw/boards.h | 1 +
> include/system/system.h | 2 ++
> qemu-options.hx | 5 ++++
> system/vl.c | 5 ++++
> tests/qtest/bios-tables-test.c | 47 ++++++++++++++++++++++++++++++++--
> 9 files changed, 103 insertions(+), 11 deletions(-)
>
> --
> 2.49.0
>
>
Regards,
Li
^ permalink raw reply [flat|nested] 18+ messages in thread