From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60667) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bguNf-0004eK-MA for qemu-devel@nongnu.org; Mon, 05 Sep 2016 09:56:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bguNe-0003rI-O0 for qemu-devel@nongnu.org; Mon, 05 Sep 2016 09:56:11 -0400 Received: from mail-ua0-x230.google.com ([2607:f8b0:400c:c08::230]:33697) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bguNd-0003qr-Gt for qemu-devel@nongnu.org; Mon, 05 Sep 2016 09:56:10 -0400 Received: by mail-ua0-x230.google.com with SMTP id 31so26287360uao.0 for ; Mon, 05 Sep 2016 06:56:09 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1472852809-23042-1-git-send-email-wei@redhat.com> References: <1472852809-23042-1-git-send-email-wei@redhat.com> From: Peter Maydell Date: Mon, 5 Sep 2016 14:55:48 +0100 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH 1/1] ARM: ACPI: fix the AML ID format for CPU devices List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wei Huang Cc: QEMU Developers , qemu-arm , Shannon Zhao , Eric Auger On 2 September 2016 at 22:46, Wei Huang wrote: > Current QEMU will stall guest VM booting under ACPI mode when vcpu count > is >= 12. Analyzing the booting log, it turns out that DSDT table can't > be loaded correctly due to "Invalid character(s) in name (0x62303043), > repaired: [C00*]". This is because existing QEMU uses a lower case AML > ID for CPU devices (e.g. C000, C001, ..., C00a, C00b). The ACPI code > inside guest VM detects this lower case character as an invalid character > (see acpi_ut_valid_acpi_char() in drivers/acpi/acpica/utstring.c file) > and converts it to "*". This causes duplicated IDs (i.e. "C00a" ==>"C00*" > and "C00b" ==> "C00*"). So ACPI refuses to load the table. > > This patch fixes the problem by changing the format with a upper case > character. It matches the CPU ID formats used in other parts of QEMU > code. > > Reported-by: Eric Auger > Signed-off-by: Wei Huang > --- > hw/arm/virt-acpi-build.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c > index 28fc59c..295ec86 100644 > --- a/hw/arm/virt-acpi-build.c > +++ b/hw/arm/virt-acpi-build.c > @@ -53,7 +53,7 @@ static void acpi_dsdt_add_cpus(Aml *scope, int smp_cpus) > uint16_t i; > > for (i = 0; i < smp_cpus; i++) { > - Aml *dev = aml_device("C%03x", i); > + Aml *dev = aml_device("C%.03X", i); > aml_append(dev, aml_name_decl("_HID", aml_string("ACPI0007"))); > aml_append(dev, aml_name_decl("_UID", aml_int(i))); > aml_append(scope, dev); I see this is the format we use in hw/acpi/cpu.c, but why do we say "%.03X" rather than "%.3X" ? The two mean the same thing but one has a pointless extra 0 in the precision-specifier, as far as I can see... Anyway, applied to target-arm.next. thanks -- PMM