diff options
| author | Kevin Hilman (TI) <khilman@baylibre.com> | 2026-09-24 13:29:57 -0700 |
|---|---|---|
| committer | Ulf Hansson <ulfh@kernel.org> | 2026-09-28 15:25:20 +0200 |
| commit | b7cbbc33bc4eaa9c1fd4485527ab167a736d5505 (patch) | |
| tree | 308bb8ddffb57ddb44e6554a34a212351ddc86cf /include/linux | |
| parent | 4ff08254de73780e9a0d72a14060e5957070ff12 (diff) | |
| download | linux-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.h | 7 |
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) |
