All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Akash Goel <akash.goel@intel.com>, stable@vger.kernel.org
Subject: Re: [PATCH] drm/i915: Make RPS EI/thresholds multiple of 25 on SNB
Date: Wed, 20 Apr 2016 18:09:34 +0300	[thread overview]
Message-ID: <20160420150934.GE4329@intel.com> (raw)
In-Reply-To: <1461159836-9108-1-git-send-email-ville.syrjala@linux.intel.com>

On Wed, Apr 20, 2016 at 04:43:56PM +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The patch subject should probably read
"drm/i915: Make RPS EI/thresholds multiple of 25 on SNB-BDW"
since it does change more than SNB. I'll fix that up when/if I push.

> 
> Somehow my SNB GT1 (Dell XPS 8300) gets very unhappy around
> GPU hangs if the RPS EI/thresholds aren't suitably aligned.
> It seems like scheduling/timer interupts stop working somehow
> and things get stuck eg. in usleep_range().
> 
> I bisected the problem down to
> commit 8a5864377b12 ("drm/i915/skl: Restructured the gen6_set_rps_thresholds function")
> I observed that before all the values were at least multiples of 25,
> but afterwards they are not. And rounding things up to the next multiple
> of 25 does seem to help, so lets' do that. I also tried roundup(..., 5)
> but that wasn't sufficient. Also I have no idea if we might need this sort of
> thing on gen9+ as well.
> 
> These are the original EI/thresholds:
>  LOW_POWER
>   GEN6_RP_UP_EI          12500
>   GEN6_RP_UP_THRESHOLD   11800
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 21250
>  BETWEEN
>   GEN6_RP_UP_EI          10250
>   GEN6_RP_UP_THRESHOLD    9225
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 18750
>  HIGH_POWER
>   GEN6_RP_UP_EI           8000
>   GEN6_RP_UP_THRESHOLD    6800
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 15000
> 
> These are after 8a5864377b12:
>  LOW_POWER
>   GEN6_RP_UP_EI          12500
>   GEN6_RP_UP_THRESHOLD   11875
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 21250
>  BETWEEN
>   GEN6_RP_UP_EI          10156
>   GEN6_RP_UP_THRESHOLD    9140
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 18750
>  HIGH_POWER
>   GEN6_RP_UP_EI           7812
>   GEN6_RP_UP_THRESHOLD    6640
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 15000
> 
> And these are what we have after this patch:
>  LOW_POWER
>   GEN6_RP_UP_EI          12500
>   GEN6_RP_UP_THRESHOLD   11875
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 21250
>  BETWEEN
>   GEN6_RP_UP_EI          10175
>   GEN6_RP_UP_THRESHOLD    9150
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 18750
>  HIGH_POWER
>   GEN6_RP_UP_EI           7825
>   GEN6_RP_UP_THRESHOLD    6650
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 15000
> 
> Cc: stable@vger.kernel.org
> Cc: Akash Goel <akash.goel@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Testcase: igt/kms_pipe_crc_basic/hang-read-crc-pipe-B
> Fixes: 8a5864377b12 ("drm/i915/skl: Restructured the gen6_set_rps_thresholds function")
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_reg.h | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index c21b71c86a6b..08f01f4470cd 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -2948,7 +2948,14 @@ enum skl_disp_power_wells {
>  #define GEN6_RP_STATE_CAP	_MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5998)
>  #define BXT_RP_STATE_CAP        _MMIO(0x138170)
>  
> -#define INTERVAL_1_28_US(us)	(((us) * 100) >> 7)
> +/*
> + * Make these a multiple of magic 25 to avoid SNB (eg. Dell XPS
> + * 8300) freezing up around GPU hangs. Looks as if even
> + * scheduling/timer interrupts start misbehaving if the RPS
> + * EI/thresholds are "bad", leading to a very sluggish or even
> + * frozen machine.
> + */
> +#define INTERVAL_1_28_US(us)	roundup(((us) * 100) >> 7, 25)
>  #define INTERVAL_1_33_US(us)	(((us) * 3)   >> 2)
>  #define INTERVAL_0_833_US(us)	(((us) * 6) / 5)
>  #define GT_INTERVAL_FROM_US(dev_priv, us) (IS_GEN9(dev_priv) ? \
> -- 
> 2.7.4

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

WARNING: multiple messages have this Message-ID (diff)
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: stable@vger.kernel.org, Akash Goel <akash.goel@intel.com>,
	Chris Wilson <chris@chris-wilson.co.uk>
Subject: Re: [PATCH] drm/i915: Make RPS EI/thresholds multiple of 25 on SNB
Date: Wed, 20 Apr 2016 18:09:34 +0300	[thread overview]
Message-ID: <20160420150934.GE4329@intel.com> (raw)
In-Reply-To: <1461159836-9108-1-git-send-email-ville.syrjala@linux.intel.com>

On Wed, Apr 20, 2016 at 04:43:56PM +0300, ville.syrjala@linux.intel.com wrote:
> From: Ville Syrj�l� <ville.syrjala@linux.intel.com>

The patch subject should probably read
"drm/i915: Make RPS EI/thresholds multiple of 25 on SNB-BDW"
since it does change more than SNB. I'll fix that up when/if I push.

> 
> Somehow my SNB GT1 (Dell XPS 8300) gets very unhappy around
> GPU hangs if the RPS EI/thresholds aren't suitably aligned.
> It seems like scheduling/timer interupts stop working somehow
> and things get stuck eg. in usleep_range().
> 
> I bisected the problem down to
> commit 8a5864377b12 ("drm/i915/skl: Restructured the gen6_set_rps_thresholds function")
> I observed that before all the values were at least multiples of 25,
> but afterwards they are not. And rounding things up to the next multiple
> of 25 does seem to help, so lets' do that. I also tried roundup(..., 5)
> but that wasn't sufficient. Also I have no idea if we might need this sort of
> thing on gen9+ as well.
> 
> These are the original EI/thresholds:
>  LOW_POWER
>   GEN6_RP_UP_EI          12500
>   GEN6_RP_UP_THRESHOLD   11800
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 21250
>  BETWEEN
>   GEN6_RP_UP_EI          10250
>   GEN6_RP_UP_THRESHOLD    9225
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 18750
>  HIGH_POWER
>   GEN6_RP_UP_EI           8000
>   GEN6_RP_UP_THRESHOLD    6800
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 15000
> 
> These are after 8a5864377b12:
>  LOW_POWER
>   GEN6_RP_UP_EI          12500
>   GEN6_RP_UP_THRESHOLD   11875
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 21250
>  BETWEEN
>   GEN6_RP_UP_EI          10156
>   GEN6_RP_UP_THRESHOLD    9140
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 18750
>  HIGH_POWER
>   GEN6_RP_UP_EI           7812
>   GEN6_RP_UP_THRESHOLD    6640
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 15000
> 
> And these are what we have after this patch:
>  LOW_POWER
>   GEN6_RP_UP_EI          12500
>   GEN6_RP_UP_THRESHOLD   11875
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 21250
>  BETWEEN
>   GEN6_RP_UP_EI          10175
>   GEN6_RP_UP_THRESHOLD    9150
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 18750
>  HIGH_POWER
>   GEN6_RP_UP_EI           7825
>   GEN6_RP_UP_THRESHOLD    6650
>   GEN6_RP_DOWN_EI        25000
>   GEN6_RP_DOWN_THRESHOLD 15000
> 
> Cc: stable@vger.kernel.org
> Cc: Akash Goel <akash.goel@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Testcase: igt/kms_pipe_crc_basic/hang-read-crc-pipe-B
> Fixes: 8a5864377b12 ("drm/i915/skl: Restructured the gen6_set_rps_thresholds function")
> Signed-off-by: Ville Syrj�l� <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_reg.h | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index c21b71c86a6b..08f01f4470cd 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -2948,7 +2948,14 @@ enum skl_disp_power_wells {
>  #define GEN6_RP_STATE_CAP	_MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5998)
>  #define BXT_RP_STATE_CAP        _MMIO(0x138170)
>  
> -#define INTERVAL_1_28_US(us)	(((us) * 100) >> 7)
> +/*
> + * Make these a multiple of magic 25 to avoid SNB (eg. Dell XPS
> + * 8300) freezing up around GPU hangs. Looks as if even
> + * scheduling/timer interrupts start misbehaving if the RPS
> + * EI/thresholds are "bad", leading to a very sluggish or even
> + * frozen machine.
> + */
> +#define INTERVAL_1_28_US(us)	roundup(((us) * 100) >> 7, 25)
>  #define INTERVAL_1_33_US(us)	(((us) * 3)   >> 2)
>  #define INTERVAL_0_833_US(us)	(((us) * 6) / 5)
>  #define GT_INTERVAL_FROM_US(dev_priv, us) (IS_GEN9(dev_priv) ? \
> -- 
> 2.7.4

-- 
Ville Syrj�l�
Intel OTC

  parent reply	other threads:[~2016-04-20 15:10 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-20 13:43 [PATCH] drm/i915: Make RPS EI/thresholds multiple of 25 on SNB ville.syrjala
2016-04-20 13:57 ` Chris Wilson
2016-04-20 13:57   ` Chris Wilson
2016-04-20 15:09 ` Ville Syrjälä [this message]
2016-04-20 15:09   ` Ville Syrjälä
2016-04-21  6:54 ` ✓ Fi.CI.BAT: success for " Patchwork
2016-04-21 12:20 ` [Intel-gfx] [PATCH] " Patrik Jakobsson
2016-04-21 12:20   ` Patrik Jakobsson
2016-04-22 14:26   ` Ville Syrjälä
2016-04-22 14:26     ` Ville Syrjälä
2016-04-22 17:35   ` Ville Syrjälä
2016-04-22 17:35     ` [Intel-gfx] " Ville Syrjälä
2016-04-21 12:40 ` ✗ Fi.CI.BAT: warning for " Patchwork
2016-04-22 17:18   ` Ville Syrjälä
2016-04-22 17:38     ` Chris Wilson

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=20160420150934.GE4329@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=akash.goel@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=stable@vger.kernel.org \
    /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.