diff options
| author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-01-16 10:21:30 -0500 |
|---|---|---|
| committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-01-19 05:17:39 -0500 |
| commit | a01cb37affb7ac698ed260c0e31d02af8df6b785 (patch) | |
| tree | 7aedf9ed763ce01101b950897ee394b5ca7ebca7 /drivers/gpu/drm/i915 | |
| parent | 4ea9527cc03e73afc6a4ac5979d1ecde43b85cf3 (diff) | |
drm/i915: Remove i915_vma_create from VMA API
With the introduce of i915_vma_instance() for obtaining the VMA
singleton for a (obj, vm, view) tuple, we can remove the
i915_vma_create() in favour of a single entry point. We do incur a
lookup onto an empty tree, but the i915_vma_create() were being called
infrequently and during initialisation, so the small overhead is
negligible.
v2: Drop the i915_ prefix from the now static vma_create() function
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/20170116152131.18089-4-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_context.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_render_state.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_guc_submission.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_vma.c | 35 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_vma.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_engine_cs.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 6 |
8 files changed, 13 insertions, 45 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c index 0a4728fdecdc..17f90c618208 100644 --- a/drivers/gpu/drm/i915/i915_gem_context.c +++ b/drivers/gpu/drm/i915/i915_gem_context.c | |||
| @@ -269,7 +269,7 @@ __create_hw_context(struct drm_i915_private *dev_priv, | |||
| 269 | goto err_out; | 269 | goto err_out; |
| 270 | } | 270 | } |
| 271 | 271 | ||
| 272 | vma = i915_vma_create(obj, &dev_priv->ggtt.base, NULL); | 272 | vma = i915_vma_instance(obj, &dev_priv->ggtt.base, NULL); |
| 273 | if (IS_ERR(vma)) { | 273 | if (IS_ERR(vma)) { |
| 274 | i915_gem_object_put(obj); | 274 | i915_gem_object_put(obj); |
| 275 | ret = PTR_ERR(vma); | 275 | ret = PTR_ERR(vma); |
diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c b/drivers/gpu/drm/i915/i915_gem_render_state.c index 63ae7e813335..b42c81b42487 100644 --- a/drivers/gpu/drm/i915/i915_gem_render_state.c +++ b/drivers/gpu/drm/i915/i915_gem_render_state.c | |||
| @@ -200,7 +200,7 @@ int i915_gem_render_state_init(struct intel_engine_cs *engine) | |||
| 200 | goto err_free; | 200 | goto err_free; |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | so->vma = i915_vma_create(obj, &engine->i915->ggtt.base, NULL); | 203 | so->vma = i915_vma_instance(obj, &engine->i915->ggtt.base, NULL); |
| 204 | if (IS_ERR(so->vma)) { | 204 | if (IS_ERR(so->vma)) { |
| 205 | ret = PTR_ERR(so->vma); | 205 | ret = PTR_ERR(so->vma); |
| 206 | goto err_obj; | 206 | goto err_obj; |
diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c index c3277858cd8c..8ced9e26f075 100644 --- a/drivers/gpu/drm/i915/i915_guc_submission.c +++ b/drivers/gpu/drm/i915/i915_guc_submission.c | |||
| @@ -566,7 +566,7 @@ struct i915_vma *intel_guc_allocate_vma(struct intel_guc *guc, u32 size) | |||
| 566 | if (IS_ERR(obj)) | 566 | if (IS_ERR(obj)) |
| 567 | return ERR_CAST(obj); | 567 | return ERR_CAST(obj); |
| 568 | 568 | ||
| 569 | vma = i915_vma_create(obj, &dev_priv->ggtt.base, NULL); | 569 | vma = i915_vma_instance(obj, &dev_priv->ggtt.base, NULL); |
| 570 | if (IS_ERR(vma)) | 570 | if (IS_ERR(vma)) |
| 571 | goto err; | 571 | goto err; |
| 572 | 572 | ||
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c index b4d7b51266d2..cb415bfe22d7 100644 --- a/drivers/gpu/drm/i915/i915_vma.c +++ b/drivers/gpu/drm/i915/i915_vma.c | |||
| @@ -69,16 +69,14 @@ i915_vma_retire(struct i915_gem_active *active, | |||
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | static struct i915_vma * | 71 | static struct i915_vma * |
| 72 | __i915_vma_create(struct drm_i915_gem_object *obj, | 72 | vma_create(struct drm_i915_gem_object *obj, |
| 73 | struct i915_address_space *vm, | 73 | struct i915_address_space *vm, |
| 74 | const struct i915_ggtt_view *view) | 74 | const struct i915_ggtt_view *view) |
| 75 | { | 75 | { |
| 76 | struct i915_vma *vma; | 76 | struct i915_vma *vma; |
| 77 | struct rb_node *rb, **p; | 77 | struct rb_node *rb, **p; |
| 78 | int i; | 78 | int i; |
| 79 | 79 | ||
| 80 | GEM_BUG_ON(vm->closed); | ||
| 81 | |||
| 82 | vma = kmem_cache_zalloc(to_i915(obj->base.dev)->vmas, GFP_KERNEL); | 80 | vma = kmem_cache_zalloc(to_i915(obj->base.dev)->vmas, GFP_KERNEL); |
| 83 | if (vma == NULL) | 81 | if (vma == NULL) |
| 84 | return ERR_PTR(-ENOMEM); | 82 | return ERR_PTR(-ENOMEM); |
| @@ -187,31 +185,6 @@ i915_vma_lookup(struct drm_i915_gem_object *obj, | |||
| 187 | } | 185 | } |
| 188 | 186 | ||
| 189 | /** | 187 | /** |
| 190 | * i915_vma_create - creates a VMA | ||
| 191 | * @obj: parent &struct drm_i915_gem_object to be mapped | ||
| 192 | * @vm: address space in which the mapping is located | ||
| 193 | * @view: additional mapping requirements | ||
| 194 | * | ||
| 195 | * i915_vma_create() allocates a new VMA of the @obj in the @vm with | ||
| 196 | * @view characteristics. | ||
| 197 | * | ||
| 198 | * Must be called with struct_mutex held. | ||
| 199 | * | ||
| 200 | * Returns the vma if found, or an error pointer. | ||
| 201 | */ | ||
| 202 | struct i915_vma * | ||
| 203 | i915_vma_create(struct drm_i915_gem_object *obj, | ||
| 204 | struct i915_address_space *vm, | ||
| 205 | const struct i915_ggtt_view *view) | ||
| 206 | { | ||
| 207 | lockdep_assert_held(&obj->base.dev->struct_mutex); | ||
| 208 | GEM_BUG_ON(view && !i915_is_ggtt(vm)); | ||
| 209 | GEM_BUG_ON(i915_vma_lookup(obj, vm, view)); | ||
| 210 | |||
| 211 | return __i915_vma_create(obj, vm, view); | ||
| 212 | } | ||
| 213 | |||
| 214 | /** | ||
| 215 | * i915_vma_instance - return the singleton instance of the VMA | 188 | * i915_vma_instance - return the singleton instance of the VMA |
| 216 | * @obj: parent &struct drm_i915_gem_object to be mapped | 189 | * @obj: parent &struct drm_i915_gem_object to be mapped |
| 217 | * @vm: address space in which the mapping is located | 190 | * @vm: address space in which the mapping is located |
| @@ -239,7 +212,7 @@ i915_vma_instance(struct drm_i915_gem_object *obj, | |||
| 239 | 212 | ||
| 240 | vma = i915_vma_lookup(obj, vm, view); | 213 | vma = i915_vma_lookup(obj, vm, view); |
| 241 | if (!vma) | 214 | if (!vma) |
| 242 | vma = i915_vma_create(obj, vm, view); | 215 | vma = vma_create(obj, vm, view); |
| 243 | 216 | ||
| 244 | GEM_BUG_ON(!IS_ERR(vma) && i915_vma_is_closed(vma)); | 217 | GEM_BUG_ON(!IS_ERR(vma) && i915_vma_is_closed(vma)); |
| 245 | GEM_BUG_ON(!IS_ERR(vma) && i915_vma_compare(vma, vm, view)); | 218 | GEM_BUG_ON(!IS_ERR(vma) && i915_vma_compare(vma, vm, view)); |
diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h index b3c81190b4a0..82a56193985c 100644 --- a/drivers/gpu/drm/i915/i915_vma.h +++ b/drivers/gpu/drm/i915/i915_vma.h | |||
| @@ -112,11 +112,6 @@ struct i915_vma { | |||
| 112 | }; | 112 | }; |
| 113 | 113 | ||
| 114 | struct i915_vma * | 114 | struct i915_vma * |
| 115 | i915_vma_create(struct drm_i915_gem_object *obj, | ||
| 116 | struct i915_address_space *vm, | ||
| 117 | const struct i915_ggtt_view *view); | ||
| 118 | |||
| 119 | struct i915_vma * | ||
| 120 | i915_vma_lookup(struct drm_i915_gem_object *obj, | 115 | i915_vma_lookup(struct drm_i915_gem_object *obj, |
| 121 | struct i915_address_space *vm, | 116 | struct i915_address_space *vm, |
| 122 | const struct i915_ggtt_view *view); | 117 | const struct i915_ggtt_view *view); |
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c index 97bbbc3d6aa8..371acf109e34 100644 --- a/drivers/gpu/drm/i915/intel_engine_cs.c +++ b/drivers/gpu/drm/i915/intel_engine_cs.c | |||
| @@ -264,7 +264,7 @@ int intel_engine_create_scratch(struct intel_engine_cs *engine, int size) | |||
| 264 | return PTR_ERR(obj); | 264 | return PTR_ERR(obj); |
| 265 | } | 265 | } |
| 266 | 266 | ||
| 267 | vma = i915_vma_create(obj, &engine->i915->ggtt.base, NULL); | 267 | vma = i915_vma_instance(obj, &engine->i915->ggtt.base, NULL); |
| 268 | if (IS_ERR(vma)) { | 268 | if (IS_ERR(vma)) { |
| 269 | ret = PTR_ERR(vma); | 269 | ret = PTR_ERR(vma); |
| 270 | goto err_unref; | 270 | goto err_unref; |
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index 8f8dcd9a9524..432ee495dec2 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c | |||
| @@ -1225,7 +1225,7 @@ static int lrc_setup_wa_ctx_obj(struct intel_engine_cs *engine, u32 size) | |||
| 1225 | if (IS_ERR(obj)) | 1225 | if (IS_ERR(obj)) |
| 1226 | return PTR_ERR(obj); | 1226 | return PTR_ERR(obj); |
| 1227 | 1227 | ||
| 1228 | vma = i915_vma_create(obj, &engine->i915->ggtt.base, NULL); | 1228 | vma = i915_vma_instance(obj, &engine->i915->ggtt.base, NULL); |
| 1229 | if (IS_ERR(vma)) { | 1229 | if (IS_ERR(vma)) { |
| 1230 | err = PTR_ERR(vma); | 1230 | err = PTR_ERR(vma); |
| 1231 | goto err; | 1231 | goto err; |
| @@ -2198,7 +2198,7 @@ static int execlists_context_deferred_alloc(struct i915_gem_context *ctx, | |||
| 2198 | return PTR_ERR(ctx_obj); | 2198 | return PTR_ERR(ctx_obj); |
| 2199 | } | 2199 | } |
| 2200 | 2200 | ||
| 2201 | vma = i915_vma_create(ctx_obj, &ctx->i915->ggtt.base, NULL); | 2201 | vma = i915_vma_instance(ctx_obj, &ctx->i915->ggtt.base, NULL); |
| 2202 | if (IS_ERR(vma)) { | 2202 | if (IS_ERR(vma)) { |
| 2203 | ret = PTR_ERR(vma); | 2203 | ret = PTR_ERR(vma); |
| 2204 | goto error_deref_obj; | 2204 | goto error_deref_obj; |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 49fa8006c6a2..69035e4f9b3b 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
| @@ -1738,7 +1738,7 @@ static int init_status_page(struct intel_engine_cs *engine) | |||
| 1738 | if (ret) | 1738 | if (ret) |
| 1739 | goto err; | 1739 | goto err; |
| 1740 | 1740 | ||
| 1741 | vma = i915_vma_create(obj, &engine->i915->ggtt.base, NULL); | 1741 | vma = i915_vma_instance(obj, &engine->i915->ggtt.base, NULL); |
| 1742 | if (IS_ERR(vma)) { | 1742 | if (IS_ERR(vma)) { |
| 1743 | ret = PTR_ERR(vma); | 1743 | ret = PTR_ERR(vma); |
| 1744 | goto err; | 1744 | goto err; |
| @@ -1872,7 +1872,7 @@ intel_ring_create_vma(struct drm_i915_private *dev_priv, int size) | |||
| 1872 | /* mark ring buffers as read-only from GPU side by default */ | 1872 | /* mark ring buffers as read-only from GPU side by default */ |
| 1873 | obj->gt_ro = 1; | 1873 | obj->gt_ro = 1; |
| 1874 | 1874 | ||
| 1875 | vma = i915_vma_create(obj, &dev_priv->ggtt.base, NULL); | 1875 | vma = i915_vma_instance(obj, &dev_priv->ggtt.base, NULL); |
| 1876 | if (IS_ERR(vma)) | 1876 | if (IS_ERR(vma)) |
| 1877 | goto err; | 1877 | goto err; |
| 1878 | 1878 | ||
| @@ -2462,7 +2462,7 @@ static void intel_ring_init_semaphores(struct drm_i915_private *dev_priv, | |||
| 2462 | if (IS_ERR(obj)) | 2462 | if (IS_ERR(obj)) |
| 2463 | goto err; | 2463 | goto err; |
| 2464 | 2464 | ||
| 2465 | vma = i915_vma_create(obj, &dev_priv->ggtt.base, NULL); | 2465 | vma = i915_vma_instance(obj, &dev_priv->ggtt.base, NULL); |
| 2466 | if (IS_ERR(vma)) | 2466 | if (IS_ERR(vma)) |
| 2467 | goto err_obj; | 2467 | goto err_obj; |
| 2468 | 2468 | ||
