From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A41F37FF63 for ; Fri, 10 Jul 2026 19:08:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783710490; cv=none; b=nKYxEtIQ4YSW87HPyvgNnzQgKUFxGpJ1bhG0pZaYUBJocweOUX+t/LBRIJ/R9d0T3oFEasUNDhQiAkAK3K6d5C2hSXSt2p6S76mtBxrOdnDCov7AadOXnM8080Tz0rojWPKE2HNNXhlYxIGUYAcghuEmNr9ZdilmM28UpfzbjaY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783710490; c=relaxed/simple; bh=gl8aLmsLWiC8TksnxnLAbklXmFlyt0GUi64DyyjzI0s=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BsFFrwre6uoUPxxg5xAhzHEyggnMbB/TS0RSKXiggO0g9OFSjhcEJWdRswCIor3NjejqEtTyH631aspNXtzWvw+oUS/jtHw+rAoJ1J8hkYOCZnbnZ/B+LRr2NuzkP3lo2swucukhhCpEg/0c6t8LcUdjJUpsWV8ZCgY9orXqlR8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TN/Iehxb; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TN/Iehxb" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-493ec555a26so8585405e9.0 for ; Fri, 10 Jul 2026 12:08:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783710482; x=1784315282; darn=vger.kernel.org; h=content-transfer-encoding:reply-to:content-type:mime-version :references:in-reply-to:message-id:date:subject:to:from:from:to:cc :subject:date:message-id:reply-to:content-type; bh=HPmD3vMJoHO8CFqL7S7C4nD2ho35ackVcxiEqNgTWIk=; b=TN/IehxbV0PFmlqTkimrwJ66HxLJvMJAlf8Eu3rvOTyLGrVrjaTn9OS+yimcbXajpX 3gc8u/BoABXaoekzUDMLzO7LM/aw5/eaAwEqA9EhNSXzklomOuBrCmB7cMUMQkjzj0vz tNV2rdFGaHodO46bslH8iNZ4U9K/G5wj3dg8u5XgproE9JqreOg6saM8tIX186+rvgK7 /qjICMDgKW9O/MjioNgoebIHFMJ0kfqmwPOuLnPhxozkvWdChS+eBU86xsrs9d7Q+H4I ebOjkeNuC1GYT9uRds752PSKp1qckkG0pdXItjgitoX4uqBKaa6fTLeZrXAsIzGkkjj2 FixQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783710482; x=1784315282; h=content-transfer-encoding:reply-to:content-type:mime-version :references:in-reply-to:message-id:date:subject:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HPmD3vMJoHO8CFqL7S7C4nD2ho35ackVcxiEqNgTWIk=; b=jrCksjGVn7p3vhaUW2kb3a7SowQb+KaKiGv5SzNGpnqHvNHVQ7pV4/2Ln4anwZS4/B A06r8WESbgHTSm/cuabPANZu7Vnh6lCaou96gJFeVD3Rh5kFeIjxCwuKA6GDWBhkKjxH OViH1jIginjxZIPM/13QYT8BjsrhlgO9ydvysyoMOICIsgoaR7m/2WXSlLrtjRUIDuqv tFTLXt2CxXXA7qNF1op85aTXCgVYG4ilAPGMKJSM0O3Mt9fcGF6GkBtH6wEZdC0G4QYC sgCrp1/F/Rx+zQbr+TmiZeLCbx0htkVBGjiB5t4uI2LxJuTxNSYQA0p8RCfjGTYXuhDM 4dKw== X-Forwarded-Encrypted: i=1; AHgh+RpzCyXDNhIFRwMWinCTXxZUpPPbrMgaZugJzICRaeLLo1GBv1SoH0LHWzXlbkMDmRLoXm0CWfT93I7Jck8=@vger.kernel.org X-Gm-Message-State: AOJu0YzJQe+LF57d/t8ZnGbl4dzGvts62XZ1PQR3TOTh0UPgAn0REKF6 WxggpE1cQO4NegMfAqmimnTySTMvYrqZAOpVKgtHZL8Sok+M+vplnQob X-Gm-Gg: AfdE7clqsrWADxHYzcs9S43bfJ4FVfdQWfbWPR4osv8t+1TC7Id+prN11g4SUttw/We o6A53I/z3cQ13u1qfggNiIEjw2Z1MhknEOrZy88DGUoLOyBaeZGBLH1rBA4egkPGbkMEHaclNuV F3iO/2ljUKaWkgyDIXgt4lO7cs/QodanX2TjeyEUNb0UH0ArMQnGPrtNM23rvPhkdM/0ajS6eub x/l710qKjEt67G9IExfyralWGwd+tNiS7gsZhsTp5bfnuMk8ydECYPs6oYQi14FZ/4fVLwE0+rN LSJ1Kpf4gWEJfxNkp2/NA6FHWuBD7Vrab4zlRQ5nuzfdSN9wcW0ZVFO896A5gnWluyOmWQEFVyG jKK4CEYh2HbKnmJ+Zg9WhJL5MdTeCDtF9pbDF0Xi661BXd1kEQ88ekT33/FpiTHM9iqf+9xJ0VG RO2K3Y8W2wLr1AFlrzZoAUK97YNZeiffjEr8+f X-Received: by 2002:a05:600c:1f91:b0:493:e79e:daa6 with SMTP id 5b1f17b1804b1-493f8826e69mr975965e9.33.1783710481767; Fri, 10 Jul 2026 12:08:01 -0700 (PDT) Received: from able.fritz.box ([2a00:e180:154f:ec00:aa08:de24:db33:4496]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-493f567eadfsm55000755e9.6.2026.07.10.12.08.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 12:08:01 -0700 (PDT) From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" X-Google-Original-From: =?UTF-8?q?Christian=20K=C3=B6nig?= To: thomas.hellstrom@linux.intel.com, dakr@kernel.org, ecourtney@nvidia.com, simona@ffwll.ch, matthew.brost@intel.com, nat@pixelcluster.dev, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH 07/12] drm/ttm: use ttm_bo_lru_for_each_reserved_guarded in evict_all Date: Fri, 10 Jul 2026 20:52:47 +0200 Message-ID: <20260710190752.2355-8-christian.koenig@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260710190752.2355-1-christian.koenig@amd.com> References: <20260710190752.2355-1-christian.koenig@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Reply-To: christian.koenig@amd.com Content-Transfer-Encoding: 8bit Use the for_each loop to evict all BOs of an resource manager as well. Greately simplifying the handling and finally allows us to remove ttm_bo_evict_first(). Signed-off-by: Christian König --- drivers/gpu/drm/ttm/ttm_bo.c | 51 +----------------------------- drivers/gpu/drm/ttm/ttm_resource.c | 22 +++++++++---- include/drm/ttm/ttm_bo.h | 1 + 3 files changed, 17 insertions(+), 57 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index e28e11c06ef48..6af247dba53e5 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -355,8 +355,7 @@ static int ttm_bo_bounce_temp_buffer(struct ttm_buffer_object *bo, return 0; } -static int ttm_bo_evict(struct ttm_buffer_object *bo, - struct ttm_operation_ctx *ctx) +int ttm_bo_evict(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx) { struct ttm_resource *evict_mem; struct ttm_placement placement; @@ -441,54 +440,6 @@ bool ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, } EXPORT_SYMBOL(ttm_bo_eviction_valuable); -/** - * ttm_bo_evict_first() - Evict the first bo on the manager's LRU list. - * @bdev: The ttm device. - * @man: The manager whose bo to evict. - * @ctx: The TTM operation ctx governing the eviction. - * - * Return: 0 if successful or the resource disappeared. Negative error code on error. - */ -int ttm_bo_evict_first(struct ttm_device *bdev, struct ttm_resource_manager *man, - struct ttm_operation_ctx *ctx) -{ - struct ttm_resource_cursor cursor; - struct ttm_buffer_object *bo; - struct ttm_resource *res; - unsigned int mem_type; - int ret = 0; - - spin_lock(&bdev->lru_lock); - ttm_resource_cursor_init(&cursor, man); - res = ttm_resource_manager_first(&cursor); - ttm_resource_cursor_fini(&cursor); - if (!res) { - ret = -ENOENT; - goto out_no_ref; - } - bo = res->bo; - if (!ttm_bo_get_unless_zero(bo)) - goto out_no_ref; - mem_type = res->mem_type; - spin_unlock(&bdev->lru_lock); - ret = ttm_bo_reserve(bo, ctx->interruptible, ctx->no_wait_gpu, NULL); - if (ret) - goto out_no_lock; - if (!bo->resource || bo->resource->mem_type != mem_type) - goto out_bo_moved; - - ret = ttm_bo_evict(bo, ctx); -out_bo_moved: - dma_resv_unlock(bo->base.resv); -out_no_lock: - ttm_bo_put(bo); - return ret; - -out_no_ref: - spin_unlock(&bdev->lru_lock); - return ret; -} - /** * struct ttm_bo_evict_walk - Parameters for the evict walk. */ diff --git a/drivers/gpu/drm/ttm/ttm_resource.c b/drivers/gpu/drm/ttm/ttm_resource.c index 4a765b25472c3..e686fc2849d99 100644 --- a/drivers/gpu/drm/ttm/ttm_resource.c +++ b/drivers/gpu/drm/ttm/ttm_resource.c @@ -561,17 +561,25 @@ EXPORT_SYMBOL(ttm_resource_manager_init); int ttm_resource_manager_evict_all(struct ttm_device *bdev, struct ttm_resource_manager *man) { - struct ttm_operation_ctx ctx = { }; + struct ttm_bo_lru_cursor cursor; + struct ttm_operation_ctx ctx = { + .interruptible = false, + .no_wait_gpu = false, + }; + struct ttm_lru_walk_arg arg = { + .ctx = &ctx, + .trylock_only = true + }; + struct ttm_buffer_object *bo; struct dma_fence *fence; int ret, i; - do { - ret = ttm_bo_evict_first(bdev, man, &ctx); + ttm_bo_lru_for_each_reserved_guarded(&cursor, man, &arg, bo) { + ret = ttm_bo_evict(bo, &ctx); + if (ret) + return ret; cond_resched(); - } while (!ret); - - if (ret && ret != -ENOENT) - return ret; + } ret = 0; diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h index 33dfa61ba882a..026ab044b0202 100644 --- a/include/drm/ttm/ttm_bo.h +++ b/include/drm/ttm/ttm_bo.h @@ -404,6 +404,7 @@ int ttm_bo_validate(struct ttm_buffer_object *bo, void ttm_bo_fini(struct ttm_buffer_object *bo); void ttm_bo_set_bulk_move(struct ttm_buffer_object *bo, struct ttm_lru_bulk_move *bulk); +int ttm_bo_evict(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx); bool ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, const struct ttm_place *place); int ttm_bo_init_reserved(struct ttm_device *bdev, struct ttm_buffer_object *bo, -- 2.43.0