On 10/29/26 11:30 AM, [email protected] wrote:
From: Frank Li <[email protected]>
When CONFIG_PM is not enabled, all devices runtime PM state should be
treated as active.
Should be treated as if runtime PM were enabled for the device,
and the runtime status is active.
It's a subtle distinction but the previous behavior returned
EINVAL, which means "runtime PM is disabled for the device".
Anyway, for the IPA use of this function, this looks correct.
Acked-by: Alex Elder <[email protected]>
__pm_runtime_resume() returns 1 (called by pm_runtime_get()).
pm_runtime_get_if_active() is the try-and-get version of pm_runtime_get().
stub pm_runtime_active() also returns true. So pm_runtime_get_if_active()
should return the same value as the stub pm_runtime_get(), which is 1.
Analysis of all callers and their behavior with old (-EINVAL) vs new (1):
Pattern A: if (!pm_runtime_get_if_active(dev)) -- no impact
Both -EINVAL and 1 are non-zero, so !ret is false in both cases.
Callers: drivers/accel/ethosu/ethosu_perfmon.c,
drivers/gpu/drm/msm/adreno/a6xx_gmu.c,
drivers/gpu/drm/msm/msm_perfcntr.c,
drivers/gpu/drm/v3d/v3d_mmu.c,
drivers/gpu/drm/v3d/v3d_perfmon.c (x4),
drivers/media/i2c/gc08a3.c gc05a2.c og0ve1b.c ov6211.c,
drivers/media/i2c/ccs/ccs-core.c s5kjn1.c lm3560.c (x2),
drivers/media/i2c/s5k3m5.c thp7312.c imx283.c ov64a40.c,
drivers/media/pci/intel/ipu6/ipu6-buttress.c,
sound/hda/core/device.c
Pattern B: if (!ret) after get -- no impact
Both -EINVAL and 1 are non-zero, !ret is false in both cases.
drivers/gpu/drm/amd/pm/amdgpu_pm.c (comment says "allow access"
in kernels without CONFIG_PM), drivers/pci/pci.c
Pattern C: ret > 0 / ret <= 0 / ret != 1 checks -- FIXED
drivers/usb/core/offload.c: checks (!= 1), old -EINVAL caused
-EBUSY even with !CONFIG_PM. Fixed: now returns 1, proceeds.
drivers/accel/ivpu/ivpu_job.c: drm_WARN_ON(<= 0), old -EINVAL
spuriously triggered WARN. Fixed: 1 > 0, no warn.
drivers/gpu/drm/i915/intel_runtime_pm.c: checks (<= 0), old
-EINVAL triggered error path. Fixed: 1 > 0, correct path.
drivers/accel/ivpu/ivpu_sysfs.c: (> 0), old skipped freq read.
Fixed: proceeds correctly without CONFIG_PM.
drivers/gpu/drm/xe/xe_pm.c: wraps (> 0), all xe callers
(xe_bo.c, xe_shrinker.c, xe_vsec.c, xe_ggtt.c, xe_guc_ct.c,
xe_pxp.c) now correctly treat !CONFIG_PM as active.
drivers/net/ipa/ipa_smp2p.c: power_on = (> 0), now correctly true.
drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c: (> 0), now correctly
executes stall register update.
drivers/staging/media/ipu7/ipu7-buttress.c: active (<= 0) early
return now skipped, correctly proceeds.
Pattern D: explicit -EINVAL check
drivers/hwmon/prom21-xhci.c: checks (> 0) then (== -EINVAL).
Old: took -EINVAL fallback. New: takes (> 0) fast path.
Both succeed when CONFIG_PM is disabled; functionally equivalent.
drivers/hwmon/eic7700-pvt.c: call is guarded by IS_ENABLED(CONFIG_PM),
stub is never reached. No impact.
Signed-off-by: Frank Li <[email protected]>
---
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Andrzej Kacprowski <[email protected]>
Cc: Karol Wachowski <[email protected]>
Cc: Oded Gabbay <[email protected]>
Cc: Jani Nikula <[email protected]>
Cc: Joonas Lahtinen <[email protected]>
Cc: Rodrigo Vivi <[email protected]>
Cc: Tvrtko Ursulin <[email protected]>
Cc: Matthew Brost <[email protected]>
Cc: "Thomas Hellstrom" <[email protected]>
Cc: David Airlie <[email protected]>
Cc: Simona Vetter <[email protected]>
Cc: Alex Elder <[email protected]>
Cc: Will Deacon <[email protected]>
Cc: Robin Murphy <[email protected]>
Cc: "Joerg Roedel" <[email protected]>
Cc: Rob Clark <[email protected]>
Cc: Sakari Ailus <[email protected]>
Cc: Mauro Carvalho Chehab <[email protected]>
Cc: Guenter Roeck <[email protected]>
Cc: Guan-Yu Lin <[email protected]>
Cc: Mathias Nyman <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: Rob Herring (Arm) <[email protected]>
---
include/linux/pm_runtime.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 64921b10ac74f..de9e7518ecef2 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -280,7 +280,7 @@ static inline int pm_runtime_get_if_in_use(struct device
*dev)
}
static inline int pm_runtime_get_if_active(struct device *dev)
{
- return -EINVAL;
+ return 1;
}
static inline int __pm_runtime_set_status(struct device *dev,
unsigned int status) { return 0; }