aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-04-03 07:34:25 -0400
committerChris Wilson <chris@chris-wilson.co.uk>2017-04-03 08:52:58 -0400
commitd822bb18ce96391245d877d5bada8913b88a15cf (patch)
tree2160c43c92aee4f8d078617c4eed84745c508fd9 /drivers/gpu/drm/i915/intel_ringbuffer.c
parentba515d3407dccfe3b4597f4afdaaf2ef1beb48e1 (diff)
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: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170403113426.25707-1-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 66a2b8b83972..5e7634c00cbd 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -1270,17 +1270,18 @@ static int init_phys_status_page(struct intel_engine_cs *engine)
1270 return 0; 1270 return 0;
1271} 1271}
1272 1272
1273int intel_ring_pin(struct intel_ring *ring, unsigned int offset_bias) 1273int intel_ring_pin(struct intel_ring *ring,
1274 struct drm_i915_private *i915,
1275 unsigned int offset_bias)
1274{ 1276{
1275 unsigned int flags; 1277 enum i915_map_type map = HAS_LLC(i915) ? I915_MAP_WB : I915_MAP_WC;
1276 enum i915_map_type map;
1277 struct i915_vma *vma = ring->vma; 1278 struct i915_vma *vma = ring->vma;
1279 unsigned int flags;
1278 void *addr; 1280 void *addr;
1279 int ret; 1281 int ret;
1280 1282
1281 GEM_BUG_ON(ring->vaddr); 1283 GEM_BUG_ON(ring->vaddr);
1282 1284
1283 map = HAS_LLC(ring->engine->i915) ? I915_MAP_WB : I915_MAP_WC;
1284 1285
1285 flags = PIN_GLOBAL; 1286 flags = PIN_GLOBAL;
1286 if (offset_bias) 1287 if (offset_bias)
@@ -1369,8 +1370,6 @@ intel_engine_create_ring(struct intel_engine_cs *engine, int size)
1369 if (!ring) 1370 if (!ring)
1370 return ERR_PTR(-ENOMEM); 1371 return ERR_PTR(-ENOMEM);
1371 1372
1372 ring->engine = engine;
1373
1374 INIT_LIST_HEAD(&ring->request_list); 1373 INIT_LIST_HEAD(&ring->request_list);
1375 1374
1376 ring->size = size; 1375 ring->size = size;
@@ -1481,7 +1480,6 @@ static void intel_ring_context_unpin(struct intel_engine_cs *engine,
1481 1480
1482static int intel_init_ring_buffer(struct intel_engine_cs *engine) 1481static int intel_init_ring_buffer(struct intel_engine_cs *engine)
1483{ 1482{
1484 struct drm_i915_private *dev_priv = engine->i915;
1485 struct intel_ring *ring; 1483 struct intel_ring *ring;
1486 int ret; 1484 int ret;
1487 1485
@@ -1493,13 +1491,7 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine)
1493 if (ret) 1491 if (ret)
1494 goto error; 1492 goto error;
1495 1493
1496 ring = intel_engine_create_ring(engine, 32 * PAGE_SIZE); 1494 if (HWS_NEEDS_PHYSICAL(engine->i915)) {
1497 if (IS_ERR(ring)) {
1498 ret = PTR_ERR(ring);
1499 goto error;
1500 }
1501
1502 if (HWS_NEEDS_PHYSICAL(dev_priv)) {
1503 WARN_ON(engine->id != RCS); 1495 WARN_ON(engine->id != RCS);
1504 ret = init_phys_status_page(engine); 1496 ret = init_phys_status_page(engine);
1505 if (ret) 1497 if (ret)
@@ -1510,8 +1502,14 @@ static int intel_init_ring_buffer(struct intel_engine_cs *engine)
1510 goto error; 1502 goto error;
1511 } 1503 }
1512 1504
1505 ring = intel_engine_create_ring(engine, 32 * PAGE_SIZE);
1506 if (IS_ERR(ring)) {
1507 ret = PTR_ERR(ring);
1508 goto error;
1509 }
1510
1513 /* Ring wraparound at offset 0 sometimes hangs. No idea why. */ 1511 /* Ring wraparound at offset 0 sometimes hangs. No idea why. */
1514 ret = intel_ring_pin(ring, I915_GTT_PAGE_SIZE); 1512 ret = intel_ring_pin(ring, engine->i915, I915_GTT_PAGE_SIZE);
1515 if (ret) { 1513 if (ret) {
1516 intel_ring_free(ring); 1514 intel_ring_free(ring);
1517 goto error; 1515 goto error;