On Tue, 23 Aug 2022, Mitul Golani <mitulkumar.ajitkumar.golani@xxxxxxxxx> wrote: > While executing i915_selftest, wakeref imbalance warning is seen > with i915_selftest failure. > > Currently when Driver is suspended, while doing unregister > it is taking wakeref without resuming the device. > This patch is resuming the device, if driver is already suspended > and doing unregister process. It will check the suspend state and > if driver is not resumed before taking wakeref then resume before > it. > > Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_driver.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c > index deb8a8b76965..b3741bd49e2c 100644 > --- a/drivers/gpu/drm/i915/i915_driver.c > +++ b/drivers/gpu/drm/i915/i915_driver.c > @@ -948,6 +948,15 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent) > > void i915_driver_remove(struct drm_i915_private *i915) > { > + int ret; > + /* > + * Resuming Device if already suspended to complete driver unregistration > + */ > + if (i915->runtime_pm.suspended && !atomic_read(&i915->runtime_pm.wakeref_count)) { > + ret = pm_runtime_get_sync(rpm->kdev); > + drm_WARN_ONCE(&i915->drm, ret < 0, "pm_runtime_get_sync() failed: %d\n", ret); > + } > + I don't know what the right fix is, but under no circumstances are we adding detailed low level code into high level function like i915_driver_remove(). BR, Jani. > disable_rpm_wakeref_asserts(&i915->runtime_pm); > > i915_driver_unregister(i915); -- Jani Nikula, Intel Open Source Graphics Center