Received: by 2002:a25:ca44:0:0:0:0:0 with SMTP id a65csp2271333ybg; Thu, 30 Jul 2020 15:23:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyce28fmXNekNJKvrj2CtaKQ7Z9Ox0Pw1Itb3wL36buZWe4SVOvkzjJfc34/u65HSzOaaFs X-Received: by 2002:a50:e60d:: with SMTP id y13mr1097848edm.225.1596147808490; Thu, 30 Jul 2020 15:23:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596147808; cv=none; d=google.com; s=arc-20160816; b=AQeM1AkzlQFUcB27rOpyv9Kr+VJeExk2Erp+9yk9f3KaU5sO7rm8DHObHbL2vFABQU lw9QP1zUWXSUVaYGDPgaZwA4ncN6lR38BRvSGgXvcX6xb5YtbE2Qx+9Wn/lEmhfPjBqE zMNw+uEEXQcr7BHl5mdmoPnjVuRbf2UdKNIv+SZwjW+CmCSVFcym/jpuyb2o0XHI7KNd y8fdBjizuTnixT0AePr+QPLq4Kkizl6oZdMzp90Bu0rBMxpRu0iffGlS0mNMHgZQuDFb GVbbNv1bzI1mPzzD2UnkvOVPTlp5+UVGH1Fcs8mm9eIJO5k/exlwuEEZyL6vgbJnLto0 lAvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date; bh=vZfB7mKtEU25f3EDZvg1umvsGEgwZp/UnC3hNIDvL9Q=; b=gk4yuhZGmzeV2ENJ4IXCePm9TyfkOf8meBOLtkHejujPZJgSSHD6LJ0/VZwZUiupD8 tzYqnbk6ZsYs77ws14Nj8XWhklCqPSp9/ePXimRkAhWKMd5/MfHu0NeCFuAvpFBzxtQ3 hqEnjjJ6sJj/YXeP+2U5akMDgR9vivpsTchCRTxcx7rfkFVk9Mar3srVlTV61brzWihz 5+2yVTrjm197InxSztyzr1kGr8mEhbtZI5Qume5koJNwuZlp6MrgFbKm8ypmozdBfOc+ ycLtfkyOBRxzvo9gbe7WJzHxLG/FPiITKsRrlQ3Dq9cXZ97J5QrBIzoubzTBWFhEPyg5 4CXg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h23si4237518ejx.550.2020.07.30.15.23.06; Thu, 30 Jul 2020 15:23:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730332AbgG3WWC (ORCPT + 99 others); Thu, 30 Jul 2020 18:22:02 -0400 Received: from mail.kernel.org ([198.145.29.99]:38514 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728762AbgG3WWB (ORCPT ); Thu, 30 Jul 2020 18:22:01 -0400 Received: from oasis.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 67DCD20809; Thu, 30 Jul 2020 22:21:59 +0000 (UTC) Date: Thu, 30 Jul 2020 18:21:57 -0400 From: Steven Rostedt To: Dongdong Yang Cc: gregkh@linuxfoundation.org, rjw@rjwysocki.net, viresh.kumar@linaro.org, mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, bsegall@google.com, mgorman@suse.de, linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org, linux-pm@vger.kernel.org, yangdongdong@xiaomi.com, tanggeliang@xiaomi.com, taojun@xiaomi.com, huangqiwu@xiaomi.com, rocking@linux.alibaba.com, fengwei@xiaomi.com, zhangguoquan@xiaomi.com, gulinghua@xiaomi.com, duhui@xiaomi.com Subject: Re: [PATCH] sched: Provide USF for the portable equipment. Message-ID: <20200730182157.110a5cf0@oasis.local.home> In-Reply-To: <1596116273-2290-1-git-send-email-contribute.kernel@gmail.com> References: <1596116273-2290-1-git-send-email-contribute.kernel@gmail.com> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 30 Jul 2020 21:35:43 +0800 Dongdong Yang wrote: I'll let others decide the value of this, but I have some comments. > > Signed-off-by: Dongdong Yang > Signed-off-by: Jun Tao > Signed-off-by: Qiwu Huang > Signed-off-by: Geliang Tang > Signed-off-by: Peng Wang Why all the signed-off-bys? All of you worked on it? > + if (evdata->data && val == FB_EVENT_BLANK) { > + blank = *(int *)(evdata->data); > + > + switch (blank) { > + case FB_BLANK_POWERDOWN: > + usf_vdev.is_screen_on = 0; > + if (usf_vdev.sysctl_sched_usf_non_ux != 0) > + adjust_task_pred_demand = > + &adjust_task_pred_demand_impl; > + else > + adjust_task_pred_demand = NULL; So sysctl can enable and disable this? > + > + break; > + > diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c > index 7fbaee2..7bc3429 100644 > --- a/kernel/sched/cpufreq_schedutil.c > +++ b/kernel/sched/cpufreq_schedutil.c > @@ -289,12 +289,21 @@ unsigned long schedutil_cpu_util(int cpu, unsigned long util_cfs, > return min(max, util); > } > > +#ifdef CONFIG_SCHED_USF > +void (*adjust_task_pred_demand)(int cpuid, unsigned long *util, > + struct rq *rq) = NULL; > +EXPORT_SYMBOL(adjust_task_pred_demand); > +#endif > + > static unsigned long sugov_get_util(struct sugov_cpu *sg_cpu) > { > struct rq *rq = cpu_rq(sg_cpu->cpu); > unsigned long util = cpu_util_cfs(rq); > unsigned long max = arch_scale_cpu_capacity(sg_cpu->cpu); > - > +#ifdef CONFIG_SCHED_USF > + if (adjust_task_pred_demand) > + adjust_task_pred_demand(sg_cpu->cpu, &util, rq); The above is racy. Nothing stops adjust_task_pred_demand from being non-null at the if condition, then becoming NULL before it is called. Instead I would have the following: DEFINE_STATIC_KEY_FALSE(adjust_task_pred_set); #ifdef CONFIG_SCHED_USF void adjust_task_pred_demand(int cpuid, unsigned long *util, struct rq *rq); #else static inline void adjust_task_pred_demand(int cpuid, unsigned long *util, struct rq *rq) { } #endif if (static_key_unlikely(adjust_task_pred_set)) adjust_task_pred_demand(sg_cpu->cpu, &util, rq); And hopefully the compiler will just remove all of it if it's not enabled. Then you set the static branch when you want it to be called, and do not use a racy function pointer. -- Steve > +#endif > sg_cpu->max = max; > sg_cpu->bw_dl = cpu_bw_dl(rq); >