Message ID | 20230731060354.4802-1-clive.lin@mediatek.com (mailing list archive) |
---|---|
State | Mainlined, archived |
Headers | show |
Series | PM: QoS: Add check to make sure CPU latency is non-negative | expand |
On Mon, Jul 31, 2023 at 8:04 AM Clive Lin <clive.lin@mediatek.com> wrote: > > CPU latency should never be negative, which will be incorrectly high > when converted to unsigned data type. Commit 8d36694245f2 ("PM: QoS: > Add check to make sure CPU freq is non-negative") makes sure CPU freq > is non-negative to fix incorrect behavior in freq_qos. Adding a check > to make sure CPU latency is non-negative can prevent this problem > from happening in cpu_latency_qos. > > Signed-off-by: Clive Lin <clive.lin@mediatek.com> > --- > kernel/power/qos.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/kernel/power/qos.c b/kernel/power/qos.c > index 782d3b41c1f3..4244b069442e 100644 > --- a/kernel/power/qos.c > +++ b/kernel/power/qos.c > @@ -220,6 +220,11 @@ static struct pm_qos_constraints cpu_latency_constraints = { > .type = PM_QOS_MIN, > }; > > +static inline bool cpu_latency_qos_value_invalid(s32 value) > +{ > + return value < 0 && value != PM_QOS_DEFAULT_VALUE; > +} > + > /** > * cpu_latency_qos_limit - Return current system-wide CPU latency QoS limit. > */ > @@ -263,7 +268,7 @@ static void cpu_latency_qos_apply(struct pm_qos_request *req, > */ > void cpu_latency_qos_add_request(struct pm_qos_request *req, s32 value) > { > - if (!req) > + if (!req || cpu_latency_qos_value_invalid(value)) > return; > > if (cpu_latency_qos_request_active(req)) { > @@ -289,7 +294,7 @@ EXPORT_SYMBOL_GPL(cpu_latency_qos_add_request); > */ > void cpu_latency_qos_update_request(struct pm_qos_request *req, s32 new_value) > { > - if (!req) > + if (!req || cpu_latency_qos_value_invalid(new_value)) > return; > > if (!cpu_latency_qos_request_active(req)) { > -- Applied (with some edits in the changelog) as 6.6 material, thanks!
diff --git a/kernel/power/qos.c b/kernel/power/qos.c index 782d3b41c1f3..4244b069442e 100644 --- a/kernel/power/qos.c +++ b/kernel/power/qos.c @@ -220,6 +220,11 @@ static struct pm_qos_constraints cpu_latency_constraints = { .type = PM_QOS_MIN, }; +static inline bool cpu_latency_qos_value_invalid(s32 value) +{ + return value < 0 && value != PM_QOS_DEFAULT_VALUE; +} + /** * cpu_latency_qos_limit - Return current system-wide CPU latency QoS limit. */ @@ -263,7 +268,7 @@ static void cpu_latency_qos_apply(struct pm_qos_request *req, */ void cpu_latency_qos_add_request(struct pm_qos_request *req, s32 value) { - if (!req) + if (!req || cpu_latency_qos_value_invalid(value)) return; if (cpu_latency_qos_request_active(req)) { @@ -289,7 +294,7 @@ EXPORT_SYMBOL_GPL(cpu_latency_qos_add_request); */ void cpu_latency_qos_update_request(struct pm_qos_request *req, s32 new_value) { - if (!req) + if (!req || cpu_latency_qos_value_invalid(new_value)) return; if (!cpu_latency_qos_request_active(req)) {
CPU latency should never be negative, which will be incorrectly high when converted to unsigned data type. Commit 8d36694245f2 ("PM: QoS: Add check to make sure CPU freq is non-negative") makes sure CPU freq is non-negative to fix incorrect behavior in freq_qos. Adding a check to make sure CPU latency is non-negative can prevent this problem from happening in cpu_latency_qos. Signed-off-by: Clive Lin <clive.lin@mediatek.com> --- kernel/power/qos.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)