Received: by 2002:ac0:a591:0:0:0:0:0 with SMTP id m17-v6csp2007061imm; Fri, 6 Jul 2018 10:08:55 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcfDtx/5ozdfK2DrQfaUcNUp9eAFxmuBaKba2ecpFpCcrLbfgUCyrxBngHqSLhksCykGk+x X-Received: by 2002:a63:3f05:: with SMTP id m5-v6mr4163790pga.51.1530896935495; Fri, 06 Jul 2018 10:08:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530896935; cv=none; d=google.com; s=arc-20160816; b=J0CveAgT1rCSYrra4jCYfN4YoQH6TGJb38zeyG4Fr/3gn+QaYZ0bv0xlGtId9Dn/Xh SWHy9VHbkOkQRZRRD1aNVpcy1K2SLcGBoKmKE5Tx2TiJwqCeRLEXqCLWjJL/6zhIPo+H Q5FvgM3zoQcuvjGD87CsuBjJWVivQoWFLuSJgv9lHKUFwLIsL1S5HM9in2qvwH3CeO9u GdXwaAF4DuNBcgz3AnzF2kDtDUuH/MsuuexOf2I2WRvwIRUrKy0aFK1EoSBrZ/wMjc9M EkHh3kU5CAwY1aiwafNG/5zEl5QjJlz3xkpEOskNzZdAFKNarLB5Y0tFrE8SMMFnCGaW sBKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-transfer-encoding:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=A+AU7Coob57Kx8P6f2aEN/kMWbn/fChfzDXyRaQk7VQ=; b=01OSblPogOHxzTbb6wh3dTALYOwhq3XfsxrZDYlHlASG+pUhhGoSVl5hx1ASXNwlyT 7QTHicYAEadRPkz+IuSXlCSybus72v8FGoCQ0UX6+SbOjxW02vQXF257VrRMhILLBYeC xzNRaffelCjYhtfN6pPIHf+a7OJYRBUe4QQNe/3xlP1Wm6Jexnz+LPA/qD7fyJ83MvUK Gg+J0l1Y4LTVkFslwLpcPvUOwAc7F6qkbW+TOoYYpt/MyrM1jhrsCKO0kEyU6Ok5DD5U CIL6rMsq6B/eMGI6rjDHSPn9vCAObuEUCB8a9tLu04+0WduzAnIansePxXZZbp2e+rw7 n1HQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=kyOA4BrY; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d130-v6si8054305pgc.189.2018.07.06.10.08.41; Fri, 06 Jul 2018 10:08:55 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=kyOA4BrY; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933601AbeGFRHG (ORCPT + 99 others); Fri, 6 Jul 2018 13:07:06 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:35525 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932857AbeGFRHD (ORCPT ); Fri, 6 Jul 2018 13:07:03 -0400 Received: by mail-pf0-f193.google.com with SMTP id q7-v6so7821005pff.2 for ; Fri, 06 Jul 2018 10:07:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=A+AU7Coob57Kx8P6f2aEN/kMWbn/fChfzDXyRaQk7VQ=; b=kyOA4BrYtS1O5bEeq/c3ovZpQKSJaONm4bqSxg4NpUZzMDwlG3WczN2WCpyRs8z++g n4OLS552yHk/qo9fxX+lGDFIQa60kSV0KwHYX/j8N4TlxvLUJQr4P9fHIzkyzTQ69LY0 2ybp7DU7OwvoW1Zntx+LvY7s7xIT5tLY7OGYU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=A+AU7Coob57Kx8P6f2aEN/kMWbn/fChfzDXyRaQk7VQ=; b=FckTLfIvVnj1Bsc0OGkIIMdl6578PMXLJ0RM5fGs657cHMN2dIXaz9Sj63hkwR284g DtUnVeI5iwpAVvy4ZgZUrt9V9KnpaoHhHRdPJmSC8rPgNEOr+tcToNB8TfliLep3T0Nq vj+34f1sCj9r8YmP1yK2MFmVZcNGn4KRyRuq9xP2Fy4XD3ORj6KJ9S8hJfxlMrRt0REe E8bsN3mzf4f26pmn0wlaTQLdsW+ou6t/MUN94wGe0GgQWW4X3cgznw0ONIzOx7f9cfYI TVrOD0ke5oKDHc4DihjdPraA6462JKyuyB1DTfOqgAJIkRb/XHDQ8Od1xSRSKwq3n+Ip LIwA== X-Gm-Message-State: APt69E2dvOKHd5J+aPgZ44Hv5kInsfO50aXGqzy5vh/YRF1EonnVup1x 7BudG7gOiq/RfQSwdDBx/PKDoA== X-Received: by 2002:a63:a042:: with SMTP id u2-v6mr9975121pgn.80.1530896822873; Fri, 06 Jul 2018 10:07:02 -0700 (PDT) Received: from localhost ([2620:0:1000:1501:8e2d:4727:1211:622]) by smtp.gmail.com with ESMTPSA id r6-v6sm12747895pgv.0.2018.07.06.10.07.02 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 06 Jul 2018 10:07:02 -0700 (PDT) Date: Fri, 6 Jul 2018 10:07:01 -0700 From: Matthias Kaehlcke To: Chanwoo Choi Cc: MyungJoo Ham , Kyungmin Park , Arnd Bergmann , Greg Kroah-Hartman , Rob Herring , Mark Rutland , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Brian Norris , Douglas Anderson , Enric Balletbo i Serra , "Rafael J . Wysocki" , Viresh Kumar , Lee Jones , Benson Leung , Olof Johansson Subject: Re: [PATCH v5 04/12] PM / devfreq: Add struct devfreq_policy Message-ID: <20180706170701.GF129942@google.com> References: <20180703234705.227473-1-mka@chromium.org> <20180703234705.227473-5-mka@chromium.org> <5B3C3632.1010706@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <5B3C3632.1010706@samsung.com> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Wed, Jul 04, 2018 at 11:51:30AM +0900, Chanwoo Choi wrote: > Hi, > > On 2018년 07월 04일 08:46, Matthias Kaehlcke wrote: > > Move variables related with devfreq policy changes from struct devfreq > > to the new struct devfreq_policy and add a policy field to struct devfreq. > > > > The following variables are moved: > > > > df->min/max_freq => p->user.min/max_freq > > df->scaling_min/max_freq => p->devinfo.min/max_freq > > df->governor => p->governor > > df->governor_name => p->governor_name > > > > Signed-off-by: Matthias Kaehlcke > > Reviewed-by: Brian Norris > > --- > > Changes in v5: > > - none > > > > Changes in v4: > > - added 'Reviewed-by: Brian Norris ' tag > > > > Changes in v3: > > - none > > > > Changes in v2: > > - performance, powersave and simpleondemand governors don't need changes > > with "PM / devfreq: Don't adjust to user limits in governors" > > - formatting fixes > > --- > > drivers/devfreq/devfreq.c | 137 ++++++++++++++++------------- > > drivers/devfreq/governor_passive.c | 4 +- > > include/linux/devfreq.h | 38 +++++--- > > 3 files changed, 103 insertions(+), 76 deletions(-) > > > > (skip) > > > > > diff --git a/drivers/devfreq/governor_passive.c b/drivers/devfreq/governor_passive.c > > index 3bc29acbd54e..e0987c749ec2 100644 > > --- a/drivers/devfreq/governor_passive.c > > +++ b/drivers/devfreq/governor_passive.c > > @@ -99,12 +99,12 @@ static int update_devfreq_passive(struct devfreq *devfreq, unsigned long freq) > > { > > int ret; > > > > - if (!devfreq->governor) > > + if (!devfreq->policy.governor) > > return -EINVAL; > > > > mutex_lock_nested(&devfreq->lock, SINGLE_DEPTH_NESTING); > > > > - ret = devfreq->governor->get_target_freq(devfreq, &freq); > > + ret = devfreq->policy.governor->get_target_freq(devfreq, &freq); > > if (ret < 0) > > goto out; > > > > diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h > > index 3aae5b3af87c..9bf23b976f4d 100644 > > --- a/include/linux/devfreq.h > > +++ b/include/linux/devfreq.h > > @@ -109,6 +109,30 @@ struct devfreq_dev_profile { > > unsigned int max_state; > > }; > > > > +/** > > + * struct devfreq_freq_limits - Devfreq frequency limits > > + * @min_freq: minimum frequency > > + * @max_freq: maximum frequency > > + */ > > +struct devfreq_freq_limits { > > + unsigned long min_freq; > > + unsigned long max_freq; > > +}; > > + > > +/** > > + * struct devfreq_policy - Devfreq policy > > + * @user: frequency limits requested by the user > > + * @devinfo: frequency limits of the device (available OPPs) > > + * @governor: method how to choose frequency based on the usage. > > nitpick. remove '.' on the end of line. Ok > > + * @governor_name: devfreq governor name for use with this devfreq > > + */ > > +struct devfreq_policy { > > + struct devfreq_freq_limits user; > > + struct devfreq_freq_limits devinfo; > > + const struct devfreq_governor *governor; > > + char governor_name[DEVFREQ_NAME_LEN]; > > +}; > > + > > /** > > * struct devfreq - Device devfreq structure > > * @node: list node - contains the devices with devfreq that have been > > @@ -117,8 +141,6 @@ struct devfreq_dev_profile { > > * @dev: device registered by devfreq class. dev.parent is the device > > * using devfreq. > > * @profile: device-specific devfreq profile > > - * @governor: method how to choose frequency based on the usage. > > - * @governor_name: devfreq governor name for use with this devfreq > > * @nb: notifier block used to notify devfreq object that it should > > * reevaluate operable frequencies. Devfreq users may use > > * devfreq.nb to the corresponding register notifier call chain. > > @@ -126,10 +148,7 @@ struct devfreq_dev_profile { > > * @previous_freq: previously configured frequency value. > > * @data: Private data of the governor. The devfreq framework does not > > * touch this. > > - * @min_freq: Limit minimum frequency requested by user (0: none) > > - * @max_freq: Limit maximum frequency requested by user (0: none) > > - * @scaling_min_freq: Limit minimum frequency requested by OPP interface > > - * @scaling_max_freq: Limit maximum frequency requested by OPP interface > > + * @policy: Policy for frequency adjustments > > The devfreq_policy contains the range of frequency and governor information. > But, this description focus on the frequency. You need to explain the more > correct description of 'policy'. I wouldn't say that the focus is on 'frequency', but on 'frequency adjustments', and the governor is an integral part of them. I can change it to "Policy for frequency adjustments, including frequency limits and the governor" if you prefer. I'm open to other suggestions. > > * @stop_polling: devfreq polling status of a device. > > * @total_trans: Number of devfreq transitions > > * @trans_table: Statistics of devfreq transitions > > @@ -151,8 +170,6 @@ struct devfreq { > > struct mutex lock; > > struct device dev; > > struct devfreq_dev_profile *profile; > > - const struct devfreq_governor *governor; > > - char governor_name[DEVFREQ_NAME_LEN]; > > struct notifier_block nb; > > struct delayed_work work; > > > > @@ -161,10 +178,7 @@ struct devfreq { > > > > void *data; /* private data for governors */ > > > > - unsigned long min_freq; > > - unsigned long max_freq; > > - unsigned long scaling_min_freq; > > - unsigned long scaling_max_freq; > > + struct devfreq_policy policy; > > I recommend that you better to move under 'struct devfreq_dev_profile' > as following: > > struct devfreq_dev_profile *profile; > struct devfreq_policy policy; Will do Thanks for the review!