From nobody Sat May 18 19:12:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=huawei.com ARC-Seal: i=1; a=rsa-sha256; t=1618302849; cv=none; d=zohomail.com; s=zohoarc; b=dg3n0tnDIE9zPXED5i3LHA7ZFbPhmzorJ1Eb5Br30wPNxHeqR7gXdx5cCmUvyGsZ//AEl/tnAQkSeszCStVk8EDyT4t7KVjmtY3tCAARffEuQ41W81tCRROyVchszCZcd4qVKzj6WQ4Byy/5swIHwwUBRMhkd1X+FEYXodzHrHU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618302849; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ISFvn/Rlidp8o+S6NJU+I1XtPSySfe3kXbg7d/gEYQQ=; b=P+mhS/4e6n34IkiQUQAJExDtv/LVCS8xIm1QvH9x8gtQoMQNzRpqwi65b2QhfqV4+f3I2dpaqd0pRH1biRs98hf1y2v/N1OPpCle3qNaZnaYj3Flo9LIt/u0AZl+ZPcLtMepfFn4pGNQuGIUtK+ef09Mtq4HVAdAJP0G4ndGo2U= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1618302849837185.71269868832405; Tue, 13 Apr 2021 01:34:09 -0700 (PDT) Received: from localhost ([::1]:34886 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lWEUq-0001jB-L7 for importer@patchew.org; Tue, 13 Apr 2021 04:34:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49426) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWESz-0008PS-3N; Tue, 13 Apr 2021 04:32:13 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:5356) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWESu-0004pu-KG; Tue, 13 Apr 2021 04:32:12 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4FKJgX0vWNz1BGXP; Tue, 13 Apr 2021 16:29:44 +0800 (CST) Received: from DESKTOP-TMVL5KK.china.huawei.com (10.174.187.128) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Tue, 13 Apr 2021 16:31:53 +0800 From: Yanan Wang To: , Subject: [RFC PATCH v2 1/4] vl.c: Add -smp, clusters=* command line support for ARM cpu Date: Tue, 13 Apr 2021 16:31:44 +0800 Message-ID: <20210413083147.34236-2-wangyanan55@huawei.com> X-Mailer: git-send-email 2.8.4.windows.1 In-Reply-To: <20210413083147.34236-1-wangyanan55@huawei.com> References: <20210413083147.34236-1-wangyanan55@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.174.187.128] X-CFilter-Loop: Reflected Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=45.249.212.190; envelope-from=wangyanan55@huawei.com; helo=szxga04-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Barry Song , Peter Maydell , Andrew Jones , "Michael S . Tsirkin" , wanghaibin.wang@huawei.com, yangyicong@huawei.com, Yanan Wang , Shannon Zhao , Alistair Francis , prime.zeng@hisilicon.com, Paolo Bonzini , yuzenghui@huawei.com, Igor Mammedov , zhukeqian1@huawei.com, Jiajie Li , David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A cluster means a group of cores that share some resources (e.g. cache) among them under the LLC. For example, ARM64 server chip Kunpeng 920 has 6 or 8 clusters in each NUMA, and each cluster has 4 cores. All clusters share L3 cache data while cores within each cluster share the L2 cache. The cache affinity of cluster has been proved to improve the Linux kernel scheduling performance and a patchset has been posted, in which a general sched_domain for clusters was added and a cluster level was added in the arch-neutral cpu topology struct like below. struct cpu_topology { int thread_id; int core_id; int cluster_id; int package_id; int llc_id; cpumask_t thread_sibling; cpumask_t core_sibling; cpumask_t cluster_sibling; cpumask_t llc_sibling; } Also the Kernel Doc: Documentation/devicetree/bindings/cpu/cpu-topology.txt defines a four-level CPU topology hierarchy like socket/cluster/core/thread. According to the context, a socket node's child nodes must be one or more cluster nodes and a cluster node's child nodes must be one or more cluster nodes/one or more core nodes. So let's add the -smp, clusters=3D* command line support for ARM cpu, so th= at future guest os could make use of cluster cpu topology for better scheduling performance. For ARM machines, a four-level cpu hierarchy can be defined and it will be sockets/clusters/cores/threads. Because we only support clusters for ARM cpu currently, a new member "unsigned smp_clusters" is added to the VirtMachineState structure. Signed-off-by: Yanan Wang --- include/hw/arm/virt.h | 1 + qemu-options.hx | 26 +++++++++++++++----------- softmmu/vl.c | 3 +++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 4a4b98e4a7..5d5d156924 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -155,6 +155,7 @@ struct VirtMachineState { char *pciehb_nodename; const int *irqmap; int fdt_size; + unsigned smp_clusters; uint32_t clock_phandle; uint32_t gic_phandle; uint32_t msi_phandle; diff --git a/qemu-options.hx b/qemu-options.hx index fd21002bd6..65343ea23c 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -184,25 +184,29 @@ SRST ERST =20 DEF("smp", HAS_ARG, QEMU_OPTION_smp, - "-smp [cpus=3D]n[,maxcpus=3Dcpus][,cores=3Dcores][,threads=3Dthreads][= ,dies=3Ddies][,sockets=3Dsockets]\n" + "-smp [cpus=3D]n[,maxcpus=3Dcpus][,clusters=3Dclusters][,cores=3Dcores= ][,threads=3Dthreads][,dies=3Ddies][,sockets=3Dsockets]\n" " set the number of CPUs to 'n' [default=3D1]\n" " maxcpus=3D maximum number of total cpus, including\n" " offline CPUs for hotplug, etc\n" - " cores=3D number of CPU cores on one socket (for PC, i= t's on one die)\n" + " cores=3D number of CPU cores on one socket\n" + " (it's on one die for PC, and on one cluster for ARM)\= n" " threads=3D number of threads on one CPU core\n" + " clusters=3D number of CPU clusters on one socket (for= ARM only)\n" " dies=3D number of CPU dies on one socket (for PC only= )\n" " sockets=3D number of discrete sockets in the system\n= ", QEMU_ARCH_ALL) SRST -``-smp [cpus=3D]n[,cores=3Dcores][,threads=3Dthreads][,dies=3Ddies][,socke= ts=3Dsockets][,maxcpus=3Dmaxcpus]`` - Simulate an SMP system with n CPUs. On the PC target, up to 255 CPUs - are supported. On Sparc32 target, Linux limits the number of usable - CPUs to 4. For the PC target, the number of cores per die, the - number of threads per cores, the number of dies per packages and the - total number of sockets can be specified. Missing values will be - computed. If any on the three values is given, the total number of - CPUs n can be omitted. maxcpus specifies the maximum number of - hotpluggable CPUs. +``-smp [cpus=3D]n[,maxcpus=3Dcpus][,clusters=3Dclusters][,cores=3Dcores][,= threads=3Dthreads][,dies=3Ddies][,sockets=3Dsockets]`` + Simulate an SMP system with n CPUs. On the PC target, up to 255 + CPUs are supported. On the Sparc32 target, Linux limits the number + of usable CPUs to 4. For the PC target, the number of threads per + core, the number of cores per die, the number of dies per package + and the total number of sockets can be specified. For the ARM target, + the number of threads per core, the number of cores per cluster, the + number of clusters per socket and the total number of sockets can be + specified. And missing values will be computed. If any of the five + values is given, the total number of CPUs n can be omitted. Maxcpus + specifies the maximum number of hotpluggable CPUs. ERST =20 DEF("numa", HAS_ARG, QEMU_OPTION_numa, diff --git a/softmmu/vl.c b/softmmu/vl.c index aadb526138..46f5b6b575 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -720,6 +720,9 @@ static QemuOptsList qemu_smp_opts =3D { }, { .name =3D "dies", .type =3D QEMU_OPT_NUMBER, + }, { + .name =3D "clusters", + .type =3D QEMU_OPT_NUMBER, }, { .name =3D "cores", .type =3D QEMU_OPT_NUMBER, --=20 2.19.1 From nobody Sat May 18 19:12:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=huawei.com ARC-Seal: i=1; a=rsa-sha256; t=1618303190; cv=none; d=zohomail.com; s=zohoarc; b=jC9o5KN6Luvnl8G9FDGdhdJ/tJWAPgXH09EEoYk7ZBhEN0MgstiKlKYGK4u608RSQdZVGgznXesFMEbres3+i4VxJvZhATHhBcl9TpCUIFR0RBWg15dfYxKkXUVKSIxbKo/H5NnISAy0eIn3UJeO2ZGijZTUgABsMhWStbA+2RM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618303189; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TgTSvEMeJtstoqGflARlYiqIj8i9Mv3URmdVkvpE+JM=; b=fDA/d16XVo1sxRZb55Xgu/6BJUuB76xsO+Ib0r7PQLv/iCn9oumbKwZLnKMJfK5uIKGjh0ZGTtO7asYcisANb1o+QLR2XQBte8V4QEF6AV7lM4TeRB1WZ+H1zrSJbak06a1y6VyDy5CWNCLJvk6H28+EAdwqv07TsbZp17MDhEY= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1618303189995271.5599067011218; Tue, 13 Apr 2021 01:39:49 -0700 (PDT) Received: from localhost ([::1]:44990 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lWEaK-000613-UO for importer@patchew.org; Tue, 13 Apr 2021 04:39:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49438) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWET0-0008Pw-2J; Tue, 13 Apr 2021 04:32:14 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:5360) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWESw-0004tK-Rs; Tue, 13 Apr 2021 04:32:13 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4FKJgd1MGvz1BGXj; Tue, 13 Apr 2021 16:29:49 +0800 (CST) Received: from DESKTOP-TMVL5KK.china.huawei.com (10.174.187.128) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Tue, 13 Apr 2021 16:31:55 +0800 From: Yanan Wang To: , Subject: [RFC PATCH v2 2/4] hw/arm/virt: Parse -smp cluster parameter in virt_smp_parse Date: Tue, 13 Apr 2021 16:31:45 +0800 Message-ID: <20210413083147.34236-3-wangyanan55@huawei.com> X-Mailer: git-send-email 2.8.4.windows.1 In-Reply-To: <20210413083147.34236-1-wangyanan55@huawei.com> References: <20210413083147.34236-1-wangyanan55@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.174.187.128] X-CFilter-Loop: Reflected Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=45.249.212.190; envelope-from=wangyanan55@huawei.com; helo=szxga04-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Barry Song , Peter Maydell , Andrew Jones , "Michael S . Tsirkin" , wanghaibin.wang@huawei.com, yangyicong@huawei.com, Yanan Wang , Shannon Zhao , Alistair Francis , prime.zeng@hisilicon.com, Paolo Bonzini , yuzenghui@huawei.com, Igor Mammedov , zhukeqian1@huawei.com, Jiajie Li , David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There is a separate function virt_smp_parse() in hw/virt/arm.c used to parse cpu topology for the ARM machines. So add parsing of -smp cluster parameter in it, then total number of logical cpus will be calculated like: max_cpus =3D sockets * clusters * cores * threads. In virt_smp_parse(), the computing logic of missing values prefers cores over sockets over threads. And for compatibility, the value of clusters will be set as default 1 if not explicitly specified. Signed-off-by: Yanan Wang --- hw/arm/virt.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 57ef961cb5..51797628db 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2639,35 +2639,38 @@ static void virt_smp_parse(MachineState *ms, QemuOp= ts *opts) if (opts) { unsigned cpus =3D qemu_opt_get_number(opts, "cpus", 0); unsigned sockets =3D qemu_opt_get_number(opts, "sockets", 0); + unsigned clusters =3D qemu_opt_get_number(opts, "clusters", 1); unsigned cores =3D qemu_opt_get_number(opts, "cores", 0); unsigned threads =3D qemu_opt_get_number(opts, "threads", 0); + VirtMachineState *vms =3D VIRT_MACHINE(ms); =20 /* - * Compute missing values; prefer cores over sockets and - * sockets over threads. + * Compute missing values; prefer cores over sockets and sockets + * over threads. For compatibility, value of clusters will have + * been set as default 1 if not explicitly specified. */ if (cpus =3D=3D 0 || cores =3D=3D 0) { sockets =3D sockets > 0 ? sockets : 1; threads =3D threads > 0 ? threads : 1; if (cpus =3D=3D 0) { cores =3D cores > 0 ? cores : 1; - cpus =3D cores * threads * sockets; + cpus =3D sockets * clusters * cores * threads; } else { ms->smp.max_cpus =3D qemu_opt_get_number(opts, "maxcpus", = cpus); - cores =3D ms->smp.max_cpus / (sockets * threads); + cores =3D ms->smp.max_cpus / (sockets * clusters * threads= ); } } else if (sockets =3D=3D 0) { threads =3D threads > 0 ? threads : 1; - sockets =3D cpus / (cores * threads); + sockets =3D cpus / (clusters * cores * threads); sockets =3D sockets > 0 ? sockets : 1; } else if (threads =3D=3D 0) { - threads =3D cpus / (cores * sockets); + threads =3D cpus / (sockets * clusters * cores); threads =3D threads > 0 ? threads : 1; - } else if (sockets * cores * threads < cpus) { + } else if (sockets * clusters * cores * threads < cpus) { error_report("cpu topology: " - "sockets (%u) * cores (%u) * threads (%u) < " - "smp_cpus (%u)", - sockets, cores, threads, cpus); + "sockets (%u) * clusters (%u) * cores (%u) * " + "threads (%u) < smp_cpus (%u)", + sockets, clusters, cores, threads, cpus); exit(1); } =20 @@ -2678,11 +2681,11 @@ static void virt_smp_parse(MachineState *ms, QemuOp= ts *opts) exit(1); } =20 - if (sockets * cores * threads !=3D ms->smp.max_cpus) { + if (sockets * clusters * cores * threads !=3D ms->smp.max_cpus) { error_report("cpu topology: " - "sockets (%u) * cores (%u) * threads (%u)" - "!=3D maxcpus (%u)", - sockets, cores, threads, + "sockets (%u) * clusters (%u) * cores (%u) * " + "threads (%u) !=3D maxcpus (%u)", + sockets, clusters, cores, threads, ms->smp.max_cpus); exit(1); } @@ -2691,6 +2694,7 @@ static void virt_smp_parse(MachineState *ms, QemuOpts= *opts) ms->smp.cores =3D cores; ms->smp.threads =3D threads; ms->smp.sockets =3D sockets; + vms->smp_clusters =3D clusters; } =20 if (ms->smp.cpus > 1) { --=20 2.19.1 From nobody Sat May 18 19:12:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=huawei.com ARC-Seal: i=1; a=rsa-sha256; t=1618302874; cv=none; d=zohomail.com; s=zohoarc; b=bxX581YCgDd49Rp1M6qZY5QxTRmqeHcECM7s9T7gYNxCzH78pBRxrUvpw/tc9fvpkCe+9Jb+Fr9Vgyt+XBIxPZNK2sFNCTQ8hz1zqaKdLlN/wDTq8g9+Lj0kzBiB9MSDVX9g7jGlH27q3bjgt+yLM0BAXI9e9GDWgywZojBZY6I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618302874; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=bRB60EnF1NT6WyiVHr5sl82zuH4DpC+/74HP5IqnhYI=; b=C0VPNV1QY9KSjj+5oVEAFC0oy06APDHUru47s82MnP6ELSYhyiC3TTBSlJkhNIhtMImNRGfzZjf4seljg2/0jldRDqI+VpNnEb6lnQNLo0Lx019ZGEMv9ELo+pCiVLsE/RVb7xlAY+ZRTxDJ6+P/Z9UD6zTYYlInnCDrLFAND7o= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1618302874707895.6474843381865; Tue, 13 Apr 2021 01:34:34 -0700 (PDT) Received: from localhost ([::1]:35874 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lWEVF-00027R-Dz for importer@patchew.org; Tue, 13 Apr 2021 04:34:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49434) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWESz-0008Pj-K6; Tue, 13 Apr 2021 04:32:13 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:5358) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWESw-0004tJ-MU; Tue, 13 Apr 2021 04:32:13 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4FKJgd1jVPz1BGYB; Tue, 13 Apr 2021 16:29:49 +0800 (CST) Received: from DESKTOP-TMVL5KK.china.huawei.com (10.174.187.128) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Tue, 13 Apr 2021 16:31:56 +0800 From: Yanan Wang To: , Subject: [RFC PATCH v2 3/4] hw/arm/virt-acpi-build: Add cluster level for PPTT table Date: Tue, 13 Apr 2021 16:31:46 +0800 Message-ID: <20210413083147.34236-4-wangyanan55@huawei.com> X-Mailer: git-send-email 2.8.4.windows.1 In-Reply-To: <20210413083147.34236-1-wangyanan55@huawei.com> References: <20210413083147.34236-1-wangyanan55@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.174.187.128] X-CFilter-Loop: Reflected Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=45.249.212.190; envelope-from=wangyanan55@huawei.com; helo=szxga04-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Barry Song , Peter Maydell , Andrew Jones , "Michael S . Tsirkin" , wanghaibin.wang@huawei.com, yangyicong@huawei.com, Yanan Wang , Shannon Zhao , Alistair Francis , prime.zeng@hisilicon.com, Paolo Bonzini , yuzenghui@huawei.com, Igor Mammedov , zhukeqian1@huawei.com, Jiajie Li , David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a Processor Hierarchy Node of cluster level between core level and package level for ARM PPTT table. Signed-off-by: Yanan Wang Reviewed-by: Andrew Jones --- hw/arm/virt-acpi-build.c | 55 ++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 03fd812d5a..2b745711d1 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -443,6 +443,7 @@ build_pptt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) int pptt_start =3D table_data->len; int uid =3D 0, cpus =3D 0, socket =3D 0; MachineState *ms =3D MACHINE(vms); + unsigned int smp_clusters =3D vms->smp_clusters; unsigned int smp_cores =3D ms->smp.cores; unsigned int smp_threads =3D ms->smp.threads; =20 @@ -450,42 +451,52 @@ build_pptt(GArray *table_data, BIOSLinker *linker, Vi= rtMachineState *vms) =20 for (socket =3D 0; cpus < ms->possible_cpus->len; socket++) { uint32_t socket_offset =3D table_data->len - pptt_start; - int core; + int cluster; =20 build_processor_hierarchy_node( table_data, 1, /* Physical package */ 0, socket, /* No parent */ NULL, 0); /* No private resources */ =20 - for (core =3D 0; core < smp_cores; core++) { - uint32_t core_offset =3D table_data->len - pptt_start; - int thread; - - if (smp_threads <=3D 1) { - build_processor_hierarchy_node( - table_data, - (1 << 1) | /* ACPI Processor ID valid */ - (1 << 3), /* ACPI 6.3 - Node is a Leaf */ - socket_offset, uid++, /* Parent is a Socket */ - NULL, 0); /* No private resources */ - } else { - build_processor_hierarchy_node( - table_data, 0, - socket_offset, core, /* Parent is a Socket */ - NULL, 0); /* No private resources */ - - for (thread =3D 0; thread < smp_threads; thread++) { + for (cluster =3D 0; cluster < smp_clusters; cluster++) { + uint32_t cluster_offset =3D table_data->len - pptt_start; + int core; + + build_processor_hierarchy_node( + table_data, 0, + socket_offset, cluster, /* Parent is a Socket */ + NULL, 0); /* No private resources */ + + for (core =3D 0; core < smp_cores; core++) { + uint32_t core_offset =3D table_data->len - pptt_start; + int thread; + + if (smp_threads <=3D 1) { build_processor_hierarchy_node( table_data, (1 << 1) | /* ACPI Processor ID valid */ - (1 << 2) | /* ACPI 6.3 - Processor is a Thread */ (1 << 3), /* ACPI 6.3 - Node is a Leaf */ - core_offset, uid++, /* Parent is a Core */ + cluster_offset, uid++, /* Parent is a Cluster */ NULL, 0); /* No private resources */ + } else { + build_processor_hierarchy_node( + table_data, 0, + cluster_offset, core, /* Parent is a Cluster */ + NULL, 0); /* No private resources */ + + for (thread =3D 0; thread < smp_threads; thread++) { + build_processor_hierarchy_node( + table_data, + (1 << 1) | /* ACPI Processor ID valid */ + (1 << 2) | /* ACPI 6.3 - Processor is a Thread= */ + (1 << 3), /* ACPI 6.3 - Node is a Leaf */ + core_offset, uid++, /* Parent is a Core */ + NULL, 0); /* No private resources */ + } } } } - cpus +=3D smp_cores * smp_threads; + cpus +=3D smp_clusters * smp_cores * smp_threads; } =20 build_header(linker, table_data, --=20 2.19.1 From nobody Sat May 18 19:12:44 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=huawei.com ARC-Seal: i=1; a=rsa-sha256; t=1618302875; cv=none; d=zohomail.com; s=zohoarc; b=RYdqLOk7Ky7NJwoUcgMqm2x9rrjx3g63ex73pgzlPIl6gDdZkDfnHujdRYEwRv+IiLtFk8ErtTGNL3FbZfF/NcCabypeREB7l1GyfyPKwDlhw6Y86XVW9T2aMTylp+z72Ux2BqtT20ALnBNoh9FsVRFBNj9BJCeYCctM36uzByc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618302875; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qckx5ksb4NBy4crPmmrMl8pohnjqzn/0NcLXAGfkO64=; b=cI+j3D7+9u5GjIAfvsSD9BzrmKd7Ik9ZmclrmfBHBtjlWodRIQF4cnAh9tCRm6u4LQMjNr7/eHn7rG1IG43BOv8q7yzrMiDjufbFFhvs/5iOMxJ/pVTwPBM61aVpEUYc9wHLvcMG14vrcyc+/KTjTNIIfihfWWl2VCodAZbMffY= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1618302875254616.7217742065799; Tue, 13 Apr 2021 01:34:35 -0700 (PDT) Received: from localhost ([::1]:35914 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lWEVG-00028W-6O for importer@patchew.org; Tue, 13 Apr 2021 04:34:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49356) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWESx-0008Ou-Er; Tue, 13 Apr 2021 04:32:11 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:5359) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWESu-0004tL-Ld; Tue, 13 Apr 2021 04:32:11 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4FKJgd21vrz1BGYC; Tue, 13 Apr 2021 16:29:49 +0800 (CST) Received: from DESKTOP-TMVL5KK.china.huawei.com (10.174.187.128) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.498.0; Tue, 13 Apr 2021 16:31:58 +0800 From: Yanan Wang To: , Subject: [RFC PATCH v2 4/4] hw/arm/virt: Add cluster level for device tree Date: Tue, 13 Apr 2021 16:31:47 +0800 Message-ID: <20210413083147.34236-5-wangyanan55@huawei.com> X-Mailer: git-send-email 2.8.4.windows.1 In-Reply-To: <20210413083147.34236-1-wangyanan55@huawei.com> References: <20210413083147.34236-1-wangyanan55@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.174.187.128] X-CFilter-Loop: Reflected Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=45.249.212.190; envelope-from=wangyanan55@huawei.com; helo=szxga04-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Barry Song , Peter Maydell , Andrew Jones , "Michael S . Tsirkin" , wanghaibin.wang@huawei.com, yangyicong@huawei.com, Yanan Wang , Shannon Zhao , Alistair Francis , prime.zeng@hisilicon.com, Paolo Bonzini , yuzenghui@huawei.com, Igor Mammedov , zhukeqian1@huawei.com, Jiajie Li , David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a cluster level between core level and package level for ARM device tree. Signed-off-by: Yanan Wang Reviewed-by: Andrew Jones --- hw/arm/virt.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 51797628db..4468a4734b 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -434,14 +434,18 @@ static void fdt_add_cpu_nodes(const VirtMachineState = *vms) =20 if (ms->smp.threads > 1) { map_path =3D g_strdup_printf( - "/cpus/cpu-map/%s%d/%s%d/%s%d", - "socket", cpu / (ms->smp.cores * ms->smp.threads), + "/cpus/cpu-map/%s%d/%s%d/%s%d/%s%d", + "socket", cpu / (vms->smp_clusters * ms->smp.cores * + ms->smp.threads), + "cluster", (cpu / (ms->smp.cores * ms->smp.threads)) % + vms->smp_clusters, "core", (cpu / ms->smp.threads) % ms->smp.cores, "thread", cpu % ms->smp.threads); } else { map_path =3D g_strdup_printf( - "/cpus/cpu-map/%s%d/%s%d", - "socket", cpu / ms->smp.cores, + "/cpus/cpu-map/%s%d/%s%d/%s%d", + "socket", cpu / (vms->smp_clusters * ms->smp.cores), + "cluster", (cpu / ms->smp.cores) % vms->smp_clusters, "core", cpu % ms->smp.cores); } qemu_fdt_add_path(ms->fdt, map_path); --=20 2.19.1