From patchwork Fri Feb 3 13:50:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Morse X-Patchwork-Id: 52499 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp850120wrn; Fri, 3 Feb 2023 05:55:55 -0800 (PST) X-Google-Smtp-Source: AK7set/IXSISJV6n4xxjUSDpf+UEd8mOPzPsDiNY5kCppMG3n9CGYrgPcFFWSHxA15cs/zoAavG8 X-Received: by 2002:a17:907:7f05:b0:88d:d304:3423 with SMTP id qf5-20020a1709077f0500b0088dd3043423mr12182210ejc.70.1675432555041; Fri, 03 Feb 2023 05:55:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675432555; cv=none; d=google.com; s=arc-20160816; b=ZfxJ17fwbRlCtXAehBrDuE0YjIqJ0t7YIBEOYpeUfdc993MVwSHxvMttxbllqSNZ4E ScpsqN7JP/HUFD8SLx2jyWLGqlmaWvAqcArVg2xq3IYvdWRyRmsrQN6LI8cD/TvtCqBK Z8q1FAvIvGeAqADE0UA70jif5K6VyhjGCIQxlwrfPOdf85u8Ct+Y/ojv6coQDMQZc9U2 GZ2RpBXmWnVXOhvEbUohbby3RbSrFlVf6Kiuwgg44PcN/MEcioUVb2ymX0l3Cy2mKgD7 j5IXBfdda+MNUt21lnrOli644Ea22EWk9DQbp5l5kgrr7NYqQOVmUiYXEjTyHhlLNF3b SFFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=hxu7xDdar+tKG2CJrZuUjNrClnAyJXINjqGAJ9VrnOM=; b=IjqqKyEjmcCeFdUHGFd/KMaFy9+v/d8zQq0XIaNSwL0uwFEBtoUZ1F9qCL89vFKs5b wz5vQvpH5ud/McaRJmsJHad3HQmhXXBJk6sCyxcR0kNtfkaUpHsrPhcw+gDhsHCp1uZg atM5y+CgQ3LF6olhhP7nMUzEVZ4+Ds5ELb3p6wG6H/0VOBihHRn4QkB0gePyOTZ9VmGo 5Hlxkqn7WfhWGQ/0xn3WXSD+uy6VybVo5QWVwLXPilBThlahwbnr8xvTwTHNvp2Vj+Xj ZBkcr0tp2vgB8w3F/XV3L9E19NlSnsbQy+fLCvwt34rqIEhRUhCs4aFc0k2FxmOoEt+Z RgEQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id uh38-20020a170906b3a600b0088fa4de4edcsi588073ejc.438.2023.02.03.05.55.30; Fri, 03 Feb 2023 05:55:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233445AbjBCNy2 (ORCPT + 99 others); Fri, 3 Feb 2023 08:54:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233373AbjBCNxg (ORCPT ); Fri, 3 Feb 2023 08:53:36 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 246E0A2A67; Fri, 3 Feb 2023 05:52:37 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 627A415DB; Fri, 3 Feb 2023 05:53:17 -0800 (PST) Received: from eglon.cambridge.arm.com (eglon.cambridge.arm.com [10.1.196.177]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9523C3F71E; Fri, 3 Feb 2023 05:52:31 -0800 (PST) From: James Morse To: linux-pm@vger.kernel.org, loongarch@lists.linux.dev, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arch@vger.kernel.org, linux-ia64@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, x86@kernel.org Cc: Marc Zyngier , Thomas Gleixner , Lorenzo Pieralisi , Mark Rutland , Sudeep Holla , Borislav Petkov , H Peter Anvin , Dave Hansen , Ingo Molnar , Will Deacon , Catalin Marinas , Huacai Chen , James Morse , Suzuki K Poulose , Oliver Upton , Len Brown , Rafael Wysocki , WANG Xuerui , Salil Mehta , Russell King , Jean-Philippe Brucker Subject: [RFC PATCH 10/32] arch_topology: Make register_cpu_capacity_sysctl() tolerant to late CPUs Date: Fri, 3 Feb 2023 13:50:21 +0000 Message-Id: <20230203135043.409192-11-james.morse@arm.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230203135043.409192-1-james.morse@arm.com> References: <20230203135043.409192-1-james.morse@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756818366911669530?= X-GMAIL-MSGID: =?utf-8?q?1756818366911669530?= register_cpu_capacity_sysctl() adds a property to sysfs that describes the CPUs capacity. This is done from a subsys_initcall() that assumes all possible CPUs are registered. With CPU hotplug, possible CPUs aren't registered until they become present, (or for arm64 enabled). This leads to messages during boot: | register_cpu_capacity_sysctl: too early to get CPU1 device! and once these CPUs are added to the system, the file is missing. Move this to a cpuhp callback, so that the file is created once CPUs are brought online. This covers CPUs that are added late by mechanisms like hotplug. One observable difference is the file is now missing for offline CPUs. Signed-off-by: James Morse --- If the offline CPUs thing is a problem for the tools that consume this value, we'd need to move cpu_capacity to be part of cpu.c's common_cpu_attr_groups. --- drivers/base/arch_topology.c | 38 ++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c index e7d6e6657ffa..83a46bc3105d 100644 --- a/drivers/base/arch_topology.c +++ b/drivers/base/arch_topology.c @@ -220,20 +220,34 @@ static DECLARE_WORK(update_topology_flags_work, update_topology_flags_workfn); static DEVICE_ATTR_RO(cpu_capacity); +static int cpu_capacity_sysctl_add(unsigned int cpu) +{ + struct device *cpu_dev = get_cpu_device(cpu); + + if (!cpu_dev) + return -ENOENT; + + device_create_file(cpu_dev, &dev_attr_cpu_capacity); + + return 0; +} + +static int cpu_capacity_sysctl_remove(unsigned int cpu) +{ + struct device *cpu_dev = get_cpu_device(cpu); + + if (!cpu_dev) + return -ENOENT; + + device_remove_file(cpu_dev, &dev_attr_cpu_capacity); + + return 0; +} + static int register_cpu_capacity_sysctl(void) { - int i; - struct device *cpu; - - for_each_possible_cpu(i) { - cpu = get_cpu_device(i); - if (!cpu) { - pr_err("%s: too early to get CPU%d device!\n", - __func__, i); - continue; - } - device_create_file(cpu, &dev_attr_cpu_capacity); - } + cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "topology/cpu-capacity", + cpu_capacity_sysctl_add, cpu_capacity_sysctl_remove); return 0; }