[Intel-gfx] [PATCH 1/2] drm/i915: add i915_reset_count
Damien Lespiau
damien.lespiau at intel.com
Fri Nov 8 18:40:28 CET 2013
On Wed, Oct 30, 2013 at 03:44:15PM +0200, Mika Kuoppala wrote:
> reset_counter will be incremented twice per successful
> reset. Odd values mean reset is in progress and even values
> mean that reset has completed.
Could you also update the lengthy comment above reset_counter. It looks
quite stale. There's also a:
* Note that the code relies on
* I915_WEDGED & I915_RESET_IN_PROGRESS_FLAG
* being true.
which is not true anymore with this commit. i915_reset_in_progress() has
been modified to take the I915_WEDGED change into account, so we should
be safe, I believe.
With this, you can add a:
Reviewed-by: Damien Lespiau <damien.lespiau at intel.com>
--
Damien
>
> Reset status ioctl introduced in following commit
> needs to deliver global reset count to userspace so
> use reset_counter to derive the actual reset count
> for the gpu
>
> Note that reset in progress is enough to increment
> the counter.
>
> v2: wedged equals reset in progress (Daniel Vetter)
>
> Signed-off-by: Mika Kuoppala <mika.kuoppala at intel.com>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 11 ++++++++---
> drivers/gpu/drm/i915/i915_irq.c | 2 +-
> 2 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 0a886fd..9fd716d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1082,7 +1082,7 @@ struct i915_gpu_error {
> * being true.
> */
> #define I915_RESET_IN_PROGRESS_FLAG 1
> -#define I915_WEDGED 0xffffffff
> +#define I915_WEDGED (1 << 31)
>
> /**
> * Waitqueue to signal when the reset has completed. Used by clients
> @@ -2031,12 +2031,17 @@ int __must_check i915_gem_check_wedge(struct i915_gpu_error *error,
> static inline bool i915_reset_in_progress(struct i915_gpu_error *error)
> {
> return unlikely(atomic_read(&error->reset_counter)
> - & I915_RESET_IN_PROGRESS_FLAG);
> + & (I915_RESET_IN_PROGRESS_FLAG | I915_WEDGED));
> }
>
> static inline bool i915_terminally_wedged(struct i915_gpu_error *error)
> {
> - return atomic_read(&error->reset_counter) == I915_WEDGED;
> + return atomic_read(&error->reset_counter) & I915_WEDGED;
> +}
> +
> +static inline u32 i915_reset_count(struct i915_gpu_error *error)
> +{
> + return ((atomic_read(&error->reset_counter) & ~I915_WEDGED) + 1) / 2;
> }
>
> void i915_gem_reset(struct drm_device *dev);
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index a228176..80800d2 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -1783,7 +1783,7 @@ static void i915_error_work_func(struct work_struct *work)
> kobject_uevent_env(&dev->primary->kdev.kobj,
> KOBJ_CHANGE, reset_done_event);
> } else {
> - atomic_set(&error->reset_counter, I915_WEDGED);
> + atomic_set_mask(I915_WEDGED, &error->reset_counter);
> }
>
> /*
> --
> 1.7.9.5
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list