From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751108AbdHRM3O (ORCPT ); Fri, 18 Aug 2017 08:29:14 -0400 Received: from cloudserver094114.home.net.pl ([79.96.170.134]:50619 "EHLO cloudserver094114.home.net.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750847AbdHRM3N (ORCPT ); Fri, 18 Aug 2017 08:29:13 -0400 From: "Rafael J. Wysocki" To: Viresh Kumar Cc: Srinivas Pandruvada , Len Brown , Ingo Molnar , Peter Zijlstra , linux-pm@vger.kernel.org, Vincent Guittot , linux-kernel@vger.kernel.org Subject: Re: [PATCH] cpufreq: Don't send callback pointer to cpufreq_add_update_util_hook() Date: Fri, 18 Aug 2017 14:20:44 +0200 Message-ID: <6633140.4621GLIDvq@aspire.rjw.lan> In-Reply-To: <20170818041944.GH24299@vireshk-i7> References: <2692371.TLU4a4PDeX@aspire.rjw.lan> <20170818041944.GH24299@vireshk-i7> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Friday, August 18, 2017 6:19:44 AM CEST Viresh Kumar wrote: > On 17-08-17, 17:31, Rafael J. Wysocki wrote: > > On Thursday, August 17, 2017 2:04:48 PM CEST Viresh Kumar wrote: > > > The callers already have the structure (struct update_util_data) where > > > the function pointer is saved by cpufreq_add_update_util_hook(). And its > > > better if the callers fill it themselves, as they can do it from the > > > governor->init() callback then, which is called only once per policy > > > lifetime rather than doing it from governor->start which can get called > > > multiple times. > > > > So what problem exactly is this addressing? > > Its not fixing any problem really, but is rather just a cleanup patch. > I had a look at include/linux/sched/cpufreq.h and got confused for a > moment: > > struct update_util_data { > void (*func)(struct update_util_data *data, u64 time, unsigned int flags); > }; > > void cpufreq_add_update_util_hook(int cpu, struct update_util_data *data, > void (*func)(struct update_util_data *data, u64 time, > unsigned int flags)); > > > It wasn't quite straight-forward to understand why we needed to pass > both "data" and "func", while "data" should already have "func" set > within it. And then I realized that cpufreq_add_update_util_hook() is > actually setting that field. > > Filling the pointer from the callers is probably better because: > - It makes it more readable. > - We have to pass one less argument and the function prototype becomes > quite short. > - The callers don't have to set the data->func pointer from the > governor->start() callback now and can do it only once from > governor->init(). ->start(), stop() callbacks can get called a lot, > for example with CPU hotplug. > > But yeah, its all trivial stuff. No big problem solved. Well, there is a reason to do it this way, at least for me. If you want to look for all of the governor callbacks that can be used with _update_util(), it is now sufficient to grep for cpufreq_add_update_util_hook(), basically, but with the change you'd need to find the initialization of the update_util structure in there and see what function it points to. Thanks, Rafael