From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B3D0C43381 for ; Wed, 27 Mar 2019 16:16:17 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 27C69206C0 for ; Wed, 27 Mar 2019 16:16:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Az0IS9Hn"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="Xz8SyMxr"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="Hyikchul" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27C69206C0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=2mtcV7bIQI0P7kvvIn2N7IEECEKdr4WSlULFR7uRUIs=; b=Az0IS9Hn9DCIfNOJGviH4JwtM pXV1/KpxyVBP6qzkfGg459v6sR2l2MIe6KV0z7ro/d9lkEZ35wtSnSMBiiihkjYEGBcMUKk1/aDL7 2qbWUhzW9DORkpNBGZk9nD1/kahvIcBiJZ6sxDNcRYqDFwSVUZmtL+u1cVshKzVnKs635/Y1gie1o ZV/68p8WqoHT1jVKHcR1csaQnsyhfiqM0udatB9gludkcs64HinqCJEEHmncDXd48atClHuagxmR3 YmvfE6v8kl2Qt1SyEXceDmtTnJxzOkcUxstBteW4pqsW7fxShVEBJe/dJFYBsEfxP3j+787HHAg2j oY0Ei5obg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h9BDn-0007ms-Bk; Wed, 27 Mar 2019 16:16:11 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h9BDj-0007mN-Ao for linux-arm-kernel@lists.infradead.org; Wed, 27 Mar 2019 16:16:08 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 8ADA76086B; Wed, 27 Mar 2019 16:16:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1553703365; bh=ViDg5KblFEnvcbIWohCXL6OR3rdU/9Zcm5Ox/rXAJAM=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=Xz8SyMxrOdD/hKvXdXXYuLTDX+j+0Rsoq7wxj/N80SUcG9v0TCkBs6lyWfpT9Zlik joEWwv5179L0mL9Dq/YA0ThuTIbkiUC0CPDcikoAjFxVfllukIx2QH2R9/5A5AnJ5I QzcvdPQe4TExxTjCs6gTJbs3C+WkLCGR4cU42yGQ= Received: from [10.204.79.83] (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: mojha@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 55E5C6079C; Wed, 27 Mar 2019 16:15:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1553703363; bh=ViDg5KblFEnvcbIWohCXL6OR3rdU/9Zcm5Ox/rXAJAM=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=HyikchulBpMt7kP8kquuqyQK8V8CpJmgl3vEMHNoFklieUIX9jY1e4ltWWQD3j6xM 05fgjY8FeXu6OgWSH3UmlBOyhUN4evGEyHrc/Uksa9eGIIl+JDMIvgc3Ds+S4a2UU+ SidOkNmTNu8dWm6DT83gcl5AAAi1P+FgFqIICFUw= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 55E5C6079C Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=mojha@codeaurora.org Subject: Re: [PATCH v2] arch_topology: Make cpu_capacity sysfs node as ready-only To: Lingutla Chandrasekhar , gregkh@linuxfoundation.org, quentin.perret@arm.com, sudeep.holla@arm.com, dietmar.eggemann@arm.com References: <20190327115722.7693-1-clingutla@codeaurora.org> From: Mukesh Ojha Message-ID: <53347bf2-e300-3e05-c840-f5a02fab6e68@codeaurora.org> Date: Wed, 27 Mar 2019 21:45:51 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.0 MIME-Version: 1.0 In-Reply-To: <20190327115722.7693-1-clingutla@codeaurora.org> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190327_091607_432756_265E1B60 X-CRM114-Status: GOOD ( 20.71 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com, linux-kernel@vger.kernel.org, jeremy.linton@arm.com, juri.lelli@gmail.com Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 3/27/2019 5:27 PM, Lingutla Chandrasekhar wrote: > If user updates any cpu's cpu_capacity, then the new value is going to > be applied to all its online sibling cpus. But this need not to be correct > always, as sibling cpus (in ARM, same micro architecture cpus) would have > different cpu_capacity with different performance characteristics. > So updating the user supplied cpu_capacity to all cpu siblings s/So/So, > is not correct. > > And another problem is, current code assumes that 'all cpus in a cluster > or with same package_id (core_siblings), would have same cpu_capacity'. > But with commit '5bdd2b3f0f8 ("arm64: topology: add support to remove > cpu topology sibling masks")', when a cpu hotplugged out, the cpu > information gets cleared in its sibling cpus. So user supplied -- > cpu_capacity would be applied to only online sibling cpus at the time. > After that, if any cpu hot plugged in, it would have different cpu_capacity s/hot plugged/hotplugged > than its siblings, which breaks the above assumption. > > So instead of mucking around the core sibling mask for user supplied -- > value, use device-tree to set cpu capacity. And make the cpu_capacity > node as read-only to know the assymetry between cpus in the system. s/assymetry/asymmetry > While at it, remove cpu_scale_mutex usage, which used for sysfs write > protection. > > Tested-by: Dietmar Eggemann > Tested-by: Quentin Perret > Acked-by: Sudeep Holla > Reviewed-by: Quentin Perret > Signed-off-by: Lingutla Chandrasekhar Please fix the commit text minor comments. otherwise , looks good. Reviewed-by: Mukesh Ojha -Mukesh > > diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c > index edfcf8d982e4..1739d7e1952a 100644 > --- a/drivers/base/arch_topology.c > +++ b/drivers/base/arch_topology.c > @@ -7,7 +7,6 @@ > */ > > #include > -#include > #include > #include > #include > @@ -31,7 +30,6 @@ void arch_set_freq_scale(struct cpumask *cpus, unsigned long cur_freq, > per_cpu(freq_scale, i) = scale; > } > > -static DEFINE_MUTEX(cpu_scale_mutex); > DEFINE_PER_CPU(unsigned long, cpu_scale) = SCHED_CAPACITY_SCALE; > > void topology_set_cpu_scale(unsigned int cpu, unsigned long capacity) > @@ -51,37 +49,7 @@ static ssize_t cpu_capacity_show(struct device *dev, > static void update_topology_flags_workfn(struct work_struct *work); > static DECLARE_WORK(update_topology_flags_work, update_topology_flags_workfn); > > -static ssize_t cpu_capacity_store(struct device *dev, > - struct device_attribute *attr, > - const char *buf, > - size_t count) > -{ > - struct cpu *cpu = container_of(dev, struct cpu, dev); > - int this_cpu = cpu->dev.id; > - int i; > - unsigned long new_capacity; > - ssize_t ret; > - > - if (!count) > - return 0; > - > - ret = kstrtoul(buf, 0, &new_capacity); > - if (ret) > - return ret; > - if (new_capacity > SCHED_CAPACITY_SCALE) > - return -EINVAL; > - > - mutex_lock(&cpu_scale_mutex); > - for_each_cpu(i, &cpu_topology[this_cpu].core_sibling) > - topology_set_cpu_scale(i, new_capacity); > - mutex_unlock(&cpu_scale_mutex); > - > - schedule_work(&update_topology_flags_work); > - > - return count; > -} > - > -static DEVICE_ATTR_RW(cpu_capacity); > +static DEVICE_ATTR_RO(cpu_capacity); > > static int register_cpu_capacity_sysctl(void) > { > @@ -141,7 +109,6 @@ void topology_normalize_cpu_scale(void) > return; > > pr_debug("cpu_capacity: capacity_scale=%u\n", capacity_scale); > - mutex_lock(&cpu_scale_mutex); > for_each_possible_cpu(cpu) { > pr_debug("cpu_capacity: cpu=%d raw_capacity=%u\n", > cpu, raw_capacity[cpu]); > @@ -151,7 +118,6 @@ void topology_normalize_cpu_scale(void) > pr_debug("cpu_capacity: CPU%d cpu_capacity=%lu\n", > cpu, topology_get_cpu_scale(NULL, cpu)); > } > - mutex_unlock(&cpu_scale_mutex); > } > > bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu) _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel