From nobody Mon Dec 1 21:30:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F10132FF17B; Mon, 1 Dec 2025 10:50:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586234; cv=none; b=JazeLA96QYKVQgOuJu6mElwafVnXSUB4/HxQjqEGDJYGZww05y7eHsB85cHjTDbrbQ6tsQx1JTZENxKTZb47mJmabKFcyppRs6NyXIAvuCX7Z0yq1x+OROZp4jT0rRneX1qjytSCrR7r4vKvl+gRWUiiemPCAkT8pKhdnNPkSbc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586234; c=relaxed/simple; bh=ucz6LgX9MKOxuFee2Z+MJ/KjfFjd204nb6XDQLVTLQM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KQz7HCW95SiqOwtmb9JKRQfLFb+pqwgVDoxC3AxfTo08e1fDv31OvDPleFnRV6JJggMVzbYm1iFLWTav6DlZckxfd70NwJnRm2jX9Be2SaiOZCY0Px7iBsrDUt3kPsiXXRz+02TTk54/DeiuKeqEN/1wPaI8W7cbbR8zBP085AA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mSb2FsYx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mSb2FsYx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0E26BC113D0; Mon, 1 Dec 2025 10:50:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764586233; bh=ucz6LgX9MKOxuFee2Z+MJ/KjfFjd204nb6XDQLVTLQM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mSb2FsYxpB8vJgNzjBQ0lMeVHeqdD3J1q4nUIBRv5TYi2iud2kAGtQsB0DKYNnsLD ufd6s1/p6NdWet6MdXc10C36BWCfX4gXSaVGvA+7+hNI/LAOWkvJYFQkUWoxHSrwOj ecq0X9scEDeYk7WM6GEj+H9LY0Q751V8TOhQl4kwgJhrQA0Ja+sKPdEQ8EFe13lhXN wsvtNyygUmLcPU6sCPpHQgm/4h7bBD/PD5/IuAZNvLzEZNkxvtA99f/vd+PSbqAgTG FpvWQyNliO5N+ijQ1p8MQlUTvQADbuMda2uw1AeVC+8DHJTeTkCdxTp+Bs5Kc2aEWW gX+ZpMn8umtPw== From: Philipp Stanner To: Sumit Semwal , Gustavo Padovan , =?UTF-8?q?Christian=20K=C3=B6nig?= , Felix Kuehling , Alex Deucher , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Philipp Stanner , Tvrtko Ursulin Subject: [PATCH v2 1/8] dma-buf/dma-fence: Add dma_fence_test_signaled_flag() Date: Mon, 1 Dec 2025 11:50:05 +0100 Message-ID: <20251201105011.19386-3-phasta@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251201105011.19386-2-phasta@kernel.org> References: <20251201105011.19386-2-phasta@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The dma_fence framework checks at many places whether the signaled flag of a fence is already set. The code can be simplified and made more readable by providing a helper function for that. Add dma_fence_test_signaled_flag(), which only checks whether a fence is signaled. Use it internally. Suggested-by: Tvrtko Ursulin Signed-off-by: Philipp Stanner --- drivers/dma-buf/dma-fence.c | 16 ++++++++-------- include/linux/dma-fence.h | 24 ++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index 39e6f93dc310..96d72ffc0750 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -545,7 +545,7 @@ void dma_fence_release(struct kref *kref) trace_dma_fence_destroy(fence); =20 if (!list_empty(&fence->cb_list) && - !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { + !dma_fence_test_signaled_flag(fence)) { const char __rcu *timeline; const char __rcu *driver; unsigned long flags; @@ -602,7 +602,7 @@ static bool __dma_fence_enable_signaling(struct dma_fen= ce *fence) was_set =3D test_and_set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &fence->flags); =20 - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) + if (dma_fence_test_signaled_flag(fence)) return false; =20 if (!was_set && fence->ops->enable_signaling) { @@ -666,7 +666,7 @@ int dma_fence_add_callback(struct dma_fence *fence, str= uct dma_fence_cb *cb, if (WARN_ON(!fence || !func)) return -EINVAL; =20 - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { + if (dma_fence_test_signaled_flag(fence)) { INIT_LIST_HEAD(&cb->node); return -ENOENT; } @@ -783,7 +783,7 @@ dma_fence_default_wait(struct dma_fence *fence, bool in= tr, signed long timeout) =20 spin_lock_irqsave(fence->lock, flags); =20 - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) + if (dma_fence_test_signaled_flag(fence)) goto out; =20 if (intr && signal_pending(current)) { @@ -800,7 +800,7 @@ dma_fence_default_wait(struct dma_fence *fence, bool in= tr, signed long timeout) cb.task =3D current; list_add(&cb.base.node, &fence->cb_list); =20 - while (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags) && ret > 0) { + while (!dma_fence_test_signaled_flag(fence) && ret > 0) { if (intr) __set_current_state(TASK_INTERRUPTIBLE); else @@ -832,7 +832,7 @@ dma_fence_test_signaled_any(struct dma_fence **fences, = uint32_t count, =20 for (i =3D 0; i < count; ++i) { struct dma_fence *fence =3D fences[i]; - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { + if (dma_fence_test_signaled_flag(fence)) { if (idx) *idx =3D i; return true; @@ -1108,7 +1108,7 @@ const char __rcu *dma_fence_driver_name(struct dma_fe= nce *fence) RCU_LOCKDEP_WARN(!rcu_read_lock_held(), "RCU protection is required for safe access to returned string"); =20 - if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) + if (!dma_fence_test_signaled_flag(fence)) return fence->ops->get_driver_name(fence); else return "detached-driver"; @@ -1140,7 +1140,7 @@ const char __rcu *dma_fence_timeline_name(struct dma_= fence *fence) RCU_LOCKDEP_WARN(!rcu_read_lock_held(), "RCU protection is required for safe access to returned string"); =20 - if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) + if (!dma_fence_test_signaled_flag(fence)) return fence->ops->get_timeline_name(fence); else return "signaled-timeline"; diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index 64639e104110..19972f5d176f 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -401,6 +401,26 @@ void dma_fence_enable_sw_signaling(struct dma_fence *f= ence); const char __rcu *dma_fence_driver_name(struct dma_fence *fence); const char __rcu *dma_fence_timeline_name(struct dma_fence *fence); =20 +/* + * dma_fence_test_signaled_flag - Only check whether a fence is signaled y= et. + * @fence: the fence to check + * + * This function just checks whether @fence is signaled, without interacti= ng + * with the fence in any way. The user must, therefore, ensure through oth= er + * means that fences get signaled eventually. + * + * This function uses test_bit(), which is thread-safe. Naturally, this fu= nction + * should be used opportunistically; a fence could get signaled at any mom= ent + * after the check is done. + * + * Return: true if signaled, false otherwise. + */ +static inline bool +dma_fence_test_signaled_flag(struct dma_fence *fence) +{ + return test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags); +} + /** * dma_fence_is_signaled_locked - Return an indication if the fence * is signaled yet. @@ -418,7 +438,7 @@ const char __rcu *dma_fence_timeline_name(struct dma_fe= nce *fence); static inline bool dma_fence_is_signaled_locked(struct dma_fence *fence) { - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) + if (dma_fence_test_signaled_flag(fence)) return true; =20 if (fence->ops->signaled && fence->ops->signaled(fence)) { @@ -448,7 +468,7 @@ dma_fence_is_signaled_locked(struct dma_fence *fence) static inline bool dma_fence_is_signaled(struct dma_fence *fence) { - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) + if (dma_fence_test_signaled_flag(fence)) return true; =20 if (fence->ops->signaled && fence->ops->signaled(fence)) { --=20 2.49.0 From nobody Mon Dec 1 21:30:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B56133054C1; Mon, 1 Dec 2025 10:50:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586239; cv=none; b=IASlfpurUuvyHPs09NjpRbENFRZtqPMObvwmWcGBwIFCpnKFNgAisMgK4e3F0Qlx0nvPilE44lhxeMMFpHr66JHdVpArD+vYW+VG1I1eVWlNw+05/Tc8CfQ2r04N7VwxUDH+tn4chwQM+eRzHlQmaQHOqsBld3XxkuF9u7jwymw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586239; c=relaxed/simple; bh=ZNNy2n+FQntaNFoCYnOtU5AymWpe+pwz2nd2uKriozw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=adLQ6BIjK+9/uml6oQ0KetzaoVyGIoxhrgnGUFHds4SJ0iNcil2WNIGdPou0RE7PU99GGsl+zHmDJosLaOODrHmaotTFuvLLC3zOnwVPOVVG44mf0JhoWHc+0tBlC90aA8hjoZ35MwMcsDuQ5gt+AdBlcLtrhGZE7IzItb07KhU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SLZrDzdN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SLZrDzdN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 000A8C4CEF1; Mon, 1 Dec 2025 10:50:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764586239; bh=ZNNy2n+FQntaNFoCYnOtU5AymWpe+pwz2nd2uKriozw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SLZrDzdN7EeHfrOUfYTT7xr8GaWUdt18zDB6hnTvBTpXIg+Cb+UCbUh2t3muEaRR8 Sz9S0NDO1Mr8qNPgsHuueqCL+NMWrv9pahD3Z/jMCz8xC5GmnjYbdwghAn5SOnOd5F abwTDwzdo+5q3IhZGQP+XDG08T0zMMt88J1I4kGO3wtnIPxLTmtmThcX7Eu5dK7/P5 fJb0hiibVHGGoNR3YDbsUgp83hIp7pobxKhK0PoNnouqBVz/ib32vpf/NrzSpeDvFi Oi3W9FRjtQBxM9ZXxMlVsbqCvFvoZPMcEQ9SPWhPRgX3Iz+OHx62+3dh0MJiv+hXoD awsbGd8msbsjA== From: Philipp Stanner To: Sumit Semwal , Gustavo Padovan , =?UTF-8?q?Christian=20K=C3=B6nig?= , Felix Kuehling , Alex Deucher , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Philipp Stanner Subject: [PATCH v2 2/8] dma-buf/dma-fence: Add dma_fence_check_and_signal() Date: Mon, 1 Dec 2025 11:50:06 +0100 Message-ID: <20251201105011.19386-4-phasta@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251201105011.19386-2-phasta@kernel.org> References: <20251201105011.19386-2-phasta@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The overwhelming majority of users of dma_fence signaling functions don't care about whether the fence had already been signaled by someone else. Therefore, the return code shall be removed from those functions. For the few users who rely on the check, a new, specialized function shall be provided. Add dma_fence_check_and_signal(), which signals a fence if it had not yet been signaled, and informs the user about that. Add a counter part, dma_fence_check_and_signal_locked(), which doesn't take the spinlock. Signed-off-by: Philipp Stanner --- drivers/dma-buf/dma-fence.c | 44 +++++++++++++++++++++++++++++++++++++ include/linux/dma-fence.h | 2 ++ 2 files changed, 46 insertions(+) diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index 96d72ffc0750..146de62887cf 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -445,6 +445,50 @@ int dma_fence_signal_locked(struct dma_fence *fence) } EXPORT_SYMBOL(dma_fence_signal_locked); =20 +/** + * dma_fence_check_and_signal_locked - signal the fence if it's not yet si= gnaled + * @fence: the fence to check and signal + * + * Checks whether a fence was signaled and signals it if it was not yet si= gnaled. + * + * Unlike dma_fence_check_and_signal(), this function must be called with + * &struct dma_fence.lock being held. + * + * Return: true if fence has been signaled already, false otherwise. + */ +bool dma_fence_check_and_signal_locked(struct dma_fence *fence) +{ + bool ret; + + ret =3D dma_fence_test_signaled_flag(fence); + dma_fence_signal_locked(fence); + + return ret; +} +EXPORT_SYMBOL(dma_fence_check_and_signal_locked); + +/** + * dma_fence_check_and_signal - signal the fence if it's not yet signaled + * @fence: the fence to check and signal + * + * Checks whether a fence was signaled and signals it if it was not yet si= gnaled. + * All this is done in a race-free manner. + * + * Return: true if fence has been signaled already, false otherwise. + */ +bool dma_fence_check_and_signal(struct dma_fence *fence) +{ + unsigned long flags; + bool ret; + + spin_lock_irqsave(fence->lock, flags); + ret =3D dma_fence_check_and_signal_locked(fence); + spin_unlock_irqrestore(fence->lock, flags); + + return ret; +} +EXPORT_SYMBOL(dma_fence_check_and_signal); + /** * dma_fence_signal - signal completion of a fence * @fence: the fence to signal diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index 19972f5d176f..0504afe52c2a 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -365,6 +365,8 @@ static inline void __dma_fence_might_wait(void) {} #endif =20 int dma_fence_signal(struct dma_fence *fence); +bool dma_fence_check_and_signal(struct dma_fence *fence); +bool dma_fence_check_and_signal_locked(struct dma_fence *fence); int dma_fence_signal_locked(struct dma_fence *fence); int dma_fence_signal_timestamp(struct dma_fence *fence, ktime_t timestamp); int dma_fence_signal_timestamp_locked(struct dma_fence *fence, --=20 2.49.0 From nobody Mon Dec 1 21:30:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6CD42304BB5; Mon, 1 Dec 2025 10:50:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586245; cv=none; b=JKUjPa8GVr6QgU5l55nnPz9MMrQ1B3BNfGKhzDJo+i8riDQaokdY/gyTNpKcKv2lduEupVWl0bmsh3mxVM0uNMbZB2YD53htsB1+4Fdev/R5hszPSxP22lfeRvgyzi13uSkq1Dnee8EzSLbNyMnFns8TXDO/n29EQauI+B7BJxY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586245; c=relaxed/simple; bh=soLLIRsbuDfyantBFZTK0Fok4YmEK6Tih/8wUoUvq3A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=q+dXGFC8093P7Xr0TTqdErJoyIugvRpAeK2Jbhm8snDD7hdrXq4Dk0vQmFK/ZBRx4wv+a4a30zlp94fqe0d2MEmI8raoP6NudgBvHTaESqFijqCDUsHiakhU8ra/lV8ZSaMl5t9zrpZsuHlBq8bbGXSrL9edINJrrdwJoSPRWOg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=slheEfRM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="slheEfRM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B7E21C113D0; Mon, 1 Dec 2025 10:50:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764586245; bh=soLLIRsbuDfyantBFZTK0Fok4YmEK6Tih/8wUoUvq3A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=slheEfRM4qq4CBY706N9NiDZkoNhrtLL3LdJB3q+32lOQZN31j+ES1wWKUKQIZjMh O/K1ln97Il8byeLhs+vJ+hNeGh6fn9oPvvd+S8fwyvw1XN41fLNHuEy8Rw2ptq5BIy 3EP5XlafFZUMbvVtGmZATm5tmVw9usBYsLFdXP57HcVGaC59EFEXlGib28hruszN2f bGtjaF1xcCRi2nbyCN/n2hbmgPmfg5MDMZDWQ2K/20rA6Ba5BDbPGwUALNDDytAtLm TbZbgiE5EP3tXtQq0LD5DTG3MQ0JjqN3QTts2r4CQDiUAaFaKdHWhnPGSynEO05c9i YaHjWO07eZnFA== From: Philipp Stanner To: Sumit Semwal , Gustavo Padovan , =?UTF-8?q?Christian=20K=C3=B6nig?= , Felix Kuehling , Alex Deucher , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Philipp Stanner Subject: [PATCH v2 3/8] amd/amdkfd: Use dma_fence_check_and_signal() Date: Mon, 1 Dec 2025 11:50:07 +0100 Message-ID: <20251201105011.19386-5-phasta@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251201105011.19386-2-phasta@kernel.org> References: <20251201105011.19386-2-phasta@kernel.org> 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" Content-Transfer-Encoding: quoted-printable amdkfd is one of the few users which relies on the return code of dma_fence_signal(), which, so far, informs the caller whether the fence had already been signaled. As there are barely any users, dma_fence signaling functions shall get the return value void. To do so, the few users must be ported to a function which preserves the old behavior. Replace the call to dma_fence_signal() with one to dma_fence_check_and_signal(). Suggested-by: Christian K=C3=B6nig Signed-off-by: Philipp Stanner Reviewed-by: Felix Kuehling --- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd= /amdkfd/kfd_process.c index ddfe30c13e9d..4dc46ac6a65e 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c @@ -1983,10 +1983,10 @@ kfd_process_gpuid_from_node(struct kfd_process *p, = struct kfd_node *node, return -EINVAL; } =20 -static int signal_eviction_fence(struct kfd_process *p) +static bool signal_eviction_fence(struct kfd_process *p) { struct dma_fence *ef; - int ret; + bool ret; =20 rcu_read_lock(); ef =3D dma_fence_get_rcu_safe(&p->ef); @@ -1994,7 +1994,7 @@ static int signal_eviction_fence(struct kfd_process *= p) if (!ef) return -EINVAL; =20 - ret =3D dma_fence_signal(ef); + ret =3D dma_fence_check_and_signal(ef); dma_fence_put(ef); =20 return ret; --=20 2.49.0 From nobody Mon Dec 1 21:30:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3CC903054C5; Mon, 1 Dec 2025 10:50:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586251; cv=none; b=TvJpKrepsSvtlthtk+pcfIFCDwwuXmg8TKvx5PHUAERD1y75ADeeoCUmT0J/C7wj8JzLSgFPfWOIBENQgS1zYZtCB/tP5BE7RcaBb1kfib1fQt66WyY8rchJfH+shYrwHdfeSBdx9ZTUXsbc47w34XIMtuOgopbTtVOmmFiM+dc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586251; c=relaxed/simple; bh=nBUlplmOKh9m9ly7/GmxFt4mHujNHh6V7/MgT8pL33Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LT9ysTA9N0vD8Aaf0jO/An476XHFx458XISVzAr4vms29uKG8Z+AJ/No0OFNzblL2+CsBJPCntOZC4Zf9ng8sUhlAgMh0Ju1t2MVgquo09VtwjQBz2y6Qt75Xsb2vKg5HAdAYY5L8ed5p0bzsBgTZVMqb6m7Ow6unlkPuvdm5cE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nriw1m3h; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nriw1m3h" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7B218C4CEF1; Mon, 1 Dec 2025 10:50:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764586250; bh=nBUlplmOKh9m9ly7/GmxFt4mHujNHh6V7/MgT8pL33Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nriw1m3ha4OTMH/XMePE3kBvGPVChGJ8qPbWQ39WnGIxGjLjrkiW7TjT+SYIlx5KI gxMIADDj5J1EO+GsWRp+mXIlg5q2Yz6mcXTK9wu8RFTGHd4AtDnUXXmA5jIDDwsV+c nOWkPuHG4o3RGGIB/mOLL8htcaUQATnjDvBAaeA4hiUYFKMVMQEFBC4UgXOeJ7uFAY 812WELGcmLbETDKsQkPI+jZT9h2aWiY1jBB+aSWrplQKrujJkdDS9UYGVJ4vqpr6rx uGgxxJ2stgT6/76F+u6muDqBxIaGHOKBg6+avfXm6HZQJg2P1oACiNANVb+HoR5H/+ A34XQiNOAJH6Q== From: Philipp Stanner To: Sumit Semwal , Gustavo Padovan , =?UTF-8?q?Christian=20K=C3=B6nig?= , Felix Kuehling , Alex Deucher , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Philipp Stanner Subject: [PATCH v2 4/8] drm/xe: Use dma_fence_check_and_signal_locked() Date: Mon, 1 Dec 2025 11:50:08 +0100 Message-ID: <20251201105011.19386-6-phasta@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251201105011.19386-2-phasta@kernel.org> References: <20251201105011.19386-2-phasta@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Xe is one of the few users utilizing the return code of dma_fence_signal() to check whether a fence had already been signaled by someone else. To clean up and simplify the dma_fence API, the few kernel users relying on that behavior shall be ported to an alternative function. Replace dma_fence_signal_locked() with dma_fence_check_and_signal_locked(). Signed-off-by: Philipp Stanner --- drivers/gpu/drm/xe/xe_hw_fence.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_hw_fence.c b/drivers/gpu/drm/xe/xe_hw_fe= nce.c index b2a0c46dfcd4..f6057456e460 100644 --- a/drivers/gpu/drm/xe/xe_hw_fence.c +++ b/drivers/gpu/drm/xe/xe_hw_fence.c @@ -85,7 +85,6 @@ void xe_hw_fence_irq_finish(struct xe_hw_fence_irq *irq) { struct xe_hw_fence *fence, *next; unsigned long flags; - int err; bool tmp; =20 if (XE_WARN_ON(!list_empty(&irq->pending))) { @@ -93,9 +92,8 @@ void xe_hw_fence_irq_finish(struct xe_hw_fence_irq *irq) spin_lock_irqsave(&irq->lock, flags); list_for_each_entry_safe(fence, next, &irq->pending, irq_link) { list_del_init(&fence->irq_link); - err =3D dma_fence_signal_locked(&fence->dma); + XE_WARN_ON(dma_fence_check_and_signal_locked(&fence->dma)); dma_fence_put(&fence->dma); - XE_WARN_ON(err); } spin_unlock_irqrestore(&irq->lock, flags); dma_fence_end_signalling(tmp); --=20 2.49.0 From nobody Mon Dec 1 21:30:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F384130504A; Mon, 1 Dec 2025 10:50:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586257; cv=none; b=L5L4ngo4viEWOavCdP7JH1n8v8qXhd6Zh6GlKolQ9jNzwFqoOWUxu/NU1HExEGrQjbmz9HYipzJOHHYZbRBitMggJ+3am0BO1DOdQ2EFuJZRIopjX7Cvsi5CFEbUHj3hFSKd0hyW45Apk4TR2LpgNbrv9gmYglxK2071VOfn/P0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586257; c=relaxed/simple; bh=psV3AjFMvx+hXzUq9J8i739SH64kLqL5g0LrFSRpUkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Sm+z3zqyxUggre5aLWaFWhH46sjWFkh+NRkc1ejqhPsP7W5dNMQbR8y6SkPEnF2NwGSm/m5CoY2QyiK8p3cUOMqV/j6NZOpeYtF6hZtR9oxaAG3wAmdWQ3keSNmpduyz+a+++pu8/BE8fzNi0ozimr0n4RltkUHsmN4Ckpb4Hec= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rLTAWzYx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rLTAWzYx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3E334C113D0; Mon, 1 Dec 2025 10:50:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764586256; bh=psV3AjFMvx+hXzUq9J8i739SH64kLqL5g0LrFSRpUkM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rLTAWzYx6rzjm5FOB1qQRsnqmGx9jZme2PkpQdPQ5Gk9SYiCeR3uqyFWB/ecKz80T dFkAKaEmVUAj/yOX/dJf22/kQnshwBsC3eedsv1wk5Ojj1vQnEi6rZqpRTA3Ufntdr P7OmsO/ICoEgrwsStpB/dILe4tLxYKj5JGeQQT1jXrkaLHVbmo6FhS1377mQIm2awY 2ptlOGK6moAeJgfunx/ryXcHzUc0TXM8v0mN+koe4xQcIdrOVPAouclixrhcHNccdv rXFXI0ABcANLgSdbNSwCebdfb7OA2BZE4GhcD9eWrQt8VoUQLnNNo0O1ZvzdLUMnUl YmmkPTZeKOJ1A== From: Philipp Stanner To: Sumit Semwal , Gustavo Padovan , =?UTF-8?q?Christian=20K=C3=B6nig?= , Felix Kuehling , Alex Deucher , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Philipp Stanner Subject: [PATCH v2 5/8] dma-buf: Don't misuse dma_fence_signal() Date: Mon, 1 Dec 2025 11:50:09 +0100 Message-ID: <20251201105011.19386-7-phasta@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251201105011.19386-2-phasta@kernel.org> References: <20251201105011.19386-2-phasta@kernel.org> 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" Content-Transfer-Encoding: quoted-printable The return code of dma_fence_signal() is not really useful as there is nothing reasonable to do if a fence was already signaled. That return code shall be removed from the kernel. Moreover, dma_fence_signal() should not be used to check whether fences are signaled. That's what dma_fence_is_signaled() and dma_fence_test_signaled_flag() exist for. Replace the non-canonical usage of dma_fence_signal(). Suggested-by: Christian K=C3=B6nig Signed-off-by: Philipp Stanner --- drivers/dma-buf/st-dma-fence.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/dma-buf/st-dma-fence.c b/drivers/dma-buf/st-dma-fence.c index 27a36045410b..4dbe39c58bfb 100644 --- a/drivers/dma-buf/st-dma-fence.c +++ b/drivers/dma-buf/st-dma-fence.c @@ -126,7 +126,7 @@ static int test_signaling(void *arg) goto err_free; } =20 - if (dma_fence_signal(f)) { + if (dma_fence_check_and_signal(f)) { pr_err("Fence reported being already signaled\n"); goto err_free; } @@ -136,7 +136,7 @@ static int test_signaling(void *arg) goto err_free; } =20 - if (!dma_fence_signal(f)) { + if (!dma_fence_test_signaled_flag(f)) { pr_err("Fence reported not being already signaled\n"); goto err_free; } --=20 2.49.0 From nobody Mon Dec 1 21:30:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B604B305067; Mon, 1 Dec 2025 10:51:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586263; cv=none; b=MM64PQrPQIUrj5atwLDB5qYNU3GWnUCEfCOsO/9ms+2kzJb4kC0qtrPja65tdPb7dZNi7jsKvyY/T3kCxbAr4sWIEr+m6rXUz+BQA82DVAyuM+gi5re6qBOhUbu7gmM13cCJUcgx08E2ULL68JejcG4FqcThzKnDlOMcWLLQoUw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586263; c=relaxed/simple; bh=weqR/k6bdbRE4AndEp4LhhGi2UzLYefCKJre4wdO4eM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=r3nW65jJlFqATTvKI3TRVI5OLmypmhe6Kq1OoJ7u41558QiZlDytg6qQDLidWgqQrEDDeuNo+WrxmyiIfxgPcUjRJ90VFTAbiD3KrtJwArGRW3JMfp+p4C+JJvJdJIrqkS3eFEKWh+UzKMy0aNkndPwBjjuKlANl1jr6W4Cs/cE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Cztmh2b1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Cztmh2b1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 01A2FC4CEF1; Mon, 1 Dec 2025 10:50:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764586262; bh=weqR/k6bdbRE4AndEp4LhhGi2UzLYefCKJre4wdO4eM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Cztmh2b1+F4gfiasJbMsWE/qSkS82JpFMlm/0WEWAQq4MkG0cQ5prUks+WOxnrC+I EnkNe36MccmTR7x1s738D9S1JOP/mYuReRRAR4Lh1nqZdbhUUOupxxY/0+TjxbiqzU vPUSzr9Kxop6wOaxnR08AutarKfwoYuqMm37sLUxuoPy4bjbM7UnOTqqpItCtPnpUd tIUm/S9EOpvMIVoVdbNIlwRP8H0vypQ8MJx1eIijrxjGXnc5KpM60zT3NBE7WG5rgX yMUp16KlA+vQHzzy2Gz57WZLYDVj5ZxYl7B3DTLLRevpjF4hU9rORH199i2rKYGBKT 0xLO9jmc9Tn9w== From: Philipp Stanner To: Sumit Semwal , Gustavo Padovan , =?UTF-8?q?Christian=20K=C3=B6nig?= , Felix Kuehling , Alex Deucher , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Philipp Stanner Subject: [PATCH v2 6/8] drm/ttm: Use dma_fence_check_and_signal() Date: Mon, 1 Dec 2025 11:50:10 +0100 Message-ID: <20251201105011.19386-8-phasta@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251201105011.19386-2-phasta@kernel.org> References: <20251201105011.19386-2-phasta@kernel.org> 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" Content-Transfer-Encoding: quoted-printable The return code of dma_fence_signal() is not useful and shall be removed from the kernel. To do so, the few users who rely on the return code must be ported. Use dma_fence_check_and_signal() and mapp its boolean return code to dma_fence_signal()'s former value for already-signaled fences. Suggested-by: Christian K=C3=B6nig Signed-off-by: Philipp Stanner --- drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c b/drivers/gpu= /drm/ttm/tests/ttm_bo_validate_test.c index 1bcc67977f48..eaf2e91f8e97 100644 --- a/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c +++ b/drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c @@ -692,7 +692,7 @@ static int threaded_fence_signal(void *arg) =20 msleep(20); =20 - return dma_fence_signal(fence); + return dma_fence_check_and_signal(fence) ? -EINVAL : 0; } =20 static void ttm_bo_validate_move_fence_not_signaled(struct kunit *test) --=20 2.49.0 From nobody Mon Dec 1 21:30:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 709CA305066; Mon, 1 Dec 2025 10:51:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586268; cv=none; b=lWSFFWGvoh3BqRjM0jJpLX67ulbgTGdo3ZVxtWbDHz5RhuQMdwDiHHd9TAsvwffQJbnNmVH6A++cNUs5PmdriZmDIL4M96OTvduU1ApH5I9cAji81TOrV453zELlz0RDXT8kwcWgZmygBDppUF2wJNskpOsPMbSLG5jYT2tZitU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586268; c=relaxed/simple; bh=vLU4asfyOip/u8apYJb8xS5xSWEq5LKx5AZnLWJhf5Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=cuQ5Y/bWLce/AS2U0DE2XmESfDgmNUg2+a/Hkia6/otqGro7tTKy9H0PdhGi2EVlaLZazDoeNd/Xh8nuARvHP0egynFXvexourUB2xCiFSnlpFSR1ecC0XkTLxGyJmrHvU48Mw8OVlWMMu5yaFB0Lmc1cf6vAWcdQ0m45Mb3T/k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Qr/O92Um; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Qr/O92Um" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B853EC113D0; Mon, 1 Dec 2025 10:51:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764586268; bh=vLU4asfyOip/u8apYJb8xS5xSWEq5LKx5AZnLWJhf5Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qr/O92UmvlYreeY2B2vJnfwo1e1iYbEvJk6Q2RlIH+GZj2YvMEwu1NqVImEVBRQVO VtcJ8XOnJvJHi9ZEs1SjjI/VSj7PXMWiDYSoS3n59zqvjCEeyT/ArJIZ+2iigI+jdg lxQqbybIcGCBhgR6XNUCYkZhtZvq+IZUkMPnvY860rM1GBHtpid9OrrpSHbBEPbJcF qs1xVsrmIPEqpZ3aBbNrF7Zmkz2AIfysfWQ8Ol9+O+VHuPa/6ieDua4K3/EfYvgnDd yjA/pgLDKiIE4H1YcBhcui5Uvp4mD/GjsTmJmXLM6p8IEEUUBdVov8loclOjjBHpD5 4Gj8oykZgcKkA== From: Philipp Stanner To: Sumit Semwal , Gustavo Padovan , =?UTF-8?q?Christian=20K=C3=B6nig?= , Felix Kuehling , Alex Deucher , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Philipp Stanner Subject: [PATCH v2 7/8] dma-buf/dma-fence: Remove return code of signaling-functions Date: Mon, 1 Dec 2025 11:50:11 +0100 Message-ID: <20251201105011.19386-9-phasta@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251201105011.19386-2-phasta@kernel.org> References: <20251201105011.19386-2-phasta@kernel.org> 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" Content-Transfer-Encoding: quoted-printable All functions used for signaling a fence return an error code whose sole purpose is to tell whether a fence was already signaled. This is racy and has been used by almost no party in the kernel, and the few users have been removed in preceding cleanup commits. Turn all signaling-functions into void-functions. Suggested-by: Christian K=C3=B6nig Signed-off-by: Philipp Stanner --- drivers/dma-buf/dma-fence.c | 40 ++++++++++--------------------------- include/linux/dma-fence.h | 9 ++++----- 2 files changed, 14 insertions(+), 35 deletions(-) diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index 146de62887cf..529a44371b35 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -360,11 +360,8 @@ void __dma_fence_might_wait(void) * * Unlike dma_fence_signal_timestamp(), this function must be called with * &dma_fence.lock held. - * - * Returns 0 on success and a negative error value when @fence has been - * signalled already. */ -int dma_fence_signal_timestamp_locked(struct dma_fence *fence, +void dma_fence_signal_timestamp_locked(struct dma_fence *fence, ktime_t timestamp) { struct dma_fence_cb *cur, *tmp; @@ -374,7 +371,7 @@ int dma_fence_signal_timestamp_locked(struct dma_fence = *fence, =20 if (unlikely(test_and_set_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))) - return -EINVAL; + return; =20 /* Stash the cb_list before replacing it with the timestamp */ list_replace(&fence->cb_list, &cb_list); @@ -387,8 +384,6 @@ int dma_fence_signal_timestamp_locked(struct dma_fence = *fence, INIT_LIST_HEAD(&cur->node); cur->func(fence, cur); } - - return 0; } EXPORT_SYMBOL(dma_fence_signal_timestamp_locked); =20 @@ -403,23 +398,17 @@ EXPORT_SYMBOL(dma_fence_signal_timestamp_locked); * can only go from the unsignaled to the signaled state and not back, it = will * only be effective the first time. Set the timestamp provided as the fen= ce * signal timestamp. - * - * Returns 0 on success and a negative error value when @fence has been - * signalled already. */ -int dma_fence_signal_timestamp(struct dma_fence *fence, ktime_t timestamp) +void dma_fence_signal_timestamp(struct dma_fence *fence, ktime_t timestamp) { unsigned long flags; - int ret; =20 if (WARN_ON(!fence)) - return -EINVAL; + return; =20 spin_lock_irqsave(fence->lock, flags); - ret =3D dma_fence_signal_timestamp_locked(fence, timestamp); + dma_fence_signal_timestamp_locked(fence, timestamp); spin_unlock_irqrestore(fence->lock, flags); - - return ret; } EXPORT_SYMBOL(dma_fence_signal_timestamp); =20 @@ -435,13 +424,10 @@ EXPORT_SYMBOL(dma_fence_signal_timestamp); * * Unlike dma_fence_signal(), this function must be called with &dma_fence= .lock * held. - * - * Returns 0 on success and a negative error value when @fence has been - * signalled already. */ -int dma_fence_signal_locked(struct dma_fence *fence) +void dma_fence_signal_locked(struct dma_fence *fence) { - return dma_fence_signal_timestamp_locked(fence, ktime_get()); + dma_fence_signal_timestamp_locked(fence, ktime_get()); } EXPORT_SYMBOL(dma_fence_signal_locked); =20 @@ -498,28 +484,22 @@ EXPORT_SYMBOL(dma_fence_check_and_signal); * dma_fence_add_callback(). Can be called multiple times, but since a fen= ce * can only go from the unsignaled to the signaled state and not back, it = will * only be effective the first time. - * - * Returns 0 on success and a negative error value when @fence has been - * signalled already. */ -int dma_fence_signal(struct dma_fence *fence) +void dma_fence_signal(struct dma_fence *fence) { unsigned long flags; - int ret; bool tmp; =20 if (WARN_ON(!fence)) - return -EINVAL; + return; =20 tmp =3D dma_fence_begin_signalling(); =20 spin_lock_irqsave(fence->lock, flags); - ret =3D dma_fence_signal_timestamp_locked(fence, ktime_get()); + dma_fence_signal_timestamp_locked(fence, ktime_get()); spin_unlock_irqrestore(fence->lock, flags); =20 dma_fence_end_signalling(tmp); - - return ret; } EXPORT_SYMBOL(dma_fence_signal); =20 diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index 0504afe52c2a..d4c92fd35092 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -364,13 +364,12 @@ static inline void dma_fence_end_signalling(bool cook= ie) {} static inline void __dma_fence_might_wait(void) {} #endif =20 -int dma_fence_signal(struct dma_fence *fence); +void dma_fence_signal(struct dma_fence *fence); bool dma_fence_check_and_signal(struct dma_fence *fence); bool dma_fence_check_and_signal_locked(struct dma_fence *fence); -int dma_fence_signal_locked(struct dma_fence *fence); -int dma_fence_signal_timestamp(struct dma_fence *fence, ktime_t timestamp); -int dma_fence_signal_timestamp_locked(struct dma_fence *fence, - ktime_t timestamp); +void dma_fence_signal_locked(struct dma_fence *fence); +void dma_fence_signal_timestamp(struct dma_fence *fence, ktime_t timestamp= ); +void dma_fence_signal_timestamp_locked(struct dma_fence *fence, ktime_t ti= mestamp); signed long dma_fence_default_wait(struct dma_fence *fence, bool intr, signed long timeout); int dma_fence_add_callback(struct dma_fence *fence, --=20 2.49.0 From nobody Mon Dec 1 21:30:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48418305E18; Mon, 1 Dec 2025 10:51:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586274; cv=none; b=dpMqubVyh2FK1pbikyMUTMHLqoBFYC6/2CC8QnPJHhK36LWtozWcCI0nj2rWMfunoh8H5pmoNTlnu9Vq9EeuSPP5pIlU5HXVaheehRUOtkCRtBnh0B1Lb4hBmz1m9wg1SJ9K7h+Y17d31oPvQvBBnVZeFcmCKVSvI+co9imnDGM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764586274; c=relaxed/simple; bh=mj9yMjkJYnq6gG3lH605LhmJYpglfLnEKicH3/+ivuE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AQlqe62Mp2QZn0AaLc06WfIC6/k/IllsIPR2xIx+oMfJWjBcTahD6FASp13yv8+cWTL4rC3UPl0T8GaTTn7Vgpbni9Uwf2u1qPFKmmPM1A+/NupH+inzgZh22uLSOlcV2Awf8/y4Ppmurr2de0KqMVEjiCuUmJWLkGuOrZ5gCdE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DU6NroHJ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DU6NroHJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7BE25C4CEF1; Mon, 1 Dec 2025 10:51:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764586273; bh=mj9yMjkJYnq6gG3lH605LhmJYpglfLnEKicH3/+ivuE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DU6NroHJll/euhP3rvFLbh4NSOf5U8rJJz3hOoQYb4qeBnETbcZs6C0qbiKr4Adyp PSB0UMovD7mRiU5pk9HmDmCMV7Co/inKdC1vzlOr+iqm17MXNje7ZOMn02KwBOKHzv 9AGvrL7EAa9MFaPQQdJRrexqOD2mHNK57M4ED+4FKHSW8y0mWIRcyRJI7ufzJuLqEE CUPuQFI5s3XOuXEg1JAItdeD85228dnhKp/Uj71pygEXhVcn2ouXqF7+BWqaJ6Am4s O9jtI3z3AHSjNDsNIwkBBtlukpKGqTcfM9leHHbTO/81aoLJgVP2rmnolE/PdLH/8a /U/GtbReIIYIA== From: Philipp Stanner To: Sumit Semwal , Gustavo Padovan , =?UTF-8?q?Christian=20K=C3=B6nig?= , Felix Kuehling , Alex Deucher , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Cc: linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Philipp Stanner Subject: [PATCH v2 8/8] drm/xe: Use dma_fence_test_signaled_flag() Date: Mon, 1 Dec 2025 11:50:12 +0100 Message-ID: <20251201105011.19386-10-phasta@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251201105011.19386-2-phasta@kernel.org> References: <20251201105011.19386-2-phasta@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There is a new dma_fence helper which simplifies testing for a fence's signaled_flag. Use it in xe. Signed-off-by: Philipp Stanner Reviewed-by: Matthew Brost --- drivers/gpu/drm/xe/xe_exec_queue.c | 9 +++------ drivers/gpu/drm/xe/xe_pt.c | 3 +-- drivers/gpu/drm/xe/xe_sched_job.c | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exe= c_queue.c index cb5f204c08ed..06736f52fbaa 100644 --- a/drivers/gpu/drm/xe/xe_exec_queue.c +++ b/drivers/gpu/drm/xe/xe_exec_queue.c @@ -1037,8 +1037,7 @@ struct dma_fence *xe_exec_queue_last_fence_get(struct= xe_exec_queue *q, =20 xe_exec_queue_last_fence_lockdep_assert(q, vm); =20 - if (q->last_fence && - test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &q->last_fence->flags)) + if (q->last_fence && dma_fence_test_signaled_flag(q->last_fence)) xe_exec_queue_last_fence_put(q, vm); =20 fence =3D q->last_fence ? q->last_fence : dma_fence_get_stub(); @@ -1064,8 +1063,7 @@ struct dma_fence *xe_exec_queue_last_fence_get_for_re= sume(struct xe_exec_queue * =20 lockdep_assert_held_write(&q->hwe->hw_engine_group->mode_sem); =20 - if (q->last_fence && - test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &q->last_fence->flags)) + if (q->last_fence && dma_fence_test_signaled_flag(q->last_fence)) xe_exec_queue_last_fence_put_unlocked(q); =20 fence =3D q->last_fence ? q->last_fence : dma_fence_get_stub(); @@ -1106,8 +1104,7 @@ int xe_exec_queue_last_fence_test_dep(struct xe_exec_= queue *q, struct xe_vm *vm) =20 fence =3D xe_exec_queue_last_fence_get(q, vm); if (fence) { - err =3D test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags) ? - 0 : -ETIME; + err =3D dma_fence_test_signaled_flag(fence) ? 0 : -ETIME; dma_fence_put(fence); } =20 diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c index 07f96bda638a..1ca2dec18e51 100644 --- a/drivers/gpu/drm/xe/xe_pt.c +++ b/drivers/gpu/drm/xe/xe_pt.c @@ -1208,8 +1208,7 @@ static bool no_in_syncs(struct xe_sync_entry *syncs, = u32 num_syncs) for (i =3D 0; i < num_syncs; i++) { struct dma_fence *fence =3D syncs[i].fence; =20 - if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, - &fence->flags)) + if (fence && !dma_fence_test_signaled_flag(fence)) return false; } =20 diff --git a/drivers/gpu/drm/xe/xe_sched_job.c b/drivers/gpu/drm/xe/xe_sche= d_job.c index d21bf8f26964..1c9ba49a325b 100644 --- a/drivers/gpu/drm/xe/xe_sched_job.c +++ b/drivers/gpu/drm/xe/xe_sched_job.c @@ -188,7 +188,7 @@ static bool xe_fence_set_error(struct dma_fence *fence,= int error) bool signaled; =20 spin_lock_irqsave(fence->lock, irq_flags); - signaled =3D test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags); + signaled =3D dma_fence_test_signaled_flag(fence); if (!signaled) dma_fence_set_error(fence, error); spin_unlock_irqrestore(fence->lock, irq_flags); --=20 2.49.0