Message ID | 43ffe25df5e9b268778656a0b9259c2939715681.1574699610.git.leonard.crestez@nxp.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | PM: QoS: Restore DEV_PM_QOS_MIN/MAX_FREQUENCY | expand |
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 --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, };
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(-)