From patchwork Tue Aug 6 08:53:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yicong Yang X-Patchwork-Id: 13754567 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 31C40C52D70 for ; Tue, 6 Aug 2024 09:00:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date :Subject:CC:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=f+j6cqK7qNmyAEQnPOOiBpuEvQlppYeSRVqcKWhBioE=; b=ktmGihZ7fL70tpybf9DDD1/eu3 gHyudpqI0p4M6YFNSfcf2eih12kAaAf5k+EkWixwJX5e49yXkUkJtqX2fvyqYEq7DFlGZub3jaAh4 TlupRcig6oQnDX1oeNsinyAWrUfeIDh9xL8mOGfRORHOPhvI89AEr3WxSiRIZeiWqinD3fW/3FhdK bt4N9LZYuuP89ZPdjtUMuyAKf20skp+8sSvR1eyF7/UDKk54px+weMo0GAfiPgHexV1xtITkps4bD Od7e7b3Ne2WOLIEqO++jYGAauQGeGG4ANEyKbbADgb1zJdSlWGni+ROuZF+61Yb+rWZwVwSvaJQNr AsSuVOlw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sbG3C-000000011rt-1R6Q; Tue, 06 Aug 2024 09:00:14 +0000 Received: from szxga02-in.huawei.com ([45.249.212.188]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sbG2d-000000011dx-1lR6 for linux-arm-kernel@lists.infradead.org; Tue, 06 Aug 2024 08:59:41 +0000 Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4WdRyp5JJdzfZtB; Tue, 6 Aug 2024 16:57:38 +0800 (CST) Received: from kwepemd200014.china.huawei.com (unknown [7.221.188.8]) by mail.maildlp.com (Postfix) with ESMTPS id 14C9C180105; Tue, 6 Aug 2024 16:59:32 +0800 (CST) Received: from localhost.localdomain (10.50.165.33) by kwepemd200014.china.huawei.com (7.221.188.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 6 Aug 2024 16:59:31 +0800 From: Yicong Yang To: , , , , , , , , , CC: , , , , , , , , , , , Subject: [PATCH v5 2/4] arch_topology: Support SMT control for OF based system Date: Tue, 6 Aug 2024 16:53:18 +0800 Message-ID: <20240806085320.63514-3-yangyicong@huawei.com> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20240806085320.63514-1-yangyicong@huawei.com> References: <20240806085320.63514-1-yangyicong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemd200014.china.huawei.com (7.221.188.8) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240806_015939_644897_3FD4B739 X-CRM114-Status: GOOD ( 12.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Yicong Yang On building the topology from the devicetree, we've already gotten the SMT thread number of each core. Update the largest SMT thread number to enable the SMT control. Signed-off-by: Yicong Yang --- drivers/base/arch_topology.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c index 75fcb75d5515..95513abd664f 100644 --- a/drivers/base/arch_topology.c +++ b/drivers/base/arch_topology.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -531,6 +532,16 @@ static int __init get_cpu_for_node(struct device_node *node) return cpu; } +static void __init update_smt_num_threads(unsigned int num_threads) +{ + static unsigned int max_smt_thread_num = 1; + + if (num_threads > max_smt_thread_num) { + max_smt_thread_num = num_threads; + cpu_smt_set_num_threads(max_smt_thread_num, max_smt_thread_num); + } +} + static int __init parse_core(struct device_node *core, int package_id, int cluster_id, int core_id) { @@ -561,6 +572,8 @@ static int __init parse_core(struct device_node *core, int package_id, i++; } while (1); + update_smt_num_threads(i); + cpu = get_cpu_for_node(core); if (cpu >= 0) { if (!leaf) {