[Intel-gfx] [PATCH 05/10] drm/i915: extract intel_gpu_reset
Ben Widawsky
ben at bwidawsk.net
Mon Apr 30 03:03:58 CEST 2012
On Fri, 27 Apr 2012 15:17:42 +0200
Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> Slightly cleans up the code and could be useful for e.g. Ben
> Widawsky's hw context patches.
>
> v2: New colours!
>
> Cc: Ben Widawsky <ben at bwidawsk.net>
Unfortunately, I have been unable to make use of this patch. In all my
attempts, doing intel_gpu_reset (with nothing else) will result in the
next operation causing a hangcheck anyway. I think we should dig a bit
more into this before we both.
> Signed-Off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> drivers/gpu/drm/i915/i915_drv.c | 43 ++++++++++++++++++++++++--------------
> 1 files changed, 27 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index f5450bb..c4251a1 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -768,6 +768,29 @@ static int gen6_do_reset(struct drm_device *dev, u8 flags)
> return ret;
> }
>
> +static int intel_gpu_reset(struct drm_device *dev, u8 flags)
> +{
> + int ret = -ENODEV;
> +
> + switch (INTEL_INFO(dev)->gen) {
> + case 7:
> + case 6:
> + ret = gen6_do_reset(dev, flags);
> + break;
> + case 5:
> + ret = ironlake_do_reset(dev, flags);
> + break;
> + case 4:
> + ret = i965_do_reset(dev, flags);
> + break;
> + case 2:
> + ret = i8xx_do_reset(dev, flags);
> + break;
> + }
> +
> + return ret;
> +}
> +
> /**
> * i915_reset - reset chip after a hang
> * @dev: drm device to reset
> @@ -798,23 +821,11 @@ int i915_reset(struct drm_device *dev, u8 flags)
> i915_gem_reset(dev);
>
> ret = -ENODEV;
> - if (get_seconds() - dev_priv->last_gpu_reset < 5) {
> + if (get_seconds() - dev_priv->last_gpu_reset < 5)
> DRM_ERROR("GPU hanging too fast, declaring wedged!\n");
> - } else switch (INTEL_INFO(dev)->gen) {
> - case 7:
> - case 6:
> - ret = gen6_do_reset(dev, flags);
> - break;
> - case 5:
> - ret = ironlake_do_reset(dev, flags);
> - break;
> - case 4:
> - ret = i965_do_reset(dev, flags);
> - break;
> - case 2:
> - ret = i8xx_do_reset(dev, flags);
> - break;
> - }
> + else
> + ret = intel_gpu_reset(dev, flags);
> +
> dev_priv->last_gpu_reset = get_seconds();
> if (ret) {
> DRM_ERROR("Failed to reset chip.\n");
More information about the Intel-gfx
mailing list