linux/drivers/gpu/drm
Ben Widawsky 8c123e549f drm/i915: Capture current context on error
On error, this represents the state of the currently running context at
the time it was loaded.

Unfortunately, since we're hung and can't switch out the context this
may not tell us too much about the most current state of the context,
but does give clues about what has happened since loading.

Thanks to recent doc updates, we have a little more confidence regarding
what is actually in this memory, and perhaps it will help us gain more
insight into certain bugs. AFAICT, the most interesting info is in the
first page. To save space, we only capture the first page. In the
future, we might want to dump more.

Sample of the relevant part of error state:
render ring --- HW Context = 0x01b20000
[0000] 00000000 1100105f 00002028 ffff0880
[0010] 0000209c feff4040 000020c0 efdf0080
[0020] 00002178 00000001 0000217c 00145855
[0030] 00002310 00000000 00002314 00000000

v2: Move error collection to the ring error code
Change format of dump to not confuse intel_error_decode (Chris)
Put the context error object with the others (Chris)
Don't search bound_list instead of active_list (chris)

v3: extract and flatten context recording (daniel)
checkpatch related fixes for the copypasta in debugfs

v4: bug in v3 (Daniel)
-       if ((ring->id == RCS) && error->ccid)
+       if ((ring->id != RCS) || !error->ccid)

References: https://bugs.freedesktop.org/show_bug.cgi?id=55845
Reviewed-by (v2): Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
[danvet: Bikeshed away the redudant parenthese around ring->id != RCS]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2013-03-05 09:38:22 +01:00
..
ast drm: revamp framebuffer cleanup interfaces 2013-01-20 22:17:00 +01:00
cirrus drm: revamp framebuffer cleanup interfaces 2013-01-20 22:17:00 +01:00
exynos Merge branch 'fbcon-locking-fixes' of ssh://people.freedesktop.org/~airlied/linux into drm-next 2013-02-08 12:10:18 +10:00
gma500 drm: revamp framebuffer cleanup interfaces 2013-01-20 22:17:00 +01:00
i2c drm/i2c: give i2c it's own Kconfig 2013-02-08 13:34:07 +10:00
i810
i915 drm/i915: Capture current context on error 2013-03-05 09:38:22 +01:00
mga
mgag200 drm: revamp framebuffer cleanup interfaces 2013-01-20 22:17:00 +01:00
nouveau Merge branch 'for-airlied' of git://people.freedesktop.org/~mlankhorst/linux into drm-next 2013-02-08 14:02:32 +10:00
r128
radeon drm/radeon: use prime helpers 2013-02-08 13:48:43 +10:00
savage
shmobile drm/shmobile: use drm_modeset_lock_all 2013-01-20 22:16:51 +01:00
sis
tdfx
tegra Revert "drm: tegra: protect DC register access with mutex" 2012-12-30 21:58:20 +10:00
ttm Merge branch 'for-airlied' of git://people.freedesktop.org/~mlankhorst/linux into drm-next 2013-02-08 14:02:32 +10:00
udl Merge branch 'udl-fixes' into drm-next 2013-02-08 12:14:50 +10:00
via
vmwgfx Merge branch 'for-airlied' of git://people.freedesktop.org/~mlankhorst/linux into drm-next 2013-02-08 14:02:32 +10:00
ati_pcigart.c
drm_agpsupport.c
drm_auth.c
drm_buffer.c
drm_bufs.c
drm_cache.c
drm_context.c
drm_crtc_helper.c drm: don't hold crtc mutexes for connector ->detect callbacks 2013-01-20 22:17:15 +01:00
drm_crtc.c drm: Use C8 instead of RGB332 when determining the format from depth/bpp 2013-02-20 00:21:44 +01:00
drm_debugfs.c
drm_dma.c
drm_dp_helper.c drm/doc: add new dp helpers into drm DocBook 2012-11-28 20:26:53 +10:00
drm_drv.c
drm_edid_load.c
drm_edid_modes.h
drm_edid.c Revert "drm: Add EDID_QUIRK_FORCE_REDUCED_BLANKING for ASUS VW222S" 2013-02-13 20:38:42 +10:00
drm_encoder_slave.c
drm_fb_cma_helper.c drm: revamp framebuffer cleanup interfaces 2013-01-20 22:17:00 +01:00
drm_fb_helper.c drm/fb_helper: check whether fbcon is bound 2013-01-20 22:17:17 +01:00
drm_fops.c drm: revamp locking around fb creation/destruction 2013-01-20 22:16:58 +01:00
drm_gem_cma_helper.c
drm_gem.c
drm_global.c
drm_hashtab.c drm: Add a hash-tab rcu-safe API 2012-11-28 18:36:05 +10:00
drm_info.c
drm_ioc32.c
drm_ioctl.c drm: add support for monotonic vblank timestamps 2012-11-20 16:06:16 +10:00
drm_irq.c drm: make frame duration time calculation more precise 2013-02-08 14:00:48 +10:00
drm_lock.c
drm_memory.c
drm_mm.c Merge branch 'drm-kms-locking' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2013-01-21 07:44:58 +10:00
drm_modes.c drm_modes: add of_videomode helpers 2013-01-24 09:04:14 +01:00
drm_pci.c drm/pci: Use PCI Express Capability accessors 2013-02-08 13:54:31 +10:00
drm_platform.c
drm_prime.c drm: add prime helpers 2013-02-08 13:39:08 +10:00
drm_proc.c
drm_scatter.c
drm_stub.c drm: add support for monotonic vblank timestamps 2012-11-20 16:06:16 +10:00
drm_sysfs.c drm: remove legacy drm_connector_property fxns 2012-11-30 10:30:48 -06:00
drm_trace_points.c
drm_trace.h
drm_usb.c drm/usb: bind driver to correct device 2013-02-07 12:37:41 +10:00
drm_vm.c
Kconfig drm/i2c: give i2c it's own Kconfig 2013-02-08 13:34:07 +10:00
Makefile drm: only build ati_pcigart if PCI enabled 2012-11-28 20:12:29 +10:00
README.drm

************************************************************
* For the very latest on DRI development, please see:      *
*     http://dri.freedesktop.org/                          *
************************************************************

The Direct Rendering Manager (drm) is a device-independent kernel-level
device driver that provides support for the XFree86 Direct Rendering
Infrastructure (DRI).

The DRM supports the Direct Rendering Infrastructure (DRI) in four major
ways:

    1. The DRM provides synchronized access to the graphics hardware via
       the use of an optimized two-tiered lock.

    2. The DRM enforces the DRI security policy for access to the graphics
       hardware by only allowing authenticated X11 clients access to
       restricted regions of memory.

    3. The DRM provides a generic DMA engine, complete with multiple
       queues and the ability to detect the need for an OpenGL context
       switch.

    4. The DRM is extensible via the use of small device-specific modules
       that rely extensively on the API exported by the DRM module.


Documentation on the DRI is available from:
    http://dri.freedesktop.org/wiki/Documentation
    http://sourceforge.net/project/showfiles.php?group_id=387
    http://dri.sourceforge.net/doc/

For specific information about kernel-level support, see:

    The Direct Rendering Manager, Kernel Support for the Direct Rendering
    Infrastructure
    http://dri.sourceforge.net/doc/drm_low_level.html

    Hardware Locking for the Direct Rendering Infrastructure
    http://dri.sourceforge.net/doc/hardware_locking_low_level.html

    A Security Analysis of the Direct Rendering Infrastructure
    http://dri.sourceforge.net/doc/security_low_level.html