diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4181-drm-ttm-keep-a-reference-to-transfer-pipelined-BOs.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4181-drm-ttm-keep-a-reference-to-transfer-pipelined-BOs.patch | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4181-drm-ttm-keep-a-reference-to-transfer-pipelined-BOs.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4181-drm-ttm-keep-a-reference-to-transfer-pipelined-BOs.patch new file mode 100644 index 00000000..ebb62acd --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4181-drm-ttm-keep-a-reference-to-transfer-pipelined-BOs.patch @@ -0,0 +1,115 @@ +From 1d6bd2922f4861f64799c61410028e3c86565194 Mon Sep 17 00:00:00 2001 +From: christian koenig <christian.koenig@amd.com> +Date: Fri, 9 Mar 2018 13:39:47 +0100 +Subject: [PATCH 4181/5725] drm/ttm: keep a reference to transfer pipelined BOs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Make sure the transfered BO is never destroy before the transfer BO. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Roger He <Hongbo.He@amd.com> + +Conflicts: + drivers/gpu/drm/ttm/ttm_bo_util.c + +Change-Id: I967267305604a98371dd395428ac6729412db03a +--- + drivers/gpu/drm/ttm/ttm_bo_util.c | 51 ++++++++++++++++++++++++--------------- + 1 file changed, 31 insertions(+), 20 deletions(-) + +diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c +index de9161f..0b0a72e 100644 +--- a/drivers/gpu/drm/ttm/ttm_bo_util.c ++++ b/drivers/gpu/drm/ttm/ttm_bo_util.c +@@ -39,6 +39,11 @@ + #include <linux/module.h> + #include <linux/reservation.h> + ++struct ttm_transfer_obj { ++ struct ttm_buffer_object base; ++ struct ttm_buffer_object *bo; ++}; ++ + void ttm_bo_free_old_node(struct ttm_buffer_object *bo) + { + ttm_bo_mem_put(bo, &bo->mem); +@@ -435,7 +440,11 @@ EXPORT_SYMBOL(ttm_bo_move_memcpy); + + static void ttm_transfered_destroy(struct ttm_buffer_object *bo) + { +- kfree(bo); ++ struct ttm_transfer_obj *fbo; ++ ++ fbo = container_of(bo, struct ttm_transfer_obj, base); ++ ttm_bo_unref(&fbo->bo); ++ kfree(fbo); + } + + /** +@@ -456,14 +465,15 @@ static void ttm_transfered_destroy(struct ttm_buffer_object *bo) + static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo, + struct ttm_buffer_object **new_obj) + { +- struct ttm_buffer_object *fbo; ++ struct ttm_transfer_obj *fbo; + int ret; + + fbo = kmalloc(sizeof(*fbo), GFP_KERNEL); + if (!fbo) + return -ENOMEM; + +- *fbo = *bo; ++ fbo->base = *bo; ++ fbo->bo = ttm_bo_reference(bo); + + /** + * Fix up members that we shouldn't copy directly: +@@ -471,25 +481,26 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo, + */ + + atomic_inc(&bo->bdev->glob->bo_count); +- INIT_LIST_HEAD(&fbo->ddestroy); +- INIT_LIST_HEAD(&fbo->lru); +- INIT_LIST_HEAD(&fbo->swap); +- INIT_LIST_HEAD(&fbo->io_reserve_lru); +- mutex_init(&fbo->wu_mutex); +- fbo->moving = NULL; +- drm_vma_node_reset(&fbo->vma_node); +- atomic_set(&fbo->cpu_writers, 0); +- +- kref_init(&fbo->list_kref); +- kref_init(&fbo->kref); +- fbo->destroy = &ttm_transfered_destroy; +- fbo->acc_size = 0; +- fbo->resv = &fbo->ttm_resv; +- reservation_object_init(fbo->resv); +- ret = reservation_object_trylock(fbo->resv); ++ INIT_LIST_HEAD(&fbo->base.ddestroy); ++ INIT_LIST_HEAD(&fbo->base.lru); ++ INIT_LIST_HEAD(&fbo->base.swap); ++ INIT_LIST_HEAD(&fbo->base.io_reserve_lru); ++ mutex_init(&fbo->base.wu_mutex); ++ fbo->base.moving = NULL; ++ drm_vma_node_reset(&fbo->base.vma_node); ++ atomic_set(&fbo->base.cpu_writers, 0); ++ ++ kref_init(&fbo->base.list_kref); ++ kref_init(&fbo->base.kref); ++ fbo->base.destroy = &ttm_transfered_destroy; ++ fbo->base.acc_size = 0; ++ fbo->base.resv = &fbo->base.ttm_resv; ++ reservation_object_init(fbo->base.resv); ++ ret = reservation_object_trylock(fbo->base.resv); ++ + WARN_ON(!ret); + +- *new_obj = fbo; ++ *new_obj = &fbo->base; + return 0; + } + +-- +2.7.4 + |