linux/drivers/gpu/drm/i915
Chris Wilson 8d9fc7fd2d drm/i915: Rely on accurate request tracking for finding hung batches
In the past, it was possible to have multiple batches per request due to
a stray signal or ENOMEM. As a result we had to scan each active object
(filtered by those having the COMMAND domain) for the one that contained
the ACTHD pointer. This was then made more complicated by the
introduction of ppgtt, whereby ACTHD then pointed into the address space
of the context and so also needed to be taken into account.

This is a fairly robust approach (though the implementation is a little
fragile and depends upon the per-generation setup, registers and
parameters). However, due to the requirements for hangstats, we needed a
robust method for associating batches with a particular request and
having that we can rely upon it for finding the associated batch object
for error capture.

If the batch buffer tracking is not robust enough, that should become
apparent quite quickly through an erroneous error capture. That should
also help to make sure that the runtime reporting to userspace is
robust. It also means that we then report the oldest incomplete batch on
each ring, which can be useful for determining the state of userspace at
the time of a hang.

v2: Use i915_gem_find_active_request (Mika)

v3: remove check for ring->get_seqno, split long lines (Ben)

v4: check that context is available (Chris)
    checkpatch warnings fixed

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> (v1)
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> (v3)
Cc: Ben Widawsky <benjamin.widawsky@intel.com>
Reviewed-by: Ben Widawsky <ben@bwidawsk.net> (v3)
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2014-03-05 21:30:24 +01:00
..
dvo_ch7xxx.c drm/i915: dvo_ch7xxx: fix vsync polarity setting 2013-07-25 16:10:22 +02:00
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c drm/i915/ns2501: Rip out the reenable hack 2013-11-04 16:32:31 +01:00
dvo_sil164.c
dvo_tfp410.c
dvo.h drm/i915: Remove unused mode_fixup() vfunc of struct intel_dvo_dev_ops 2013-09-05 21:39:59 +02:00
i915_debugfs.c drm/i915: kill dev_priv->pc8.gpu_idle 2014-03-05 21:30:17 +01:00
i915_dma.c drm/i915: switch order of power domain init wrt. irq install 2014-03-05 21:30:07 +01:00
i915_drv.c drm/i915: assert force wake is disabled when we runtime suspend 2014-03-05 21:30:19 +01:00
i915_drv.h drm/i915: Rely on accurate request tracking for finding hung batches 2014-03-05 21:30:24 +01:00
i915_gem_context.c drm/i915/bdw: Free PPGTT struct 2014-03-04 15:53:58 +01:00
i915_gem_debug.c drm/i915: Fix #endif comment 2013-08-09 10:45:52 +02:00
i915_gem_dmabuf.c drm/i915: Pin pages whilst allocating for dma-buf vmap() 2013-11-29 15:51:20 +01:00
i915_gem_evict.c drm/i915: Consolidate binding parameters into flags 2014-02-14 14:16:58 +01:00
i915_gem_execbuffer.c drm/i915: Only bind each object rather than for every execbuffer 2014-02-14 14:18:38 +01:00
i915_gem_gtt.c drm/i915/bdw: Kill ppgtt->num_pt_pages 2014-03-05 21:30:00 +01:00
i915_gem_stolen.c drm/i915: Fix the offset issue for the stolen GEM objects 2014-01-28 09:04:42 +01:00
i915_gem_tiling.c drm/i915: Make pin count per VMA 2013-12-18 15:27:49 +01:00
i915_gem.c drm/i915: Rely on accurate request tracking for finding hung batches 2014-03-05 21:30:24 +01:00
i915_gpu_error.c drm/i915: Rely on accurate request tracking for finding hung batches 2014-03-05 21:30:24 +01:00
i915_ioc32.c
i915_irq.c drm/i915: sprinkle static 2014-03-02 21:19:51 +01:00
i915_params.c drm/i915: Provide a command line option to disable display 2014-02-12 18:53:01 +01:00
i915_reg.h drm/i915: Revert workaround for disabling L3 cache aging on IVB 2014-03-05 21:30:02 +01:00
i915_suspend.c drm/i915: Kill most of the FBC register save/restore 2014-01-25 21:17:03 +01:00
i915_sysfs.c drm/i915: Update rps interrupt limits 2014-02-07 10:26:17 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Consolidate binding parameters into flags 2014-02-14 14:16:58 +01:00
i915_ums.c drm/i915: Only restore backlight combination mode reg for ums 2014-01-24 17:22:45 +01:00
intel_acpi.c ACPI: Eliminate the DEVICE_ACPI_HANDLE() macro 2013-11-14 23:17:21 +01:00
intel_bios.c drm/i915: Update VBT data structures to have MIPI block enhancements 2014-03-05 21:30:12 +01:00
intel_bios.h drm/i915: Update VBT data structures to have MIPI block enhancements 2014-03-05 21:30:12 +01:00
intel_crt.c drm/i915: get runtime PM while trying to detect CRT 2014-03-05 21:30:16 +01:00
intel_ddi.c drm/i915: Consolidate FUSE_STRAP in one set of defines 2014-02-12 18:52:52 +01:00
intel_display.c drm/i915: Perform pageflip using mmio if the GPU is terminally wedged 2014-03-05 21:30:20 +01:00
intel_dp.c drm/i915: dp: fix order of dp aux i2c device cleanup 2014-02-14 11:24:59 +01:00
intel_drv.h drm/i915: use drm_i915_private everywhere in the power domain api 2014-03-05 21:30:07 +01:00
intel_dsi_cmd.c drm/i915/dsi: s/size_t/int/ 2013-09-04 17:34:51 +02:00
intel_dsi_cmd.h drm/i915/dsi: s/size_t/int/ 2013-09-04 17:34:51 +02:00
intel_dsi_pll.c drm/i915: Try harder to get best m, n, p values with minimal error 2013-12-11 23:52:18 +01:00
intel_dsi.c drm/i915: add unregister callback to connector 2014-02-14 11:24:47 +01:00
intel_dsi.h drm/i915: Parametrize the dphy and other spec specific parameters 2013-12-11 23:52:20 +01:00
intel_dvo.c drm/i915: add unregister callback to connector 2014-02-14 11:24:47 +01:00
intel_fbdev.c drm/i915: ignore bios output config if not all outputs are on 2014-03-05 21:30:06 +01:00
intel_hdmi.c drm/i915: add unregister callback to connector 2014-02-14 11:24:47 +01:00
intel_i2c.c drm/i915/vlv: split CCK and DDR freq usage 2013-11-05 19:28:47 +01:00
intel_lvds.c drm/i915: add unregister callback to connector 2014-02-14 11:24:47 +01:00
intel_modes.c
intel_opregion.c drm/i915: Eliminate lots of WARNs when there's no backlight present 2014-01-22 10:34:38 +01:00
intel_overlay.c drm/i915: tune down user-triggerable dmesg noise in the cursor/overlay code 2014-02-14 19:02:32 +01:00
intel_panel.c drm/i915: Initialize downclock mode in panel init 2014-02-12 18:53:05 +01:00
intel_pm.c drm/i915: kill dev_priv->pc8.gpu_idle 2014-03-05 21:30:17 +01:00
intel_ringbuffer.c drm/i915: Handle set_cache_level errors in the status page setup 2014-02-14 14:18:00 +01:00
intel_ringbuffer.h drm/i915: Use hangcheck score to find guilty context 2014-02-04 11:57:24 +01:00
intel_sdvo_regs.h drm/i915: use __packed instead of __attribute__((packed)) 2013-12-03 18:19:49 +01:00
intel_sdvo.c drm/i915: sdvo: add i2c sysfs symlink to the connector's directory 2014-02-14 11:25:14 +01:00
intel_sideband.c drm/i915: Use FLISDSI interface for band gap reset 2013-12-11 23:52:17 +01:00
intel_sprite.c drm/i915: Shuffle sprite register writes into a tighter group 2014-01-24 17:22:53 +01:00
intel_tv.c drm/i915: add unregister callback to connector 2014-02-14 11:24:47 +01:00
intel_uncore.c drm/i915: Streamline VLV forcewake handling 2014-03-05 21:30:22 +01:00
Kconfig i915, fbdev: Fix Kconfig typo 2013-11-21 21:59:02 +01:00
Makefile drm/i915: move module parameters into a struct, in a new file 2014-01-27 17:16:45 +01:00