linux/drivers/gpu/drm/i915
Chris Wilson be72615bcf drm/i915: Repeat unbinding during free if interrupted (v6)
If during the freeing of an object the unbind is interrupted by a system
call, which is quite possible if we have outstanding GPU writes that
must be flushed, the unbind is silently aborted. This still leaves the
AGP region and backing pages allocated, and perhaps more importantly,
the object remains upon the various lists exposing us to memory
corruption.

I think this is the cause behind the use-after-free, such as

  Bug 15664 - Graphics hang and kernel backtrace when starting Azureus
              with Compiz enabled
  https://bugzilla.kernel.org/show_bug.cgi?id=15664

v2: Daniel Vetter reminded me that kernel space programming is never easy.
We cannot simply spin to clear the pending signal and so must deferred
the freeing of the object until later.
v3: Run from the top level retire requests.
v4: Tested with P(return -ERESTARTSYS)=.5 from i915_gem_do_wait_request()
v5: Rebase against Eric's for-linus tree.
v6: Refactor, split and add a comment about avoiding unbounded recursion.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Eric Anholt <eric@anholt.net>
2010-08-01 19:53:24 -07:00
..
dvo.h drm/i915: Remove dead KMS encoder save/restore code. 2010-04-12 09:23:30 -07:00
dvo_ch7xxx.c drm/i915: Remove dead KMS encoder save/restore code. 2010-04-12 09:23:30 -07:00
dvo_ch7017.c drm/i915: Remove dead KMS encoder save/restore code. 2010-04-12 09:23:30 -07:00
dvo_ivch.c drm/i915: Remove dead KMS encoder save/restore code. 2010-04-12 09:23:30 -07:00
dvo_sil164.c drm/i915: Remove dead KMS encoder save/restore code. 2010-04-12 09:23:30 -07:00
dvo_tfp410.c drm/i915: Use RSEN instead of HTPLG for tfp410 monitor detection. 2010-06-04 16:39:59 -07:00
i915_debugfs.c drm/i915: disable FBC when more than one pipe is active 2010-07-26 11:27:06 -07:00
i915_dma.c Merge remote branch 'origin/master' into drm-intel-next 2010-08-01 19:34:47 -07:00
i915_drv.c drm/i915: Refactor i915_gem_retire_requests() 2010-08-01 19:52:57 -07:00
i915_drv.h drm/i915: Repeat unbinding during free if interrupted (v6) 2010-08-01 19:53:24 -07:00
i915_gem.c drm/i915: Repeat unbinding during free if interrupted (v6) 2010-08-01 19:53:24 -07:00
i915_gem_debug.c drm/i915: drop pointer to drm_gem_object 2010-04-20 13:23:14 +10:00
i915_gem_tiling.c drm/i915: Remove the WARN when failing to set tiling. 2010-08-01 19:03:46 -07:00
i915_ioc32.c drm: convert drm_ioctl to unlocked_ioctl 2009-12-18 11:22:31 +10:00
i915_irq.c drm/i915: Include instdone[1] in hangcheck 2010-08-01 19:03:46 -07:00
i915_mem.c drm: Remove memory debugging infrastructure. 2009-06-18 13:00:33 -07:00
i915_opregion.c drm/i915: set DIDL using the ACPI video output device _ADR method return. 2010-04-18 17:05:13 -07:00
i915_reg.h Merge remote branch 'origin/master' into drm-intel-next 2010-08-01 19:34:47 -07:00
i915_suspend.c drm/i915: Add frame buffer compression support on Ironlake mobile 2010-08-01 19:03:44 -07:00
i915_trace.h drm/i915: add tracepoints for flip requests & completions 2010-07-02 14:04:14 +10:00
i915_trace_points.c drm/i915: Add tracepoints 2009-09-23 01:05:21 +01:00
intel_bios.c drm/i915: Honor sync polarity from VBT panel timing descriptors 2010-06-01 10:19:37 -07:00
intel_bios.h drm/i915: parse eDP panel color depth from VBT block 2010-01-15 14:12:47 -08:00
intel_crt.c drm/i915: Fix CRT hotplug regression in 2.6.35-rc1 2010-07-01 15:35:57 -07:00
intel_display.c drm/i915: Warn if we run out of FIFO space for a mode 2010-08-01 19:47:59 -07:00
intel_dp.c drm/i915: Validate the mode for eDP by using fixed panel size 2010-08-01 19:40:38 -07:00
intel_drv.h drm/i915: Initialize LVDS and eDP outputs before anything else 2010-08-01 19:38:00 -07:00
intel_dvo.c Merge remote branch 'anholt/drm-intel-next' of /home/airlied/kernel/drm-next into drm-core-next 2010-04-20 13:11:45 +10:00
intel_fb.c drm/i915: fix deadlock in fb teardown 2010-07-26 11:27:46 -07:00
intel_hdmi.c drm/i915/hdmi: Set sync polarity based on actual mode 2010-08-01 19:38:08 -07:00
intel_i2c.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
intel_lvds.c drm/i915: Refactor panel fitting on the LVDS. (v2) 2010-08-01 19:35:17 -07:00
intel_modes.c Merge remote branch 'anholt/drm-intel-next' of /home/airlied/kernel/drm-next into drm-core-next 2010-04-20 13:11:45 +10:00
intel_overlay.c drm/i915: Typo in (unused) register mask for overlay. 2010-08-01 19:46:39 -07:00
intel_ringbuffer.c drm/i915: Account for space on the ring buffer consumed whilst wrapping. 2010-07-01 15:28:08 -07:00
intel_ringbuffer.h drm/i915: introduce intel_ring_buffer structure (V2) 2010-05-26 13:24:49 -07:00
intel_sdvo.c drm/i915/sdvo: Set sync polarity based on actual mode 2010-08-01 19:38:12 -07:00
intel_sdvo_regs.h drm/i915: enable sdvo lvds scaling function. 2009-07-01 11:44:45 -07:00
intel_tv.c drm/i915: cleanup: use ARRAY_SIZE() 2010-08-01 19:03:46 -07:00
Makefile drm/i915: Move ringbuffer-related code to intel_ringbuffer.c. 2010-05-26 12:36:00 -07:00