From patchwork Thu Nov 21 10:27:22 2024 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: 13881835 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 67BC1D6E2A4 for ; Thu, 21 Nov 2024 10:27:39 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D7F4710E8D0; Thu, 21 Nov 2024 10:27:38 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WCiKrCL4"; dkim-atps=neutral Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id E26F410E1CB for ; Thu, 21 Nov 2024 10:27:30 +0000 (UTC) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4314f38d274so8366865e9.1 for ; Thu, 21 Nov 2024 02:27:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1732184849; x=1732789649; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9jxy8nHq7ZEXkys7bCB9OhjPu6tUBHKnBmqrURartuE=; b=WCiKrCL4Tf0zPdkias4jgD6volK4K8gX1LfOlkK/hO4dAED35WsKdp5t9b3Wbgor9b rERBT4fG0MNjcidXdEyzAZ0Bw+X/DGGhuF8xXJmwiyXNDjtQto1PGwpfjJNxe8uW44on EX0kNI86uDr+acSMFhMnFUz8IrlTwi+S07nvlaQakzZyYTirgigQZ3UXcng5HUNT9TCD U0MinYdoWiJ4/IFpHQVpVPT1TX7KmJYkXejuRsfCVVjaU0fhKTBl11XS89Ane7Kx/BCn /7c8mBhAyLV7WiEr7KPBa8Vln6nCLqB/42cGnL9JnGI6/zfhRl5clA077nc4noedKAb5 45sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732184849; x=1732789649; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9jxy8nHq7ZEXkys7bCB9OhjPu6tUBHKnBmqrURartuE=; b=J0ciW+xJh70UHzYEX+yPbT2uVa3VO3r89wj0BtRIp/0CvG8IakELkQ8gj8by1lTP5w KAB7BceSTsFdXqkRSePFs1sD9cb41CtVn9UXYCP6dYZ6DZiIHMXH9jT0E1OYIA+QfLr0 XRw8/6b8uhicGHD2nInWngyfBICR7N2F7UnF+jGe6sH0pm+0+F7kzs4euMXDKvqJ2JC4 ow1eim18RVKGcRGpdT3ls7eVjBIR3IIQkE9sgNhepg5r0rWfYApPmNejDlqSw8HamqiN qDblwmYcelWHPvmpRqjX4gV6Hi6DBy1IhmBdY6K2o0sa6iRkkBL0bVOaljvVj3oLidq2 P0FQ== X-Gm-Message-State: AOJu0Yx8YLJORj6KzTueI4KLv33pztRiF7VVCOBC1YLvUtSBwraCDlav ngPk4/r9U5OaajnPnD1rM4DnHLkjVLuAGEGB7BlNLMMsfGPRR22Fz1mt+NVB X-Google-Smtp-Source: AGHT+IF7JYwf0vN4IGOn+C8Nu+p41stRTwEDk/V4KgUZILO7rN+tW3PKmNYt1gDUQn8FydOVy8GSAw== X-Received: by 2002:a7b:cde1:0:b0:431:24c3:dbaa with SMTP id 5b1f17b1804b1-433c546cbc2mr36740055e9.2.1732184849113; Thu, 21 Nov 2024 02:27:29 -0800 (PST) Received: from able.fritz.box ([2a00:e180:1564:d000:2ed:2997:a6e4:61cb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-433b45d17ccsm52533165e9.6.2024.11.21.02.27.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Nov 2024 02:27:28 -0800 (PST) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: zack.rusin@broadcom.com Cc: dri-devel@lists.freedesktop.org Subject: [PATCH 1/4] drm/vmwgfx: start to phase out ttm_exec v2 Date: Thu, 21 Nov 2024 11:27:22 +0100 Message-Id: <20241121102725.4195-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241121102725.4195-1-christian.koenig@amd.com> References: <20241121102725.4195-1-christian.koenig@amd.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 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" Start switching over vmwgfx to drm_exec as well. Replacing some unnecessary complex calls with just just single BO dma_resv locking. No intentional functional change, but only compile tested for now. v2: fix kerneldoc issues Signed-off-by: Christian König --- drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 53 ++++++++---------------- 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c index a73af8a355fb..0002b2f9a6c9 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c @@ -510,14 +510,14 @@ void vmw_resource_unreserve(struct vmw_resource *res, * @res: The resource for which to allocate a backup buffer. * @interruptible: Whether any sleeps during allocation should be * performed while interruptible. - * @val_buf: On successful return contains data about the - * reserved and validated backup buffer. + * @bo: On successful return contains the reserved and validated + * backup buffer. */ static int vmw_resource_check_buffer(struct ww_acquire_ctx *ticket, struct vmw_resource *res, bool interruptible, - struct ttm_validate_buffer *val_buf) + struct ttm_buffer_object **bo) { struct ttm_operation_ctx ctx = { true, false }; struct list_head val_list; @@ -532,10 +532,12 @@ vmw_resource_check_buffer(struct ww_acquire_ctx *ticket, INIT_LIST_HEAD(&val_list); ttm_bo_get(&res->guest_memory_bo->tbo); - val_buf->bo = &res->guest_memory_bo->tbo; - val_buf->num_shared = 0; - list_add_tail(&val_buf->head, &val_list); - ret = ttm_eu_reserve_buffers(ticket, &val_list, interruptible, NULL); + + *bo = &res->guest_memory_bo->tbo; + if (ticket) + ww_acquire_init(ticket, &reservation_ww_class); + + ret = ttm_bo_reserve(*bo, interruptible, (ticket == NULL), ticket); if (unlikely(ret != 0)) goto out_no_reserve; @@ -555,10 +557,11 @@ vmw_resource_check_buffer(struct ww_acquire_ctx *ticket, return 0; out_no_validate: - ttm_eu_backoff_reservation(ticket, &val_list); + dma_resv_unlock((*bo)->base.resv); + if (ticket) + ww_acquire_fini(ticket); out_no_reserve: - ttm_bo_put(val_buf->bo); - val_buf->bo = NULL; + ttm_bo_put(*bo); if (guest_memory_dirty) vmw_user_bo_unref(&res->guest_memory_bo); @@ -600,29 +603,6 @@ int vmw_resource_reserve(struct vmw_resource *res, bool interruptible, return 0; } -/** - * vmw_resource_backoff_reservation - Unreserve and unreference a - * guest memory buffer - *. - * @ticket: The ww acquire ctx used for reservation. - * @val_buf: Guest memory buffer information. - */ -static void -vmw_resource_backoff_reservation(struct ww_acquire_ctx *ticket, - struct ttm_validate_buffer *val_buf) -{ - struct list_head val_list; - - if (likely(val_buf->bo == NULL)) - return; - - INIT_LIST_HEAD(&val_list); - list_add_tail(&val_buf->head, &val_list); - ttm_eu_backoff_reservation(ticket, &val_list); - ttm_bo_put(val_buf->bo); - val_buf->bo = NULL; -} - /** * vmw_resource_do_evict - Evict a resource, and transfer its data * to a backup buffer. @@ -642,7 +622,7 @@ static int vmw_resource_do_evict(struct ww_acquire_ctx *ticket, val_buf.bo = NULL; val_buf.num_shared = 0; - ret = vmw_resource_check_buffer(ticket, res, interruptible, &val_buf); + ret = vmw_resource_check_buffer(ticket, res, interruptible, &val_buf.bo); if (unlikely(ret != 0)) return ret; @@ -657,7 +637,10 @@ static int vmw_resource_do_evict(struct ww_acquire_ctx *ticket, res->guest_memory_dirty = true; res->res_dirty = false; out_no_unbind: - vmw_resource_backoff_reservation(ticket, &val_buf); + dma_resv_unlock(val_buf.bo->base.resv); + if (ticket) + ww_acquire_fini(ticket); + ttm_bo_put(val_buf.bo); return ret; } From patchwork Thu Nov 21 10:27:23 2024 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: 13881833 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9B2DFD711CA for ; Thu, 21 Nov 2024 10:27:35 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5136310E1CB; Thu, 21 Nov 2024 10:27:33 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="eIvKTCam"; dkim-atps=neutral Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id A774410E1CB for ; Thu, 21 Nov 2024 10:27:31 +0000 (UTC) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4315eeb2601so8279735e9.2 for ; Thu, 21 Nov 2024 02:27:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1732184850; x=1732789650; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EZ/cIfolAF1OSxz3JXwuu00xR6Yoj7sjsdHRk9DJb3o=; b=eIvKTCamNX7CmDngQPeioQjpR8eNIXawt2nsS3eJQmNYwizFu0syvXrcqG8/J05bvk PJWZeb5eRyno2qEqy54YHyZeIFhWQKHkvuIRhwzUdPsuPJPlCZ8zyvVe9G2w0wk8l8Mt qNt7JUQNOHrgP4GlOS4BUCbRO9YNfDkCXJsdynpDIHJ0oORW8MzmX0baMnx6uPUcMDZi okUZhuNfmnyNk4F3tfWinBohMIxQi1xUsimTYpnGdqRCjB94bY3rcGQd56ep50930V2x Gpqrf31O5mmy0CAV72L69pg2yiBzV7nwRbkxbeWpfS30iphNTc/7RzTHZSYDbwcnA5/B PDAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732184850; x=1732789650; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EZ/cIfolAF1OSxz3JXwuu00xR6Yoj7sjsdHRk9DJb3o=; b=KhV2UYZrBkJaWu+9QzJPUnoKKCwFRuGjZs4t4ovZD9sNkseU8qQHqzxd1WJ6nnw8ew w2KJm4fMJkSe+S8t8LJ2src9PoLLHQH7z105PHKLMMmhzp8vXJKx4mli50NAuQN8ACxE RhyCCn7lKqnE24hN3bJ5B8reUpy2irW4unUKh/dI+SAg2cO02KSJa+7J1mmhdvG7EJdF vG5p1kO89w4G/svhE4dw2Zj/c4ZbpoYDBkomgM3BIkeqSqvULZsfbdKXoTH0h2z3clYi qZAjnBqK9J2DGetJw1svr5vzEdWTngH9ushJIjqFqMwrKLgxSsAqH2gv2yDvoOnXAmIw ss1g== X-Gm-Message-State: AOJu0Yytih6fazIisYIGOWyd0z1htVD/jfBPmbPm8LcDD5UXKqMPZwkA WCB7xPKehKGcqpKPS+T/ejKkca7saAL0KFMDSwOzCDop/IfHtW17WTzY8iZGC5k= X-Google-Smtp-Source: AGHT+IGD3nzLwMr4cVx4DHQo4Xsm8HnwkLrEAQP35W4RGmoJtKXdugqcdYJ/PeLix/l1m65NmLQ8SQ== X-Received: by 2002:a05:600c:5013:b0:431:54f3:11ab with SMTP id 5b1f17b1804b1-4334f01e2a7mr57152485e9.33.1732184849816; Thu, 21 Nov 2024 02:27:29 -0800 (PST) Received: from able.fritz.box ([2a00:e180:1564:d000:2ed:2997:a6e4:61cb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-433b45d17ccsm52533165e9.6.2024.11.21.02.27.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Nov 2024 02:27:29 -0800 (PST) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: zack.rusin@broadcom.com Cc: dri-devel@lists.freedesktop.org Subject: [PATCH 2/4] drm/vmwgfx: use the new drm_exec object v2 Date: Thu, 21 Nov 2024 11:27:23 +0100 Message-Id: <20241121102725.4195-3-christian.koenig@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241121102725.4195-1-christian.koenig@amd.com> References: <20241121102725.4195-1-christian.koenig@amd.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 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" Basically just switching over to the new infrastructure like we did for other drivers as well. No intentional functional change, but only compile tested. v2: fix kerneldoc issues Signed-off-by: Christian König --- drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | 57 +++++++++++++++++++++- drivers/gpu/drm/vmwgfx/vmwgfx_validation.h | 41 ++-------------- 2 files changed, 60 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c index e7625b3f71e0..fdcc45cd4f57 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c @@ -817,6 +817,60 @@ int vmw_validation_preload_res(struct vmw_validation_context *ctx, return 0; } +/** + * vmw_validation_bo_reserve - Reserve buffer objects registered with a + * validation context + * @ctx: The validation context + * @intr: Perform waits interruptible + * + * Return: Zero on success, -ERESTARTSYS when interrupted, negative error + * code on failure + */ +int vmw_validation_bo_reserve(struct vmw_validation_context *ctx, bool intr) +{ + struct vmw_validation_bo_node *entry; + int ret; + + drm_exec_init(&ctx->exec, intr ? DRM_EXEC_INTERRUPTIBLE_WAIT : 0, 0); + drm_exec_until_all_locked(&ctx->exec) { + list_for_each_entry(entry, &ctx->bo_list, base.head) { + ret = drm_exec_prepare_obj(&ctx->exec, + &entry->base.bo->base, 1); + drm_exec_retry_on_contention(&ctx->exec); + if (ret) + goto error; + } + } + return 0; + +error: + drm_exec_fini(&ctx->exec); + return ret; +} + +/** + * vmw_validation_bo_fence - Unreserve and fence buffer objects registered + * with a validation context + * @ctx: The validation context + * @fence: The fence to add + * + * This function unreserves the buffer objects previously reserved using + * vmw_validation_bo_reserve, and fences them with a fence object. + */ +void vmw_validation_bo_fence(struct vmw_validation_context *ctx, + struct vmw_fence_obj *fence) +{ + struct vmw_validation_bo_node *entry; + + list_for_each_entry(entry, &ctx->bo_list, base.head) { + dma_resv_add_fence(entry->base.bo->base.resv, &fence->base, + DMA_RESV_USAGE_READ); + } + drm_exec_fini(&ctx->exec); +} + + + /** * vmw_validation_bo_backoff - Unreserve buffer objects registered with a * validation context @@ -842,6 +896,5 @@ void vmw_validation_bo_backoff(struct vmw_validation_context *ctx) vmw_bo_dirty_release(vbo); } } - - ttm_eu_backoff_reservation(&ctx->ticket, &ctx->bo_list); + drm_exec_fini(&ctx->exec); } diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h index 353d837907d8..55a7d8b68d5c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h @@ -31,8 +31,7 @@ #include #include #include - -#include +#include #define VMW_RES_DIRTY_NONE 0 #define VMW_RES_DIRTY_SET BIT(0) @@ -59,7 +58,7 @@ struct vmw_validation_context { struct list_head resource_ctx_list; struct list_head bo_list; struct list_head page_list; - struct ww_acquire_ctx ticket; + struct drm_exec exec; struct mutex *res_mutex; unsigned int merge_dups; unsigned int mem_size_left; @@ -106,39 +105,6 @@ vmw_validation_has_bos(struct vmw_validation_context *ctx) return !list_empty(&ctx->bo_list); } -/** - * vmw_validation_bo_reserve - Reserve buffer objects registered with a - * validation context - * @ctx: The validation context - * @intr: Perform waits interruptible - * - * Return: Zero on success, -ERESTARTSYS when interrupted, negative error - * code on failure - */ -static inline int -vmw_validation_bo_reserve(struct vmw_validation_context *ctx, - bool intr) -{ - return ttm_eu_reserve_buffers(&ctx->ticket, &ctx->bo_list, intr, - NULL); -} - -/** - * vmw_validation_bo_fence - Unreserve and fence buffer objects registered - * with a validation context - * @ctx: The validation context - * - * This function unreserves the buffer objects previously reserved using - * vmw_validation_bo_reserve, and fences them with a fence object. - */ -static inline void -vmw_validation_bo_fence(struct vmw_validation_context *ctx, - struct vmw_fence_obj *fence) -{ - ttm_eu_fence_buffer_objects(&ctx->ticket, &ctx->bo_list, - (void *) fence); -} - /** * vmw_validation_align - Align a validation memory allocation * @val: The size to be aligned @@ -185,6 +151,9 @@ int vmw_validation_preload_res(struct vmw_validation_context *ctx, unsigned int size); void vmw_validation_res_set_dirty(struct vmw_validation_context *ctx, void *val_private, u32 dirty); +int vmw_validation_bo_reserve(struct vmw_validation_context *ctx, bool intr); +void vmw_validation_bo_fence(struct vmw_validation_context *ctx, + struct vmw_fence_obj *fence); void vmw_validation_bo_backoff(struct vmw_validation_context *ctx); #endif From patchwork Thu Nov 21 10:27:24 2024 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: 13881834 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4D4EFD743C9 for ; Thu, 21 Nov 2024 10:27:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 45DE210E3EF; Thu, 21 Nov 2024 10:27:34 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="gaWoy+d8"; dkim-atps=neutral Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7928C10E1CB for ; Thu, 21 Nov 2024 10:27:32 +0000 (UTC) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43161e7bb25so5833025e9.2 for ; Thu, 21 Nov 2024 02:27:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1732184851; x=1732789651; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PYMtQG0K1uLGcFRjKmLUyHDkhjP7h2itooaM3D64bWI=; b=gaWoy+d8JL3OZ83cCLnyZYi9LbV5EU0l1Yonfa25Pf7X1T96k6oesxGsQJIWGo1q1p wiB5coWvSgIDnsD7MjF71MSJjXOA50xQ3Gvh0H1SruHvO7U5VL/wfcSeOfAvL74XQ/OD vz51hZpu+mOOkeAoAB0K6OJ0htoI9zV8Sx36ipRyLLIW4bj0tPuoDkMnuKZJtQx4FNFK H3Hnc6duMi0vAFWiY01FF4Jk2Gn06E0FC7TQGxz8ryGsrY/xrc/rz/tAsHKTRHvvYnhf 4bFJcSeWGbBLIGiXfS00XtbOpKy4CcGUYG/bNh6qOwtpn/dtzM97SjyDzxpdABBujrFw DqJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732184851; x=1732789651; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PYMtQG0K1uLGcFRjKmLUyHDkhjP7h2itooaM3D64bWI=; b=KlCAfX6nuHU/bM6C+yFOdrEwLMiA7cRiiLP8cZQ47i/x3RjXA2V9iMJjjVpIe8rptQ RIvv75TxLCXAPRmwP2EMyZ21Z5qM0umGqLbuXK5uwksGyiPwlrGmop4Tbf22NsQsJZkP UVca4s7pWh1Xtsl+vE+rGdV1rEqs0FRSf2WgS/yu5lyB77ijYpcbuoNfptSxUAtl2bb1 z7tLoYozl1IXJjBS9VpUqua2UZJWfZ9++U3rrcL4Bh1jNezT8CP0mP/IA+fJhEZF5FfH hOySUWCmNfiiKwCzVLtFTwfAPytpJAKTLmzZhjfSfBeF5/M4garn/qLEw6UFDQJ1piTQ VwJQ== X-Gm-Message-State: AOJu0Yzul6sJssHRqZSX5vB/48xeJJ/Mtb6q/c4CNM83PCokuFculTaW r2JCV7M4BTmG7pB7BcMK7+Rx5xymCaf4QXg9NyzsYMy8x1/8LS/dFVwU8+9mtjw= X-Google-Smtp-Source: AGHT+IHCW9U59/QsOmVZhyrINz3WffBvVWXwxJOw7T9S63c2of35Oly3dtiUiZtIAjuTPbGh8fakcQ== X-Received: by 2002:a05:600c:4685:b0:42c:b80e:5e50 with SMTP id 5b1f17b1804b1-433489054a7mr59363895e9.0.1732184850581; Thu, 21 Nov 2024 02:27:30 -0800 (PST) Received: from able.fritz.box ([2a00:e180:1564:d000:2ed:2997:a6e4:61cb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-433b45d17ccsm52533165e9.6.2024.11.21.02.27.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Nov 2024 02:27:30 -0800 (PST) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: zack.rusin@broadcom.com Cc: dri-devel@lists.freedesktop.org Subject: [PATCH 3/4] drm/vmwgfx: replace ttm_validate_buffer with separate struct Date: Thu, 21 Nov 2024 11:27:24 +0100 Message-Id: <20241121102725.4195-4-christian.koenig@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241121102725.4195-1-christian.koenig@amd.com> References: <20241121102725.4195-1-christian.koenig@amd.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 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" Finish remove the ttm_eu depoendency. No functional difference. Signed-off-by: Christian König --- drivers/gpu/drm/vmwgfx/vmwgfx_context.c | 16 ++++++------- drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c | 12 +++++----- drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 1 - drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 14 ++++------- drivers/gpu/drm/vmwgfx/vmwgfx_resource_priv.h | 4 ++-- drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 16 ++++++------- drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c | 8 +++---- drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 24 +++++++++---------- drivers/gpu/drm/vmwgfx/vmwgfx_validation.c | 5 ++-- drivers/gpu/drm/vmwgfx/vmwgfx_validation.h | 10 ++++++++ 10 files changed, 57 insertions(+), 53 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c index ecc503e42790..c496413e7c86 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c @@ -48,17 +48,17 @@ vmw_user_context_base_to_res(struct ttm_base_object *base); static int vmw_gb_context_create(struct vmw_resource *res); static int vmw_gb_context_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_gb_context_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_gb_context_destroy(struct vmw_resource *res); static int vmw_dx_context_create(struct vmw_resource *res); static int vmw_dx_context_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_dx_context_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_dx_context_destroy(struct vmw_resource *res); static const struct vmw_user_resource_conv user_context_conv = { @@ -339,7 +339,7 @@ static int vmw_gb_context_create(struct vmw_resource *res) } static int vmw_gb_context_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct { @@ -367,7 +367,7 @@ static int vmw_gb_context_bind(struct vmw_resource *res, static int vmw_gb_context_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct ttm_buffer_object *bo = val_buf->bo; @@ -506,7 +506,7 @@ static int vmw_dx_context_create(struct vmw_resource *res) } static int vmw_dx_context_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct { @@ -576,7 +576,7 @@ void vmw_dx_context_scrub_cotables(struct vmw_resource *ctx, static int vmw_dx_context_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct ttm_buffer_object *bo = val_buf->bo; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c index a7c07692262b..2714238e21da 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c @@ -122,10 +122,10 @@ const SVGACOTableType vmw_cotable_scrub_order[] = { }; static int vmw_cotable_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_cotable_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_cotable_create(struct vmw_resource *res); static int vmw_cotable_destroy(struct vmw_resource *res); @@ -214,14 +214,14 @@ static int vmw_cotable_unscrub(struct vmw_resource *res) * vmw_cotable_bind - Undo a cotable unscrub operation * * @res: Pointer to the cotable resource - * @val_buf: Pointer to a struct ttm_validate_buffer prepared by the caller + * @val_buf: Pointer to a struct vmw_validate_buffer prepared by the caller * for convenience / fencing. * * This function issues commands to (re)bind the cotable to * its backing mob, which needs to be validated and reserved at this point. */ static int vmw_cotable_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { /* * The create() callback may have changed @res->backup without @@ -313,14 +313,14 @@ int vmw_cotable_scrub(struct vmw_resource *res, bool readback) * * @res: Pointer to the cotable resource. * @readback: Whether to read back cotable data to the backup buffer. - * @val_buf: Pointer to a struct ttm_validate_buffer prepared by the caller + * @val_buf: Pointer to a struct vmw_validate_buffer prepared by the caller * for convenience / fencing. * * Unbinds the cotable from the device and fences the backup buffer. */ static int vmw_cotable_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_cotable *vcotbl = vmw_cotable(res); struct vmw_private *dev_priv = res->dev_priv; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index b21831ef214a..0542e24a80e0 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -38,7 +38,6 @@ #include #include -#include #include #include #include diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c index 0002b2f9a6c9..6816607a1ce6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c @@ -130,10 +130,9 @@ static void vmw_resource_release(struct kref *kref) BUG_ON(ret); if (vmw_resource_mob_attached(res) && res->func->unbind != NULL) { - struct ttm_validate_buffer val_buf; + struct vmw_validate_buffer val_buf; val_buf.bo = bo; - val_buf.num_shared = 0; res->func->unbind(res, false, &val_buf); } res->guest_memory_size = false; @@ -370,7 +369,7 @@ static int vmw_resource_buf_alloc(struct vmw_resource *res, * should be retried once resources have been freed up. */ static int vmw_resource_do_validate(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf, + struct vmw_validate_buffer *val_buf, bool dirtying) { int ret = 0; @@ -614,14 +613,13 @@ int vmw_resource_reserve(struct vmw_resource *res, bool interruptible, static int vmw_resource_do_evict(struct ww_acquire_ctx *ticket, struct vmw_resource *res, bool interruptible) { - struct ttm_validate_buffer val_buf; + struct vmw_validate_buffer val_buf; const struct vmw_res_func *func = res->func; int ret; BUG_ON(!func->may_evict); val_buf.bo = NULL; - val_buf.num_shared = 0; ret = vmw_resource_check_buffer(ticket, res, interruptible, &val_buf.bo); if (unlikely(ret != 0)) return ret; @@ -668,14 +666,13 @@ int vmw_resource_validate(struct vmw_resource *res, bool intr, struct vmw_resource *evict_res; struct vmw_private *dev_priv = res->dev_priv; struct list_head *lru_list = &dev_priv->res_lru[res->func->res_type]; - struct ttm_validate_buffer val_buf; + struct vmw_validate_buffer val_buf; unsigned err_count = 0; if (!res->func->create) return 0; val_buf.bo = NULL; - val_buf.num_shared = 0; if (res->guest_memory_bo) val_buf.bo = &res->guest_memory_bo->tbo; do { @@ -742,9 +739,8 @@ int vmw_resource_validate(struct vmw_resource *res, bool intr, */ void vmw_resource_unbind_list(struct vmw_bo *vbo) { - struct ttm_validate_buffer val_buf = { + struct vmw_validate_buffer val_buf = { .bo = &vbo->tbo, - .num_shared = 0 }; dma_resv_assert_held(vbo->tbo.base.resv); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource_priv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_resource_priv.h index aa7cbd396bea..ac2ea9d688c1 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource_priv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource_priv.h @@ -93,10 +93,10 @@ struct vmw_res_func { int (*create) (struct vmw_resource *res); int (*destroy) (struct vmw_resource *res); int (*bind) (struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); int (*unbind) (struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); void (*commit_notify)(struct vmw_resource *res, enum vmw_cmdbuf_res_state state); int (*dirty_alloc)(struct vmw_resource *res); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c index a01ca3226d0a..b1eea51b2aba 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c @@ -60,18 +60,18 @@ vmw_user_shader_base_to_res(struct ttm_base_object *base); static int vmw_gb_shader_create(struct vmw_resource *res); static int vmw_gb_shader_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_gb_shader_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_gb_shader_destroy(struct vmw_resource *res); static int vmw_dx_shader_create(struct vmw_resource *res); static int vmw_dx_shader_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_dx_shader_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static void vmw_dx_shader_commit_notify(struct vmw_resource *res, enum vmw_cmdbuf_res_state state); static bool vmw_shader_id_ok(u32 user_key, SVGA3dShaderType shader_type); @@ -243,7 +243,7 @@ static int vmw_gb_shader_create(struct vmw_resource *res) } static int vmw_gb_shader_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct { @@ -271,7 +271,7 @@ static int vmw_gb_shader_bind(struct vmw_resource *res, static int vmw_gb_shader_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct { @@ -443,7 +443,7 @@ static int vmw_dx_shader_create(struct vmw_resource *res) * */ static int vmw_dx_shader_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct ttm_buffer_object *bo = val_buf->bo; @@ -505,7 +505,7 @@ static int vmw_dx_shader_scrub(struct vmw_resource *res) */ static int vmw_dx_shader_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct vmw_fence_obj *fence; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c b/drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c index edcc40659038..4d6dcf585f58 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_streamoutput.c @@ -55,9 +55,9 @@ struct vmw_dx_streamoutput { static int vmw_dx_streamoutput_create(struct vmw_resource *res); static int vmw_dx_streamoutput_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_dx_streamoutput_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static void vmw_dx_streamoutput_commit_notify(struct vmw_resource *res, enum vmw_cmdbuf_res_state state); @@ -136,7 +136,7 @@ static int vmw_dx_streamoutput_create(struct vmw_resource *res) } static int vmw_dx_streamoutput_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct ttm_buffer_object *bo = val_buf->bo; @@ -191,7 +191,7 @@ static int vmw_dx_streamoutput_scrub(struct vmw_resource *res) } static int vmw_dx_streamoutput_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct vmw_fence_obj *fence; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c index 5721c74da3e0..f16f0d85fe2c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c @@ -81,18 +81,18 @@ static void vmw_user_surface_free(struct vmw_resource *res); static struct vmw_resource * vmw_user_surface_base_to_res(struct ttm_base_object *base); static int vmw_legacy_srf_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_legacy_srf_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_legacy_srf_create(struct vmw_resource *res); static int vmw_legacy_srf_destroy(struct vmw_resource *res); static int vmw_gb_surface_create(struct vmw_resource *res); static int vmw_gb_surface_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_gb_surface_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf); + struct vmw_validate_buffer *val_buf); static int vmw_gb_surface_destroy(struct vmw_resource *res); static int vmw_gb_surface_define_internal(struct drm_device *dev, @@ -461,7 +461,7 @@ static int vmw_legacy_srf_create(struct vmw_resource *res) * * @res: Pointer to a struct vmw_res embedded in a struct * vmw_surface. - * @val_buf: Pointer to a struct ttm_validate_buffer containing + * @val_buf: Pointer to a struct vmw_validate_buffer containing * information about the backup buffer. * @bind: Boolean wether to DMA to the surface. * @@ -473,7 +473,7 @@ static int vmw_legacy_srf_create(struct vmw_resource *res) * will also be returned reserved iff @bind is true. */ static int vmw_legacy_srf_dma(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf, + struct vmw_validate_buffer *val_buf, bool bind) { SVGAGuestPtr ptr; @@ -515,14 +515,14 @@ static int vmw_legacy_srf_dma(struct vmw_resource *res, * * @res: Pointer to a struct vmw_res embedded in a struct * vmw_surface. - * @val_buf: Pointer to a struct ttm_validate_buffer containing + * @val_buf: Pointer to a struct vmw_validate_buffer containing * information about the backup buffer. * * This function will copy backup data to the surface if the * backup buffer is dirty. */ static int vmw_legacy_srf_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { if (!res->guest_memory_dirty) return 0; @@ -538,14 +538,14 @@ static int vmw_legacy_srf_bind(struct vmw_resource *res, * @res: Pointer to a struct vmw_res embedded in a struct * vmw_surface. * @readback: Readback - only true if dirty - * @val_buf: Pointer to a struct ttm_validate_buffer containing + * @val_buf: Pointer to a struct vmw_validate_buffer containing * information about the backup buffer. * * This function will copy backup data from the surface. */ static int vmw_legacy_srf_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { if (unlikely(readback)) return vmw_legacy_srf_dma(res, val_buf, false); @@ -1285,7 +1285,7 @@ static int vmw_gb_surface_create(struct vmw_resource *res) static int vmw_gb_surface_bind(struct vmw_resource *res, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct { @@ -1331,7 +1331,7 @@ static int vmw_gb_surface_bind(struct vmw_resource *res, static int vmw_gb_surface_unbind(struct vmw_resource *res, bool readback, - struct ttm_validate_buffer *val_buf) + struct vmw_validate_buffer *val_buf) { struct vmw_private *dev_priv = res->dev_priv; struct ttm_buffer_object *bo = val_buf->bo; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c index fdcc45cd4f57..f4c0335657dd 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c @@ -43,7 +43,7 @@ * large numbers and space conservation is desired. */ struct vmw_validation_bo_node { - struct ttm_validate_buffer base; + struct vmw_validate_buffer base; struct vmwgfx_hash_item hash; unsigned int coherent_count; }; @@ -250,7 +250,7 @@ int vmw_validation_add_bo(struct vmw_validation_context *ctx, bo_node = vmw_validation_find_bo_dup(ctx, vbo); if (!bo_node) { - struct ttm_validate_buffer *val_buf; + struct vmw_validate_buffer *val_buf; bo_node = vmw_validation_mem_alloc(ctx, sizeof(*bo_node)); if (!bo_node) @@ -265,7 +265,6 @@ int vmw_validation_add_bo(struct vmw_validation_context *ctx, val_buf->bo = ttm_bo_get_unless_zero(&vbo->tbo); if (!val_buf->bo) return -ESRCH; - val_buf->num_shared = 0; list_add_tail(&val_buf->head, &ctx->bo_list); } diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h index 55a7d8b68d5c..f68cc1fd1eb4 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.h @@ -65,6 +65,16 @@ struct vmw_validation_context { u8 *page_address; }; +/** + * struct vmw_validate_buffer - Linked list of TTM BOs for validation + * @head: linked list node + * @bo: The TTM BO + */ +struct vmw_validate_buffer { + struct list_head head; + struct ttm_buffer_object *bo; +}; + struct vmw_bo; struct vmw_resource; struct vmw_fence_obj; From patchwork Thu Nov 21 10:27:25 2024 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: 13881836 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1B7FBD743F2 for ; Thu, 21 Nov 2024 10:27:40 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6BE6810E8D5; Thu, 21 Nov 2024 10:27:39 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WjaRVcyD"; dkim-atps=neutral Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5114410E8D0 for ; Thu, 21 Nov 2024 10:27:34 +0000 (UTC) Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-431ac30d379so6254745e9.1 for ; Thu, 21 Nov 2024 02:27:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1732184852; x=1732789652; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ETDe7un/JWIbuM3P/iFQm3j6qLUZiVYIWE/wIZIF+UQ=; b=WjaRVcyDDg0r3z2/4J/XmTuJZ/Znyyv626SmPUgoRDVPkO7LvRBl7Ci4G4s7+ncMAZ zwjvPjcd58vO1gZf3Y/6WfIMWTRG0QVlk1Go9JMsNdKRChZJoeDyRc0Xl3cvFYd7aQu9 FXlNRSzrDQBRjtrCRR7RvwqtFhN6prvM5txQGWkSZXuP0OrMHS49tc5AhjK9tm5uWOsp ay50pVIX5f3fED34N/fHI4C+SiVp3E3XVionmDbi/j5PstBuXpRWVG8cKxVut6HIlBei RSbLhJshybzcxEBcwH91y70yEQpy2slHhL5UrApSfuhWPAmrZlaIJc6Xm7yHuGuMD/Eo 7GLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732184852; x=1732789652; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ETDe7un/JWIbuM3P/iFQm3j6qLUZiVYIWE/wIZIF+UQ=; b=EufbDtyxdZNG9SILQeDqT2kZx2LX+ks21VjpJPmpYjLP9+o7h6Stf8LHBZjeGrQy8G Q6PHREsLwl5zKl+b18LxDv1pyvTW2+bmRzy1p0QzboZO5b4bqPxh0AkaT1PzcHbBc0a5 pg7ihzWExtHlwpi+2qsEljECYiOti70FUO/tUIcNtCfZWKIKvri9CpchAxh6z3RZK6tL AgiLnk3N954EjXkF+5vePRL9uEtQskv8nKBv+ruaWAxnkSC0wr6ywWg7T6hcPG3aATGt irHkxnyb0EuDfVv/GaCKh9PIkbKjs6aEWPSr+rVGAugV8pMRuwRqvOi0iQ1b30qv9yh7 dN3w== X-Gm-Message-State: AOJu0Ywi2j8ZzCG46pz8l5M0jK6G/Ne/JxRuMdpntJxcHgVbv+rhCdG7 AvkFiEK4LV+6nn6qTMUIgnXT6T3KRCxQ9eRxkCSxGTN8kR7Q6yK6z6Dh+5WKTfY= X-Gm-Gg: ASbGnctTqbXsSYZm0+bK1c/fWUxqFFqRJk2o8UJUqcDuxDYdvfqNQHYB2H6vLoty3K2 Raelr9qnBUPqr8jcPkQg7o438hUBhLyfCzQkln8gwbQ+icO/ZOECvfzytTycUHeO3yt+xpL8MPm FvY7UpqKUNkLq5BpaZo6HVyVAcd7EcXH9mI0G8cf24sBn/JYfENy9aBJjN2CLqTH7LR2/XS5CTN dKN2hgCQZpLbaTPtjX6q1WJ+NktLBXZniHUaqvDsWXuRkPLn0HV7k380wdPeg== X-Google-Smtp-Source: AGHT+IGXA/+mcIJaoEwFfDHSfe2OCn7hM4js3SpD/iGDIhd9SdjZizJ/yu+8/GlaJXxHCZF4+LTyLw== X-Received: by 2002:a05:600c:444f:b0:42c:b4f2:7c30 with SMTP id 5b1f17b1804b1-4334f017137mr46609585e9.23.1732184852451; Thu, 21 Nov 2024 02:27:32 -0800 (PST) Received: from able.fritz.box ([2a00:e180:1564:d000:2ed:2997:a6e4:61cb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-433b45d17ccsm52533165e9.6.2024.11.21.02.27.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Nov 2024 02:27:32 -0800 (PST) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: zack.rusin@broadcom.com Cc: dri-devel@lists.freedesktop.org Subject: [PATCH 4/4] drm/ttm: remove ttm_execbug_util Date: Thu, 21 Nov 2024 11:27:25 +0100 Message-Id: <20241121102725.4195-5-christian.koenig@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241121102725.4195-1-christian.koenig@amd.com> References: <20241121102725.4195-1-christian.koenig@amd.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 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" Replaced by drm_exec and not used any more. Signed-off-by: Christian König --- drivers/gpu/drm/ttm/Makefile | 4 +- drivers/gpu/drm/ttm/ttm_execbuf_util.c | 161 ------------------------- include/drm/ttm/ttm_execbuf_util.h | 119 ------------------ 3 files changed, 2 insertions(+), 282 deletions(-) delete mode 100644 drivers/gpu/drm/ttm/ttm_execbuf_util.c delete mode 100644 include/drm/ttm/ttm_execbuf_util.h diff --git a/drivers/gpu/drm/ttm/Makefile b/drivers/gpu/drm/ttm/Makefile index dad298127226..25937e4ad91a 100644 --- a/drivers/gpu/drm/ttm/Makefile +++ b/drivers/gpu/drm/ttm/Makefile @@ -3,8 +3,8 @@ # Makefile for the drm device driver. This driver provides support for the ttm-y := ttm_tt.o ttm_bo.o ttm_bo_util.o ttm_bo_vm.o ttm_module.o \ - ttm_execbuf_util.o ttm_range_manager.o ttm_resource.o ttm_pool.o \ - ttm_device.o ttm_sys_manager.o + ttm_range_manager.o ttm_resource.o ttm_pool.o ttm_device.o \ + ttm_sys_manager.o ttm-$(CONFIG_AGP) += ttm_agp_backend.o obj-$(CONFIG_DRM_TTM) += ttm.o diff --git a/drivers/gpu/drm/ttm/ttm_execbuf_util.c b/drivers/gpu/drm/ttm/ttm_execbuf_util.c deleted file mode 100644 index f1c60fa80c2d..000000000000 --- a/drivers/gpu/drm/ttm/ttm_execbuf_util.c +++ /dev/null @@ -1,161 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 OR MIT */ -/************************************************************************** - * - * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - -#include -#include - -static void ttm_eu_backoff_reservation_reverse(struct list_head *list, - struct ttm_validate_buffer *entry) -{ - list_for_each_entry_continue_reverse(entry, list, head) { - struct ttm_buffer_object *bo = entry->bo; - - dma_resv_unlock(bo->base.resv); - } -} - -void ttm_eu_backoff_reservation(struct ww_acquire_ctx *ticket, - struct list_head *list) -{ - struct ttm_validate_buffer *entry; - - if (list_empty(list)) - return; - - list_for_each_entry(entry, list, head) { - struct ttm_buffer_object *bo = entry->bo; - - ttm_bo_move_to_lru_tail_unlocked(bo); - dma_resv_unlock(bo->base.resv); - } - - if (ticket) - ww_acquire_fini(ticket); -} -EXPORT_SYMBOL(ttm_eu_backoff_reservation); - -/* - * Reserve buffers for validation. - * - * If a buffer in the list is marked for CPU access, we back off and - * wait for that buffer to become free for GPU access. - * - * If a buffer is reserved for another validation, the validator with - * the highest validation sequence backs off and waits for that buffer - * to become unreserved. This prevents deadlocks when validating multiple - * buffers in different orders. - */ - -int ttm_eu_reserve_buffers(struct ww_acquire_ctx *ticket, - struct list_head *list, bool intr, - struct list_head *dups) -{ - struct ttm_validate_buffer *entry; - int ret; - - if (list_empty(list)) - return 0; - - if (ticket) - ww_acquire_init(ticket, &reservation_ww_class); - - list_for_each_entry(entry, list, head) { - struct ttm_buffer_object *bo = entry->bo; - unsigned int num_fences; - - ret = ttm_bo_reserve(bo, intr, (ticket == NULL), ticket); - if (ret == -EALREADY && dups) { - struct ttm_validate_buffer *safe = entry; - entry = list_prev_entry(entry, head); - list_del(&safe->head); - list_add(&safe->head, dups); - continue; - } - - num_fences = max(entry->num_shared, 1u); - if (!ret) { - ret = dma_resv_reserve_fences(bo->base.resv, - num_fences); - if (!ret) - continue; - } - - /* uh oh, we lost out, drop every reservation and try - * to only reserve this buffer, then start over if - * this succeeds. - */ - ttm_eu_backoff_reservation_reverse(list, entry); - - if (ret == -EDEADLK) { - ret = ttm_bo_reserve_slowpath(bo, intr, ticket); - } - - if (!ret) - ret = dma_resv_reserve_fences(bo->base.resv, - num_fences); - - if (unlikely(ret != 0)) { - if (ticket) { - ww_acquire_done(ticket); - ww_acquire_fini(ticket); - } - return ret; - } - - /* move this item to the front of the list, - * forces correct iteration of the loop without keeping track - */ - list_del(&entry->head); - list_add(&entry->head, list); - } - - return 0; -} -EXPORT_SYMBOL(ttm_eu_reserve_buffers); - -void ttm_eu_fence_buffer_objects(struct ww_acquire_ctx *ticket, - struct list_head *list, - struct dma_fence *fence) -{ - struct ttm_validate_buffer *entry; - - if (list_empty(list)) - return; - - list_for_each_entry(entry, list, head) { - struct ttm_buffer_object *bo = entry->bo; - - dma_resv_add_fence(bo->base.resv, fence, entry->num_shared ? - DMA_RESV_USAGE_READ : DMA_RESV_USAGE_WRITE); - ttm_bo_move_to_lru_tail_unlocked(bo); - dma_resv_unlock(bo->base.resv); - } - if (ticket) - ww_acquire_fini(ticket); -} -EXPORT_SYMBOL(ttm_eu_fence_buffer_objects); diff --git a/include/drm/ttm/ttm_execbuf_util.h b/include/drm/ttm/ttm_execbuf_util.h deleted file mode 100644 index fac1e3e57ebd..000000000000 --- a/include/drm/ttm/ttm_execbuf_util.h +++ /dev/null @@ -1,119 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE - * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ -/* - * Authors: Thomas Hellstrom - */ - -#ifndef _TTM_EXECBUF_UTIL_H_ -#define _TTM_EXECBUF_UTIL_H_ - -#include - -struct ww_acquire_ctx; -struct dma_fence; -struct ttm_buffer_object; - -/** - * struct ttm_validate_buffer - * - * @head: list head for thread-private list. - * @bo: refcounted buffer object pointer. - * @num_shared: How many shared fences we want to add. - */ - -struct ttm_validate_buffer { - struct list_head head; - struct ttm_buffer_object *bo; - unsigned int num_shared; -}; - -/** - * ttm_eu_backoff_reservation - * - * @ticket: ww_acquire_ctx from reserve call - * @list: thread private list of ttm_validate_buffer structs. - * - * Undoes all buffer validation reservations for bos pointed to by - * the list entries. - */ -void ttm_eu_backoff_reservation(struct ww_acquire_ctx *ticket, - struct list_head *list); - -/** - * ttm_eu_reserve_buffers - * - * @ticket: [out] ww_acquire_ctx filled in by call, or NULL if only - * non-blocking reserves should be tried. - * @list: thread private list of ttm_validate_buffer structs. - * @intr: should the wait be interruptible - * @dups: [out] optional list of duplicates. - * - * Tries to reserve bos pointed to by the list entries for validation. - * If the function returns 0, all buffers are marked as "unfenced", - * taken off the lru lists and are not synced for write CPU usage. - * - * If the function detects a deadlock due to multiple threads trying to - * reserve the same buffers in reverse order, all threads except one will - * back off and retry. This function may sleep while waiting for - * CPU write reservations to be cleared, and for other threads to - * unreserve their buffers. - * - * If intr is set to true, this function may return -ERESTARTSYS if the - * calling process receives a signal while waiting. In that case, no - * buffers on the list will be reserved upon return. - * - * If dups is non NULL all buffers already reserved by the current thread - * (e.g. duplicates) are added to this list, otherwise -EALREADY is returned - * on the first already reserved buffer and all buffers from the list are - * unreserved again. - * - * Buffers reserved by this function should be unreserved by - * a call to either ttm_eu_backoff_reservation() or - * ttm_eu_fence_buffer_objects() when command submission is complete or - * has failed. - */ -int ttm_eu_reserve_buffers(struct ww_acquire_ctx *ticket, - struct list_head *list, bool intr, - struct list_head *dups); - -/** - * ttm_eu_fence_buffer_objects - * - * @ticket: ww_acquire_ctx from reserve call - * @list: thread private list of ttm_validate_buffer structs. - * @fence: The new exclusive fence for the buffers. - * - * This function should be called when command submission is complete, and - * it will add a new sync object to bos pointed to by entries on @list. - * It also unreserves all buffers, putting them on lru lists. - * - */ -void ttm_eu_fence_buffer_objects(struct ww_acquire_ctx *ticket, - struct list_head *list, - struct dma_fence *fence); - -#endif