mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: "Christian König" <christian.koenig@amd.com>,
	"Felix Kuehling" <Felix.Kuehling@amd.com>,
	"Alex Deucher" <alexander.deucher@amd.com>,
	"Sasha Levin" <sashal@kernel.org>,
	dri-devel@lists.freedesktop.org
Subject: [PATCH AUTOSEL 5.4 015/350] drm/ttm: return -EBUSY on pipelining with no_gpu_wait (v2)
Date: Tue, 10 Dec 2019 15:58:27 -0500	[thread overview]
Message-ID: <20191210210402.8367-15-sashal@kernel.org> (raw)
In-Reply-To: <20191210210402.8367-1-sashal@kernel.org>

From: Christian König <christian.koenig@amd.com>

[ Upstream commit 3084cf46cf8110826a42de8c8ef30e8fa48974c2 ]

Setting the no_gpu_wait flag means that the allocate BO must be available
immediately and we can't wait for any GPU operation to finish.

v2: squash in mem leak fix, rebase

Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/gpu/drm/ttm/ttm_bo.c | 44 +++++++++++++++++++++---------------
 1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 98819462f025f..f078036998092 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -926,7 +926,8 @@ EXPORT_SYMBOL(ttm_bo_mem_put);
  */
 static int ttm_bo_add_move_fence(struct ttm_buffer_object *bo,
 				 struct ttm_mem_type_manager *man,
-				 struct ttm_mem_reg *mem)
+				 struct ttm_mem_reg *mem,
+				 bool no_wait_gpu)
 {
 	struct dma_fence *fence;
 	int ret;
@@ -935,19 +936,22 @@ static int ttm_bo_add_move_fence(struct ttm_buffer_object *bo,
 	fence = dma_fence_get(man->move);
 	spin_unlock(&man->move_lock);
 
-	if (fence) {
-		dma_resv_add_shared_fence(bo->base.resv, fence);
+	if (!fence)
+		return 0;
 
-		ret = dma_resv_reserve_shared(bo->base.resv, 1);
-		if (unlikely(ret)) {
-			dma_fence_put(fence);
-			return ret;
-		}
+	if (no_wait_gpu)
+		return -EBUSY;
+
+	dma_resv_add_shared_fence(bo->base.resv, fence);
 
-		dma_fence_put(bo->moving);
-		bo->moving = fence;
+	ret = dma_resv_reserve_shared(bo->base.resv, 1);
+	if (unlikely(ret)) {
+		dma_fence_put(fence);
+		return ret;
 	}
 
+	dma_fence_put(bo->moving);
+	bo->moving = fence;
 	return 0;
 }
 
@@ -978,7 +982,7 @@ static int ttm_bo_mem_force_space(struct ttm_buffer_object *bo,
 			return ret;
 	} while (1);
 
-	return ttm_bo_add_move_fence(bo, man, mem);
+	return ttm_bo_add_move_fence(bo, man, mem, ctx->no_wait_gpu);
 }
 
 static uint32_t ttm_bo_select_caching(struct ttm_mem_type_manager *man,
@@ -1120,14 +1124,18 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
 		if (unlikely(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);
-				goto error;
-			}
-			return 0;
+		if (!mem->mm_node)
+			continue;
+
+		ret = ttm_bo_add_move_fence(bo, man, mem, ctx->no_wait_gpu);
+		if (unlikely(ret)) {
+			(*man->func->put_node)(man, mem);
+			if (ret == -EBUSY)
+				continue;
+
+			goto error;
 		}
+		return 0;
 	}
 
 	for (i = 0; i < placement->num_busy_placement; ++i) {
-- 
2.20.1


  parent reply	other threads:[~2019-12-10 21:06 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-10 20:58 [PATCH AUTOSEL 5.4 001/350] drm/vc4/vc4_hdmi: fill in connector info Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 002/350] drm/virtio: switch virtio_gpu_wait_ioctl() to gem helper Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 003/350] drm: mst: Fix query_payload ack reply struct Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 004/350] drm/mipi-dbi: fix a loop in debugfs code Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 005/350] drm/panel: Add missing drm_panel_init() in panel drivers Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 006/350] drm: exynos: exynos_hdmi: use cec_notifier_conn_(un)register Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 007/350] drm: Use EOPNOTSUPP, not ENOTSUPP Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 008/350] drm/amd/display: verify stream link before link test Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 009/350] drm/bridge: analogix-anx78xx: silence -EPROBE_DEFER warnings Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 010/350] drm/amd/display: OTC underflow fix Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 011/350] iio: max31856: add missing of_node and parent references to iio_dev Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 012/350] iio: light: bh1750: Resolve compiler warning and make code more readable Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 013/350] drm/amdgpu/sriov: add ring_stop before ring_create in psp v11 code Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 014/350] drm/amdgpu: grab the id mgr lock while accessing passid_mapping Sasha Levin
2019-12-10 20:58 ` Sasha Levin [this message]
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 016/350] drm/amd/display: Rebuild mapped resources after pipe split Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 017/350] ath10k: add cleanup in ath10k_sta_state() Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 018/350] drm/amd/display: Handle virtual signal type in disable_link() Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 019/350] iio: tcs3414: fix iio_triggered_buffer_{pre,post}enable positions Sasha Levin
2019-12-15 15:52   ` Jonathan Cameron
2019-12-19 15:22     ` Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 020/350] ath10k: Check if station exists before forwarding tx airtime report Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 021/350] spi: Add call to spi_slave_abort() function when spidev driver is released Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 022/350] drm/meson: vclk: use the correct G12A frac max value Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 023/350] staging: rtl8192u: fix multiple memory leaks on error path Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 024/350] staging: rtl8188eu: fix possible null dereference Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 025/350] objtool: add kunit_try_catch_throw to the noreturn list Sasha Levin
2019-12-10 21:25   ` Brendan Higgins
2019-12-19 15:27     ` Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 026/350] rtlwifi: prevent memory leak in rtl_usb_probe Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 027/350] libertas: fix a potential NULL pointer dereference Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 028/350] Revert "pinctrl: sh-pfc: r8a77990: Fix MOD_SEL1 bit30 when using SSI_SCK2 and SSI_WS2" Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 029/350] Revert "pinctrl: sh-pfc: r8a77990: Fix MOD_SEL1 bit31 when using SIM0_D" Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 030/350] ath10k: fix backtrace on coredump Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 031/350] IB/iser: bound protection_sg size by data_sg size Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 032/350] drm/komeda: Workaround for broken FLIP_COMPLETE timestamps Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 033/350] spi: gpio: prevent memory leak in spi_gpio_probe Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 034/350] media: am437x-vpfe: Setting STD to current value is not an error Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 035/350] media: cedrus: fill in bus_info for media device Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 036/350] media: seco-cec: Add a missing 'release_region()' in an error handling path Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 037/350] media: vim2m: Fix abort issue Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 038/350] media: vim2m: Fix BUG_ON in vim2m_device_release() Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 039/350] media: max2175: Fix build error without CONFIG_REGMAP_I2C Sasha Levin
2019-12-10 20:58 ` [PATCH AUTOSEL 5.4 040/350] media: ov6650: Fix control handler not freed on init error Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191210210402.8367-15-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=Felix.Kuehling@amd.com \
    --cc=alexander.deucher@amd.com \
    --cc=christian.koenig@amd.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome