From nobody Sat Sep 21 00:53:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1503372386350471.32532354964917; Mon, 21 Aug 2017 20:26:26 -0700 (PDT) Received: from localhost ([::1]:58567 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djzpg-00021C-RH for importer@patchew.org; Mon, 21 Aug 2017 23:26:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48224) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djznz-0000m3-5J for qemu-devel@nongnu.org; Mon, 21 Aug 2017 23:24:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1djznx-0006qz-Pj for qemu-devel@nongnu.org; Mon, 21 Aug 2017 23:24:39 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:13851 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djznw-0006qP-Ud for qemu-devel@nongnu.org; Mon, 21 Aug 2017 23:24:37 -0400 Received: from localhost (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 22 Aug 2017 11:24:21 +0800 Received: from G08CNEXCHPEKD01.g08.fujitsu.local (unknown [10.167.33.80]) by cn.fujitsu.com (Postfix) with ESMTP id 4C1BC472498A; Tue, 22 Aug 2017 11:24:20 +0800 (CST) Received: from localhost.localdomain.localdomain (10.167.226.106) by G08CNEXCHPEKD01.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 22 Aug 2017 11:24:18 +0800 X-IronPort-AV: E=Sophos;i="5.41,410,1498492800"; d="scan'208";a="24320733" From: Dou Liyang To: , , Date: Tue, 22 Aug 2017 11:24:09 +0800 Message-ID: <1503372250-5092-2-git-send-email-douly.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1503372250-5092-1-git-send-email-douly.fnst@cn.fujitsu.com> References: <1503372250-5092-1-git-send-email-douly.fnst@cn.fujitsu.com> MIME-Version: 1.0 X-Originating-IP: [10.167.226.106] X-yoursite-MailScanner-ID: 4C1BC472498A.A068B X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: douly.fnst@cn.fujitsu.com X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 183.91.158.132 Subject: [Qemu-devel] [PATCH v4 1/2] hw/acpi-build: Fix SRAT memory building when there is no memory in node0 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pbonzini@redhat.com, mst@redhat.com, Dou Liyang , rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, Using the fisrt node without memory on the machine makes QEMU unhappy. With this example command line: ... \ -m 1024M,slots=3D4,maxmem=3D32G \ -numa node,nodeid=3D0 \ -numa node,mem=3D1024M,nodeid=3D1 \ -numa node,nodeid=3D2 \ -numa node,nodeid=3D3 \ Guest reports "No NUMA configuration found" and the NUMA topology is wrong. This is because when QEMU builds ACPI SRAT, it regards node0 as the default node to deal with the memory hole(640K-1M). this means the node0 must have some memory(>1M), but, actually it can have no memory. Fix this problem by replace the node0 with the first node which has memory on it. Add a new function for each node. Also do some cleanup. Signed-off-by: Dou Liyang --- hw/i386/acpi-build.c | 78 +++++++++++++++++++++++++++++++++---------------= ---- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 98dd424..f93d712 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2318,15 +2318,43 @@ build_tpm2(GArray *table_data, BIOSLinker *linker) (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4, NULL, NUL= L); } =20 +static uint64_t +build_srat_node_entry(GArray *table_data, PCMachineState *pcms, + int i, uint64_t mem_base, uint64_t mem_len) +{ + AcpiSratMemoryAffinity *numamem; + uint64_t next_base; + + next_base =3D mem_base + mem_len; + + /* Cut out the ACPI_PCI hole */ + if (mem_base <=3D pcms->below_4g_mem_size && + next_base > pcms->below_4g_mem_size) { + mem_len -=3D next_base - pcms->below_4g_mem_size; + if (mem_len > 0) { + numamem =3D acpi_data_push(table_data, sizeof *numamem); + build_srat_memory(numamem, mem_base, mem_len, i, + MEM_AFFINITY_ENABLED); + } + mem_base =3D 1ULL << 32; + mem_len =3D next_base - pcms->below_4g_mem_size; + next_base +=3D (1ULL << 32) - pcms->below_4g_mem_size; + } + numamem =3D acpi_data_push(table_data, sizeof *numamem); + build_srat_memory(numamem, mem_base, mem_len, i, + MEM_AFFINITY_ENABLED); + return next_base; +} + static void build_srat(GArray *table_data, BIOSLinker *linker, MachineState *machine) { AcpiSystemResourceAffinityTable *srat; AcpiSratMemoryAffinity *numamem; =20 - int i; + int i, node; int srat_start, numa_start, slots; - uint64_t mem_len, mem_base, next_base; + uint64_t mem_len, mem_base; MachineClass *mc =3D MACHINE_GET_CLASS(machine); const CPUArchIdList *apic_ids =3D mc->possible_cpu_arch_ids(machine); PCMachineState *pcms =3D PC_MACHINE(machine); @@ -2370,36 +2398,30 @@ build_srat(GArray *table_data, BIOSLinker *linker, = MachineState *machine) /* the memory map is a bit tricky, it contains at least one hole * from 640k-1M and possibly another one from 3.5G-4G. */ - next_base =3D 0; + numa_start =3D table_data->len; =20 - numamem =3D acpi_data_push(table_data, sizeof *numamem); - build_srat_memory(numamem, 0, 640 * 1024, 0, MEM_AFFINITY_ENABLED); - next_base =3D 1024 * 1024; - for (i =3D 1; i < pcms->numa_nodes + 1; ++i) { - mem_base =3D next_base; - mem_len =3D pcms->node_mem[i - 1]; - if (i =3D=3D 1) { - mem_len -=3D 1024 * 1024; + /* get the first node which has memory and map the hole from 640K-1M */ + for (node =3D 0; node < pcms->numa_nodes; node++) { + if (pcms->node_mem[node] !=3D 0) { + break; } - next_base =3D mem_base + mem_len; - - /* Cut out the ACPI_PCI hole */ - if (mem_base <=3D pcms->below_4g_mem_size && - next_base > pcms->below_4g_mem_size) { - mem_len -=3D next_base - pcms->below_4g_mem_size; - if (mem_len > 0) { - numamem =3D acpi_data_push(table_data, sizeof *numamem); - build_srat_memory(numamem, mem_base, mem_len, i - 1, - MEM_AFFINITY_ENABLED); - } - mem_base =3D 1ULL << 32; - mem_len =3D next_base - pcms->below_4g_mem_size; - next_base +=3D (1ULL << 32) - pcms->below_4g_mem_size; + } + numamem =3D acpi_data_push(table_data, sizeof *numamem); + build_srat_memory(numamem, 0, 640 * 1024, node, MEM_AFFINITY_ENABLED); + + /* map the rest of memory from 1M */ + mem_base =3D 1024 * 1024; + mem_len =3D pcms->node_mem[node] - mem_base; + mem_base =3D build_srat_node_entry(table_data, pcms, node, + mem_base, mem_len); + + for (i =3D 0; i < pcms->numa_nodes; i++) { + if (i =3D=3D node) { + continue; } - numamem =3D acpi_data_push(table_data, sizeof *numamem); - build_srat_memory(numamem, mem_base, mem_len, i - 1, - MEM_AFFINITY_ENABLED); + mem_base =3D build_srat_node_entry(table_data, pcms, i, + mem_base, pcms->node_mem[i]); } slots =3D (table_data->len - numa_start) / sizeof *numamem; for (; slots < pcms->numa_nodes + 2; slots++) { --=20 2.5.5 From nobody Sat Sep 21 00:53:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1503372391527115.71036468288798; Mon, 21 Aug 2017 20:26:31 -0700 (PDT) Received: from localhost ([::1]:58570 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djzpm-00024G-9W for importer@patchew.org; Mon, 21 Aug 2017 23:26:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48228) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djznz-0000mK-Iw for qemu-devel@nongnu.org; Mon, 21 Aug 2017 23:24:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1djznx-0006qk-3G for qemu-devel@nongnu.org; Mon, 21 Aug 2017 23:24:39 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:31593 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1djznw-0006oB-7o for qemu-devel@nongnu.org; Mon, 21 Aug 2017 23:24:37 -0400 Received: from localhost (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 22 Aug 2017 11:24:21 +0800 Received: from G08CNEXCHPEKD01.g08.fujitsu.local (unknown [10.167.33.80]) by cn.fujitsu.com (Postfix) with ESMTP id EFBDE4724996; Tue, 22 Aug 2017 11:24:20 +0800 (CST) Received: from localhost.localdomain.localdomain (10.167.226.106) by G08CNEXCHPEKD01.g08.fujitsu.local (10.167.33.89) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 22 Aug 2017 11:24:18 +0800 X-IronPort-AV: E=Sophos;i="5.41,410,1498492800"; d="scan'208";a="24320735" From: Dou Liyang To: , , Date: Tue, 22 Aug 2017 11:24:10 +0800 Message-ID: <1503372250-5092-3-git-send-email-douly.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1503372250-5092-1-git-send-email-douly.fnst@cn.fujitsu.com> References: <1503372250-5092-1-git-send-email-douly.fnst@cn.fujitsu.com> MIME-Version: 1.0 X-Originating-IP: [10.167.226.106] X-yoursite-MailScanner-ID: EFBDE4724996.A3897 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: douly.fnst@cn.fujitsu.com X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 183.91.158.132 Subject: [Qemu-devel] [PATCH v4 2/2] ACPI/unit-test: Add a new testcase for RAM allocation in numa node X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pbonzini@redhat.com, mst@redhat.com, Dou Liyang , rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As QEMU supports the memory-less node, it is possible that there is no RAM in the first numa node(also be called as node0). eg: ... \ -m 128,slots=3D3,maxmem=3D1G \ -numa node -numa node,mem=3D128M \ But, this makes it hard for QEMU to build a known-to-work ACPI SRAT table. Only fixing it is not enough. Add a testcase for this situation to make sure the ACPI table is correct for guest. Suggested-by: Eduardo Habkost Signed-off-by: Dou Liyang --- tests/acpi-test-data/pc/DSDT.numamem | Bin 0 -> 6463 bytes tests/acpi-test-data/pc/SLIT.numamem | Bin 0 -> 48 bytes tests/acpi-test-data/pc/SRAT.numamem | Bin 0 -> 264 bytes tests/acpi-test-data/q35/DSDT.numamem | Bin 0 -> 9147 bytes tests/acpi-test-data/q35/SLIT.numamem | Bin 0 -> 48 bytes tests/acpi-test-data/q35/SRAT.numamem | Bin 0 -> 264 bytes tests/bios-tables-test.c | 30 ++++++++++++++++++++++++++++++ 7 files changed, 30 insertions(+) create mode 100644 tests/acpi-test-data/pc/DSDT.numamem create mode 100644 tests/acpi-test-data/pc/SLIT.numamem create mode 100644 tests/acpi-test-data/pc/SRAT.numamem create mode 100644 tests/acpi-test-data/q35/DSDT.numamem create mode 100644 tests/acpi-test-data/q35/SLIT.numamem create mode 100644 tests/acpi-test-data/q35/SRAT.numamem diff --git a/tests/acpi-test-data/pc/DSDT.numamem b/tests/acpi-test-data/pc= /DSDT.numamem new file mode 100644 index 0000000000000000000000000000000000000000..53f6d5824359ff0ca20179b19b3= b5cb79f017f82 GIT binary patch literal 6463 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 uZgWgekt10~`V7fq`fHFe?IZmG$dYwdQV#b literal 0 HcmV?d00001 diff --git a/tests/acpi-test-data/pc/SLIT.numamem b/tests/acpi-test-data/pc= /SLIT.numamem new file mode 100644 index 0000000000000000000000000000000000000000..74ec3b4b461ffecca36d8537975= c202a5f011185 GIT binary patch literal 48 scmWIc@eDCwU|?X>aq@Te2v%^42yhMtiZKGkKx`1r1jHb~B`V4V0NaKK0RR91 literal 0 HcmV?d00001 diff --git a/tests/acpi-test-data/pc/SRAT.numamem b/tests/acpi-test-data/pc= /SRAT.numamem new file mode 100644 index 0000000000000000000000000000000000000000..f8ec8fa242adc6132ba033bfc13= cf7e858ad22cc GIT binary patch literal 264 zcmWFzatz^MWME*N>*Vk35v<@85#SsQ6axw|fY=3D}!gyBE{mCvYwA`4W;1y_nJgHQ)F m01Q5`!xW;bgNZV5z*$fR4t40tQ1}RY;qLwcQ@{*k0BHdBCkg=3Do literal 0 HcmV?d00001 diff --git a/tests/acpi-test-data/q35/DSDT.numamem b/tests/acpi-test-data/q= 35/DSDT.numamem new file mode 100644 index 0000000000000000000000000000000000000000..1b7c484a5e31ec456685bc24619= 7252cb48a3adf GIT binary patch literal 9147 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 Hwz}-UIV`hz literal 0 HcmV?d00001 diff --git a/tests/acpi-test-data/q35/SLIT.numamem b/tests/acpi-test-data/q= 35/SLIT.numamem new file mode 100644 index 0000000000000000000000000000000000000000..74ec3b4b461ffecca36d8537975= c202a5f011185 GIT binary patch literal 48 scmWIc@eDCwU|?X>aq@Te2v%^42yhMtiZKGkKx`1r1jHb~B`V4V0NaKK0RR91 literal 0 HcmV?d00001 diff --git a/tests/acpi-test-data/q35/SRAT.numamem b/tests/acpi-test-data/q= 35/SRAT.numamem new file mode 100644 index 0000000000000000000000000000000000000000..f8ec8fa242adc6132ba033bfc13= cf7e858ad22cc GIT binary patch literal 264 zcmWFzatz^MWME*N>*Vk35v<@85#SsQ6axw|fY=3D}!gyBE{mCvYwA`4W;1y_nJgHQ)F m01Q5`!xW;bgNZV5z*$fR4t40tQ1}RY;qLwcQ@{*k0BHdBCkg=3Do literal 0 HcmV?d00001 diff --git a/tests/bios-tables-test.c b/tests/bios-tables-test.c index 564da45..79728c6 100644 --- a/tests/bios-tables-test.c +++ b/tests/bios-tables-test.c @@ -808,6 +808,34 @@ static void test_acpi_piix4_tcg_memhp(void) free_test_data(&data); } =20 +static void test_acpi_q35_tcg_numamem(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine =3D MACHINE_Q35; + data.variant =3D ".numamem"; + test_acpi_one(" -m 128,slots=3D3,maxmem=3D1G" + " -numa node -numa node,mem=3D128" + " -numa dist,src=3D0,dst=3D1,val=3D21", + &data); + free_test_data(&data); +} + +static void test_acpi_piix4_tcg_numamem(void) +{ + test_data data; + + memset(&data, 0, sizeof(data)); + data.machine =3D MACHINE_PC; + data.variant =3D ".numamem"; + test_acpi_one(" -m 128,slots=3D3,maxmem=3D1G" + " -numa node -numa node,mem=3D128" + " -numa dist,src=3D0,dst=3D1,val=3D21", + &data); + free_test_data(&data); +} + int main(int argc, char *argv[]) { const char *arch =3D qtest_get_arch(); @@ -830,6 +858,8 @@ int main(int argc, char *argv[]) qtest_add_func("acpi/q35/cpuhp", test_acpi_q35_tcg_cphp); qtest_add_func("acpi/piix4/memhp", test_acpi_piix4_tcg_memhp); qtest_add_func("acpi/q35/memhp", test_acpi_q35_tcg_memhp); + qtest_add_func("acpi/piix4/numamem", test_acpi_piix4_tcg_numamem); + qtest_add_func("acpi/q35/numamem", test_acpi_q35_tcg_numamem); } ret =3D g_test_run(); boot_sector_cleanup(disk); --=20 2.5.5