diff mbox series

[v2,01/12] drm/i915: Move locking and unclaimed check into mmio_debug_{suspend, resume}

Message ID 20220902233257.3088492-2-matthew.d.roper@intel.com (mailing list archive)
State New, archived
Headers show
Series i915: Add "standalone media" support for MTL | expand

Commit Message

Matt Roper Sept. 2, 2022, 11:32 p.m. UTC
Moving the locking for MMIO debug (and the final check for unclaimed
accesses when resuming debug after a userspace-initiated forcewake) will
make it simpler to completely skip MMIO debug handling on uncores that
don't support it in future patches.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
---
 drivers/gpu/drm/i915/intel_uncore.c | 41 +++++++++++++++--------------
 1 file changed, 21 insertions(+), 20 deletions(-)

Comments

Michael J. Ruhl Sept. 6, 2022, 1:39 p.m. UTC | #1
>-----Original Message-----
>From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of
>Matt Roper
>Sent: Friday, September 2, 2022 7:33 PM
>To: intel-gfx@lists.freedesktop.org
>Cc: dri-devel@lists.freedesktop.org; Sripada, Radhakrishna
><radhakrishna.sripada@intel.com>
>Subject: [PATCH v2 01/12] drm/i915: Move locking and unclaimed check into
>mmio_debug_{suspend, resume}
>
>Moving the locking for MMIO debug (and the final check for unclaimed
>accesses when resuming debug after a userspace-initiated forcewake) will
>make it simpler to completely skip MMIO debug handling on uncores that
>don't support it in future patches.
>
>Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>Reviewed-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
>---
> drivers/gpu/drm/i915/intel_uncore.c | 41 +++++++++++++++--------------
> 1 file changed, 21 insertions(+), 20 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/intel_uncore.c
>b/drivers/gpu/drm/i915/intel_uncore.c
>index 9b81b2543ce2..e717ea55484a 100644
>--- a/drivers/gpu/drm/i915/intel_uncore.c
>+++ b/drivers/gpu/drm/i915/intel_uncore.c
>@@ -50,23 +50,33 @@ intel_uncore_mmio_debug_init_early(struct
>intel_uncore_mmio_debug *mmio_debug)
> 	mmio_debug->unclaimed_mmio_check = 1;
> }
>
>-static void mmio_debug_suspend(struct intel_uncore_mmio_debug
>*mmio_debug)
>+static void mmio_debug_suspend(struct intel_uncore *uncore)

/bike-shedding...

It seems like there has been a tend to name functions with the

_unlocked

postfix when the lock is being taken within the function.

Would this be a reasonable name update for these changes?

M

> {
>-	lockdep_assert_held(&mmio_debug->lock);
>+	spin_lock(&uncore->debug->lock);
>
> 	/* Save and disable mmio debugging for the user bypass */
>-	if (!mmio_debug->suspend_count++) {
>-		mmio_debug->saved_mmio_check = mmio_debug-
>>unclaimed_mmio_check;
>-		mmio_debug->unclaimed_mmio_check = 0;
>+	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 void mmio_debug_resume(struct intel_uncore_mmio_debug
>*mmio_debug)
>+static bool check_for_unclaimed_mmio(struct intel_uncore *uncore);
>+
>+static void mmio_debug_resume(struct intel_uncore *uncore)
> {
>-	lockdep_assert_held(&mmio_debug->lock);
>+	spin_lock(&uncore->debug->lock);
>+
>+	if (!--uncore->debug->suspend_count)
>+		uncore->debug->unclaimed_mmio_check = uncore->debug-
>>saved_mmio_check;
>
>-	if (!--mmio_debug->suspend_count)
>-		mmio_debug->unclaimed_mmio_check = mmio_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[] = {
>@@ -677,9 +687,7 @@ void intel_uncore_forcewake_user_get(struct
>intel_uncore *uncore)
> 	spin_lock_irq(&uncore->lock);
> 	if (!uncore->user_forcewake_count++) {
> 		intel_uncore_forcewake_get__locked(uncore,
>FORCEWAKE_ALL);
>-		spin_lock(&uncore->debug->lock);
>-		mmio_debug_suspend(uncore->debug);
>-		spin_unlock(&uncore->debug->lock);
>+		mmio_debug_suspend(uncore);
> 	}
> 	spin_unlock_irq(&uncore->lock);
> }
>@@ -695,14 +703,7 @@ void intel_uncore_forcewake_user_put(struct
>intel_uncore *uncore)
> {
> 	spin_lock_irq(&uncore->lock);
> 	if (!--uncore->user_forcewake_count) {
>-		spin_lock(&uncore->debug->lock);
>-		mmio_debug_resume(uncore->debug);
>-
>-		if (check_for_unclaimed_mmio(uncore))
>-			drm_info(&uncore->i915->drm,
>-				 "Invalid mmio detected during user
>access\n");
>-		spin_unlock(&uncore->debug->lock);
>-
>+		mmio_debug_resume(uncore);
> 		intel_uncore_forcewake_put__locked(uncore,
>FORCEWAKE_ALL);
> 	}
> 	spin_unlock_irq(&uncore->lock);
>--
>2.37.2
Matt Roper Sept. 6, 2022, 5:08 p.m. UTC | #2
On Tue, Sep 06, 2022 at 06:39:14AM -0700, Ruhl, Michael J wrote:
> >-----Original Message-----
> >From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of
> >Matt Roper
> >Sent: Friday, September 2, 2022 7:33 PM
> >To: intel-gfx@lists.freedesktop.org
> >Cc: dri-devel@lists.freedesktop.org; Sripada, Radhakrishna
> ><radhakrishna.sripada@intel.com>
> >Subject: [PATCH v2 01/12] drm/i915: Move locking and unclaimed check into
> >mmio_debug_{suspend, resume}
> >
> >Moving the locking for MMIO debug (and the final check for unclaimed
> >accesses when resuming debug after a userspace-initiated forcewake) will
> >make it simpler to completely skip MMIO debug handling on uncores that
> >don't support it in future patches.
> >
> >Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> >Reviewed-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
> >---
> > drivers/gpu/drm/i915/intel_uncore.c | 41 +++++++++++++++--------------
> > 1 file changed, 21 insertions(+), 20 deletions(-)
> >
> >diff --git a/drivers/gpu/drm/i915/intel_uncore.c
> >b/drivers/gpu/drm/i915/intel_uncore.c
> >index 9b81b2543ce2..e717ea55484a 100644
> >--- a/drivers/gpu/drm/i915/intel_uncore.c
> >+++ b/drivers/gpu/drm/i915/intel_uncore.c
> >@@ -50,23 +50,33 @@ intel_uncore_mmio_debug_init_early(struct
> >intel_uncore_mmio_debug *mmio_debug)
> > 	mmio_debug->unclaimed_mmio_check = 1;
> > }
> >
> >-static void mmio_debug_suspend(struct intel_uncore_mmio_debug
> >*mmio_debug)
> >+static void mmio_debug_suspend(struct intel_uncore *uncore)
> 
> /bike-shedding...
> 
> It seems like there has been a tend to name functions with the
> 
> _unlocked
> 
> postfix when the lock is being taken within the function.
> 
> Would this be a reasonable name update for these changes?

I think foo_unlocked() naming is usually used when there's also a
separate foo() that can be called if/when locks are already held (or
sometimes it's foo() and foo_locked() if the situation is the other way
around).  In this case we still only have one version of the function,
and it's only called from a single place in the code
(intel_uncore_forcewake_user_get) so I don't think the special naming is
necessary.  It might actually add confusion here since there's a
different lock (the general uncore lock) that is still held by the
caller.  It's just the mmio_debug-specific lock that's been moved into
the mmio-debug specific function here.


Matt

> 
> M
> 
> > {
> >-	lockdep_assert_held(&mmio_debug->lock);
> >+	spin_lock(&uncore->debug->lock);
> >
> > 	/* Save and disable mmio debugging for the user bypass */
> >-	if (!mmio_debug->suspend_count++) {
> >-		mmio_debug->saved_mmio_check = mmio_debug-
> >>unclaimed_mmio_check;
> >-		mmio_debug->unclaimed_mmio_check = 0;
> >+	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 void mmio_debug_resume(struct intel_uncore_mmio_debug
> >*mmio_debug)
> >+static bool check_for_unclaimed_mmio(struct intel_uncore *uncore);
> >+
> >+static void mmio_debug_resume(struct intel_uncore *uncore)
> > {
> >-	lockdep_assert_held(&mmio_debug->lock);
> >+	spin_lock(&uncore->debug->lock);
> >+
> >+	if (!--uncore->debug->suspend_count)
> >+		uncore->debug->unclaimed_mmio_check = uncore->debug-
> >>saved_mmio_check;
> >
> >-	if (!--mmio_debug->suspend_count)
> >-		mmio_debug->unclaimed_mmio_check = mmio_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[] = {
> >@@ -677,9 +687,7 @@ void intel_uncore_forcewake_user_get(struct
> >intel_uncore *uncore)
> > 	spin_lock_irq(&uncore->lock);
> > 	if (!uncore->user_forcewake_count++) {
> > 		intel_uncore_forcewake_get__locked(uncore,
> >FORCEWAKE_ALL);
> >-		spin_lock(&uncore->debug->lock);
> >-		mmio_debug_suspend(uncore->debug);
> >-		spin_unlock(&uncore->debug->lock);
> >+		mmio_debug_suspend(uncore);
> > 	}
> > 	spin_unlock_irq(&uncore->lock);
> > }
> >@@ -695,14 +703,7 @@ void intel_uncore_forcewake_user_put(struct
> >intel_uncore *uncore)
> > {
> > 	spin_lock_irq(&uncore->lock);
> > 	if (!--uncore->user_forcewake_count) {
> >-		spin_lock(&uncore->debug->lock);
> >-		mmio_debug_resume(uncore->debug);
> >-
> >-		if (check_for_unclaimed_mmio(uncore))
> >-			drm_info(&uncore->i915->drm,
> >-				 "Invalid mmio detected during user
> >access\n");
> >-		spin_unlock(&uncore->debug->lock);
> >-
> >+		mmio_debug_resume(uncore);
> > 		intel_uncore_forcewake_put__locked(uncore,
> >FORCEWAKE_ALL);
> > 	}
> > 	spin_unlock_irq(&uncore->lock);
> >--
> >2.37.2
>
Michael J. Ruhl Sept. 6, 2022, 5:10 p.m. UTC | #3
>-----Original Message-----
>From: Roper, Matthew D <matthew.d.roper@intel.com>
>Sent: Tuesday, September 6, 2022 1:09 PM
>To: Ruhl, Michael J <michael.j.ruhl@intel.com>
>Cc: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; Sripada,
>Radhakrishna <radhakrishna.sripada@intel.com>
>Subject: Re: [PATCH v2 01/12] drm/i915: Move locking and unclaimed check
>into mmio_debug_{suspend, resume}
>
>On Tue, Sep 06, 2022 at 06:39:14AM -0700, Ruhl, Michael J wrote:
>> >-----Original Message-----
>> >From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of
>> >Matt Roper
>> >Sent: Friday, September 2, 2022 7:33 PM
>> >To: intel-gfx@lists.freedesktop.org
>> >Cc: dri-devel@lists.freedesktop.org; Sripada, Radhakrishna
>> ><radhakrishna.sripada@intel.com>
>> >Subject: [PATCH v2 01/12] drm/i915: Move locking and unclaimed check
>into
>> >mmio_debug_{suspend, resume}
>> >
>> >Moving the locking for MMIO debug (and the final check for unclaimed
>> >accesses when resuming debug after a userspace-initiated forcewake) will
>> >make it simpler to completely skip MMIO debug handling on uncores that
>> >don't support it in future patches.
>> >
>> >Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>> >Reviewed-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
>> >---
>> > drivers/gpu/drm/i915/intel_uncore.c | 41 +++++++++++++++--------------
>> > 1 file changed, 21 insertions(+), 20 deletions(-)
>> >
>> >diff --git a/drivers/gpu/drm/i915/intel_uncore.c
>> >b/drivers/gpu/drm/i915/intel_uncore.c
>> >index 9b81b2543ce2..e717ea55484a 100644
>> >--- a/drivers/gpu/drm/i915/intel_uncore.c
>> >+++ b/drivers/gpu/drm/i915/intel_uncore.c
>> >@@ -50,23 +50,33 @@ intel_uncore_mmio_debug_init_early(struct
>> >intel_uncore_mmio_debug *mmio_debug)
>> > 	mmio_debug->unclaimed_mmio_check = 1;
>> > }
>> >
>> >-static void mmio_debug_suspend(struct intel_uncore_mmio_debug
>> >*mmio_debug)
>> >+static void mmio_debug_suspend(struct intel_uncore *uncore)
>>
>> /bike-shedding...
>>
>> It seems like there has been a tend to name functions with the
>>
>> _unlocked
>>
>> postfix when the lock is being taken within the function.
>>
>> Would this be a reasonable name update for these changes?
>
>I think foo_unlocked() naming is usually used when there's also a
>separate foo() that can be called if/when locks are already held (or
>sometimes it's foo() and foo_locked() if the situation is the other way
>around).  In this case we still only have one version of the function,
>and it's only called from a single place in the code
>(intel_uncore_forcewake_user_get) so I don't think the special naming is
>necessary.  It might actually add confusion here since there's a
>different lock (the general uncore lock) that is still held by the
>caller.  It's just the mmio_debug-specific lock that's been moved into
>the mmio-debug specific function here.

Got it.  That makes sense.

Thanks,

Mike

>
>Matt
>
>>
>> M
>>
>> > {
>> >-	lockdep_assert_held(&mmio_debug->lock);
>> >+	spin_lock(&uncore->debug->lock);
>> >
>> > 	/* Save and disable mmio debugging for the user bypass */
>> >-	if (!mmio_debug->suspend_count++) {
>> >-		mmio_debug->saved_mmio_check = mmio_debug-
>> >>unclaimed_mmio_check;
>> >-		mmio_debug->unclaimed_mmio_check = 0;
>> >+	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 void mmio_debug_resume(struct intel_uncore_mmio_debug
>> >*mmio_debug)
>> >+static bool check_for_unclaimed_mmio(struct intel_uncore *uncore);
>> >+
>> >+static void mmio_debug_resume(struct intel_uncore *uncore)
>> > {
>> >-	lockdep_assert_held(&mmio_debug->lock);
>> >+	spin_lock(&uncore->debug->lock);
>> >+
>> >+	if (!--uncore->debug->suspend_count)
>> >+		uncore->debug->unclaimed_mmio_check = uncore->debug-
>> >>saved_mmio_check;
>> >
>> >-	if (!--mmio_debug->suspend_count)
>> >-		mmio_debug->unclaimed_mmio_check = mmio_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[] = {
>> >@@ -677,9 +687,7 @@ void intel_uncore_forcewake_user_get(struct
>> >intel_uncore *uncore)
>> > 	spin_lock_irq(&uncore->lock);
>> > 	if (!uncore->user_forcewake_count++) {
>> > 		intel_uncore_forcewake_get__locked(uncore,
>> >FORCEWAKE_ALL);
>> >-		spin_lock(&uncore->debug->lock);
>> >-		mmio_debug_suspend(uncore->debug);
>> >-		spin_unlock(&uncore->debug->lock);
>> >+		mmio_debug_suspend(uncore);
>> > 	}
>> > 	spin_unlock_irq(&uncore->lock);
>> > }
>> >@@ -695,14 +703,7 @@ void intel_uncore_forcewake_user_put(struct
>> >intel_uncore *uncore)
>> > {
>> > 	spin_lock_irq(&uncore->lock);
>> > 	if (!--uncore->user_forcewake_count) {
>> >-		spin_lock(&uncore->debug->lock);
>> >-		mmio_debug_resume(uncore->debug);
>> >-
>> >-		if (check_for_unclaimed_mmio(uncore))
>> >-			drm_info(&uncore->i915->drm,
>> >-				 "Invalid mmio detected during user
>> >access\n");
>> >-		spin_unlock(&uncore->debug->lock);
>> >-
>> >+		mmio_debug_resume(uncore);
>> > 		intel_uncore_forcewake_put__locked(uncore,
>> >FORCEWAKE_ALL);
>> > 	}
>> > 	spin_unlock_irq(&uncore->lock);
>> >--
>> >2.37.2
>>
>
>--
>Matt Roper
>Graphics Software Engineer
>VTT-OSGC Platform Enablement
>Intel Corporation
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index 9b81b2543ce2..e717ea55484a 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -50,23 +50,33 @@  intel_uncore_mmio_debug_init_early(struct intel_uncore_mmio_debug *mmio_debug)
 	mmio_debug->unclaimed_mmio_check = 1;
 }
 
-static void mmio_debug_suspend(struct intel_uncore_mmio_debug *mmio_debug)
+static void mmio_debug_suspend(struct intel_uncore *uncore)
 {
-	lockdep_assert_held(&mmio_debug->lock);
+	spin_lock(&uncore->debug->lock);
 
 	/* Save and disable mmio debugging for the user bypass */
-	if (!mmio_debug->suspend_count++) {
-		mmio_debug->saved_mmio_check = mmio_debug->unclaimed_mmio_check;
-		mmio_debug->unclaimed_mmio_check = 0;
+	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 void mmio_debug_resume(struct intel_uncore_mmio_debug *mmio_debug)
+static bool check_for_unclaimed_mmio(struct intel_uncore *uncore);
+
+static void mmio_debug_resume(struct intel_uncore *uncore)
 {
-	lockdep_assert_held(&mmio_debug->lock);
+	spin_lock(&uncore->debug->lock);
+
+	if (!--uncore->debug->suspend_count)
+		uncore->debug->unclaimed_mmio_check = uncore->debug->saved_mmio_check;
 
-	if (!--mmio_debug->suspend_count)
-		mmio_debug->unclaimed_mmio_check = mmio_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[] = {
@@ -677,9 +687,7 @@  void intel_uncore_forcewake_user_get(struct intel_uncore *uncore)
 	spin_lock_irq(&uncore->lock);
 	if (!uncore->user_forcewake_count++) {
 		intel_uncore_forcewake_get__locked(uncore, FORCEWAKE_ALL);
-		spin_lock(&uncore->debug->lock);
-		mmio_debug_suspend(uncore->debug);
-		spin_unlock(&uncore->debug->lock);
+		mmio_debug_suspend(uncore);
 	}
 	spin_unlock_irq(&uncore->lock);
 }
@@ -695,14 +703,7 @@  void intel_uncore_forcewake_user_put(struct intel_uncore *uncore)
 {
 	spin_lock_irq(&uncore->lock);
 	if (!--uncore->user_forcewake_count) {
-		spin_lock(&uncore->debug->lock);
-		mmio_debug_resume(uncore->debug);
-
-		if (check_for_unclaimed_mmio(uncore))
-			drm_info(&uncore->i915->drm,
-				 "Invalid mmio detected during user access\n");
-		spin_unlock(&uncore->debug->lock);
-
+		mmio_debug_resume(uncore);
 		intel_uncore_forcewake_put__locked(uncore, FORCEWAKE_ALL);
 	}
 	spin_unlock_irq(&uncore->lock);