From: "Christian König" <ckoenig.leichtzumerken@gmail.com> To: Intel Graphics Development <intel-gfx@lists.freedesktop.org>, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 9/9] drm/ttm: move ttm_bo_wait into VMWGFX Date: Fri, 25 Nov 2022 11:21:37 +0100 [thread overview] Message-ID: <20221125102137.1801-9-christian.koenig@amd.com> (raw) In-Reply-To: <20221125102137.1801-1-christian.koenig@amd.com> Not used anymore by other drivers or TTM itself. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/ttm/ttm_bo.c | 44 +++++++++++------------------ drivers/gpu/drm/ttm/ttm_bo_util.c | 19 ++++++++----- drivers/gpu/drm/vmwgfx/ttm_object.h | 11 ++++++++ include/drm/ttm/ttm_bo.h | 1 - 4 files changed, 39 insertions(+), 36 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index cd266a067773..326a3d13a829 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -1087,47 +1087,35 @@ void ttm_bo_unmap_virtual(struct ttm_buffer_object *bo) EXPORT_SYMBOL(ttm_bo_unmap_virtual); /** - * ttm_bo_wait - wait for buffer idle. + * ttm_bo_wait_ctx - wait for buffer idle. * * @bo: The buffer object. - * @interruptible: Use interruptible wait. - * @no_wait: Return immediately if buffer is busy. + * @ctx: defines how to wait * - * This function must be called with the bo::mutex held, and makes - * sure any previous rendering to the buffer is completed. - * Note: It might be necessary to block validations before the - * wait by reserving the buffer. - * Returns -EBUSY if no_wait is true and the buffer is busy. - * Returns -ERESTARTSYS if interrupted by a signal. + * Waits for the buffer to be idle. Used timeout depends on the context. + * Returns -EBUSY if wait timed outt, -ERESTARTSYS if interrupted by a signal or + * zero on success. */ -int ttm_bo_wait(struct ttm_buffer_object *bo, - bool interruptible, bool no_wait) +int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx) { - long timeout = 15 * HZ; + long ret; - if (no_wait) { - if (dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP)) + if (ctx->no_wait_gpu) { + if (dma_resv_test_signaled(bo->base.resv, + DMA_RESV_USAGE_BOOKKEEP)) return 0; else return -EBUSY; } - timeout = dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP, - interruptible, timeout); - if (timeout < 0) - return timeout; - - if (timeout == 0) + ret = dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP, + ctx->interruptible, 15 * HZ); + if (unlikely(ret < 0)) + return ret; + if (unlikely(ret == 0)) return -EBUSY; - return 0; } -EXPORT_SYMBOL(ttm_bo_wait); - -int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx) -{ - return ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu); -} EXPORT_SYMBOL(ttm_bo_wait_ctx); int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx, @@ -1135,7 +1123,7 @@ int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx, { struct ttm_place place; bool locked; - int ret; + long ret; /* * While the bo may already reside in SYSTEM placement, set diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index fee7c20775c0..ed2b28734541 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -547,9 +547,13 @@ EXPORT_SYMBOL(ttm_bo_vunmap); static int ttm_bo_wait_free_node(struct ttm_buffer_object *bo, bool dst_use_tt) { - int ret; - ret = ttm_bo_wait(bo, false, false); - if (ret) + long ret; + + ret = dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP, + false, 15 * HZ); + if (ret == 0) + return -EBUSY; + if (ret < 0) return ret; if (!dst_use_tt) @@ -710,8 +714,7 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo) return ret; /* If already idle, no need for ghost object dance. */ - ret = ttm_bo_wait(bo, false, true); - if (ret != -EBUSY) { + if (dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP)) { if (!bo->ttm) { /* See comment below about clearing. */ ret = ttm_tt_create(bo, true); @@ -748,8 +751,10 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo) ret = dma_resv_copy_fences(&ghost->base._resv, bo->base.resv); /* Last resort, wait for the BO to be idle when we are OOM */ - if (ret) - ttm_bo_wait(bo, false, false); + if (ret) { + dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP, + false, MAX_SCHEDULE_TIMEOUT); + } dma_resv_unlock(&ghost->base._resv); ttm_bo_put(ghost); diff --git a/drivers/gpu/drm/vmwgfx/ttm_object.h b/drivers/gpu/drm/vmwgfx/ttm_object.h index f0ebbe340ad6..95a9679f9d39 100644 --- a/drivers/gpu/drm/vmwgfx/ttm_object.h +++ b/drivers/gpu/drm/vmwgfx/ttm_object.h @@ -42,6 +42,8 @@ #include <linux/list.h> #include <linux/rcupdate.h> +#include <drm/ttm/ttm_bo.h> + /** * enum ttm_object_type * @@ -321,4 +323,13 @@ static inline void ttm_base_object_noref_release(void) __acquire(RCU); rcu_read_unlock(); } + +static inline int ttm_bo_wait(struct ttm_buffer_object *bo, bool intr, + bool no_wait) +{ + struct ttm_operation_ctx ctx = { intr, no_wait }; + + return ttm_bo_wait_ctx(bo, &ctx); +} + #endif diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h index cfaf88e2d678..6dd8f63a5715 100644 --- a/include/drm/ttm/ttm_bo.h +++ b/include/drm/ttm/ttm_bo.h @@ -346,7 +346,6 @@ static inline void *ttm_kmap_obj_virtual(struct ttm_bo_kmap_obj *map, return map->virtual; } -int ttm_bo_wait(struct ttm_buffer_object *bo, bool interruptible, bool no_wait); int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx); int ttm_bo_validate(struct ttm_buffer_object *bo, -- 2.34.1
WARNING: multiple messages have this Message-ID (diff)
From: "Christian König" <ckoenig.leichtzumerken@gmail.com> To: Intel Graphics Development <intel-gfx@lists.freedesktop.org>, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [Intel-gfx] [PATCH 9/9] drm/ttm: move ttm_bo_wait into VMWGFX Date: Fri, 25 Nov 2022 11:21:37 +0100 [thread overview] Message-ID: <20221125102137.1801-9-christian.koenig@amd.com> (raw) In-Reply-To: <20221125102137.1801-1-christian.koenig@amd.com> Not used anymore by other drivers or TTM itself. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/ttm/ttm_bo.c | 44 +++++++++++------------------ drivers/gpu/drm/ttm/ttm_bo_util.c | 19 ++++++++----- drivers/gpu/drm/vmwgfx/ttm_object.h | 11 ++++++++ include/drm/ttm/ttm_bo.h | 1 - 4 files changed, 39 insertions(+), 36 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index cd266a067773..326a3d13a829 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -1087,47 +1087,35 @@ void ttm_bo_unmap_virtual(struct ttm_buffer_object *bo) EXPORT_SYMBOL(ttm_bo_unmap_virtual); /** - * ttm_bo_wait - wait for buffer idle. + * ttm_bo_wait_ctx - wait for buffer idle. * * @bo: The buffer object. - * @interruptible: Use interruptible wait. - * @no_wait: Return immediately if buffer is busy. + * @ctx: defines how to wait * - * This function must be called with the bo::mutex held, and makes - * sure any previous rendering to the buffer is completed. - * Note: It might be necessary to block validations before the - * wait by reserving the buffer. - * Returns -EBUSY if no_wait is true and the buffer is busy. - * Returns -ERESTARTSYS if interrupted by a signal. + * Waits for the buffer to be idle. Used timeout depends on the context. + * Returns -EBUSY if wait timed outt, -ERESTARTSYS if interrupted by a signal or + * zero on success. */ -int ttm_bo_wait(struct ttm_buffer_object *bo, - bool interruptible, bool no_wait) +int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx) { - long timeout = 15 * HZ; + long ret; - if (no_wait) { - if (dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP)) + if (ctx->no_wait_gpu) { + if (dma_resv_test_signaled(bo->base.resv, + DMA_RESV_USAGE_BOOKKEEP)) return 0; else return -EBUSY; } - timeout = dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP, - interruptible, timeout); - if (timeout < 0) - return timeout; - - if (timeout == 0) + ret = dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP, + ctx->interruptible, 15 * HZ); + if (unlikely(ret < 0)) + return ret; + if (unlikely(ret == 0)) return -EBUSY; - return 0; } -EXPORT_SYMBOL(ttm_bo_wait); - -int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx) -{ - return ttm_bo_wait(bo, ctx->interruptible, ctx->no_wait_gpu); -} EXPORT_SYMBOL(ttm_bo_wait_ctx); int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx, @@ -1135,7 +1123,7 @@ int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx, { struct ttm_place place; bool locked; - int ret; + long ret; /* * While the bo may already reside in SYSTEM placement, set diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index fee7c20775c0..ed2b28734541 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c @@ -547,9 +547,13 @@ EXPORT_SYMBOL(ttm_bo_vunmap); static int ttm_bo_wait_free_node(struct ttm_buffer_object *bo, bool dst_use_tt) { - int ret; - ret = ttm_bo_wait(bo, false, false); - if (ret) + long ret; + + ret = dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP, + false, 15 * HZ); + if (ret == 0) + return -EBUSY; + if (ret < 0) return ret; if (!dst_use_tt) @@ -710,8 +714,7 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo) return ret; /* If already idle, no need for ghost object dance. */ - ret = ttm_bo_wait(bo, false, true); - if (ret != -EBUSY) { + if (dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP)) { if (!bo->ttm) { /* See comment below about clearing. */ ret = ttm_tt_create(bo, true); @@ -748,8 +751,10 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo) ret = dma_resv_copy_fences(&ghost->base._resv, bo->base.resv); /* Last resort, wait for the BO to be idle when we are OOM */ - if (ret) - ttm_bo_wait(bo, false, false); + if (ret) { + dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP, + false, MAX_SCHEDULE_TIMEOUT); + } dma_resv_unlock(&ghost->base._resv); ttm_bo_put(ghost); diff --git a/drivers/gpu/drm/vmwgfx/ttm_object.h b/drivers/gpu/drm/vmwgfx/ttm_object.h index f0ebbe340ad6..95a9679f9d39 100644 --- a/drivers/gpu/drm/vmwgfx/ttm_object.h +++ b/drivers/gpu/drm/vmwgfx/ttm_object.h @@ -42,6 +42,8 @@ #include <linux/list.h> #include <linux/rcupdate.h> +#include <drm/ttm/ttm_bo.h> + /** * enum ttm_object_type * @@ -321,4 +323,13 @@ static inline void ttm_base_object_noref_release(void) __acquire(RCU); rcu_read_unlock(); } + +static inline int ttm_bo_wait(struct ttm_buffer_object *bo, bool intr, + bool no_wait) +{ + struct ttm_operation_ctx ctx = { intr, no_wait }; + + return ttm_bo_wait_ctx(bo, &ctx); +} + #endif diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h index cfaf88e2d678..6dd8f63a5715 100644 --- a/include/drm/ttm/ttm_bo.h +++ b/include/drm/ttm/ttm_bo.h @@ -346,7 +346,6 @@ static inline void *ttm_kmap_obj_virtual(struct ttm_bo_kmap_obj *map, return map->virtual; } -int ttm_bo_wait(struct ttm_buffer_object *bo, bool interruptible, bool no_wait); int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx); int ttm_bo_validate(struct ttm_buffer_object *bo, -- 2.34.1
next prev parent reply other threads:[~2022-11-25 10:22 UTC|newest] Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-11-25 10:21 [PATCH 1/9] drm/amdgpu: generally allow over-commit during BO allocation Christian König 2022-11-25 10:21 ` [Intel-gfx] " Christian König 2022-11-25 10:21 ` [PATCH 2/9] drm/ttm: remove ttm_bo_(un)lock_delayed_workqueue Christian König 2022-11-25 10:21 ` [Intel-gfx] " Christian König 2022-11-25 10:21 ` [PATCH 3/9] drm/ttm: use per BO cleanup workers Christian König 2022-11-25 10:21 ` [Intel-gfx] " Christian König 2022-11-29 21:14 ` Felix Kuehling 2022-11-29 21:14 ` [Intel-gfx] " Felix Kuehling 2022-12-05 13:39 ` Christian König 2022-12-05 13:39 ` [Intel-gfx] " Christian König 2023-06-13 13:05 ` Karol Herbst 2023-06-13 13:05 ` [Intel-gfx] " Karol Herbst 2023-06-13 13:59 ` Christian König 2023-06-13 13:59 ` [Intel-gfx] " Christian König 2023-06-13 14:18 ` Karol Herbst 2023-06-13 14:18 ` [Intel-gfx] " Karol Herbst 2023-06-15 11:19 ` Christian König 2023-06-15 11:19 ` [Intel-gfx] " Christian König 2023-06-15 12:04 ` Karol Herbst 2023-06-15 12:04 ` [Intel-gfx] " Karol Herbst 2022-11-25 10:21 ` [PATCH 4/9] drm/ttm: merge ttm_bo_api.h and ttm_bo_driver.h Christian König 2022-11-25 10:21 ` [Intel-gfx] " Christian König 2022-11-25 12:43 ` kernel test robot 2022-11-25 12:43 ` [Intel-gfx] " kernel test robot 2022-11-25 21:19 ` kernel test robot 2022-11-25 21:19 ` [Intel-gfx] " kernel test robot 2022-11-25 10:21 ` [PATCH 5/9] drm/nouveau: stop using ttm_bo_wait Christian König 2022-11-25 10:21 ` [Intel-gfx] " Christian König 2023-01-11 9:52 ` [Nouveau] " Christian König 2023-01-18 9:04 ` Christian König 2023-01-18 9:42 ` Christian König 2023-01-18 13:01 ` Karol Herbst 2023-01-18 14:15 ` Christian König 2023-01-18 15:44 ` Danilo Krummrich 2022-11-25 10:21 ` [PATCH 6/9] drm/qxl: " Christian König 2022-11-25 10:21 ` [Intel-gfx] " Christian König 2022-12-15 14:19 ` Christian König 2022-12-15 14:19 ` [Intel-gfx] " Christian König 2022-12-15 20:09 ` Dave Airlie 2022-12-15 20:09 ` Dave Airlie 2022-12-15 20:09 ` [Intel-gfx] " Dave Airlie 2022-11-25 10:21 ` [PATCH 7/9] drm/i915: " Christian König 2022-11-25 10:21 ` [Intel-gfx] " Christian König 2022-11-25 11:14 ` Tvrtko Ursulin 2022-11-25 12:46 ` Christian König 2022-11-29 18:05 ` Matthew Auld 2022-11-30 13:02 ` Tvrtko Ursulin 2022-11-30 14:06 ` Daniel Vetter 2022-11-30 14:06 ` Daniel Vetter 2022-12-05 19:58 ` Christian König 2022-12-05 19:58 ` Christian König 2022-12-06 18:03 ` Matthew Auld 2022-12-06 18:03 ` Matthew Auld 2022-12-06 18:06 ` Christian König 2022-12-06 18:06 ` Christian König 2022-11-25 10:21 ` [PATCH 8/9] drm/ttm: use ttm_bo_wait_ctx instead of ttm_bo_wait Christian König 2022-11-25 10:21 ` [Intel-gfx] " Christian König 2022-11-25 10:21 ` Christian König [this message] 2022-11-25 10:21 ` [Intel-gfx] [PATCH 9/9] drm/ttm: move ttm_bo_wait into VMWGFX Christian König 2022-11-25 11:17 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/9] drm/amdgpu: generally allow over-commit during BO allocation Patchwork 2022-11-25 11:18 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork 2022-11-25 11:18 ` [Intel-gfx] ✗ Fi.CI.DOCS: " Patchwork 2022-11-25 11:40 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork 2022-11-25 18:18 ` [PATCH 1/9] " Alex Deucher 2022-11-25 18:18 ` [Intel-gfx] " Alex Deucher 2022-12-05 13:41 ` Christian König 2022-12-05 13:41 ` [Intel-gfx] " Christian König 2022-11-28 6:00 ` Arunpravin Paneer Selvam 2022-11-28 6:00 ` [Intel-gfx] " Arunpravin Paneer Selvam 2022-12-10 6:15 ` Felix Kuehling 2022-12-10 6:15 ` [Intel-gfx] " Felix Kuehling 2022-12-10 14:12 ` Christian König 2022-12-10 14:12 ` [Intel-gfx] " Christian König 2022-12-11 1:13 ` Felix Kuehling 2022-12-11 1:13 ` [Intel-gfx] " Felix Kuehling
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=20221125102137.1801-9-christian.koenig@amd.com \ --to=ckoenig.leichtzumerken@gmail.com \ --cc=amd-gfx@lists.freedesktop.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=intel-gfx@lists.freedesktop.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.