[PATCH 1/2] drm/i915: Add BUG_ON when ring->private is NULL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I have experienced a number of NULL pointer dereferences on
suspend/resume where ring->private is NULL. These come from failed
initialization of the ring buffer. Sincce this doesn't seem to be easily
recoverable, this patch adds a BUG_ON and a bread crumb pointer for
people who might encounter this in the future.

Signed-off-by: Sean Paul <seanpaul at chromium.org>
---
 drivers/gpu/drm/i915/intel_ringbuffer.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index ca3972f..8357822 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -198,9 +198,17 @@ gen6_render_ring_flush(struct intel_ring_buffer *ring,
 {
 	u32 flags = 0;
 	struct pipe_control *pc = ring->private;
-	u32 scratch_addr = pc->gtt_offset + 128;
+	u32 scratch_addr;
 	int ret;
 
+	/* This condition was being hit when the ring buffer wasn't being
+	 * properly initialized and subsequently cleaned (hence setting
+	 * ring->private to NULL).
+	 */
+	BUG_ON(pc == NULL);
+
+	scratch_addr = pc->gtt_offset + 128;
+
 	/* Force SNB workarounds for PIPE_CONTROL flushes */
 	intel_emit_post_sync_nonzero_flush(ring);
 
-- 
1.7.7.3



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux