On Thu, 05 Nov 2026, Ville Syrjala <[email protected]> wrote: > From: Ville Syrjälä <[email protected]> > > Currently when userspace takes the forcewake via debugfs, the > kernel will stop looking for unclaimed mmio accesses. That link > is kinda weird since forcewake is for GT stuff and unclaimed > mmio detection is for display stuff. > > Just kill the mmio debug suspend/resume upon user forcewake. > One should almost always use IGT_NO_FORCEWAKE=1 when poking > at display register from userspace anyway so as to not > perturb the rest of the system. > > Signed-off-by: Ville Syrjälä <[email protected]>
Reviewed-by: Jani Nikula <[email protected]> > --- > drivers/gpu/drm/i915/intel_uncore.c | 46 ++--------------------------- > drivers/gpu/drm/i915/intel_uncore.h | 2 -- > 2 files changed, 2 insertions(+), 46 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_uncore.c > b/drivers/gpu/drm/i915/intel_uncore.c > index e360e4f9d9a2..abd695e880c1 100644 > --- a/drivers/gpu/drm/i915/intel_uncore.c > +++ b/drivers/gpu/drm/i915/intel_uncore.c > @@ -65,41 +65,6 @@ intel_uncore_mmio_debug_init_early(struct drm_i915_private > *i915) > i915->uncore.debug = &i915->mmio_debug; > } > > -static void mmio_debug_suspend(struct intel_uncore *uncore) > -{ > - if (!uncore->debug) > - return; > - > - spin_lock(&uncore->debug->lock); > - > - /* Save and disable mmio debugging for the user bypass */ > - if (!uncore->debug->suspend_count++) { > - uncore->debug->saved_mmio_check = > uncore->debug->unclaimed_mmio_check; > - uncore->debug->unclaimed_mmio_check = 0; > - } > - > - spin_unlock(&uncore->debug->lock); > -} > - > -static bool check_for_unclaimed_mmio(struct intel_uncore *uncore); > - > -static void mmio_debug_resume(struct intel_uncore *uncore) > -{ > - if (!uncore->debug) > - return; > - > - spin_lock(&uncore->debug->lock); > - > - if (!--uncore->debug->suspend_count) > - uncore->debug->unclaimed_mmio_check = > uncore->debug->saved_mmio_check; > - > - if (check_for_unclaimed_mmio(uncore)) > - drm_info(&uncore->i915->drm, > - "Invalid mmio detected during user access\n"); > - > - spin_unlock(&uncore->debug->lock); > -} > - > static const char * const forcewake_domain_names[] = { > "render", > "gt", > @@ -598,9 +563,6 @@ check_for_unclaimed_mmio(struct intel_uncore *uncore) > > lockdep_assert_held(&uncore->debug->lock); > > - if (uncore->debug->suspend_count) > - return false; > - > if (intel_uncore_has_fpga_dbg_unclaimed(uncore)) > ret |= fpga_check_for_unclaimed_mmio(uncore); > > @@ -733,10 +695,8 @@ void intel_uncore_forcewake_get(struct intel_uncore > *uncore, > void intel_uncore_forcewake_user_get(struct intel_uncore *uncore) > { > spin_lock_irq(&uncore->lock); > - if (!uncore->user_forcewake_count++) { > + if (!uncore->user_forcewake_count++) > intel_uncore_forcewake_get__locked(uncore, FORCEWAKE_ALL); > - mmio_debug_suspend(uncore); > - } > spin_unlock_irq(&uncore->lock); > } > > @@ -750,10 +710,8 @@ void intel_uncore_forcewake_user_get(struct intel_uncore > *uncore) > void intel_uncore_forcewake_user_put(struct intel_uncore *uncore) > { > spin_lock_irq(&uncore->lock); > - if (!--uncore->user_forcewake_count) { > - mmio_debug_resume(uncore); > + if (!--uncore->user_forcewake_count) > intel_uncore_forcewake_put__locked(uncore, FORCEWAKE_ALL); > - } > spin_unlock_irq(&uncore->lock); > } > > diff --git a/drivers/gpu/drm/i915/intel_uncore.h > b/drivers/gpu/drm/i915/intel_uncore.h > index fafc2ca9a237..4ec7c545d04e 100644 > --- a/drivers/gpu/drm/i915/intel_uncore.h > +++ b/drivers/gpu/drm/i915/intel_uncore.h > @@ -42,8 +42,6 @@ struct intel_gt; > struct intel_uncore_mmio_debug { > spinlock_t lock; /** lock is also taken in irq contexts. */ > int unclaimed_mmio_check; > - int saved_mmio_check; > - u32 suspend_count; > }; > > enum forcewake_domain_id { -- Jani Nikula, Intel
