From patchwork Tue May 14 12:31:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942923 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 516D71398 for ; Tue, 14 May 2019 12:31:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 408C8286A7 for ; Tue, 14 May 2019 12:31:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3EAA428727; Tue, 14 May 2019 12:31:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 573F928715 for ; Tue, 14 May 2019 12:31:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0DA76892D8; Tue, 14 May 2019 12:31:33 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id 31100892D8; Tue, 14 May 2019 12:31:31 +0000 (UTC) Received: by mail-wr1-x441.google.com with SMTP id f8so1178076wrt.1; Tue, 14 May 2019 05:31:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=rLmQKviIvp0NIw1yiBrWv8Q79y8HDlEWGOX9UbBTP3A=; b=DdpuSAToyCpj6MFUaFJM/F4z07t2G6knivxmAb6G++otx8usqWKpm6AXzOgmtwhTiW ZB/2TmeuWYoQRBlpafbG+gmCWv+uiKMj7XbqAc7rDKdoVtqIvJF4fNcU9eXeZhc7JBX2 yoXFbSupScz72vkVKKZP5WzBnmvLm5E9S7HUXHAeIEFu5+ZInQX9IgvhRkm3kEkhOcIX Z5lDAxZRt0z/7FosnEfR1jAfRnkYpmDuztp3vvwBDrTVBVjBZOVPwyRk85wL6IFIQo4a z/oQE5N4KhUbUWksTkl4bs2BB75loQB6K3sRSFiesMN1gdQV8MUkHu22jSkOWqLX9V2O diKA== X-Gm-Message-State: APjAAAU1RAs55jVj0KgDSpYhT72HdyKpVlgLdfpOrroSXzNiXXTrI4e5 QP3uk07lMqBCM9aJfb9rov2yXOQ0 X-Google-Smtp-Source: APXvYqzq1UcX3cazd+fEquM4+KasdSLJY1fUCbyUUIvL0LpaU1Xqe4bg9L1kleiVqUuCMUhi5Dcnsw== X-Received: by 2002:adf:f049:: with SMTP id t9mr1177837wro.17.1557837089768; Tue, 14 May 2019 05:31:29 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:28 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 01/11] drm/ttm: Make LRU removal optional. Date: Tue, 14 May 2019 14:31:17 +0200 Message-Id: <20190514123127.1650-1-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=rLmQKviIvp0NIw1yiBrWv8Q79y8HDlEWGOX9UbBTP3A=; b=Pg1jDICTENeEqJjch6Od9reTT4kkwaTsGqeDXkgYU6aQQsSPECvLSzfrPJVODRLYnJ bc6GiCGpKSP1l/vLJ8zasS2KPKhivgki2YuwpaNPhJBlUd70a2p9cz30rbyhYcBddKMq AxH0csymDJ6qheYxrehrQVFHBJTaQBOqQ8A5tBWLD1fMMpemVczS2gAsWqhDVCrjwj6I 36IYlUnk9dRqPPmCEzbfW8P5/4+O83mKTW5iIQXSwRTtKdkhs4YrBocWrYsH1miWMGxo GGv+Nik9aWeAXj/mkxCLMEZo7KW/W+LnRl4KFPEbJGiYkFjAxPmiLjlAaGd3o816GFqy TESg== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP We are already doing this for DMA-buf imports and also for amdgpu VM BOs for quite a while now. If this doesn't run into any problems we are probably going to stop removing BOs from the LRU altogether. Signed-off-by: Christian König --- .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 9 +++++---- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 4 ++-- drivers/gpu/drm/qxl/qxl_release.c | 2 +- drivers/gpu/drm/radeon/radeon_gem.c | 2 +- drivers/gpu/drm/radeon/radeon_object.c | 2 +- drivers/gpu/drm/ttm/ttm_execbuf_util.c | 20 +++++++++++-------- drivers/gpu/drm/virtio/virtgpu_ioctl.c | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 3 ++- drivers/gpu/drm/vmwgfx/vmwgfx_validation.h | 2 +- include/drm/ttm/ttm_bo_driver.h | 5 ++++- include/drm/ttm/ttm_execbuf_util.h | 3 ++- 13 files changed, 34 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index e1cae4a37113..647e18f9e136 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -574,7 +574,7 @@ static int reserve_bo_and_vm(struct kgd_mem *mem, amdgpu_vm_get_pd_bo(vm, &ctx->list, &ctx->vm_pd[0]); ret = ttm_eu_reserve_buffers(&ctx->ticket, &ctx->list, - false, &ctx->duplicates); + false, &ctx->duplicates, true); if (!ret) ctx->reserved = true; else { @@ -647,7 +647,7 @@ static int reserve_bo_and_cond_vms(struct kgd_mem *mem, } ret = ttm_eu_reserve_buffers(&ctx->ticket, &ctx->list, - false, &ctx->duplicates); + false, &ctx->duplicates, true); if (!ret) ctx->reserved = true; else @@ -1800,7 +1800,8 @@ static int validate_invalid_user_pages(struct amdkfd_process_info *process_info) } /* Reserve all BOs and page tables for validation */ - ret = ttm_eu_reserve_buffers(&ticket, &resv_list, false, &duplicates); + ret = ttm_eu_reserve_buffers(&ticket, &resv_list, false, &duplicates, + true); WARN(!list_empty(&duplicates), "Duplicates should be empty"); if (ret) goto out_free; @@ -2006,7 +2007,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef) } ret = ttm_eu_reserve_buffers(&ctx.ticket, &ctx.list, - false, &duplicate_save); + false, &duplicate_save, true); if (ret) { pr_debug("Memory eviction: TTM Reserve Failed. Try again\n"); goto ttm_reserve_fail; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index d72cc583ebd1..fff558cf385b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -648,7 +648,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, } r = ttm_eu_reserve_buffers(&p->ticket, &p->validated, true, - &duplicates); + &duplicates, true); if (unlikely(r != 0)) { if (r != -ERESTARTSYS) DRM_ERROR("ttm_eu_reserve_buffers failed.\n"); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c index 54dd02a898b9..06f83cac0d3a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c @@ -79,7 +79,7 @@ int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm, list_add(&csa_tv.head, &list); amdgpu_vm_get_pd_bo(vm, &list, &pd); - r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL); + r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL, true); if (r) { DRM_ERROR("failed to reserve CSA,PD BOs: err=%d\n", r); return r; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 7b840367004c..d513a5ad03dd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -171,7 +171,7 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj, amdgpu_vm_get_pd_bo(vm, &list, &vm_pd); - r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates); + r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates, true); if (r) { dev_err(adev->dev, "leaking bo va because " "we fail to reserve bo (%d)\n", r); @@ -608,7 +608,7 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data, amdgpu_vm_get_pd_bo(&fpriv->vm, &list, &vm_pd); - r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates); + r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates, true); if (r) goto error_unref; diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c index 30f85f0130cb..49f9a9385393 100644 --- a/drivers/gpu/drm/qxl/qxl_release.c +++ b/drivers/gpu/drm/qxl/qxl_release.c @@ -256,7 +256,7 @@ int qxl_release_reserve_list(struct qxl_release *release, bool no_intr) return 0; ret = ttm_eu_reserve_buffers(&release->ticket, &release->bos, - !no_intr, NULL); + !no_intr, NULL, true); if (ret) return ret; diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c index 44617dec8183..7411e69e2712 100644 --- a/drivers/gpu/drm/radeon/radeon_gem.c +++ b/drivers/gpu/drm/radeon/radeon_gem.c @@ -559,7 +559,7 @@ static void radeon_gem_va_update_vm(struct radeon_device *rdev, if (!vm_bos) return; - r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL); + r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL, true); if (r) goto error_free; diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index 833e909706a9..36683de0300b 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c @@ -539,7 +539,7 @@ int radeon_bo_list_validate(struct radeon_device *rdev, u64 bytes_moved_threshold = radeon_bo_get_threshold_for_moves(rdev); INIT_LIST_HEAD(&duplicates); - r = ttm_eu_reserve_buffers(ticket, head, true, &duplicates); + r = ttm_eu_reserve_buffers(ticket, head, true, &duplicates, true); if (unlikely(r != 0)) { return r; } diff --git a/drivers/gpu/drm/ttm/ttm_execbuf_util.c b/drivers/gpu/drm/ttm/ttm_execbuf_util.c index 0075eb9a0b52..957ec375a4ba 100644 --- a/drivers/gpu/drm/ttm/ttm_execbuf_util.c +++ b/drivers/gpu/drm/ttm/ttm_execbuf_util.c @@ -69,7 +69,8 @@ void ttm_eu_backoff_reservation(struct ww_acquire_ctx *ticket, list_for_each_entry(entry, list, head) { struct ttm_buffer_object *bo = entry->bo; - ttm_bo_add_to_lru(bo); + if (list_empty(&bo->lru)) + ttm_bo_add_to_lru(bo); reservation_object_unlock(bo->resv); } spin_unlock(&glob->lru_lock); @@ -93,7 +94,7 @@ EXPORT_SYMBOL(ttm_eu_backoff_reservation); int ttm_eu_reserve_buffers(struct ww_acquire_ctx *ticket, struct list_head *list, bool intr, - struct list_head *dups) + struct list_head *dups, bool del_lru) { struct ttm_bo_global *glob; struct ttm_validate_buffer *entry; @@ -172,11 +173,11 @@ int ttm_eu_reserve_buffers(struct ww_acquire_ctx *ticket, list_add(&entry->head, list); } - if (ticket) - ww_acquire_done(ticket); - spin_lock(&glob->lru_lock); - ttm_eu_del_from_lru_locked(list); - spin_unlock(&glob->lru_lock); + if (del_lru) { + spin_lock(&glob->lru_lock); + ttm_eu_del_from_lru_locked(list); + spin_unlock(&glob->lru_lock); + } return 0; } EXPORT_SYMBOL(ttm_eu_reserve_buffers); @@ -203,7 +204,10 @@ void ttm_eu_fence_buffer_objects(struct ww_acquire_ctx *ticket, reservation_object_add_shared_fence(bo->resv, fence); else reservation_object_add_excl_fence(bo->resv, fence); - ttm_bo_add_to_lru(bo); + if (list_empty(&bo->lru)) + ttm_bo_add_to_lru(bo); + else + ttm_bo_move_to_lru_tail(bo, NULL); reservation_object_unlock(bo->resv); } spin_unlock(&glob->lru_lock); diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c index 161b80fee492..5cffaa24259f 100644 --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c @@ -63,7 +63,7 @@ static int virtio_gpu_object_list_validate(struct ww_acquire_ctx *ticket, struct virtio_gpu_object *qobj; int ret; - ret = ttm_eu_reserve_buffers(ticket, head, true, NULL); + ret = ttm_eu_reserve_buffers(ticket, head, true, NULL, true); if (ret != 0) return ret; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c index a7c30e567f09..d28cbedba0b5 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c @@ -465,7 +465,8 @@ vmw_resource_check_buffer(struct ww_acquire_ctx *ticket, val_buf->bo = &res->backup->base; val_buf->num_shared = 0; list_add_tail(&val_buf->head, &val_list); - ret = ttm_eu_reserve_buffers(ticket, &val_list, interruptible, NULL); + ret = ttm_eu_reserve_buffers(ticket, &val_list, interruptible, NULL, + true); if (unlikely(ret != 0)) goto out_no_reserve; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h index 3b396fea40d7..ac435b51f4eb 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h @@ -165,7 +165,7 @@ vmw_validation_bo_reserve(struct vmw_validation_context *ctx, bool intr) { return ttm_eu_reserve_buffers(&ctx->ticket, &ctx->bo_list, intr, - NULL); + NULL, true); } /** diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h index c008346c2401..fc0d995ac90d 100644 --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h @@ -769,7 +769,10 @@ static inline void ttm_bo_unreserve(struct ttm_buffer_object *bo) { if (!(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) { spin_lock(&bo->bdev->glob->lru_lock); - ttm_bo_add_to_lru(bo); + if (list_empty(&bo->lru)) + ttm_bo_add_to_lru(bo); + else + ttm_bo_move_to_lru_tail(bo, NULL); spin_unlock(&bo->bdev->glob->lru_lock); } reservation_object_unlock(bo->resv); diff --git a/include/drm/ttm/ttm_execbuf_util.h b/include/drm/ttm/ttm_execbuf_util.h index 621615fa7728..7e46cc678e7e 100644 --- a/include/drm/ttm/ttm_execbuf_util.h +++ b/include/drm/ttm/ttm_execbuf_util.h @@ -70,6 +70,7 @@ extern void ttm_eu_backoff_reservation(struct ww_acquire_ctx *ticket, * @list: thread private list of ttm_validate_buffer structs. * @intr: should the wait be interruptible * @dups: [out] optional list of duplicates. + * @del_lru: true if BOs should be removed from the LRU. * * Tries to reserve bos pointed to by the list entries for validation. * If the function returns 0, all buffers are marked as "unfenced", @@ -98,7 +99,7 @@ extern void ttm_eu_backoff_reservation(struct ww_acquire_ctx *ticket, extern int ttm_eu_reserve_buffers(struct ww_acquire_ctx *ticket, struct list_head *list, bool intr, - struct list_head *dups); + struct list_head *dups, bool del_lru); /** * function ttm_eu_fence_buffer_objects. From patchwork Tue May 14 12:31:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942925 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 90BA41390 for ; Tue, 14 May 2019 12:31:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7E5532869D for ; Tue, 14 May 2019 12:31:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7C07128715; Tue, 14 May 2019 12:31:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DC0D928711 for ; Tue, 14 May 2019 12:31:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A4DF1892E0; Tue, 14 May 2019 12:31:33 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id 57CA7892D2; Tue, 14 May 2019 12:31:32 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id y3so2694019wmm.2; Tue, 14 May 2019 05:31:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XgxdrGMU62a6/qTxIvfUyALzpjBUtVJoZb5V50Qnty0=; b=GM1yXizlilA3p2TqDUMDf5mhOU+rsLZYJ8+bdK5z/fkkbkgrNNzF1VugglAyWUt2R3 T43cgpj28Mq24zOcQCeoWexi5iBzW3beKIlGh2URAkmCB6lGLsND2XrAM8xTzNkHw4S4 WJzbn7a4AVuu2jtFxwX0IuU+BcOkDdrr6Xseq7tUH31neN5xLxS+ebXKNzTbtSkT98C4 9K5s0fiDNtx3IUbIDm1a44gnF0B5uH2HbTx2sUr+QqYwpY64btM6fZkOs2aGhABHXvkt aBM+22EnEbQ4o2pb5UJfSPlpMPOaFj8UDe46E0xZwENvtnihgFMZQSKszwcrC6KQlZTz BX1A== X-Gm-Message-State: APjAAAXky8t3bEHeKi07h+NRXUPNuC8UwRBOXkAa7pLm+2q0sN3qe74+ l6Ck3ec9EZiwhWKLuQwYx6UhWBo2 X-Google-Smtp-Source: APXvYqy4HhK/90eB8vHXsD+LZlvQkLJy8iVkaCIJ933kzd0mTdPAjnypRIefeHD8OAsioQWhh7ZHog== X-Received: by 2002:a1c:3104:: with SMTP id x4mr14765773wmx.23.1557837091002; Tue, 14 May 2019 05:31:31 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:30 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 02/11] drm/ttm: fix busy memory to fail other user v8 Date: Tue, 14 May 2019 14:31:18 +0200 Message-Id: <20190514123127.1650-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=XgxdrGMU62a6/qTxIvfUyALzpjBUtVJoZb5V50Qnty0=; b=XXNxje5PWQqz5vTE8jDPvjGI0DvQc8fZdQ80yfo1ENfAdFMngpPlykbLtGxNd3yrBo jei/46Ajfnk9ADqhZXvjKnPNCjAbRWRdo68jjpiBWcKaS0JmB7/qptN/zncKPKe6mQTS pgTiT7DUukYdhTLqRKRcnlE8Vs8YNU7HqP89AJFxQ+giiF39pwCF3EMHItj4C4RZGfsz +gOVGaZLYf1WaJ+u+NOCIGxk7DgCaRw4FTx0xxA5hXITEftwjc8tVAJ+9TQ9CaAYr5Ey M3ZvwlQtvr3ZwOEvJNn5h6X4xZ+YWYQshUolFr2bB86U8YU0O40nOYuv1z3ielrs0rks 6cjA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Chunming Zhou heavy gpu job could occupy memory long time, which lead other user fail to get memory. basically pick up Christian idea: 1. Reserve the BO in DC using a ww_mutex ticket (trivial). 2. If we then run into this EBUSY condition in TTM check if the BO we need memory for (or rather the ww_mutex of its reservation object) has a ticket assigned. 3. If we have a ticket we grab a reference to the first BO on the LRU, drop the LRU lock and try to grab the reservation lock with the ticket. 4. If getting the reservation lock with the ticket succeeded we check if the BO is still the first one on the LRU in question (the BO could have moved). 5. If the BO is still the first one on the LRU in question we try to evict it as we would evict any other BO. 6. If any of the "If's" above fail we just back off and return -EBUSY. v2: fix some minor check v3: address Christian v2 comments. v4: fix some missing v5: handle first_bo unlock and bo_get/put v6: abstract unified iterate function, and handle all possible usecase not only pinned bo. v7: pass request bo->resv to ttm_bo_evict_first v8 (chk): minimal coding style fix Change-Id: I21423fb922f885465f13833c41df1e134364a8e7 Signed-off-by: Chunming Zhou Reviewed-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 113 +++++++++++++++++++++++++++++------ 1 file changed, 96 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 2845fceb2fbd..e634d3a36923 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -766,11 +766,13 @@ EXPORT_SYMBOL(ttm_bo_eviction_valuable); * b. Otherwise, trylock it. */ static bool ttm_bo_evict_swapout_allowable(struct ttm_buffer_object *bo, - struct ttm_operation_ctx *ctx, bool *locked) + struct ttm_operation_ctx *ctx, bool *locked, bool *busy) { bool ret = false; *locked = false; + if (busy) + *busy = false; if (bo->resv == ctx->resv) { reservation_object_assert_held(bo->resv); if (ctx->flags & TTM_OPT_FLAG_ALLOW_RES_EVICT @@ -779,35 +781,46 @@ static bool ttm_bo_evict_swapout_allowable(struct ttm_buffer_object *bo, } else { *locked = reservation_object_trylock(bo->resv); ret = *locked; + if (!ret && busy) + *busy = true; } return ret; } -static int ttm_mem_evict_first(struct ttm_bo_device *bdev, - uint32_t mem_type, - const struct ttm_place *place, - struct ttm_operation_ctx *ctx) +static struct ttm_buffer_object* +ttm_mem_find_evitable_bo(struct ttm_bo_device *bdev, + struct ttm_mem_type_manager *man, + const struct ttm_place *place, + struct ttm_operation_ctx *ctx, + struct ttm_buffer_object **first_bo, + bool *locked) { - struct ttm_bo_global *glob = bdev->glob; - struct ttm_mem_type_manager *man = &bdev->man[mem_type]; struct ttm_buffer_object *bo = NULL; - bool locked = false; - unsigned i; - int ret; + int i; - spin_lock(&glob->lru_lock); + if (first_bo) + *first_bo = NULL; for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i) { list_for_each_entry(bo, &man->lru[i], lru) { - if (!ttm_bo_evict_swapout_allowable(bo, ctx, &locked)) + bool busy = false; + + if (!ttm_bo_evict_swapout_allowable(bo, ctx, locked, + &busy)) { + if (first_bo && !(*first_bo) && busy) { + ttm_bo_get(bo); + *first_bo = bo; + } continue; + } if (place && !bdev->driver->eviction_valuable(bo, place)) { - if (locked) + if (*locked) reservation_object_unlock(bo->resv); continue; } + break; } @@ -818,9 +831,69 @@ static int ttm_mem_evict_first(struct ttm_bo_device *bdev, bo = NULL; } + return bo; +} + +static int ttm_mem_evict_first(struct ttm_bo_device *bdev, + uint32_t mem_type, + const struct ttm_place *place, + struct ttm_operation_ctx *ctx, + struct reservation_object *request_resv) +{ + struct ttm_bo_global *glob = bdev->glob; + struct ttm_mem_type_manager *man = &bdev->man[mem_type]; + struct ttm_buffer_object *bo = NULL, *first_bo = NULL; + bool locked = false; + int ret; + + spin_lock(&glob->lru_lock); + bo = ttm_mem_find_evitable_bo(bdev, man, place, ctx, &first_bo, + &locked); if (!bo) { + struct ww_acquire_ctx *acquire_ctx = request_resv->lock.ctx; + struct ttm_operation_ctx busy_ctx; + spin_unlock(&glob->lru_lock); - return -EBUSY; + /* check if other user occupy memory too long time */ + if (!first_bo || !request_resv || !request_resv->lock.ctx) { + if (first_bo) + ttm_bo_put(first_bo); + return -EBUSY; + } + if (first_bo->resv == request_resv) { + ttm_bo_put(first_bo); + return -EBUSY; + } + if (ctx->interruptible) + ret = ww_mutex_lock_interruptible(&first_bo->resv->lock, + acquire_ctx); + else + ret = ww_mutex_lock(&first_bo->resv->lock, + acquire_ctx); + if (ret) { + ttm_bo_put(first_bo); + return ret; + } + spin_lock(&glob->lru_lock); + /* previous busy resv lock is held by above, idle now, + * so let them evictable. + */ + busy_ctx.interruptible = ctx->interruptible; + busy_ctx.no_wait_gpu = ctx->no_wait_gpu; + busy_ctx.resv = first_bo->resv; + busy_ctx.flags = TTM_OPT_FLAG_ALLOW_RES_EVICT; + + bo = ttm_mem_find_evitable_bo(bdev, man, place, &busy_ctx, NULL, + &locked); + if (bo && (bo->resv == first_bo->resv)) + locked = true; + else if (bo) + ww_mutex_unlock(&first_bo->resv->lock); + if (!bo) { + spin_unlock(&glob->lru_lock); + ttm_bo_put(first_bo); + return -EBUSY; + } } kref_get(&bo->list_kref); @@ -829,11 +902,15 @@ static int ttm_mem_evict_first(struct ttm_bo_device *bdev, ret = ttm_bo_cleanup_refs(bo, ctx->interruptible, ctx->no_wait_gpu, locked); kref_put(&bo->list_kref, ttm_bo_release_list); + if (first_bo) + ttm_bo_put(first_bo); return ret; } ttm_bo_del_from_lru(bo); spin_unlock(&glob->lru_lock); + if (first_bo) + ttm_bo_put(first_bo); ret = ttm_bo_evict(bo, ctx); if (locked) { @@ -907,7 +984,7 @@ static int ttm_bo_mem_force_space(struct ttm_buffer_object *bo, return ret; if (mem->mm_node) break; - ret = ttm_mem_evict_first(bdev, mem_type, place, ctx); + ret = ttm_mem_evict_first(bdev, mem_type, place, ctx, bo->resv); if (unlikely(ret != 0)) return ret; } while (1); @@ -1401,7 +1478,8 @@ static int ttm_bo_force_list_clean(struct ttm_bo_device *bdev, for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i) { while (!list_empty(&man->lru[i])) { spin_unlock(&glob->lru_lock); - ret = ttm_mem_evict_first(bdev, mem_type, NULL, &ctx); + ret = ttm_mem_evict_first(bdev, mem_type, NULL, &ctx, + NULL); if (ret) return ret; spin_lock(&glob->lru_lock); @@ -1772,7 +1850,8 @@ int ttm_bo_swapout(struct ttm_bo_global *glob, struct ttm_operation_ctx *ctx) spin_lock(&glob->lru_lock); for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i) { list_for_each_entry(bo, &glob->swap_lru[i], swap) { - if (ttm_bo_evict_swapout_allowable(bo, ctx, &locked)) { + if (ttm_bo_evict_swapout_allowable(bo, ctx, &locked, + NULL)) { ret = 0; break; } From patchwork Tue May 14 12:31:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942929 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A8B971398 for ; Tue, 14 May 2019 12:31:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 991722870E for ; Tue, 14 May 2019 12:31:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 976A128720; Tue, 14 May 2019 12:31:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5910C2870E for ; Tue, 14 May 2019 12:31:48 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BE92A892E7; Tue, 14 May 2019 12:31:37 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4134D892DE; Tue, 14 May 2019 12:31:33 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id h11so2595688wmb.5; Tue, 14 May 2019 05:31:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Jax3QxH+T6ehnU173TlYvvZDmZDjXPZ+6UmbLIJaZWo=; b=j3CWIHsjkJuL5RoIR42RgMSEPVu+2TfIynP0vcL5q0wZaIxza6LsEEfJTFi5c+x4vo DB4wxk+OKwDI9e2gkRhEqIyBcY4F/patzb9nzKZD/uAr7TLG9ch2xGFczqqxYTUsCNZG ykOPk1i/Ak8FP8G9NSIddeqoQ6iEzK5TNWUP8RHoo7rbpZc2AK6HyjxHj1pmNA0/rEv3 i+EJAwrL9v5hjUdKaTQhrAK78hnj1GEVIrcRDUBFPgpxk7QMCV7hqDeMjQTFJd0HkdI1 jiDTVjbWtxEHIVdTYXqDx2iU7Nq5Kun1rH9FPEQlYdf72lCvWo7FIXoGe4/J+ul5W9fy O0CA== X-Gm-Message-State: APjAAAWkca1E7ONfI/+yXWCyj6QQoll60Nu+qYvMLIx+XcvqjgmX7vYd pWbtX64DvRn+GwEEShpU6htUpQ87 X-Google-Smtp-Source: APXvYqyXXG8uVpeiW7JGwQ2mBz3pgh07oVN+gvgSXEHQiBaVHQmktT/GIm3Axw0QgrUBd5ayVVpTfQ== X-Received: by 2002:a7b:ce83:: with SMTP id q3mr18377522wmj.32.1557837092060; Tue, 14 May 2019 05:31:32 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:31 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 03/11] drm/ttm: remove the backing store if no placement is given Date: Tue, 14 May 2019 14:31:19 +0200 Message-Id: <20190514123127.1650-3-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Jax3QxH+T6ehnU173TlYvvZDmZDjXPZ+6UmbLIJaZWo=; b=OtCe2K2pgklHzYTBqtSgqw9aRt8cBK7tbhTAOYArIeTdRDAY9n1TWtJnNRHkPI/owv C9XTtEjxwGUjtOD2/E65CJa3qb3TknR3ndYP8/c0PvFAVjvIO4uXs4oGjnONPY+VNCvF clpHlChCcQw6lwhH3cRb3980r2k3cv2+khfkPDGX/+IzvhEegjj2vX0hr2xjS/4HHdRO ZtDUJE+fFLrAVjUgqrHATPg69AYc9fB3ZpAmKNct88VJ6AGsHCKSqgfjF0sqReaJvL5G yKqWdpYeKF6aLhMvnqgtXVffMCFnaSlt+rWiPj3zyS6JFfQMSuwEDRr3eS0gO7QiR4C0 MPYA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Pipeline removal of the BOs backing store when no placement is given during validation. Signed-off-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index e634d3a36923..6e9ff94a085d 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -1237,6 +1237,18 @@ int ttm_bo_validate(struct ttm_buffer_object *bo, uint32_t new_flags; reservation_object_assert_held(bo->resv); + + /* + * Remove the backing store if no placement is given. + */ + if (!placement->num_placement && !placement->num_busy_placement) { + ret = ttm_bo_pipeline_gutting(bo); + if (ret) + return ret; + + return ttm_tt_create(bo, false); + } + /* * Check whether we need to move buffer. */ From patchwork Tue May 14 12:31:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942935 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A23F61398 for ; Tue, 14 May 2019 12:31:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 92BD228481 for ; Tue, 14 May 2019 12:31:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 90D6D286C1; Tue, 14 May 2019 12:31:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4D062286E4 for ; Tue, 14 May 2019 12:31:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D2340892FA; Tue, 14 May 2019 12:31:41 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3ECE7892E6; Tue, 14 May 2019 12:31:34 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id h11so2595747wmb.5; Tue, 14 May 2019 05:31:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NUrnb30ow4au7x3kFOJ5qsnjmB2Ur0aosnqG85r+mfY=; b=Q/h6lMO6bHqbxZEJuqGRuoAitX/ORGRgkrOLwGfYuyjFuHKQ607RtMCmgIWHfz/aoM c20AB5G4MwXB1upwTMcY1UI+JWeqbJZ8Ax+BGw6Wi0dhPqzFw5qtiDrEulBcrNF74PBc 7/N8bmayhbmIhFv0dYOJFhcRiqkAaHWDzJjseExnDlf3Yb4Kc3TcpX0CAKB0buwnlCc6 kLOieAFRraPB8p3EoSu3uZoX/JnQbZEzdKtyGkgZxTL96GVdiRRcdeep8EGS1v5Ng6l+ gTbs7DuSKNgIy3zg9EcwmZKA6nYdw2+g1iZIjFIu3M1k95b0e4AnmtWEu+Pm5KMuQGl1 tojA== X-Gm-Message-State: APjAAAV5ea0vPnxKHdTlIWKRXvs86Dx2OP8AJZn9QKIkH655+RiXuUbq PY1NHY9ENm7bX3AFvosYAWU= X-Google-Smtp-Source: APXvYqz31naCOU2Ep6yuMZN9ND+jdkMdyC2H/Gy5aSh7iE+xFvfJ7tzKWTf82lzFbfiMvqLAQXgbww== X-Received: by 2002:a1c:4045:: with SMTP id n66mr2342669wma.142.1557837092970; Tue, 14 May 2019 05:31:32 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:32 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 04/11] drm/ttm: return immediately in case of a signal Date: Tue, 14 May 2019 14:31:20 +0200 Message-Id: <20190514123127.1650-4-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=NUrnb30ow4au7x3kFOJ5qsnjmB2Ur0aosnqG85r+mfY=; b=lAmezbBM3CcXMrMQ2khTrqD04Z8cbx99xYkxkXQIg5vaZUipIZegpCaHp3J/QYNEPK Dt7gHtee+4JSBFExla6tICdZTv0t1FNDuU/JHohtYNH2x7TGcHcbJWlyCFphka1mT59y IViGXz3i42WJRFsSMXEA7pZs1uL0YDrNtUyd1CIke4eSfOW3U5PN7LVxQSnv0IpkMUUh m8C4CJ0zBfstD52CbGGfkh6gbkSs+fw17Kvcms/IYKZnLAazHgL/v4Vejne5NbeF85eH tu/e7SHENPCafNi67v0Hvu9cew+El25zO1xU4Pm/649XJ5ravLAlzO5rpoGlS7JVUwGn WQ9Q== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP When a signal arrives we should return immediately for handling it and not try other placements first. Signed-off-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 6e9ff94a085d..6f692f92d0f4 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -1055,7 +1055,6 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, uint32_t cur_flags = 0; bool type_found = false; bool type_ok = false; - bool has_erestartsys = false; int i, ret; ret = reservation_object_reserve_shared(bo->resv, 1); @@ -1146,8 +1145,8 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, mem->placement = cur_flags; return 0; } - if (ret == -ERESTARTSYS) - has_erestartsys = true; + if (ret && ret != -EBUSY) + return ret; } if (!type_found) { @@ -1155,7 +1154,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, return -EINVAL; } - return (has_erestartsys) ? -ERESTARTSYS : -ENOMEM; + return -ENOMEM; } EXPORT_SYMBOL(ttm_bo_mem_space); From patchwork Tue May 14 12:31:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942939 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B84CC1398 for ; Tue, 14 May 2019 12:31:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A61E42869D for ; Tue, 14 May 2019 12:31:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A4523286AC; Tue, 14 May 2019 12:31:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 51AA328481 for ; Tue, 14 May 2019 12:31:58 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C269F8930B; Tue, 14 May 2019 12:31:42 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5BFEE892E2; Tue, 14 May 2019 12:31:35 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id x64so2668004wmb.5; Tue, 14 May 2019 05:31:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GbbxRsfFG7hvL8ShZwkSv3MwlUoTFC+UQMPAXiSd7+Q=; b=dY/6JvqJs2lQusbtlhMelL3iAF69MpAyKDzaDa44cVYyAeCC6W2PsYGRdk9+x2qvEW pKxigRT3RqKO/xFt+dlsTAChQXmpihtqIV+zgyYYOny7o3xx+BfgrmIEArLrtJjTv7rV BDxxyzxc5Ec0XThKSjWUuADHynPYho/lD/7Hu7xYXkUqO6OSPSqj3TznCAIvb0VR2HqS pGO5Wa6309LriVVlKed05/OlPKRZhRU6jXcURz2frw9xX+dwS0xjIGiS/p9hJ4rVj42e YyiMnBvR2Vr9nS2WACg8uK8kgGyXVeJPwbhurz2OkTl9DTr/5p3HbSq+lzlppUmPm8bl wJkA== X-Gm-Message-State: APjAAAWEhu8p4jdzJWbeXkzQ6KN/HUwQT+nbNSymJWgIDOoVMF0ePsa0 zChzSv55KnrP/snjgLg42UL7qMoF X-Google-Smtp-Source: APXvYqxFXrDS8nf01mOnH1d0oJaeiwIevI8AHgSeyZELqaC0UbKTeByG7MXItYsbLb3JDWUvp9t38g== X-Received: by 2002:a1c:6783:: with SMTP id b125mr19929401wmc.41.1557837094103; Tue, 14 May 2019 05:31:34 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:33 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 05/11] drm/ttm: remove manual placement preference Date: Tue, 14 May 2019 14:31:21 +0200 Message-Id: <20190514123127.1650-5-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=GbbxRsfFG7hvL8ShZwkSv3MwlUoTFC+UQMPAXiSd7+Q=; b=vWUggTkWp//yYZ+CG7oUuCDmZu9IIgluMPvD8A+m0hMgMhPzHFUC+FLp2A2XUmbseR i72ItgML+SHp15JAv3GZThIgErlIfV9UIXzcFbP493LLUhsdtxfAe/yXSNTby+UTeuxd FyXd9vFi4vjRuVRi8C63wkYxs43enrR31iHfEnpYziTyw6OuH8yOB66URE2UiUnWPh3h SaVbyF4I6scKcSQzw4n7ylRaBLzWhLnUdtzU0uo9CqgGOSTClOxJ81V16P8ST51wA3MR LxrCFPRyA85P9mFg0HaYtl617BykGmNj/ffN5mQjlNjbUyVtFi4FMLi+8JVtyhHGqZMm 9zng== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP If drivers don't prefer a system memory placement they should not but it into the placement list first. Signed-off-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 6f692f92d0f4..1fe302dee1a8 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -1088,8 +1088,12 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, ttm_flag_masked(&cur_flags, place->flags, ~TTM_PL_MASK_MEMTYPE); - if (mem_type == TTM_PL_SYSTEM) - break; + if (mem_type == TTM_PL_SYSTEM) { + mem->mem_type = mem_type; + mem->placement = cur_flags; + mem->mm_node = NULL; + return 0; + } ret = (*man->func->get_node)(man, bo, place, mem); if (unlikely(ret)) @@ -1101,16 +1105,12 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, (*man->func->put_node)(man, mem); return ret; } - break; + mem->mem_type = mem_type; + mem->placement = cur_flags; + return 0; } } - if ((type_ok && (mem_type == TTM_PL_SYSTEM)) || mem->mm_node) { - mem->mem_type = mem_type; - mem->placement = cur_flags; - return 0; - } - for (i = 0; i < placement->num_busy_placement; ++i) { const struct ttm_place *place = &placement->busy_placement[i]; From patchwork Tue May 14 12:31:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942927 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CFBF81390 for ; Tue, 14 May 2019 12:31:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BB2FA28712 for ; Tue, 14 May 2019 12:31:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B86A82872A; Tue, 14 May 2019 12:31:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4383728720 for ; Tue, 14 May 2019 12:31:46 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 446C88929B; Tue, 14 May 2019 12:31:39 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id 832BE892E6; Tue, 14 May 2019 12:31:36 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id 7so2630448wmo.2; Tue, 14 May 2019 05:31:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Vr37EeAl3nno9ysND4oopQHULilqggcJqdTsRWkvaDA=; b=BSOhLdUUt6Lgjb/wAVIO8JtpOARZ2nLPTaJXj0s5T7Eu7fUOuRFDcaRjlcg9jcHonO p2jF82K/sBv8u7bGvGH1KecSIin9BLKaxgNrXuJR+Y3bmCUETC8wMBRnN8uID/lBKXRn 3vzL3VOhK9OIw4J40dwMlp/iQqxVg1WP02AMjCt57s999eugz/Pzr3sPg2hc+fJ5vUMA c/bNFl07txF1jkj9uL6snaI1jtqmPUqq/oVx5CeKoA8luDJmwxjfKJvU6cqwMk5gW3Fc P1iHhtiE55IrxmLJYnZeOBw6mzm2+y7PM32OH0RjRxIyTIlt66i3wYNgeCrenEQkh1Qj g38A== X-Gm-Message-State: APjAAAVdXbkJRcSrVU2VfnbnvgC8BAhRTIN/4lH8NTrLIImcHT1b5NLg REVMJYxE4seWJPgYNt4IFmY1fWTY X-Google-Smtp-Source: APXvYqyNqiZCq1qC/6q+QVRfLED3EcxtAeRJ40ekB3Hx73nLjaXQL67L2wMz+Rqk9+sdJ33GJKPyEg== X-Received: by 2002:a1c:ef0c:: with SMTP id n12mr1844343wmh.3.1557837094984; Tue, 14 May 2019 05:31:34 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:34 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 06/11] drm/ttm: cleanup ttm_bo_mem_space Date: Tue, 14 May 2019 14:31:22 +0200 Message-Id: <20190514123127.1650-6-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Vr37EeAl3nno9ysND4oopQHULilqggcJqdTsRWkvaDA=; b=uoX/B3TmrznpGyoki2jsTPpUxS2eTUsbO/l5N5IEBNzEy4xbUmeDkz1y3HcIj8OdHj zvKyPfYTeYDBA0vIM8ONoShy0BnhTHYB/XVzqYYIRsTc30PFSSv0XnJ1dhJvxpG3+/IQ E+i0v+3r+mTqBCCYReErqPQU6z6DjvnUlkzl6mnShsHPui5ixfb/1EWonnSsglTwOb4K z/dJLnhIGx9+HpjhofPRr9PZwtll0YX8Hri37nCPPGYRnle6J+fKb8wpPbdaBhI8Ko9O yJiDF9vU0BclcUXDqc/9hjy3mIH/13eZ4ZA6etLdALCdFePkKMGY/8X9QwKXojmA+4EA +3BA== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP We tried this once before, but that turned out to be more complicated than thought. With all the right prerequisites it looks like we can do this now. Signed-off-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 128 ++++++++++++++++++----------------- 1 file changed, 67 insertions(+), 61 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 1fe302dee1a8..ec0bcc0241a8 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -969,13 +969,12 @@ static int ttm_bo_add_move_fence(struct ttm_buffer_object *bo, * space, or we've evicted everything and there isn't enough space. */ static int ttm_bo_mem_force_space(struct ttm_buffer_object *bo, - uint32_t mem_type, - const struct ttm_place *place, - struct ttm_mem_reg *mem, - struct ttm_operation_ctx *ctx) + const struct ttm_place *place, + struct ttm_mem_reg *mem, + struct ttm_operation_ctx *ctx) { struct ttm_bo_device *bdev = bo->bdev; - struct ttm_mem_type_manager *man = &bdev->man[mem_type]; + struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; int ret; do { @@ -984,11 +983,12 @@ static int ttm_bo_mem_force_space(struct ttm_buffer_object *bo, return ret; if (mem->mm_node) break; - ret = ttm_mem_evict_first(bdev, mem_type, place, ctx, bo->resv); + ret = ttm_mem_evict_first(bdev, mem->mem_type, place, + ctx, bo->resv); if (unlikely(ret != 0)) return ret; } while (1); - mem->mem_type = mem_type; + return ttm_bo_add_move_fence(bo, man, mem); } @@ -1036,6 +1036,51 @@ static bool ttm_bo_mt_compatible(struct ttm_mem_type_manager *man, return true; } +/** + * ttm_bo_mem_placement - check if placement is compatible + * @bo: BO to find memory for + * @place: where to search + * @mem: the memory object to fill in + * @ctx: operation context + * + * Check if placement is compatible and fill in mem structure. + * Returns -EBUSY if placement won't work or negative error code. + * 0 when placement can be used. + */ +static int ttm_bo_mem_placement(struct ttm_buffer_object *bo, + const struct ttm_place *place, + struct ttm_mem_reg *mem, + struct ttm_operation_ctx *ctx) +{ + struct ttm_bo_device *bdev = bo->bdev; + uint32_t mem_type = TTM_PL_SYSTEM; + struct ttm_mem_type_manager *man; + uint32_t cur_flags = 0; + int ret; + + ret = ttm_mem_type_from_place(place, &mem_type); + if (ret) + return ret; + + man = &bdev->man[mem_type]; + if (!man->has_type || !man->use_type) + return -EBUSY; + + if (!ttm_bo_mt_compatible(man, mem_type, place, &cur_flags)) + return -EBUSY; + + cur_flags = ttm_bo_select_caching(man, bo->mem.placement, cur_flags); + /* + * Use the access and other non-mapping-related flag bits from + * the memory placement flags to the current flags + */ + ttm_flag_masked(&cur_flags, place->flags, ~TTM_PL_MASK_MEMTYPE); + + mem->mem_type = mem_type; + mem->placement = cur_flags; + return 0; +} + /** * Creates space for memory region @mem according to its type. * @@ -1050,11 +1095,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx) { struct ttm_bo_device *bdev = bo->bdev; - struct ttm_mem_type_manager *man; - uint32_t mem_type = TTM_PL_SYSTEM; - uint32_t cur_flags = 0; bool type_found = false; - bool type_ok = false; int i, ret; ret = reservation_object_reserve_shared(bo->resv, 1); @@ -1064,37 +1105,20 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, mem->mm_node = NULL; for (i = 0; i < placement->num_placement; ++i) { const struct ttm_place *place = &placement->placement[i]; + struct ttm_mem_type_manager *man; - ret = ttm_mem_type_from_place(place, &mem_type); + ret = ttm_bo_mem_placement(bo, place, mem, ctx); + if (ret == -EBUSY) + continue; if (ret) return ret; - man = &bdev->man[mem_type]; - if (!man->has_type || !man->use_type) - continue; - - type_ok = ttm_bo_mt_compatible(man, mem_type, place, - &cur_flags); - - if (!type_ok) - continue; type_found = true; - cur_flags = ttm_bo_select_caching(man, bo->mem.placement, - cur_flags); - /* - * Use the access and other non-mapping-related flag bits from - * the memory placement flags to the current flags - */ - ttm_flag_masked(&cur_flags, place->flags, - ~TTM_PL_MASK_MEMTYPE); - - if (mem_type == TTM_PL_SYSTEM) { - mem->mem_type = mem_type; - mem->placement = cur_flags; - mem->mm_node = NULL; + mem->mm_node = NULL; + if (mem->mem_type == TTM_PL_SYSTEM) return 0; - } + man = &bdev->man[mem->mem_type]; ret = (*man->func->get_node)(man, bo, place, mem); if (unlikely(ret)) return ret; @@ -1105,8 +1129,6 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, (*man->func->put_node)(man, mem); return ret; } - mem->mem_type = mem_type; - mem->placement = cur_flags; return 0; } } @@ -1114,37 +1136,21 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, for (i = 0; i < placement->num_busy_placement; ++i) { const struct ttm_place *place = &placement->busy_placement[i]; - ret = ttm_mem_type_from_place(place, &mem_type); + ret = ttm_bo_mem_placement(bo, place, mem, ctx); + if (ret == -EBUSY) + continue; if (ret) return ret; - man = &bdev->man[mem_type]; - if (!man->has_type || !man->use_type) - continue; - if (!ttm_bo_mt_compatible(man, mem_type, place, &cur_flags)) - continue; type_found = true; - cur_flags = ttm_bo_select_caching(man, bo->mem.placement, - cur_flags); - /* - * Use the access and other non-mapping-related flag bits from - * the memory placement flags to the current flags - */ - ttm_flag_masked(&cur_flags, place->flags, - ~TTM_PL_MASK_MEMTYPE); - - if (mem_type == TTM_PL_SYSTEM) { - mem->mem_type = mem_type; - mem->placement = cur_flags; - mem->mm_node = NULL; + mem->mm_node = NULL; + if (mem->mem_type == TTM_PL_SYSTEM) return 0; - } - ret = ttm_bo_mem_force_space(bo, mem_type, place, mem, ctx); - if (ret == 0 && mem->mm_node) { - mem->placement = cur_flags; + ret = ttm_bo_mem_force_space(bo, place, mem, ctx); + if (ret == 0 && mem->mm_node) return 0; - } + if (ret && ret != -EBUSY) return ret; } From patchwork Tue May 14 12:31:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942931 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E28841398 for ; Tue, 14 May 2019 12:31:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D2005286E4 for ; Tue, 14 May 2019 12:31:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D01792871E; Tue, 14 May 2019 12:31:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7EA47286E4 for ; Tue, 14 May 2019 12:31:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9D05D892EE; Tue, 14 May 2019 12:31:39 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3EEAB892E6; Tue, 14 May 2019 12:31:37 +0000 (UTC) Received: by mail-wm1-x341.google.com with SMTP id y3so2694392wmm.2; Tue, 14 May 2019 05:31:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Cgxmk29nBLJLl7otwXxEny4FN50g759zU3qaBqb25s8=; b=hB5Hmy0mrVfbp1M9Y3b4hycoJG1fiwW4xJCx+imPbj4GIbWrQZvLoQYwcsZsDgzYKB E8ygQ7wPfC1Jjbw692Jx0+d+ipiEViXC9cZvybqwl9sRYlQcuFrlyLx+fp2xjjfu3vFY wW+2EzWTdVbRFAD8V3loubzI4Pt9AuvTJfXLd78puXMDsLHe0W2tV87X8HGQ49Z5ootG aHL/ol/j0vEQXZ2iTWVQS0Vzc8wFEWpqYzjEyDedt1SWgK9gOJiLkVoa/w0esDEngr8a wzNNAy9o17Rg0Tia8JSJu4VOiBRdkxzTusffuRPUokuiz93sKOmO2KLJCP0MmCy59fbA b8Ig== X-Gm-Message-State: APjAAAWK9qwDbxKgVC4O/izLQO7SsTjsUQ61AzXWdw/Nt0lIoOqSxBMq E73y43SF3vFyccV9j9ObjYM= X-Google-Smtp-Source: APXvYqwN25aqdSy8wOldJ6qW/XH9RQ+9cNFjzd6TO4VDxTOKzYaBgm3uccf4RHu9DqpVD/uLT4h2Ag== X-Received: by 2002:a1c:8004:: with SMTP id b4mr18666280wmd.79.1557837095924; Tue, 14 May 2019 05:31:35 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:35 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 07/11] drm/ttm: immediately move BOs to the new LRU Date: Tue, 14 May 2019 14:31:23 +0200 Message-Id: <20190514123127.1650-7-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Cgxmk29nBLJLl7otwXxEny4FN50g759zU3qaBqb25s8=; b=PMCvaLIml9gIxY1515HAUOLH1LlUnJ203tgWeCoTs2uLN8ZTa6VAWY1hAv30lPUBpx vhXLLPRMqioYHijO0SSddEiikUS4DxtAR+VJ+8SGN0XbId+HglFO3x3y/oEVP1x8n5i5 RsqHY4lZ2iJA2G/xffqyS7ByKMRGRmEuM602XIQrM/8j4B44vYHdj58QBboNRKPZfbLV HZAjmt0/W16t0njWTZVM3v975jwf8WDViE9FfHd3Sx7Fw+Kt+WB632PlG8aURHCDsotQ xwxBCZPp5//9no8TDuA5+FTtrlBAiJpXLWqZuE0b91WT7J/fZojXc9yTcYNoRZtT8vOH mvlw== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Move BOs which are currently in the system domain to the new LRU before allocating backing space. This makes sure that we always have enough entries on the LRU to allow for other processes to wait for an operation to complete. Signed-off-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 45 ++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index ec0bcc0241a8..233bfb86068b 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -166,17 +166,17 @@ static void ttm_bo_release_list(struct kref *list_kref) ttm_mem_global_free(bdev->glob->mem_glob, acc_size); } -void ttm_bo_add_to_lru(struct ttm_buffer_object *bo) +static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo, + struct ttm_mem_reg *mem) { struct ttm_bo_device *bdev = bo->bdev; struct ttm_mem_type_manager *man; reservation_object_assert_held(bo->resv); + BUG_ON(!list_empty(&bo->lru)); - if (!(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) { - BUG_ON(!list_empty(&bo->lru)); - - man = &bdev->man[bo->mem.mem_type]; + if (!(mem->placement & TTM_PL_FLAG_NO_EVICT)) { + man = &bdev->man[mem->mem_type]; list_add_tail(&bo->lru, &man->lru[bo->priority]); kref_get(&bo->list_kref); @@ -188,6 +188,11 @@ void ttm_bo_add_to_lru(struct ttm_buffer_object *bo) } } } + +void ttm_bo_add_to_lru(struct ttm_buffer_object *bo) +{ + ttm_bo_add_mem_to_lru(bo, &bo->mem); +} EXPORT_SYMBOL(ttm_bo_add_to_lru); static void ttm_bo_ref_bug(struct kref *list_kref) @@ -1078,6 +1083,14 @@ static int ttm_bo_mem_placement(struct ttm_buffer_object *bo, mem->mem_type = mem_type; mem->placement = cur_flags; + + if (bo->mem.mem_type == TTM_PL_SYSTEM && !list_empty(&bo->lru)) { + spin_lock(&bo->bdev->glob->lru_lock); + ttm_bo_del_from_lru(bo); + ttm_bo_add_mem_to_lru(bo, mem); + spin_unlock(&bo->bdev->glob->lru_lock); + } + return 0; } @@ -1111,7 +1124,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, if (ret == -EBUSY) continue; if (ret) - return ret; + goto error; type_found = true; mem->mm_node = NULL; @@ -1121,13 +1134,13 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, man = &bdev->man[mem->mem_type]; ret = (*man->func->get_node)(man, bo, place, mem); if (unlikely(ret)) - return ret; + goto error; if (mem->mm_node) { ret = ttm_bo_add_move_fence(bo, man, mem); if (unlikely(ret)) { (*man->func->put_node)(man, mem); - return ret; + goto error; } return 0; } @@ -1140,7 +1153,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, if (ret == -EBUSY) continue; if (ret) - return ret; + goto error; type_found = true; mem->mm_node = NULL; @@ -1152,15 +1165,23 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo, return 0; if (ret && ret != -EBUSY) - return ret; + goto error; } + ret = -ENOMEM; if (!type_found) { pr_err(TTM_PFX "No compatible memory type found\n"); - return -EINVAL; + ret = -EINVAL; } - return -ENOMEM; +error: + if (bo->mem.mem_type == TTM_PL_SYSTEM && !list_empty(&bo->lru)) { + spin_lock(&bo->bdev->glob->lru_lock); + ttm_bo_move_to_lru_tail(bo, NULL); + spin_unlock(&bo->bdev->glob->lru_lock); + } + + return ret; } EXPORT_SYMBOL(ttm_bo_mem_space); From patchwork Tue May 14 12:31:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942933 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7F4FD1390 for ; Tue, 14 May 2019 12:31:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6B6C028716 for ; Tue, 14 May 2019 12:31:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6994228712; Tue, 14 May 2019 12:31:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id ADAB028712 for ; Tue, 14 May 2019 12:31:52 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 98684892F0; Tue, 14 May 2019 12:31:41 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id 33D98892EA; Tue, 14 May 2019 12:31:38 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id j187so2261800wma.1; Tue, 14 May 2019 05:31:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uhpI2XVf96hFlDtAL/mzWZ1tmY9ymOjWPDnrQ0PFR7g=; b=MJTT1/I8Vf1ryb0zy53zcerNjMDYrC8rq8Y/EkwJ7uJ+MmnpK+smET5KIUm/jdEHsp GyRfidp3iYRRV44yY5FpKjPFXn51Cor8Tc6Aw0Ja7U1WbrK4ojILY5xNHBvgatXlRGvN 0bpWhy/I/22DP+LVLcU7bOHff60OnTMVn+1SDCwXt37B8VuIzOxZT7bXgII6zaEQqgTI YvxyBKJdzRstuWXrJpwJOoPKShbn+7dfjOdp85Mls8vDzHG1x6/+zfcT8GC78jWlRSoi 3n3Nv7vv8d6eh8p5tRvlmyA99nCfaxYSmlTN2BUK3v/d2I51PChjs5KpNzHbXwBNhrX1 qsJQ== X-Gm-Message-State: APjAAAWikaRSdD/jTzqYcnQcbZvK4S5ODuXMjhy/qvCkBka+GgGO2o1a AHir8/0gqgGYBZ1vvBw9hqRkkq3L X-Google-Smtp-Source: APXvYqxb7JGPajaEK02DALF+lb1w8lQ+7Ymus5sorQP1sgjU8BhLPe66wozCFn6zcBGpWuZI6Qs9+w== X-Received: by 2002:a7b:ca47:: with SMTP id m7mr657524wml.150.1557837096773; Tue, 14 May 2019 05:31:36 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:36 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 08/11] drm/ttm: put new BOs immediately on the LRU Date: Tue, 14 May 2019 14:31:24 +0200 Message-Id: <20190514123127.1650-8-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=uhpI2XVf96hFlDtAL/mzWZ1tmY9ymOjWPDnrQ0PFR7g=; b=mEP8QNn1CWaVaTPGU6zZfgyiAoXhSgLf516/kEU/SwlWNdx1W0WtdkGK3y+yCe5vsa lFDBvlFsvx+GV/Y/mqrDGHTPX1wyZ6hhsgVQtOcbYuIO8iN4fOnDzhYy6JO6eEVwJqD2 TyY3uuHcCUcQqc7CISoR9LAIxl4auppCJbnaoUEmommHeAYCEmD8TRK9vPR6wsQEfyVj K7I0zDZebBUwdzd/CsDGpIUpexUi+ps1JSEcKc3rBAv53pdv/yNOC6yky+9QnXS83OIW J2SMieGP1HfxTTTW6hLkjY9e+dOk+xdbYXGx86iGjvXOPKBINMq0XUQZbN88+ZGPYU/r DjQg== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP This way they are available for eviction immediately. Signed-off-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 233bfb86068b..a301c876ae31 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -1390,21 +1390,18 @@ int ttm_bo_init_reserved(struct ttm_bo_device *bdev, WARN_ON(!locked); } - if (likely(!ret)) + if (likely(!ret)) { + spin_lock(&bdev->glob->lru_lock); + ttm_bo_add_to_lru(bo); + spin_unlock(&bdev->glob->lru_lock); ret = ttm_bo_validate(bo, placement, ctx); + } if (unlikely(ret)) { if (!resv) ttm_bo_unreserve(bo); ttm_bo_put(bo); - return ret; - } - - if (resv && !(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) { - spin_lock(&bdev->glob->lru_lock); - ttm_bo_add_to_lru(bo); - spin_unlock(&bdev->glob->lru_lock); } return ret; From patchwork Tue May 14 12:31:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942937 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6FC1D1390 for ; Tue, 14 May 2019 12:31:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6081B28701 for ; Tue, 14 May 2019 12:31:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 54CA62873D; Tue, 14 May 2019 12:31:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0CB9728701 for ; Tue, 14 May 2019 12:31:57 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 991B489308; Tue, 14 May 2019 12:31:42 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 31951892A1; Tue, 14 May 2019 12:31:39 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id h4so19021613wre.7; Tue, 14 May 2019 05:31:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kBUD+OcSvYDWMydLZbUYPdZANHI7cZrrIqmjxGQWFuo=; b=a/F+1miypS8ysKDUNKYCqHCmOxvG/s8zduFo5QWcsv4vqPYKg1iL3TCEv8XqIZDEI3 Auh0UEsX+VBMlcoiAjg51cimgYgo/XOAst/6WSGFbdkmCeAw8MvDOX6+QUjAW2wUX3zZ Fwtsi9OsTFfmWFN7JoFUrggGdiGqYAgJ2nQE2oDIh9uCQjUFgCKiRLmR1isJtGBqbJnU CdJfCGlSImsezI6ei6adIgG2s7aBmUyQYAXWEWKwy7UBK2PxlnlBkBwTGN/sfjcWC4FU AwLRLM6SGGt1an5E0pjXD+NSkrDYQCrGj3J2v5+y0zi0lY3CMUmExs38MDGpcFnNGntX xbxg== X-Gm-Message-State: APjAAAWvAZTlVSS1Ikv90pFki8v4cdxGxrk1IWIqJHBgWID0nYCe66ts 7oHA5rrH9zRs8SdCg0a4d4+hzTE6 X-Google-Smtp-Source: APXvYqyzQY5E9qbyeQj+qQimocRsEzNfBiP6CNAwaHB4QXX5a71O3oMguvrL10mfzXEjKm+pURmMbA== X-Received: by 2002:a5d:4a92:: with SMTP id o18mr20570627wrq.80.1557837097689; Tue, 14 May 2019 05:31:37 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:37 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 09/11] drm/ttm: convert EDEADLK into EAGAIN Date: Tue, 14 May 2019 14:31:25 +0200 Message-Id: <20190514123127.1650-9-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=kBUD+OcSvYDWMydLZbUYPdZANHI7cZrrIqmjxGQWFuo=; b=DLd9UGw5okFNKqRuXn4hb9AHN4bX0HZZsrswYA9qSIhakMhb1/EMR4ut4a2E5F1U2P suNDRvWJ1cMKWDEKT3VqwoQX/syNGrcHQFWAT2Yi4zZsl6MyE5zOnSjaOuFdf1/invrH 8Duo2342tS0nCHnjVkTcAMzAWdWprTxUPGQc1x/7u/+i7Bo7dJTcdHwT1zxE8UEvMXig U9yed5D0gD2Il06uOqTEWy6FCnIiiDJO6UFonvbHs6HBjnhqU0M8xnfVzIwP/lQocOgn 1C4HnXNLT/+wsTjv0B5azrDHT7ZyK4mmk36ky+9647EZGdEKfI++8eLqJg0CYmgF1kSZ 1zsw== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Let userspace try again if we really run into a deadlock during eviction. This has a low chance of live locking, but with guaranteed forward process. Signed-off-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index a301c876ae31..ce85cd8b4970 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -877,6 +877,8 @@ static int ttm_mem_evict_first(struct ttm_bo_device *bdev, acquire_ctx); if (ret) { ttm_bo_put(first_bo); + if (ret == -EDEADLK) + ret = -EAGAIN; return ret; } spin_lock(&glob->lru_lock); From patchwork Tue May 14 12:31:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942941 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6E3251398 for ; Tue, 14 May 2019 12:32:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5991F2871C for ; Tue, 14 May 2019 12:32:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 57FA028732; Tue, 14 May 2019 12:32:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id EE60E2871C for ; Tue, 14 May 2019 12:31:59 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5E235892FD; Tue, 14 May 2019 12:31:44 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3BBD5892EA; Tue, 14 May 2019 12:31:40 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id r7so1179393wrr.13; Tue, 14 May 2019 05:31:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GdOA44SxirHkAVChdVGJp77SKGhHA/5hptKvFRyO/X0=; b=ax0ydjYLjiy8zhO9cgyeg3ffcjpyK0Z1Qo+VsNR2pWaYsq/F9guSQ2QLikBwT0tFpA EyuYrTu1ngoRZyv2AMIHCiVfA9m4rgLMdUT/nQjJwaSIVIyTcH3qSocODgqIJhDN1Wd2 mFQOYLUqgA5SYGU+7nmSttItTOSFXA33ov48PY9e0jrftI0MMYrx5DmhSv8OJsavAZUy KphRdwgxFTPWl1PmPFy3RuZdzs3L/2SnwBMAAGq9hu2j2PrdwmUKN4UGOCAmtwi5yzck d2+KnxGrk2jHaqUFQNQznDhAIjf2p8e2BMs6WCHoepZsXAJWTzcNqOPO57GprAWiFlqx 8MxA== X-Gm-Message-State: APjAAAU9kKxiKV3gQKlW+Woi1QY7sp/CIk+BOZQAtVNWQe+mgT5ZNg61 86Un2ysOzGnTtZniGaKwAmPSwW12 X-Google-Smtp-Source: APXvYqxnGRtDv+871tYkXE3Ka3/ijWZ++g5NFmEZo4pvRVnMeY8ep3zi9JLdeB5OkksH0V6z4XgzTw== X-Received: by 2002:a5d:65d1:: with SMTP id e17mr20890954wrw.65.1557837098495; Tue, 14 May 2019 05:31:38 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:38 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 10/11] drm/amd/display: use ttm_eu_reserve_buffers instead of amdgpu_bo_reserve v2 Date: Tue, 14 May 2019 14:31:26 +0200 Message-Id: <20190514123127.1650-10-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=GdOA44SxirHkAVChdVGJp77SKGhHA/5hptKvFRyO/X0=; b=HVjqNk5ezU/QU9z41bITraauzTh/MBEcPW/zxU8fr8YIDBFTMbsgN4B+DkKt5wvx/k MsIeB+buta7Nm10p8YdaRk6feOSG9ogrMag3EIhfmSQDsHUjnPMI3vSpmvfc0s7p+hU/ kR1FHvNMxDADEVA+2LauxydizEy9LkwbpDHEhDTaQGmsi4MBM2n9xUtD/w+CHdeprrWQ +nCN9Ktnlw6PjOEiQbhb8dvZKnEPZ6dtxWxDB8EGtXeFnu8jFxG18ZLkyYfwEx1rqWn1 22hg9OiIwppdpwbLRsqAOJfSLeArfJcaZAwTirYPRPDd3IpnYyJA+BKwDu4gnjGAKhHS yPUw== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Chunming Zhou add ticket for display bo, so that it can preempt busy bo. v2: fix stupid rebase error Change-Id: I9f031cdcc8267de00e819ae303baa0a52df8ebb9 Signed-off-by: Chunming Zhou Reviewed-by: Christian König --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index d7f9d3998641..1c85ed772161 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -4176,6 +4176,9 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane, struct amdgpu_device *adev; struct amdgpu_bo *rbo; struct dm_plane_state *dm_plane_state_new, *dm_plane_state_old; + struct list_head list; + struct ttm_validate_buffer tv; + struct ww_acquire_ctx ticket; uint64_t tiling_flags; uint32_t domain; int r; @@ -4192,9 +4195,17 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane, obj = new_state->fb->obj[0]; rbo = gem_to_amdgpu_bo(obj); adev = amdgpu_ttm_adev(rbo->tbo.bdev); - r = amdgpu_bo_reserve(rbo, false); - if (unlikely(r != 0)) + INIT_LIST_HEAD(&list); + + tv.bo = &rbo->tbo; + tv.num_shared = 1; + list_add(&tv.head, &list); + + r = ttm_eu_reserve_buffers(&ticket, &list, false, NULL, true); + if (r) { + dev_err(adev->dev, "fail to reserve bo (%d)\n", r); return r; + } if (plane->type != DRM_PLANE_TYPE_CURSOR) domain = amdgpu_display_supported_domains(adev); @@ -4205,21 +4216,21 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane, if (unlikely(r != 0)) { if (r != -ERESTARTSYS) DRM_ERROR("Failed to pin framebuffer with error %d\n", r); - amdgpu_bo_unreserve(rbo); + ttm_eu_backoff_reservation(&ticket, &list); return r; } r = amdgpu_ttm_alloc_gart(&rbo->tbo); if (unlikely(r != 0)) { amdgpu_bo_unpin(rbo); - amdgpu_bo_unreserve(rbo); + ttm_eu_backoff_reservation(&ticket, &list); DRM_ERROR("%p bind failed\n", rbo); return r; } amdgpu_bo_get_tiling_flags(rbo, &tiling_flags); - amdgpu_bo_unreserve(rbo); + ttm_eu_backoff_reservation(&ticket, &list); afb->address = amdgpu_bo_gpu_offset(rbo); From patchwork Tue May 14 12:31:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10942943 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1F1A41390 for ; Tue, 14 May 2019 12:32:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0F4BA286A7 for ; Tue, 14 May 2019 12:32:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0D9D5286E4; Tue, 14 May 2019 12:32:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 36E1B28711 for ; Tue, 14 May 2019 12:32:01 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1843A89304; Tue, 14 May 2019 12:31:45 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id A85C1892F1; Tue, 14 May 2019 12:31:41 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id y3so2694620wmm.2; Tue, 14 May 2019 05:31:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GotozzQHrgeeNHLIyU2r/4FYuUgEY3mDRRbcmbzAvt8=; b=YlGcxCkUzBMb6/Edqpk2rHTDAvTicdYUGVfKig7OTpziPAn2lKX3VBk8JEaXGVuqsA ZQeCeszCpqYS3NaUy4M0qoleITTuFt8mb31s/SiHnL6/NgijgDOb6dw7S5fouenPwREI 9ylSyihb2vTZbUQSaKJiKTJoCWIeBWfq6GYNGak7guR/BrZg2UZt6EK36p0l0t0gYExE so/ziE/e6O81YSwf96XIhYHLFgegMj2rsjyhX5lAy+DDvfNpV/MmaCkraievKYcVozK4 QwhuAqf2xKFG/hm2SBsL9l7K/Kj/WobYAVG26zO0H7d3jxUWlVDbz3GK3Rf91Xqv0eMv EqVQ== X-Gm-Message-State: APjAAAWfkX6osuUhX5N4ve84XnwMj+Lb/qeAF4Qxog7PZDd3A4B5I2+6 zW4/pBI+Z7EhvRwJttTvDzMSH4Y1 X-Google-Smtp-Source: APXvYqxeJ1PL58t5EPqMDrbsqN4sfdbbiXl7maPkg+6ltU2Gn4sBQj8ONIjjvIHZXSN8+3cFX2UPBA== X-Received: by 2002:a1c:4102:: with SMTP id o2mr18056917wma.91.1557837099549; Tue, 14 May 2019 05:31:39 -0700 (PDT) Received: from abel.fritz.box ([2a02:908:1252:fb60:7d94:f6f9:368b:5a3b]) by smtp.gmail.com with ESMTPSA id n4sm6128704wmb.22.2019.05.14.05.31.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 May 2019 05:31:38 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: Marek.Olsak@amd.com, David1.Zhou@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 11/11] drm/amdgpu: stop removing BOs from the LRU during CS Date: Tue, 14 May 2019 14:31:27 +0200 Message-Id: <20190514123127.1650-11-christian.koenig@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190514123127.1650-1-christian.koenig@amd.com> References: <20190514123127.1650-1-christian.koenig@amd.com> MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=GotozzQHrgeeNHLIyU2r/4FYuUgEY3mDRRbcmbzAvt8=; b=c/hzLOX6QgaQTz/Lc6uNX25oMJu30E48RB7VcVJD+oNoIj6j7aAC9j/l+AEoIZEsOI sg3Io0GbQleJztLUKtGfUwmlUfNoijwTD2QReHNscnS/b0nueoHckSZ3S9zeMUDi9sax GlFLvDGibXtzdgqK/TBOlAHOc/7T8HXkeqxZGLSSfrQAX4bB1vBmo2Pov/3Zwl9nKwV8 F98rp5ghzaC5LCtorTRpFwX+fKeCVxOiQrL0BbA2b9a146rs7ZDqHPpKsZx+xqJeACAX xAlJaLx/0ft19G8sndheEFl7xiM4WPvgoBNJLJJo+IS4ZXfhVKufE0871cozAto9g1mz H4og== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP This avoids OOM situations when we have lots of threads submitting at the same time. Signed-off-by: Christian König Signed-off-by: Christian König Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König Signed-off-by: Christian König Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König > Signed-off-by: Christian König Signed-off-by: Christian König Signed-off-by: Christian König Signed-off-by: Christian König > --- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index fff558cf385b..f9240a94217b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -648,7 +648,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, } r = ttm_eu_reserve_buffers(&p->ticket, &p->validated, true, - &duplicates, true); + &duplicates, false); if (unlikely(r != 0)) { if (r != -ERESTARTSYS) DRM_ERROR("ttm_eu_reserve_buffers failed.\n");