<p><br>
On Sep 26, 2011 9:00 PM, "Daniel Vetter" <<a href="mailto:daniel.vetter@ffwll.ch">daniel.vetter@ffwll.ch</a>> wrote:<br>
><br>
> Only do it in the hope of resurrecting the gpu. Disable when reset is<br>
> disabled because it seems to tremendously increases our changes to<br>
> actually capture an error_state before the system goes all belly-up.<br>
><br>
> Signed-off-by: Daniel Vetter <<a href="mailto:daniel.vetter@ffwll.ch">daniel.vetter@ffwll.ch</a>><br>
> ---<br>
> Hi Andrew,<br>
><br>
> Can you please apply this patch and boot your system with<br>
></p>
<p>Will do in a couple days.  I'm several thousand miles from that computer right now :)</p>
<p>--Andy</p>
<p>> i915.reset=0 i915.semaphores=1<br>
><br>
> and rehang your gpu? This patch to fully disable any attempts at<br>
> resurrecting a dead gpu hopefully prevents the full system hang you're<br>
> experiencing. At least it helps greatly here on my systems.<br>
><br>
> If the systems isn't completely dead with this, can you please ssh<br>
> into the machine and grabe dmesg, i915_error_state, Xorg.log and<br>
> whatever else there might be?<br>
><br>
> Thanks a lot,<br>
><br>
> Daniel<br>
><br>
>  drivers/gpu/drm/i915/i915_drv.c |    2 +-<br>
>  drivers/gpu/drm/i915/i915_drv.h |    1 +<br>
>  drivers/gpu/drm/i915/i915_irq.c |    2 +-<br>
>  3 files changed, 3 insertions(+), 2 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c<br>
> index b79c6f1..ad85c13 100644<br>
> --- a/drivers/gpu/drm/i915/i915_drv.c<br>
> +++ b/drivers/gpu/drm/i915/i915_drv.c<br>
> @@ -91,7 +91,7 @@ MODULE_PARM_DESC(vbt_sdvo_panel_type,<br>
>                "Override selection of SDVO panel mode in the VBT "<br>
>                "(default: auto)");<br>
><br>
> -static bool i915_try_reset __read_mostly = true;<br>
> +bool i915_try_reset __read_mostly = true;<br>
>  module_param_named(reset, i915_try_reset, bool, 0600);<br>
>  MODULE_PARM_DESC(reset, "Attempt GPU resets (default: true)");<br>
><br>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h<br>
> index 3621336..788a801 100644<br>
> --- a/drivers/gpu/drm/i915/i915_drv.h<br>
> +++ b/drivers/gpu/drm/i915/i915_drv.h<br>
> @@ -995,6 +995,7 @@ extern unsigned int i915_semaphores __read_mostly;<br>
>  extern unsigned int i915_lvds_downclock __read_mostly;<br>
>  extern unsigned int i915_panel_use_ssc __read_mostly;<br>
>  extern int i915_vbt_sdvo_panel_type __read_mostly;<br>
> +extern bool i915_try_reset __read_mostly;<br>
>  extern unsigned int i915_enable_rc6 __read_mostly;<br>
>  extern unsigned int i915_enable_fbc __read_mostly;<br>
>  extern bool i915_enable_hangcheck __read_mostly;<br>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c<br>
> index da5d607..09c11e4 100644<br>
> --- a/drivers/gpu/drm/i915/i915_irq.c<br>
> +++ b/drivers/gpu/drm/i915/i915_irq.c<br>
> @@ -1694,7 +1694,7 @@ void i915_hangcheck_elapsed(unsigned long data)<br>
>                if (dev_priv->hangcheck_count++ > 1) {<br>
>                        DRM_ERROR("Hangcheck timer elapsed... GPU hung\n");<br>
><br>
> -                       if (!IS_GEN2(dev)) {<br>
> +                       if (!IS_GEN2(dev) && i915_try_reset) {<br>
>                                /* Is the chip hanging on a WAIT_FOR_EVENT?<br>
>                                 * If so we can simply poke the RB_WAIT bit<br>
>                                 * and break the hang. This should work on<br>
> --<br>
> 1.7.6.2<br>
><br>
</p>