diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-04-03 07:34:25 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-04-03 08:52:58 -0400 |
commit | d822bb18ce96391245d877d5bada8913b88a15cf (patch) | |
tree | 2160c43c92aee4f8d078617c4eed84745c508fd9 /drivers/gpu/drm/i915/intel_ringbuffer.c | |
parent | ba515d3407dccfe3b4597f4afdaaf2ef1beb48e1 (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.c | 28 |
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 | ||
1273 | int intel_ring_pin(struct intel_ring *ring, unsigned int offset_bias) | 1273 | int 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 | ||
1482 | static int intel_init_ring_buffer(struct intel_engine_cs *engine) | 1481 | static 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; |