diff mbox series

[v3,2/4] PM / QOS: Redefine FREQ_QOS_MAX_DEFAULT_VALUE to S32_MAX

Message ID 43ffe25df5e9b268778656a0b9259c2939715681.1574699610.git.leonard.crestez@nxp.com (mailing list archive)
State Superseded
Headers show
Series PM: QoS: Restore DEV_PM_QOS_MIN/MAX_FREQUENCY | expand

Commit Message

Leonard Crestez Nov. 25, 2019, 4:42 p.m. UTC
QOS requests for DEFAULT_VALUE are supposed to be ignored but this is
not the case for FREQ_QOS_MAX. Adding one request for MAX_DEFAULT_VALUE
and one for a real value will cause freq_qos_read_value to unexpectedly
return MAX_DEFAULT_VALUE (-1).

This happens because freq_qos max value is aggregated with PM_QOS_MIN
but FREQ_QOS_MAX_DEFAULT_VALUE is (-1) so it's smaller than other
values.

Fix this by redefining FREQ_QOS_MAX_DEFAULT_VALUE to S32_MAX.

Looking at current users for freq_qos it seems that none of them create
requests for FREQ_QOS_MAX_DEFAULT_VALUE.

Fixes: 77751a466ebd ("PM: QoS: Introduce frequency QoS")
Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
---
 include/linux/pm_qos.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Matthias Kaehlcke Nov. 25, 2019, 9:09 p.m. UTC | #1
On Mon, Nov 25, 2019 at 06:42:17PM +0200, Leonard Crestez wrote:
> QOS requests for DEFAULT_VALUE are supposed to be ignored but this is
> not the case for FREQ_QOS_MAX. Adding one request for MAX_DEFAULT_VALUE
> and one for a real value will cause freq_qos_read_value to unexpectedly
> return MAX_DEFAULT_VALUE (-1).
> 
> This happens because freq_qos max value is aggregated with PM_QOS_MIN
> but FREQ_QOS_MAX_DEFAULT_VALUE is (-1) so it's smaller than other
> values.
> 
> Fix this by redefining FREQ_QOS_MAX_DEFAULT_VALUE to S32_MAX.
> 
> Looking at current users for freq_qos it seems that none of them create
> requests for FREQ_QOS_MAX_DEFAULT_VALUE.
> 
> Fixes: 77751a466ebd ("PM: QoS: Introduce frequency QoS")

nit: you could add:

Reported-by: Matthias Kaehlcke <mka@chromium.org>

> Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
> ---
>  include/linux/pm_qos.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
> index ebf5ef17cc2a..24a6263c9931 100644
> --- a/include/linux/pm_qos.h
> +++ b/include/linux/pm_qos.h
> @@ -254,11 +254,11 @@ static inline s32 dev_pm_qos_raw_resume_latency(struct device *dev)
>  	return PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
>  }
>  #endif
>  
>  #define FREQ_QOS_MIN_DEFAULT_VALUE	0
> -#define FREQ_QOS_MAX_DEFAULT_VALUE	(-1)
> +#define FREQ_QOS_MAX_DEFAULT_VALUE	S32_MAX

Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
diff mbox series

Patch

diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index ebf5ef17cc2a..24a6263c9931 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -254,11 +254,11 @@  static inline s32 dev_pm_qos_raw_resume_latency(struct device *dev)
 	return PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
 }
 #endif
 
 #define FREQ_QOS_MIN_DEFAULT_VALUE	0
-#define FREQ_QOS_MAX_DEFAULT_VALUE	(-1)
+#define FREQ_QOS_MAX_DEFAULT_VALUE	S32_MAX
 
 enum freq_qos_req_type {
 	FREQ_QOS_MIN = 1,
 	FREQ_QOS_MAX,
 };