linux/drivers/gpu/drm
Jesse Barnes 14d200c5e5 drm/i915: capture last_vblank count at IRQ uninstall time too
In dc1336ff4f (set vblank enable flag correctly
across IRQ uninstall), we made sure drivers that uninstall their interrupt
handler set the vblank enabled flag correctly, so that when interrupts are
re-enabled, vblank interrupts & counts work as expected.  However I missed the
last_vblank field:  it needs to be updated as well, otherwise, at the next
drm_update_vblank_count we'll end up comparing a current count to a stale
one (the last one captured by the disable function), which may trigger the
wraparound handling, leading to a jumpy counter and hangs in drm_wait_vblank.

The jumpy counter can prevent the DRM_WAIT_ON from returning success if the
difference between the current count and the requested count is greater than
2^23, leading to timeouts or hangs, if the ioctl is restarted in a loop (as
is the case in libdrm < 2.4.4).

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Acked-by: Michel Dänzer <michel@daenzer.net>
Tested-by: Timo Aaltonen <tjaalton@cc.hut.fi>
Signed-off-by: Dave Airlie <airlied@redhat.com>
2009-02-08 21:40:51 +10:00
..
i810
i830
i915 drm/i915: Unlock mutex on i915_gem_fault() error path 2009-02-08 21:38:27 +10:00
mga drm: move drm vblank initialization/cleanup to driver load/unload 2008-11-25 09:49:03 +10:00
r128 drm: move drm vblank initialization/cleanup to driver load/unload 2008-11-25 09:49:03 +10:00
radeon drm/radeon: fix ioremap conflict with AGP mappings 2009-02-08 21:37:24 +10:00
savage
sis SiS DRM: fix a pointer cast warning 2008-10-18 07:10:10 +10:00
tdfx
via drm: move drm vblank initialization/cleanup to driver load/unload 2008-11-25 09:49:03 +10:00
ati_pcigart.c
drm_agpsupport.c drm: stash AGP include under the do-we-have-AGP ifdef 2009-01-22 22:27:11 +10:00
drm_auth.c drm: move to kref per-master structures. 2008-12-29 17:47:22 +10:00
drm_bufs.c drm/radeon: use locked rmmap to remove sarea mapping. 2008-12-29 17:47:24 +10:00
drm_cache.c drm: wbinvd is cache coherent. 2008-10-18 07:10:53 +10:00
drm_context.c drm: move to kref per-master structures. 2008-12-29 17:47:22 +10:00
drm_crtc_helper.c drm: handle depth & bpp changes correctly 2009-01-16 18:40:57 +10:00
drm_crtc.c drm: create mode_config idr lock 2009-01-22 17:53:05 +10:00
drm_dma.c
drm_drawable.c drm: Avoid oops in DRM_IOCTL_RM_DRAW if a bad handle is supplied. 2008-10-23 13:46:54 +10:00
drm_drv.c drm: fix leak of device mappings since multi-master changes. 2009-01-19 17:17:58 +10:00
drm_edid.c drm: don't whine about not reading EDID data 2009-01-22 22:23:53 +10:00
drm_fops.c Check fops_get() return value 2009-01-06 15:59:11 -08:00
drm_gem.c Stop playing silly games with the VM_ACCOUNT flag 2009-01-31 15:08:56 -08:00
drm_hashtab.c drm: GEM mmap support 2008-12-29 17:47:22 +10:00
drm_ioc32.c drm: Add 32-bit compatibility for DRM_IOCTL_UPDATE_DRAW. 2008-10-23 13:46:33 +10:00
drm_ioctl.c drm: fix leak of uninitialized data to userspace 2008-12-29 17:47:22 +10:00
drm_irq.c drm/i915: capture last_vblank count at IRQ uninstall time too 2009-02-08 21:40:51 +10:00
drm_lock.c drm: move to kref per-master structures. 2008-12-29 17:47:22 +10:00
drm_memory.c drm/radeon: fix ioremap conflict with AGP mappings 2009-02-08 21:37:24 +10:00
drm_mm.c DRM: add mode setting support 2008-12-29 17:47:23 +10:00
drm_modes.c DRM: add mode setting support 2008-12-29 17:47:23 +10:00
drm_pci.c
drm_proc.c drm: Add a debug node for vblank state. 2008-12-29 17:47:27 +10:00
drm_scatter.c
drm_sman.c
drm_stub.c drm: fix leak of device mappings since multi-master changes. 2009-01-19 17:17:58 +10:00
drm_sysfs.c gpu: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:41 -08:00
drm_vm.c drm: GEM mmap support 2008-12-29 17:47:22 +10:00
Kconfig drm: kconfig have drm core select i2c for kms 2008-12-29 17:47:24 +10:00
Makefile DRM: add mode setting support 2008-12-29 17:47:23 +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