diff options
author | Maarten Lankhorst <maarten.lankhorst@canonical.com> | 2014-01-09 05:03:15 -0500 |
---|---|---|
committer | Maarten Lankhorst <maarten.lankhorst@canonical.com> | 2014-09-30 08:04:00 -0400 |
commit | f4f4e3e3e9f3bde110067b9e4487cb267d90055a (patch) | |
tree | 8a90f83235d7ea09adc9ac64fb44a87e823feddb | |
parent | b5e9c1a25fcf8a0d664606251a53b5caa6a19d08 (diff) |
drm/ttm: add reservation_object as argument to ttm_bo_init
This allows importing reservation objects from dma-bufs.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
-rw-r--r-- | drivers/gpu/drm/ast/ast_ttm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/bochs/bochs_mm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/cirrus/cirrus_ttm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/mgag200/mgag200_ttm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_bo.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_object.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo.c | 24 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 2 | ||||
-rw-r--r-- | include/drm/ttm/ttm_bo_api.h | 2 |
10 files changed, 28 insertions, 14 deletions
diff --git a/drivers/gpu/drm/ast/ast_ttm.c b/drivers/gpu/drm/ast/ast_ttm.c index c65d432f42c4..08f82eae6939 100644 --- a/drivers/gpu/drm/ast/ast_ttm.c +++ b/drivers/gpu/drm/ast/ast_ttm.c | |||
@@ -339,7 +339,7 @@ int ast_bo_create(struct drm_device *dev, int size, int align, | |||
339 | ret = ttm_bo_init(&ast->ttm.bdev, &astbo->bo, size, | 339 | ret = ttm_bo_init(&ast->ttm.bdev, &astbo->bo, size, |
340 | ttm_bo_type_device, &astbo->placement, | 340 | ttm_bo_type_device, &astbo->placement, |
341 | align >> PAGE_SHIFT, false, NULL, acc_size, | 341 | align >> PAGE_SHIFT, false, NULL, acc_size, |
342 | NULL, ast_bo_ttm_destroy); | 342 | NULL, NULL, ast_bo_ttm_destroy); |
343 | if (ret) | 343 | if (ret) |
344 | return ret; | 344 | return ret; |
345 | 345 | ||
diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c index 324f5a09a0a1..66286ff518d4 100644 --- a/drivers/gpu/drm/bochs/bochs_mm.c +++ b/drivers/gpu/drm/bochs/bochs_mm.c | |||
@@ -377,7 +377,7 @@ static int bochs_bo_create(struct drm_device *dev, int size, int align, | |||
377 | ret = ttm_bo_init(&bochs->ttm.bdev, &bochsbo->bo, size, | 377 | ret = ttm_bo_init(&bochs->ttm.bdev, &bochsbo->bo, size, |
378 | ttm_bo_type_device, &bochsbo->placement, | 378 | ttm_bo_type_device, &bochsbo->placement, |
379 | align >> PAGE_SHIFT, false, NULL, acc_size, | 379 | align >> PAGE_SHIFT, false, NULL, acc_size, |
380 | NULL, bochs_bo_ttm_destroy); | 380 | NULL, NULL, bochs_bo_ttm_destroy); |
381 | if (ret) | 381 | if (ret) |
382 | return ret; | 382 | return ret; |
383 | 383 | ||
diff --git a/drivers/gpu/drm/cirrus/cirrus_ttm.c b/drivers/gpu/drm/cirrus/cirrus_ttm.c index d3c615f9b183..dfffd528517a 100644 --- a/drivers/gpu/drm/cirrus/cirrus_ttm.c +++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c | |||
@@ -343,7 +343,7 @@ int cirrus_bo_create(struct drm_device *dev, int size, int align, | |||
343 | ret = ttm_bo_init(&cirrus->ttm.bdev, &cirrusbo->bo, size, | 343 | ret = ttm_bo_init(&cirrus->ttm.bdev, &cirrusbo->bo, size, |
344 | ttm_bo_type_device, &cirrusbo->placement, | 344 | ttm_bo_type_device, &cirrusbo->placement, |
345 | align >> PAGE_SHIFT, false, NULL, acc_size, | 345 | align >> PAGE_SHIFT, false, NULL, acc_size, |
346 | NULL, cirrus_bo_ttm_destroy); | 346 | NULL, NULL, cirrus_bo_ttm_destroy); |
347 | if (ret) | 347 | if (ret) |
348 | return ret; | 348 | return ret; |
349 | 349 | ||
diff --git a/drivers/gpu/drm/mgag200/mgag200_ttm.c b/drivers/gpu/drm/mgag200/mgag200_ttm.c index 8ac70626df6c..d16964ea0ed4 100644 --- a/drivers/gpu/drm/mgag200/mgag200_ttm.c +++ b/drivers/gpu/drm/mgag200/mgag200_ttm.c | |||
@@ -339,7 +339,7 @@ int mgag200_bo_create(struct drm_device *dev, int size, int align, | |||
339 | ret = ttm_bo_init(&mdev->ttm.bdev, &mgabo->bo, size, | 339 | ret = ttm_bo_init(&mdev->ttm.bdev, &mgabo->bo, size, |
340 | ttm_bo_type_device, &mgabo->placement, | 340 | ttm_bo_type_device, &mgabo->placement, |
341 | align >> PAGE_SHIFT, false, NULL, acc_size, | 341 | align >> PAGE_SHIFT, false, NULL, acc_size, |
342 | NULL, mgag200_bo_ttm_destroy); | 342 | NULL, NULL, mgag200_bo_ttm_destroy); |
343 | if (ret) | 343 | if (ret) |
344 | return ret; | 344 | return ret; |
345 | 345 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 049f5de90928..7034cacaa4a1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c | |||
@@ -230,7 +230,7 @@ nouveau_bo_new(struct drm_device *dev, int size, int align, | |||
230 | ret = ttm_bo_init(&drm->ttm.bdev, &nvbo->bo, size, | 230 | ret = ttm_bo_init(&drm->ttm.bdev, &nvbo->bo, size, |
231 | type, &nvbo->placement, | 231 | type, &nvbo->placement, |
232 | align >> PAGE_SHIFT, false, NULL, acc_size, sg, | 232 | align >> PAGE_SHIFT, false, NULL, acc_size, sg, |
233 | nouveau_bo_del_ttm); | 233 | NULL, nouveau_bo_del_ttm); |
234 | if (ret) { | 234 | if (ret) { |
235 | /* ttm will call nouveau_bo_del_ttm if it fails.. */ | 235 | /* ttm will call nouveau_bo_del_ttm if it fails.. */ |
236 | return ret; | 236 | return ret; |
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c index 69c104c3240f..cdeaf08fdc74 100644 --- a/drivers/gpu/drm/qxl/qxl_object.c +++ b/drivers/gpu/drm/qxl/qxl_object.c | |||
@@ -110,7 +110,7 @@ int qxl_bo_create(struct qxl_device *qdev, | |||
110 | 110 | ||
111 | r = ttm_bo_init(&qdev->mman.bdev, &bo->tbo, size, type, | 111 | r = ttm_bo_init(&qdev->mman.bdev, &bo->tbo, size, type, |
112 | &bo->placement, 0, !kernel, NULL, size, | 112 | &bo->placement, 0, !kernel, NULL, size, |
113 | NULL, &qxl_ttm_bo_destroy); | 113 | NULL, NULL, &qxl_ttm_bo_destroy); |
114 | if (unlikely(r != 0)) { | 114 | if (unlikely(r != 0)) { |
115 | if (r != -ERESTARTSYS) | 115 | if (r != -ERESTARTSYS) |
116 | dev_err(qdev->dev, | 116 | dev_err(qdev->dev, |
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index 8abee5fa93bd..0e82f0223fd4 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c | |||
@@ -216,7 +216,7 @@ int radeon_bo_create(struct radeon_device *rdev, | |||
216 | down_read(&rdev->pm.mclk_lock); | 216 | down_read(&rdev->pm.mclk_lock); |
217 | r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type, | 217 | r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type, |
218 | &bo->placement, page_align, !kernel, NULL, | 218 | &bo->placement, page_align, !kernel, NULL, |
219 | acc_size, sg, &radeon_ttm_bo_destroy); | 219 | acc_size, sg, NULL, &radeon_ttm_bo_destroy); |
220 | up_read(&rdev->pm.mclk_lock); | 220 | up_read(&rdev->pm.mclk_lock); |
221 | if (unlikely(r != 0)) { | 221 | if (unlikely(r != 0)) { |
222 | return r; | 222 | return r; |
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index a11969acfea5..8f5cec67c47d 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c | |||
@@ -1068,6 +1068,7 @@ int ttm_bo_init(struct ttm_bo_device *bdev, | |||
1068 | struct file *persistent_swap_storage, | 1068 | struct file *persistent_swap_storage, |
1069 | size_t acc_size, | 1069 | size_t acc_size, |
1070 | struct sg_table *sg, | 1070 | struct sg_table *sg, |
1071 | struct reservation_object *resv, | ||
1071 | void (*destroy) (struct ttm_buffer_object *)) | 1072 | void (*destroy) (struct ttm_buffer_object *)) |
1072 | { | 1073 | { |
1073 | int ret = 0; | 1074 | int ret = 0; |
@@ -1121,8 +1122,13 @@ int ttm_bo_init(struct ttm_bo_device *bdev, | |||
1121 | bo->persistent_swap_storage = persistent_swap_storage; | 1122 | bo->persistent_swap_storage = persistent_swap_storage; |
1122 | bo->acc_size = acc_size; | 1123 | bo->acc_size = acc_size; |
1123 | bo->sg = sg; | 1124 | bo->sg = sg; |
1124 | bo->resv = &bo->ttm_resv; | 1125 | if (resv) { |
1125 | reservation_object_init(bo->resv); | 1126 | bo->resv = resv; |
1127 | lockdep_assert_held(&bo->resv->lock.base); | ||
1128 | } else { | ||
1129 | bo->resv = &bo->ttm_resv; | ||
1130 | reservation_object_init(&bo->ttm_resv); | ||
1131 | } | ||
1126 | atomic_inc(&bo->glob->bo_count); | 1132 | atomic_inc(&bo->glob->bo_count); |
1127 | drm_vma_node_reset(&bo->vma_node); | 1133 | drm_vma_node_reset(&bo->vma_node); |
1128 | 1134 | ||
@@ -1135,13 +1141,19 @@ int ttm_bo_init(struct ttm_bo_device *bdev, | |||
1135 | ret = drm_vma_offset_add(&bdev->vma_manager, &bo->vma_node, | 1141 | ret = drm_vma_offset_add(&bdev->vma_manager, &bo->vma_node, |
1136 | bo->mem.num_pages); | 1142 | bo->mem.num_pages); |
1137 | 1143 | ||
1138 | locked = ww_mutex_trylock(&bo->resv->lock); | 1144 | /* passed reservation objects should already be locked, |
1139 | WARN_ON(!locked); | 1145 | * since otherwise lockdep will be angered in radeon. |
1146 | */ | ||
1147 | if (!resv) { | ||
1148 | locked = ww_mutex_trylock(&bo->resv->lock); | ||
1149 | WARN_ON(!locked); | ||
1150 | } | ||
1140 | 1151 | ||
1141 | if (likely(!ret)) | 1152 | if (likely(!ret)) |
1142 | ret = ttm_bo_validate(bo, placement, interruptible, false); | 1153 | ret = ttm_bo_validate(bo, placement, interruptible, false); |
1143 | 1154 | ||
1144 | ttm_bo_unreserve(bo); | 1155 | if (!resv) |
1156 | ttm_bo_unreserve(bo); | ||
1145 | 1157 | ||
1146 | if (unlikely(ret)) | 1158 | if (unlikely(ret)) |
1147 | ttm_bo_unref(&bo); | 1159 | ttm_bo_unref(&bo); |
@@ -1199,7 +1211,7 @@ int ttm_bo_create(struct ttm_bo_device *bdev, | |||
1199 | acc_size = ttm_bo_acc_size(bdev, size, sizeof(struct ttm_buffer_object)); | 1211 | acc_size = ttm_bo_acc_size(bdev, size, sizeof(struct ttm_buffer_object)); |
1200 | ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment, | 1212 | ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment, |
1201 | interruptible, persistent_swap_storage, acc_size, | 1213 | interruptible, persistent_swap_storage, acc_size, |
1202 | NULL, NULL); | 1214 | NULL, NULL, NULL); |
1203 | if (likely(ret == 0)) | 1215 | if (likely(ret == 0)) |
1204 | *p_bo = bo; | 1216 | *p_bo = bo; |
1205 | 1217 | ||
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c index 26584316cb78..026de7cea0f6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | |||
@@ -430,7 +430,7 @@ int vmw_dmabuf_init(struct vmw_private *dev_priv, | |||
430 | ret = ttm_bo_init(bdev, &vmw_bo->base, size, | 430 | ret = ttm_bo_init(bdev, &vmw_bo->base, size, |
431 | ttm_bo_type_device, placement, | 431 | ttm_bo_type_device, placement, |
432 | 0, interruptible, | 432 | 0, interruptible, |
433 | NULL, acc_size, NULL, bo_free); | 433 | NULL, acc_size, NULL, NULL, bo_free); |
434 | return ret; | 434 | return ret; |
435 | } | 435 | } |
436 | 436 | ||
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index 70b44917c368..0ccf7f267ff9 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h | |||
@@ -460,6 +460,7 @@ size_t ttm_bo_dma_acc_size(struct ttm_bo_device *bdev, | |||
460 | * point to the shmem object backing a GEM object if TTM is used to back a | 460 | * point to the shmem object backing a GEM object if TTM is used to back a |
461 | * GEM user interface. | 461 | * GEM user interface. |
462 | * @acc_size: Accounted size for this object. | 462 | * @acc_size: Accounted size for this object. |
463 | * @resv: Pointer to a reservation_object, or NULL to let ttm allocate one. | ||
463 | * @destroy: Destroy function. Use NULL for kfree(). | 464 | * @destroy: Destroy function. Use NULL for kfree(). |
464 | * | 465 | * |
465 | * This function initializes a pre-allocated struct ttm_buffer_object. | 466 | * This function initializes a pre-allocated struct ttm_buffer_object. |
@@ -487,6 +488,7 @@ extern int ttm_bo_init(struct ttm_bo_device *bdev, | |||
487 | struct file *persistent_swap_storage, | 488 | struct file *persistent_swap_storage, |
488 | size_t acc_size, | 489 | size_t acc_size, |
489 | struct sg_table *sg, | 490 | struct sg_table *sg, |
491 | struct reservation_object *resv, | ||
490 | void (*destroy) (struct ttm_buffer_object *)); | 492 | void (*destroy) (struct ttm_buffer_object *)); |
491 | 493 | ||
492 | /** | 494 | /** |