[Intel-gfx] [PATCH 1/3] drm/i915: Move error uevent to detection time
Chris Wilson
chris at chris-wilson.co.uk
Fri Jul 19 10:45:09 CEST 2013
On Thu, Jul 18, 2013 at 10:42:48PM -0700, Ben Widawsky wrote:
> We've recently deferred error handling with a workqueue for a number of
> reasons. However, when we're trying to pass the information to
> userspace, it's likely more interesting to know when the error was
> detected by the kernel, and not when we eventually get around to
> handling it in the workqueue.
>
> This was inspired as a result of the patch to move these events to the
> uapi.
>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> ---
> drivers/gpu/drm/i915/i915_irq.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 9910699..9fe430a 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -1435,13 +1435,10 @@ static void i915_error_work_func(struct work_struct *work)
> gpu_error);
> struct drm_device *dev = dev_priv->dev;
> struct intel_ring_buffer *ring;
> - char *error_event[] = { "ERROR=1", NULL };
> char *reset_event[] = { "RESET=1", NULL };
> char *reset_done_event[] = { "ERROR=0", NULL };
> int i, ret;
>
> - kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event);
> -
> /*
> * Note that there's only one work item which does gpu resets, so we
> * need not worry about concurrent gpu resets potentially incrementing
> @@ -1594,11 +1591,14 @@ void i915_handle_error(struct drm_device *dev, bool wedged)
> {
> struct drm_i915_private *dev_priv = dev->dev_private;
> struct intel_ring_buffer *ring;
> + char *error_event[] = { "ERROR=1", NULL };
> int i;
>
> i915_capture_error_state(dev);
> i915_report_and_clear_eir(dev);
>
> + kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event);
> +
> if (wedged) {
> atomic_set_mask(I915_RESET_IN_PROGRESS_FLAG,
> &dev_priv->gpu_error.reset_counter);
This leaves the reset counter unchanged prior to the uevent, if you move
the uevent signalling down to just before the queue_work() there would
be no userspace visible changes (other than timing, which is a moot
point).
However, kobject_uevent_env() is not suitable for calling from
irq-context.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list