drm/i915: intel_ring_initialized() must be simple and inline
authorDave Gordon <david.s.gordon@intel.com>
Tue, 8 Dec 2015 15:02:36 +0000 (15:02 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 10 Dec 2015 13:14:36 +0000 (14:14 +0100)
commitb0366a54b446c53791000758d55abf80b1e0e961
treed0e11b539b37b962310ecc3b3c1ccc04576fffe0
parent54a4196188eab82e6f0a5f05716626e9f18b8fb6
drm/i915: intel_ring_initialized() must be simple and inline

Based on Chris Wilson's patch from 6 months ago, rebased and adapted.

The current implementation of intel_ring_initialized() is too heavyweight;
it's a non-inlined function that chases several levels of pointers. This
wouldn't matter too much if it were rarely called, but it's used inside
the iterator test of for_each_ring() and is therefore called quite
frequently. So let's make it simple and inline ...

The idea here is to use ring->dev as an indicator showing which engines
have been initialised and are therefore to be included in iterations that
use for_each_ring(). This allows us to avoid multiple memory references
and a (non-inlined) function call on each iteration of each such loop.

Fixes regression from
commit 48d823878d64f93163f5a949623346748bbce1b4
Author: Oscar Mateo <oscar.mateo@intel.com>
Date:   Thu Jul 24 17:04:23 2014 +0100

    drm/i915/bdw: Generic logical ring init and cleanup

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Dave Gordon <david.s.gordon@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1449586956-32360-2-git-send-email-david.s.gordon@intel.com
drivers/gpu/drm/i915/intel_lrc.c
drivers/gpu/drm/i915/intel_ringbuffer.c
drivers/gpu/drm/i915/intel_ringbuffer.h