Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp151107pxb; Wed, 3 Feb 2021 01:59:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJyHRzObHlnxRPig/4Os6R3RPnYhmaDIuL6wRWZuf+z6vpiH9j7vu7qFy6IVDgRyUDg9KF8/ X-Received: by 2002:a17:907:10c1:: with SMTP id rv1mr2552675ejb.74.1612346343698; Wed, 03 Feb 2021 01:59:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612346343; cv=none; d=google.com; s=arc-20160816; b=U+gJtIPtKnyFVoITsyyxsU19WskVwpkHd1GT0/w210bra4nfHEbWL/be0KEw0lO1IT etpiXpo4VMRDoH2Xf575nO8vp5/sv7UpoDIg5UhaB3W6zsn6jIUY84buyRFpUtFQK6pa vHp+dqZH0eG4b50mqcY85dLO2/EeT9zUV0zBsHWy404juoayejHBtjK4eTAQUzI85l8R y2MHhOyPVMYQs30nfDliLPaKHEgt+gRJHkhvYHkaTkTJC07VB/MqT4MHiSn4qxdaMPUd 78iWKjnQspd3A1/Gh+ylCfilwrPtCEko+GU3H0gLfkDw5KMvUQj0bSfB6s3c3Udq8zBC ep+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:dlp-filter:cms-type :content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:organization:from:cc:to:subject :dkim-signature:dkim-filter; bh=sHXorTSjgyFCm+4/5nErm0A5DNcZXDiUnA+ObsFDYO4=; b=aqrUb/k4JT7OwqpFwlyPVBVF4dY+pM9ma/9fFJCrffzTY+H/eosiLafzSGBMDoTITS GZRBaA0dWoGPAI4wCWw5b3zBcMBv2O+ei/l7dtbDn2MpmXJO4J/tgZ40Wgv9D7/dosGr gsc2aoPbV63rDZYtJU05jJubje7+8ZadgFoWR2Kz0k6QOt0c0nk7uGL/AwsZn/ohtstF U2M1UtzTq9hmLaN8guWazl5VFhEN74DGP8fea00u6OmwtLBBzQWuGe/5YxCFvgNVpIQH 0IjQ5VNfdMeJjB2Ae1x3NWKnQfT3Gt0cih2U4x9UFnXdLPRHTuBJhNUKrPVDujEOmge1 0dzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=JXZ4Y6WK; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k26si1042856eds.217.2021.02.03.01.58.39; Wed, 03 Feb 2021 01:59:03 -0800 (PST) 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; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=JXZ4Y6WK; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233584AbhBCJ4D (ORCPT + 99 others); Wed, 3 Feb 2021 04:56:03 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:11707 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233563AbhBCJz7 (ORCPT ); Wed, 3 Feb 2021 04:55:59 -0500 Received: from epcas1p1.samsung.com (unknown [182.195.41.45]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20210203095513epoutp04a19d58de6bbcadd09fa66c917400e64e~gND_AmCmz3181431814epoutp04k for ; Wed, 3 Feb 2021 09:55:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20210203095513epoutp04a19d58de6bbcadd09fa66c917400e64e~gND_AmCmz3181431814epoutp04k DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1612346113; bh=sHXorTSjgyFCm+4/5nErm0A5DNcZXDiUnA+ObsFDYO4=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=JXZ4Y6WK6Bcp3TD320/ATs/HEdZIJQthqX4QGFSqr0z12zX+Vx5yb/+iDKUuF8hDN NCav30Kda5N8nOXJADDLhaXyfQiztACByeFxLe5K8oiU41Yk1UJbsDVwLrHp45T3nd XsFUyJ1En1wNMyF5jabKF9Ax0o7owYWEXVVpINaQ= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas1p1.samsung.com (KnoxPortal) with ESMTP id 20210203095513epcas1p16b04a8155f65f43a16964a6dac66795d~gND9Slv990818008180epcas1p1V; Wed, 3 Feb 2021 09:55:13 +0000 (GMT) Received: from epsmges1p2.samsung.com (unknown [182.195.40.155]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4DVxqz2lLnz4x9QC; Wed, 3 Feb 2021 09:55:11 +0000 (GMT) Received: from epcas1p2.samsung.com ( [182.195.41.46]) by epsmges1p2.samsung.com (Symantec Messaging Gateway) with SMTP id A2.81.63458.FF27A106; Wed, 3 Feb 2021 18:55:11 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas1p4.samsung.com (KnoxPortal) with ESMTPA id 20210203095510epcas1p44e745b922adc9ed51e142b1c5f0d859a~gND6uU2Ys3151431514epcas1p4n; Wed, 3 Feb 2021 09:55:10 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20210203095510epsmtrp1d163fe28a9652c93768113f4be02693a~gND6tSHTx1614416144epsmtrp1J; Wed, 3 Feb 2021 09:55:10 +0000 (GMT) X-AuditID: b6c32a36-6dfff7000000f7e2-c2-601a72ff5ba9 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id E1.1F.13470.EF27A106; Wed, 3 Feb 2021 18:55:10 +0900 (KST) Received: from [10.113.221.102] (unknown [10.113.221.102]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20210203095510epsmtip2675fc0c0a34105beda148195a6e978f7~gND6d_L8e2068420684epsmtip2B; Wed, 3 Feb 2021 09:55:10 +0000 (GMT) Subject: Re: [RFC][PATCH 1/3] PM /devfreq: add user frequency limits into devfreq struct To: Lukasz Luba , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: vireshk@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, Dietmar.Eggemann@arm.com, amitk@kernel.org, rui.zhang@intel.com, myungjoo.ham@samsung.com, kyungmin.park@samsung.com From: Chanwoo Choi Organization: Samsung Electronics Message-ID: Date: Wed, 3 Feb 2021 19:11:19 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Thunderbird/59.0 MIME-Version: 1.0 In-Reply-To: <20210126104001.20361-2-lukasz.luba@arm.com> Content-Language: en-US Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrHJsWRmVeSWpSXmKPExsWy7bCmnu7/IqkEg90HBC0Oz6+wmPdZ1uLp hK3MFmeb3rBbXN41h83ic+8RRouFTS3sFrcbV7BZzP0yldniycM+NovND46xOXB7rJm3htFj 8Z6XTB6bVnWyedy5tofNo2/LKkaPz5vkAtiism0yUhNTUosUUvOS81My89JtlbyD453jTc0M DHUNLS3MlRTyEnNTbZVcfAJ03TJzgK5TUihLzCkFCgUkFhcr6dvZFOWXlqQqZOQXl9gqpRak 5BRYFugVJ+YWl+al6yXn51oZGhgYmQIVJmRnnOw4wlhwQrdi3cdZrA2MbapdjJwcEgImEo1f /7N3MXJxCAnsYJRYPa2JEcL5xCjRMvUqlPONUeLF0X0sMC1nZ8+HatnLKHG0GablPaNE85dZ zCBVwgJREvsP7WUEsUUE4iUWHvoA1sEssA+oo202K0iCTUBLYv+LG2wgNr+AosTVH4+BGjg4 eAXsJHoX2IKEWQRUJGbN+ANWLioQJnFyWwvYTF4BQYmTM5+wgJRzClhKHFkKFmYWEJe49WQ+ E4QtL7H97RxmiKP3cEgsvSoGYbtIzP9xnx3CFpZ4dXwLlC0l8bK/Dcqullh58ggbyMkSAh2M Elv2X2CFSBhL7F86mQlkL7OApsT6XfoQYUWJnb/nQt3AJ/Huaw8rSImEAK9ER5sQRImyxOUH d5kgbEmJxe2dbBMYlWYheWYWkg9mIflgFsKyBYwsqxjFUguKc9NTiw0LjJAjexMjOOFqme1g nPT2g94hRiYOxkOMEhzMSiK8pyaJJQjxpiRWVqUW5ccXleakFh9iNAUG70RmKdHkfGDKzyuJ NzQ1MjY2tjAxNDM1NFQS5000eBAvJJCeWJKanZpakFoE08fEwSnVwGSs0+TN9HeCadP+uK3X v82++vTY99apvF/n+71K8r67aN1jnv7NhVsjmefPPnDsftu0e1dqJC49lRK7Z+5c/7Dh1bNn TcKZt9e3fNDpXFi9Irco5Xdd2q6L8oaHHHb/TZ5zX3cu8/+lCbddl3ZsXjfv1ZWoqPeX54ub 77xf4v477Xm9dmJCLWvujVj5xGemHYczg6+p7i3U7Y+pCvG0LLK+uePTi4evOWe8npvzrVDI 7bjQRoUyhckHBBaI3jjI0yUfYn5us+nDkLUJXy5sn93a4ak9f64Xb73P1ZT1BTUrDZtNIp8G 31y8YcJehUmKaVFzg+bM4FvlPlnejUF5W4eL1kmJ7Qv6Pxf8lXXTstuixFKckWioxVxUnAgA MpERgEEEAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBIsWRmVeSWpSXmKPExsWy7bCSvO6/IqkEg717hCwOz6+wmPdZ1uLp hK3MFmeb3rBbXN41h83ic+8RRouFTS3sFrcbV7BZzP0yldniycM+NovND46xOXB7rJm3htFj 8Z6XTB6bVnWyedy5tofNo2/LKkaPz5vkAtiiuGxSUnMyy1KL9O0SuDJOdhxhLDihW7Hu4yzW BsY21S5GTg4JAROJs7Pns3cxcnEICexmlPh4eB4rREJSYtrFo8xdjBxAtrDE4cPFEDVvGSVW LGxgBqkRFoiS2H9oLyOILSIQLzHhwXV2EJtZYB+jxMLFFnBDz7xczwSSYBPQktj/4gYbiM0v oChx9cdjRpAFvAJ2Er0LbEHCLAIqErNm/AG7QVQgTGLnksdgrbwCghInZz5hASnnFLCUOLKU EWKVusSfeZeYIWxxiVtP5jNB2PIS29/OYZ7AKDwLSfcsJC2zkLTMQtKygJFlFaNkakFxbnpu sWGBYV5quV5xYm5xaV66XnJ+7iZGcORpae5g3L7qg94hRiYOxkOMEhzMSiK8pyaJJQjxpiRW VqUW5ccXleakFh9ilOZgURLnvdB1Ml5IID2xJDU7NbUgtQgmy8TBKdXAJHmU3c3u3/eHrJ9e xd8JfP3zgR//Za7jkUoF6ou0NKb+WmcZHultaTR9k+6VjX/fC8dryaWuaWW32raiZunKp7XH f62bPL9+peLT+KznDQcM7LVCgluNRDe7fmZ/bzQl47Av38J5ooszxDrOHG258pS7LPNmcE+D /jTNIwnqb90qLeayqS+s3BqmaVB175XFNO+kjJA9nnpnst6Y7XrSWRXXrPXSSntVufzdfayz dIT2ThG9e1N2SYKaz5MPk9dWMl+qOr9039ZFvYwuj5aEhoQcErxSOUNRzsY063iR4oUPVw9d bA419MqOLdGYr5M+kePm9apfHhPfc4h0WF5Jr7grMPkN35oXPsvnz+ucrcRSnJFoqMVcVJwI ADZKZ/ErAwAA X-CMS-MailID: 20210203095510epcas1p44e745b922adc9ed51e142b1c5f0d859a X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20210126104217epcas1p349c717ccf0ea4f964153040b48c72352 References: <20210126104001.20361-1-lukasz.luba@arm.com> <20210126104001.20361-2-lukasz.luba@arm.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Lukasz, When accessing the max_freq and min_freq at devfreq-cooling.c, even if can access 'user_max_freq' and 'lock' by using the 'devfreq' instance, I think that the direct access of variables (lock/user_max_freq/user_min_freq) of struct devfreq are not good. Instead, how about using the 'DEVFREQ_TRANSITION_NOTIFIER' notification with following changes of 'struct devfreq_freq'? Also, need to add codes into devfreq_set_target() for initializing 'new_max_freq' and 'new_min_freq' before sending the DEVFREQ_POSTCHANGE notification. diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h index 147a229056d2..d5726592d362 100644 --- a/include/linux/devfreq.h +++ b/include/linux/devfreq.h @@ -207,6 +207,8 @@ struct devfreq { struct devfreq_freqs { unsigned long old; unsigned long new; + unsigned long new_max_freq; + unsigned long new_min_freq; }; And I think that new 'user_min_freq'/'user_max_freq' are not necessary. You can get the current max_freq/min_freq by using the following steps: get_freq_range(devfreq, &min_freq, &max_freq); dev_pm_opp_find_freq_floor(pdev, &min_freq); dev_pm_opp_find_freq_floor(pdev, &max_freq); So that you can get the 'max_freq/min_freq' and then initialize the 'freqs.new_max_freq and freqs.new_min_freq' with them as following: in devfreq_set_target() get_freq_range(devfreq, &min_freq, &max_freq); dev_pm_opp_find_freq_floor(pdev, &min_freq); dev_pm_opp_find_freq_floor(pdev, &max_freq); freqs.new_max_freq = min_freq; freqs.new_max_freq = max_freq; devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); On 1/26/21 7:39 PM, Lukasz Luba wrote: > The new fields inside devfreq struct allow to check the frequency limits > set by the user via sysfs. These limits are important for thermal governor > Intelligent Power Allocation (IPA) which needs to know the maximum allowed > power consumption of the device. > > Signed-off-by: Lukasz Luba > --- > drivers/devfreq/devfreq.c | 41 +++++++++++++++++++++++++++++++++++---- > include/linux/devfreq.h | 4 ++++ > 2 files changed, 41 insertions(+), 4 deletions(-) > > diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c > index 94cc25fd68da..e985a76e5ff3 100644 > --- a/drivers/devfreq/devfreq.c > +++ b/drivers/devfreq/devfreq.c > @@ -843,6 +843,9 @@ struct devfreq *devfreq_add_device(struct device *dev, > goto err_dev; > } > > + devfreq->user_min_freq = devfreq->scaling_min_freq; > + devfreq->user_max_freq = devfreq->scaling_max_freq; > + > devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); > atomic_set(&devfreq->suspend_count, 0); > > @@ -1513,6 +1516,8 @@ static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr, > const char *buf, size_t count) > { > struct devfreq *df = to_devfreq(dev); > + struct device *pdev = df->dev.parent; > + struct dev_pm_opp *opp; > unsigned long value; > int ret; > > @@ -1533,6 +1538,19 @@ static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr, > if (ret < 0) > return ret; > > + if (!value) > + value = df->scaling_min_freq; > + > + opp = dev_pm_opp_find_freq_ceil(pdev, &value); > + if (IS_ERR(opp)) > + return count; > + > + dev_pm_opp_put(opp); > + > + mutex_lock(&df->lock); > + df->user_min_freq = value; > + mutex_unlock(&df->lock); > + > return count; > } > > @@ -1554,7 +1572,9 @@ static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr, > const char *buf, size_t count) > { > struct devfreq *df = to_devfreq(dev); > - unsigned long value; > + struct device *pdev = df->dev.parent; > + unsigned long value, value_khz; > + struct dev_pm_opp *opp; > int ret; > > /* > @@ -1579,14 +1599,27 @@ static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr, > * A value of zero means "no limit". > */ > if (value) > - value = DIV_ROUND_UP(value, HZ_PER_KHZ); > + value_khz = DIV_ROUND_UP(value, HZ_PER_KHZ); > else > - value = PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE; > + value_khz = PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE; > > - ret = dev_pm_qos_update_request(&df->user_max_freq_req, value); > + ret = dev_pm_qos_update_request(&df->user_max_freq_req, value_khz); > if (ret < 0) > return ret; > > + if (!value) > + value = df->scaling_max_freq; > + > + opp = dev_pm_opp_find_freq_floor(pdev, &value); > + if (IS_ERR(opp)) > + return count; > + > + dev_pm_opp_put(opp); > + > + mutex_lock(&df->lock); > + df->user_max_freq = value; > + mutex_unlock(&df->lock); > + > return count; > } > > diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h > index b6d3bae1c74d..147a229056d2 100644 > --- a/include/linux/devfreq.h > +++ b/include/linux/devfreq.h > @@ -147,6 +147,8 @@ struct devfreq_stats { > * touch this. > * @user_min_freq_req: PM QoS minimum frequency request from user (via sysfs) > * @user_max_freq_req: PM QoS maximum frequency request from user (via sysfs) > + * @user_min_freq: User's minimum frequency > + * @user_max_freq: User's maximum frequency > * @scaling_min_freq: Limit minimum frequency requested by OPP interface > * @scaling_max_freq: Limit maximum frequency requested by OPP interface > * @stop_polling: devfreq polling status of a device. > @@ -185,6 +187,8 @@ struct devfreq { > struct dev_pm_qos_request user_max_freq_req; > unsigned long scaling_min_freq; > unsigned long scaling_max_freq; > + unsigned long user_min_freq; > + unsigned long user_max_freq; > bool stop_polling; > > unsigned long suspend_freq; > -- Best Regards, Chanwoo Choi Samsung Electronics