Thread (6 messages) 6 messages, 4 authors, 2d ago

Re: [PATCH 1/1] PM: runtime: change stub pm_runtime_get_if_active() return 1 when !CONFIG_PM

flat view

From: Alex Elder <hidden>
Date: 2026-10-29 18:11:46
Also in: dri-devel, imx, intel-gfx, intel-xe, linux-arm-kernel, linux-arm-msm, linux-hwmon, linux-iommu, linux-media, linux-pm, linux-staging, linux-usb

On 10/29/26 11:30 AM, Frank.Li@oss.nxp.com wrote:
From: Frank Li <Frank.Li@nxp.com>

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 <redacted>
quoted hunk ↗ jump to hunk
__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 <Frank.Li@nxp.com>
---
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
Cc: Karol Wachowski <karol.wachowski@linux.intel.com>
Cc: Oded Gabbay <ogabbay@kernel.org>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Tvrtko Ursulin <tursulin@ursulin.net>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: "Thomas Hellstrom" <thomas.hellstrom@linux.intel.com>
Cc: David Airlie <airlied@gmail.com>
Cc: Simona Vetter <simona@ffwll.ch>
Cc: Alex Elder <elder@kernel.org>
Cc: Will Deacon <will@kernel.org>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: "Joerg Roedel" <joro@8bytes.org>
Cc: Rob Clark <robin.clark@oss.qualcomm.com>
Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Guan-Yu Lin <redacted>
Cc: Mathias Nyman <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: <redacted>
Cc: Rob Herring (Arm) <robh@kernel.org>
---
  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; }
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help