linux/drivers/gpu/drm
Daniel Vetter c9bb51fb8c drm/i915: rip out the PM_IIR WARN
commit 58bf8062d0 upstream.

After banging my head against this for the past few months, I still
don't see how this could possible race under the premise that once an
irq bit is masked in PM_IMR and reset in PM_IIR it won't show up again
until we unmask it in PM_IMR.

Still, we have reports of this being seen in the wild. Now Bspec has
this little bit of lovely language in the PMIIR register:

Public SNB Docs, Vol3Part2, 2.5.14 "PMIIR":

"For each bit, the IIR can store a second pending interrupt if two or
more of the same interrupt conditions occur before the first condition
is cleared. Upon clearing the interrupt, the IIR bit will momentarily
go low, then return high to indicate there is another interrupt
pending."

Now if we presume that PMIMR only prevent new interrupts from being
queued, we could easily end up masking an interrupt and clearing it,
but the 2nd pending interrupt setting the bit in PMIIR right away
again. Which leads, the next time the irq handler runs, to hitting the
WARN.

Also, no bad side effects of this have ever been reported. And we've
tracked down our issues with the gpu turbo getting stuck to bogus
interrupt generation limits in th RPLIMIT register.

So let's just rip out this WARN as bogus and call it a day. The only
shallow thing here is that this 2-deep irq queue in the hw makes you
wonder how racy the windows irq handler is ...

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42907
Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-07-16 09:04:43 -07:00
..
exynos Merge branch 'exynos-drm-fixes' of git://git.infradead.org/users/kmpark/linux-2.6-samsung into drm-fixes 2012-04-27 08:20:35 +01:00
gma500 gma500: don't register the ACPI video bus 2012-06-17 11:21:28 -07:00
i2c drm: add convenience function to create an range property 2012-02-09 10:15:25 +00:00
i810 kill mm argument of vm_munmap() 2012-04-21 01:58:20 -04:00
i915 drm/i915: rip out the PM_IIR WARN 2012-07-16 09:04:43 -07:00
mga drm: move pci bus master enable into driver. 2012-02-16 18:31:07 +00:00
nouveau drm/nouveau/fbcon: using nv_two_heads is not a good idea 2012-07-16 09:04:05 -07:00
r128 drm: move pci bus master enable into driver. 2012-02-16 18:31:07 +00:00
radeon drm/radeon: fix VM page table setup on SI 2012-07-16 09:04:06 -07:00
savage drm/savage: fix integer overflows in savage_bci_cmdbuf() 2012-04-10 10:22:51 +01:00
sis drm sis: initialize object_idr 2012-06-22 11:36:53 -07:00
tdfx drm: Make the per-driver file_operations struct const 2011-11-11 11:14:47 +00:00
ttm drm/ttm: Fix buffer object metadata accounting regression v2 2012-06-17 11:21:24 -07:00
udl drm/udl: only bind to the video devices on the hub. 2012-06-22 11:36:53 -07:00
via drm via: initialize object_idr 2012-06-22 11:36:53 -07:00
vmwgfx drm/vmwgfx: Fix nasty write past alloced memory area 2012-06-10 00:36:14 +09:00
ati_pcigart.c gpu: Add export.h as required to drivers/gpu files. 2011-10-31 19:32:03 -04:00
drm_agpsupport.c
drm_auth.c drm: Fix authentication kernel crash 2012-01-25 09:27:45 +00:00
drm_buffer.c gpu: Add export.h as required to drivers/gpu files. 2011-10-31 19:32:03 -04:00
drm_bufs.c VM: add "vm_mmap()" helper function 2012-04-20 17:29:13 -07:00
drm_cache.c drm: remove the second argument of k[un]map_atomic() 2012-03-20 21:48:17 +08:00
drm_context.c drm: make DRM_UNLOCKED ioctls with their own mutex 2012-01-05 14:43:02 +00:00
drm_crtc_helper.c drm: allow loading an EDID as firmware to override broken monitor 2012-03-20 10:09:28 +00:00
drm_crtc.c drm: fix page_flip error handling 2012-04-19 14:36:51 +01:00
drm_debugfs.c drm: serialize access to list of debugfs files 2011-11-11 11:05:19 +00:00
drm_dma.c gpu: Add export.h as required to drivers/gpu files. 2011-10-31 19:32:03 -04:00
drm_dp_i2c_helper.c
drm_drv.c drm: base prime/dma-buf support (v5) 2012-03-30 11:52:44 +01:00
drm_edid_load.c drm: allow loading an EDID as firmware to override broken monitor 2012-03-20 10:09:28 +00:00
drm_edid_modes.h drm/edid: support CEA video modes. 2011-12-19 14:53:16 +00:00
drm_edid.c drm/edid: don't return stack garbage from supports_rb 2012-07-16 09:04:05 -07:00
drm_encoder_slave.c gpu: add module.h to drivers/gpu files as required. 2011-10-31 19:32:03 -04:00
drm_fb_helper.c drm: Validate requested virtual size against allocated fb size 2012-04-03 11:18:46 +01:00
drm_fops.c drm: Releasing FBs before releasing GEM objects during drm_release 2012-04-19 14:40:41 +01:00
drm_gem.c drm: base prime/dma-buf support (v5) 2012-03-30 11:52:44 +01:00
drm_global.c
drm_hashtab.c gpu: Add export.h as required to drivers/gpu files. 2011-10-31 19:32:03 -04:00
drm_info.c
drm_ioc32.c drivers/gpu/drm/drm_ioc32.c: initialize all fields 2012-02-03 09:47:32 +00:00
drm_ioctl.c drm: add some caps for userspace to discover more info for dumb KMS driver (v2) 2012-02-16 18:35:11 +00:00
drm_irq.c drm: remove unused code 2012-02-29 10:18:29 +00:00
drm_lock.c drm: add missing exports for i810 driver. 2011-12-22 19:09:01 +00:00
drm_memory.c drm: remove unused code 2012-02-29 10:18:29 +00:00
drm_mm.c gpu: Add export.h as required to drivers/gpu files. 2011-10-31 19:32:03 -04:00
drm_modes.c drm: Add drm_mode_copy() 2012-03-15 09:52:51 +00:00
drm_pci.c drm: move pci bus master enable into driver. 2012-02-16 18:31:07 +00:00
drm_platform.c drm: cope with platformdev->id == -1 2012-03-07 14:03:40 +00:00
drm_prime.c drm: base prime/dma-buf support (v5) 2012-03-30 11:52:44 +01:00
drm_proc.c gpu: Add export.h as required to drivers/gpu files. 2011-10-31 19:32:03 -04:00
drm_scatter.c drivers: use kzalloc/kcalloc instead of 'kmalloc+memset', where possible 2011-07-25 20:57:13 -07:00
drm_stub.c drm/usb: move usb support into a separate module 2012-03-20 06:59:29 +00:00
drm_sysfs.c drm/sysfs: protect sysfs removal code against being run twice. 2012-03-15 13:35:31 +00:00
drm_trace_points.c
drm_trace.h
drm_usb.c drm/usb: fix module license on drm/usb layer. 2012-04-19 09:33:32 +01:00
drm_vm.c drm: add core support for unplugging a device (v2) 2012-03-15 13:35:33 +00:00
Kconfig drm: base prime/dma-buf support (v5) 2012-03-30 11:52:44 +01:00
Makefile drm: base prime/dma-buf support (v5) 2012-03-30 11:52:44 +01: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