From: Jani Nikula <jani.nikula@linux.intel.com>
To: Lee Shawn C <shawn.c.lee@intel.com>, intel-gfx@lists.freedesktop.org
Cc: Matt Roper <matthew.d.roper@intel.com>
Subject: Re: [Intel-gfx] [PATCH] drm/i915: Refine mmio debug flow to avoid bad unlock balance detected.
Date: Tue, 04 Jul 2023 12:54:26 +0300 [thread overview]
Message-ID: <87ilb00zot.fsf@intel.com> (raw)
In-Reply-To: <20230704080727.2665-1-shawn.c.lee@intel.com>
On Tue, 04 Jul 2023, Lee Shawn C <shawn.c.lee@intel.com> wrote:
> Perform reboot stresss test on a kernel build with lockdebug flag enabled.
> Bad unlock balanace detected would happened sometimes. Below is the
> problematic scenario. If params.mmio_debug value was changed at step #4.
> And it would trigger this issue. Modify code flow that decide to
> enable/disable mmio debug before unclaimed_reg_debug() can avoid
> this symptom.
>
> 1. GEN6_READ_HEADER is called with params.mmio_debug = 0
> 2. unclaimed_reg_debug(before = true) is called
> 3. unclaimed_reg_debug return without taking a lock
> because params.mmio_debug == 0
> 4. other thread modifies params.mmio_debug to 1
> 5. GEN6_READ_FOOTER is called with params.mmio_debug != 0
> 6. unclaimed_reg_debug tries to assert non-taken lock (first WARN)
> 7. unclaimed_reg_debug tries to release non-taken lock (second WARN)
>
> Closes:https://gitlab.freedesktop.org/drm/intel/-/issues/8749
Thanks for the report and analysis!
> Signed-off-by: Lee Shawn C <shawn.c.lee@intel.com>
> Cc: Uma Shankar <uma.shankar@intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Cc: Andi Shyti <andi.shyti@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_uncore.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> index 796ebfe6c550..9d665978cc43 100644
> --- a/drivers/gpu/drm/i915/intel_uncore.c
> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> @@ -1931,9 +1931,6 @@ unclaimed_reg_debug(struct intel_uncore *uncore,
> const bool read,
> const bool before)
> {
> - if (likely(!uncore->i915->params.mmio_debug) || !uncore->debug)
> - return;
> -
> /* interrupts are disabled and re-enabled around uncore->lock usage */
> lockdep_assert_held(&uncore->lock);
>
> @@ -2001,13 +1998,16 @@ __gen2_read(64)
> #define GEN6_READ_HEADER(x) \
> u32 offset = i915_mmio_reg_offset(reg); \
> unsigned long irqflags; \
> + const bool mmio_debug = likely(uncore->i915->params.mmio_debug) || uncore->debug; \
This changes the condition. The old one requires both to be true, this
requires either to be true. Additionally this gets the "likely"
backwards as the condition is reversed.
const bool mmio_debug = unlikely(uncore->i915->params.mmio_debug) && uncore->debug;
Anyway. I'm not happy about having the debug conditions moved within
GEN6_READ_HEADER. This also does not address GEN6_WRITE_*.
I sent a slightly different kind of fix [1].
BR,
Jani.
[1] https://patchwork.freedesktop.org/series/120167/
> u##x val = 0; \
> assert_rpm_wakelock_held(uncore->rpm); \
> spin_lock_irqsave(&uncore->lock, irqflags); \
> - unclaimed_reg_debug(uncore, reg, true, true)
> + if (mmio_debug) \
> + unclaimed_reg_debug(uncore, reg, true, true)
>
> #define GEN6_READ_FOOTER \
> - unclaimed_reg_debug(uncore, reg, true, false); \
> + if (mmio_debug) \
> + unclaimed_reg_debug(uncore, reg, true, false); \
> spin_unlock_irqrestore(&uncore->lock, irqflags); \
> trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \
> return val
--
Jani Nikula, Intel Open Source Graphics Center
next prev parent reply other threads:[~2023-07-04 9:54 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-04 8:07 [Intel-gfx] [PATCH] drm/i915: Refine mmio debug flow to avoid bad unlock balance detected Lee Shawn C
2023-07-04 8:42 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for " Patchwork
2023-07-04 8:55 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-07-04 9:54 ` Jani Nikula [this message]
2023-07-04 11:58 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2023-07-11 10:31 ` [Intel-gfx] [PATCH] " Andi Shyti
2023-07-11 10:40 ` Jani Nikula
2023-07-11 11:06 ` Andi Shyti
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ilb00zot.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=matthew.d.roper@intel.com \
--cc=shawn.c.lee@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.