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