diff mbox

[v3] drm/i915: Mark i915.inject_load_failure as being hit

Message ID 20180606144153.4244-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson June 6, 2018, 2:41 p.m. UTC
When we reach the magic value and do inject a fault into our module load,
mark the module option as being hit. Since we fail from inside pci
probe, the module load isn't actually aborted and the module (and
paramters) are left lingering. igt can then inspect the parameter on its
synchronous completion of modprobe to see if the fault injection was
successful, and will keeping on injecting new faults until the module
succeeds in loading having surpassed the number of fault points.

v2: Reset to 0 after being hit;

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Cc: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Michał Winiarski June 6, 2018, 2:50 p.m. UTC | #1
On Wed, Jun 06, 2018 at 03:41:53PM +0100, Chris Wilson wrote:
> When we reach the magic value and do inject a fault into our module load,
> mark the module option as being hit. Since we fail from inside pci
> probe, the module load isn't actually aborted and the module (and
> paramters) are left lingering. igt can then inspect the parameter on its
> synchronous completion of modprobe to see if the fault injection was
> successful, and will keeping on injecting new faults until the module
> succeeds in loading having surpassed the number of fault points.
> 
> v2: Reset to 0 after being hit;
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Michał Winiarski <michal.winiarski@intel.com>
> Cc: Imre Deak <imre.deak@intel.com>

If the other Michał doesn't mind ;)

Reviewed-by: Michał Winiarski <michal.winiarski@intel.com>

-Michał

> ---
>  drivers/gpu/drm/i915/i915_drv.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 6b599b1837dc..be71fdf8d92e 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -67,6 +67,7 @@ bool __i915_inject_load_failure(const char *func, int line)
>  	if (++i915_load_fail_count == i915_modparams.inject_load_failure) {
>  		DRM_INFO("Injecting failure at checkpoint %u [%s:%d]\n",
>  			 i915_modparams.inject_load_failure, func, line);
> +		i915_modparams.inject_load_failure = 0;
>  		return true;
>  	}
>  
> @@ -117,16 +118,15 @@ __i915_printk(struct drm_i915_private *dev_priv, const char *level,
>  static bool i915_error_injected(struct drm_i915_private *dev_priv)
>  {
>  #if IS_ENABLED(CONFIG_DRM_I915_DEBUG)
> -	return i915_modparams.inject_load_failure &&
> -	       i915_load_fail_count == i915_modparams.inject_load_failure;
> +	return i915_load_fail_count && !i915_modparams.inject_load_failure;
>  #else
>  	return false;
>  #endif
>  }
>  
> -#define i915_load_error(dev_priv, fmt, ...)				     \
> -	__i915_printk(dev_priv,						     \
> -		      i915_error_injected(dev_priv) ? KERN_DEBUG : KERN_ERR, \
> +#define i915_load_error(i915, fmt, ...)					 \
> +	__i915_printk(i915,						 \
> +		      i915_error_injected(i915) ? KERN_DEBUG : KERN_ERR, \
>  		      fmt, ##__VA_ARGS__)
>  
>  /* Map PCH device id to PCH type, or PCH_NONE if unknown. */
> -- 
> 2.17.1
>
Michal Wajdeczko June 6, 2018, 2:54 p.m. UTC | #2
On Wed, 06 Jun 2018 16:50:09 +0200, Michał Winiarski  
<michal.winiarski@intel.com> wrote:

> On Wed, Jun 06, 2018 at 03:41:53PM +0100, Chris Wilson wrote:
>> When we reach the magic value and do inject a fault into our module  
>> load,
>> mark the module option as being hit. Since we fail from inside pci
>> probe, the module load isn't actually aborted and the module (and
>> paramters) are left lingering. igt can then inspect the parameter on its

still typo here

>> synchronous completion of modprobe to see if the fault injection was
>> successful, and will keeping on injecting new faults until the module
>> succeeds in loading having surpassed the number of fault points.
>>
>> v2: Reset to 0 after being hit;
>>
>> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
>> Cc: Michał Winiarski <michal.winiarski@intel.com>
>> Cc: Imre Deak <imre.deak@intel.com>
>
> If the other Michał doesn't mind ;)

it depends ;)

with typo fixed, you can have my r-b too

>
> Reviewed-by: Michał Winiarski <michal.winiarski@intel.com>
>
> -Michał
>
>> ---
>>  drivers/gpu/drm/i915/i915_drv.c | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_drv.c  
>> b/drivers/gpu/drm/i915/i915_drv.c
>> index 6b599b1837dc..be71fdf8d92e 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.c
>> +++ b/drivers/gpu/drm/i915/i915_drv.c
>> @@ -67,6 +67,7 @@ bool __i915_inject_load_failure(const char *func, int  
>> line)
>>  	if (++i915_load_fail_count == i915_modparams.inject_load_failure) {
>>  		DRM_INFO("Injecting failure at checkpoint %u [%s:%d]\n",
>>  			 i915_modparams.inject_load_failure, func, line);
>> +		i915_modparams.inject_load_failure = 0;
>>  		return true;
>>  	}
>>
>> @@ -117,16 +118,15 @@ __i915_printk(struct drm_i915_private *dev_priv,  
>> const char *level,
>>  static bool i915_error_injected(struct drm_i915_private *dev_priv)
>>  {
>>  #if IS_ENABLED(CONFIG_DRM_I915_DEBUG)
>> -	return i915_modparams.inject_load_failure &&
>> -	       i915_load_fail_count == i915_modparams.inject_load_failure;
>> +	return i915_load_fail_count && !i915_modparams.inject_load_failure;
>>  #else
>>  	return false;
>>  #endif
>>  }
>>
>> -#define i915_load_error(dev_priv, fmt, ...)				     \
>> -	__i915_printk(dev_priv,						     \
>> -		      i915_error_injected(dev_priv) ? KERN_DEBUG : KERN_ERR, \
>> +#define i915_load_error(i915, fmt, ...)					 \
>> +	__i915_printk(i915,						 \
>> +		      i915_error_injected(i915) ? KERN_DEBUG : KERN_ERR, \
>>  		      fmt, ##__VA_ARGS__)
>>
>>  /* Map PCH device id to PCH type, or PCH_NONE if unknown. */
>> --
>> 2.17.1
>>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Chris Wilson June 6, 2018, 2:55 p.m. UTC | #3
Quoting Michał Winiarski (2018-06-06 15:50:09)
> On Wed, Jun 06, 2018 at 03:41:53PM +0100, Chris Wilson wrote:
> > When we reach the magic value and do inject a fault into our module load,
> > mark the module option as being hit. Since we fail from inside pci
> > probe, the module load isn't actually aborted and the module (and
> > paramters) are left lingering. igt can then inspect the parameter on its
> > synchronous completion of modprobe to see if the fault injection was
> > successful, and will keeping on injecting new faults until the module
> > succeeds in loading having surpassed the number of fault points.
> > 
> > v2: Reset to 0 after being hit;
> > 
> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> > Cc: Michał Winiarski <michal.winiarski@intel.com>
> > Cc: Imre Deak <imre.deak@intel.com>
> 
> If the other Michał doesn't mind ;)

Now there's two of you!
-Chris
Chris Wilson June 6, 2018, 5:40 p.m. UTC | #4
Quoting Michal Wajdeczko (2018-06-06 15:54:47)
> On Wed, 06 Jun 2018 16:50:09 +0200, Michał Winiarski  
> <michal.winiarski@intel.com> wrote:
> 
> > On Wed, Jun 06, 2018 at 03:41:53PM +0100, Chris Wilson wrote:
> >> When we reach the magic value and do inject a fault into our module  
> >> load,
> >> mark the module option as being hit. Since we fail from inside pci
> >> probe, the module load isn't actually aborted and the module (and
> >> paramters) are left lingering. igt can then inspect the parameter on its
> 
> still typo here
> 
> >> synchronous completion of modprobe to see if the fault injection was
> >> successful, and will keeping on injecting new faults until the module
> >> succeeds in loading having surpassed the number of fault points.
> >>
> >> v2: Reset to 0 after being hit;
> >>
> >> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> >> Cc: Michał Winiarski <michal.winiarski@intel.com>
> >> Cc: Imre Deak <imre.deak@intel.com>
> >
> > If the other Michał doesn't mind ;)
> 
> it depends ;)
> 
> with typo fixed, you can have my r-b too

Deal.

Thanks for pointing out how broken the igt was, grrr :-p
Pushed,
-Chris
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 6b599b1837dc..be71fdf8d92e 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -67,6 +67,7 @@  bool __i915_inject_load_failure(const char *func, int line)
 	if (++i915_load_fail_count == i915_modparams.inject_load_failure) {
 		DRM_INFO("Injecting failure at checkpoint %u [%s:%d]\n",
 			 i915_modparams.inject_load_failure, func, line);
+		i915_modparams.inject_load_failure = 0;
 		return true;
 	}
 
@@ -117,16 +118,15 @@  __i915_printk(struct drm_i915_private *dev_priv, const char *level,
 static bool i915_error_injected(struct drm_i915_private *dev_priv)
 {
 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG)
-	return i915_modparams.inject_load_failure &&
-	       i915_load_fail_count == i915_modparams.inject_load_failure;
+	return i915_load_fail_count && !i915_modparams.inject_load_failure;
 #else
 	return false;
 #endif
 }
 
-#define i915_load_error(dev_priv, fmt, ...)				     \
-	__i915_printk(dev_priv,						     \
-		      i915_error_injected(dev_priv) ? KERN_DEBUG : KERN_ERR, \
+#define i915_load_error(i915, fmt, ...)					 \
+	__i915_printk(i915,						 \
+		      i915_error_injected(i915) ? KERN_DEBUG : KERN_ERR, \
 		      fmt, ##__VA_ARGS__)
 
 /* Map PCH device id to PCH type, or PCH_NONE if unknown. */