Commit d822bb18 authored by Chris Wilson's avatar Chris Wilson

drm/i915: intel_ring.engine is unused

Or rather it is used only by intel_ring_pin() to extract the
drm_i915_private which we can easily pass in. As this is a relatively
rare operation, save the space in the struct, and as such it is even
break even in the extra code for passing around the parameter:

add/remove: 0/0 grow/shrink: 2/3 up/down: 15/-15 (0)
function                                     old     new   delta
intel_init_ring_buffer                       906     918     +12
execlists_context_pin                       1308    1311      +3
mock_engine                                  407     403      -4
intel_engine_create_ring                     367     363      -4
intel_ring_pin                               326     319      -7
Total: Before=1261794, After=1261794, chg +0.00%

v2: Reorder intel_init_ring_buffer to keep the ring setup together:

add/remove: 0/0 grow/shrink: 2/3 up/down: 9/-15 (-6)
function                                     old     new   delta
intel_init_ring_buffer                       906     912      +6
execlists_context_pin                       1308    1311      +3
mock_engine                                  407     403      -4
intel_engine_create_ring                     367     363      -4
intel_ring_pin                               326     319      -7
Total: Before=1261794, After=1261788, chg -0.00%
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170403113426.25707-1-chris@chris-wilson.co.uk
parent ba515d34
...@@ -771,7 +771,7 @@ static int execlists_context_pin(struct intel_engine_cs *engine, ...@@ -771,7 +771,7 @@ static int execlists_context_pin(struct intel_engine_cs *engine,
goto unpin_vma; goto unpin_vma;
} }
ret = intel_ring_pin(ce->ring, ctx->ggtt_offset_bias); ret = intel_ring_pin(ce->ring, ctx->i915, ctx->ggtt_offset_bias);
if (ret) if (ret)
goto unpin_map; goto unpin_map;
......
...@@ -1270,17 +1270,18 @@ static int init_phys_status_page(struct intel_engine_cs *engine) ...@@ -1270,17 +1270,18 @@ static int init_phys_status_page(struct intel_engine_cs *engine)
return 0; return 0;
} }
int intel_ring_pin(struct intel_ring *ring, unsigned int offset_bias) int intel_ring_pin(struct intel_ring *ring,
struct drm_i915_private *i915,
unsigned int offset_bias)
{ {
unsigned int flags; enum i915_map_type map = HAS_LLC(i915) ? I915_MAP_WB : I915_MAP_WC;
enum i915_map_type map;
struct i915_vma *vma = ring->vma; struct i915_vma *vma = ring->vma;
unsigned int flags;
void *addr; void *addr;
int ret; int ret;
GEM_BUG_ON(ring->vaddr); GEM_BUG_ON(ring->vaddr);
map = HAS_LLC(ring->engine->i915) ? I915_MAP_WB : I915_MAP_WC;
flags = PIN_GLOBAL; flags = PIN_GLOBAL;
if (offset_bias) if (offset_bias)
...@@ -1369,8 +1370,6 @@ intel_engine_create_ring(struct intel_engine_cs *engine, int size) ...@@ -1369,8 +1370,6 @@ intel_engine_create_ring(struct intel_engine_cs *engine, int size)
if (!ring) if (!ring)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
ring->engine = engine;
INIT_LIST_HEAD(&ring->request_list); INIT_LIST_HEAD(&ring->request_list);
ring->size = size; ring->size = size;
...@@ -1481,7 +1480,6 @@ static void intel_ring_context_unpin(struct intel_engine_cs *engine, ...@@ -1481,7 +1480,6 @@ static void intel_ring_context_unpin(struct intel_engine_cs *engine,
static int intel_init_ring_buffer(struct intel_engine_cs *engine) static int intel_init_ring_buffer(struct intel_engine_cs *engine)
{ {
struct drm_i915_private *dev_priv = engine->i915;
struct intel_ring *ring; struct intel_ring *ring;
int ret; int ret;
...@@ -1493,13 +1491,7 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine) ...@@ -1493,13 +1491,7 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine)
if (ret) if (ret)
goto error; goto error;
ring = intel_engine_create_ring(engine, 32 * PAGE_SIZE); if (HWS_NEEDS_PHYSICAL(engine->i915)) {
if (IS_ERR(ring)) {
ret = PTR_ERR(ring);
goto error;
}
if (HWS_NEEDS_PHYSICAL(dev_priv)) {
WARN_ON(engine->id != RCS); WARN_ON(engine->id != RCS);
ret = init_phys_status_page(engine); ret = init_phys_status_page(engine);
if (ret) if (ret)
...@@ -1510,8 +1502,14 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine) ...@@ -1510,8 +1502,14 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine)
goto error; goto error;
} }
ring = intel_engine_create_ring(engine, 32 * PAGE_SIZE);
if (IS_ERR(ring)) {
ret = PTR_ERR(ring);
goto error;
}
/* Ring wraparound at offset 0 sometimes hangs. No idea why. */ /* Ring wraparound at offset 0 sometimes hangs. No idea why. */
ret = intel_ring_pin(ring, I915_GTT_PAGE_SIZE); ret = intel_ring_pin(ring, engine->i915, I915_GTT_PAGE_SIZE);
if (ret) { if (ret) {
intel_ring_free(ring); intel_ring_free(ring);
goto error; goto error;
......
...@@ -139,8 +139,6 @@ struct intel_ring { ...@@ -139,8 +139,6 @@ struct intel_ring {
struct i915_vma *vma; struct i915_vma *vma;
void *vaddr; void *vaddr;
struct intel_engine_cs *engine;
struct list_head request_list; struct list_head request_list;
u32 head; u32 head;
...@@ -487,7 +485,9 @@ intel_write_status_page(struct intel_engine_cs *engine, int reg, u32 value) ...@@ -487,7 +485,9 @@ intel_write_status_page(struct intel_engine_cs *engine, int reg, u32 value)
struct intel_ring * struct intel_ring *
intel_engine_create_ring(struct intel_engine_cs *engine, int size); intel_engine_create_ring(struct intel_engine_cs *engine, int size);
int intel_ring_pin(struct intel_ring *ring, unsigned int offset_bias); int intel_ring_pin(struct intel_ring *ring,
struct drm_i915_private *i915,
unsigned int offset_bias);
void intel_ring_unpin(struct intel_ring *ring); void intel_ring_unpin(struct intel_ring *ring);
void intel_ring_free(struct intel_ring *ring); void intel_ring_free(struct intel_ring *ring);
......
...@@ -112,7 +112,6 @@ static struct intel_ring *mock_ring(struct intel_engine_cs *engine) ...@@ -112,7 +112,6 @@ static struct intel_ring *mock_ring(struct intel_engine_cs *engine)
if (!ring) if (!ring)
return NULL; return NULL;
ring->engine = engine;
ring->size = sz; ring->size = sz;
ring->effective_size = sz; ring->effective_size = sz;
ring->vaddr = (void *)(ring + 1); ring->vaddr = (void *)(ring + 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment