summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorKevin Hilman (TI) <khilman@baylibre.com>2026-09-24 13:29:57 -0700
committerUlf Hansson <ulfh@kernel.org>2026-09-28 15:25:20 +0200
commitb7cbbc33bc4eaa9c1fd4485527ab167a736d5505 (patch)
tree308bb8ddffb57ddb44e6554a34a212351ddc86cf /include/linux
parent4ff08254de73780e9a0d72a14060e5957070ff12 (diff)
downloadlinux-next-b7cbbc33bc4eaa9c1fd4485527ab167a736d5505.tar.gz
linux-next-b7cbbc33bc4eaa9c1fd4485527ab167a736d5505.zip
PM / QoS: add lockless read for flags
Add a lockless read for QoS flags similar to the lockless read for resume latency (dev_pm_qos_raw_resume_latency) which may be called from atomic context (e.g. genpd governors running under a raw spinlock or in the syscore suspend path), where taking that sleeping lock would be invalid on PREEMPT_RT. dev_pm_qos_raw_flags() now reads dev->power.qos->flags.effective_flags with READ_ONCE() so also add corresponding WRITE_ONCE() to the two effective_flags writes, the same way pm_qos_set_value() already does for target_value/pm_qos_read_value(). Reviewed-by: Kendall Willis <k-willis@ti.com> Acked-by: Rafael J. Wysocki (Intel) <rafael@kernel.org> Signed-off-by: Kevin Hilman (TI) <khilman@baylibre.com> Signed-off-by: Ulf Hansson <ulfh@kernel.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/pm_qos.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index aededda52b6b..439a9e779d81 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -219,6 +219,12 @@ static inline s32 dev_pm_qos_raw_resume_latency(struct device *dev)
PM_QOS_RESUME_LATENCY_NO_CONSTRAINT :
pm_qos_read_value(&dev->power.qos->resume_latency);
}
+
+static inline s32 dev_pm_qos_raw_flags(struct device *dev)
+{
+ return IS_ERR_OR_NULL(dev->power.qos) ?
+ 0 : READ_ONCE(dev->power.qos->flags.effective_flags);
+}
#else
static inline enum pm_qos_flags_status __dev_pm_qos_flags(struct device *dev,
s32 mask)
@@ -300,6 +306,7 @@ static inline s32 dev_pm_qos_raw_resume_latency(struct device *dev)
{
return PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
}
+static inline s32 dev_pm_qos_raw_flags(struct device *dev) { return 0; }
#endif
static inline int freq_qos_request_active(struct freq_qos_request *req)