dma-buf: remove unused dma-fence-unwrap.c (stable/linux-5.15.y only)
PATCH v2 1/1 dma-buf: remove unused dma-fence-unwrap.c (stable/linux-5.15.y only)
The file drivers/dma-buf/dma-fence-unwrap.c was incorrectly added to the 5.15.y stable branch in commit 4e82b9c11d3c ("dma-buf: add dma_fence_timestamp helper") as a new file, but it was never enabled in the Makefile, and its header include/linux/dma-fence-unwrap.h was not present, making it uncompilable.
A full revert of commit 4e82b9c11d3c ("dma-buf: add dma_fence_timestamp helper") is not desirable because that commit also introduced the valid dma_fence_timestamp() helper and fixed legitimate timestamp race windows in drivers/dma-buf/sync_file.c and drivers/gpu/drm/scheduler/sched_main.c.
Since there are no users of dma-fence-unwrap in the 5.15.y branch, remove the unused file to clean up the tree and avoid confusion.
---
Changes in v2:
- add To: [email protected]
- Link to v1: https://lore.kernel.org/r/[email protected]
--- drivers/dma-buf/dma-fence-unwrap.c | 176 ------------------------------------- 1 file changed, 176 deletions(-)
drivers/dma-buf/dma-fence-unwrap.c deleted +0 -176
@@ -1,176 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* -* dma-fence-util: misc functions for dma_fence objects -* -* Copyright (C) 2022 Advanced Micro Devices, Inc. -* Authors: -* Christian König <[email protected]> -*/ - -#include <linux/dma-fence.h> -#include <linux/dma-fence-array.h> -#include <linux/dma-fence-chain.h> -#include <linux/dma-fence-unwrap.h> -#include <linux/slab.h> - -/* Internal helper to start new array iteration, don't use directly */ -static struct dma_fence * -__dma_fence_unwrap_array (struct dma_fence_unwrap *cursor) -{ - cursor->array =dma_fence_chain_contained (cursor->chain); - cursor->index =0 ; -return dma_fence_array_first (cursor->array); -} - -/** -* dma_fence_unwrap_first - return the first fence from fence containers -* @head: the entrypoint into the containers -* @cursor: current position inside the containers -* -* Unwraps potential dma_fence_chain/dma_fence_array containers and return the -* first fence. -*/ -struct dma_fence *dma_fence_unwrap_first (struct dma_fence *head, -struct dma_fence_unwrap *cursor) -{ - cursor->chain =dma_fence_get (head); -return __dma_fence_unwrap_array (cursor); -} -EXPORT_SYMBOL_GPL (dma_fence_unwrap_first); - -/** -* dma_fence_unwrap_next - return the next fence from a fence containers -* @cursor: current position inside the containers -* -* Continue unwrapping the dma_fence_chain/dma_fence_array containers and return -* the next fence from them. -*/ -struct dma_fence *dma_fence_unwrap_next (struct dma_fence_unwrap *cursor) -{ -struct dma_fence *tmp; - - ++cursor->index; - tmp =dma_fence_array_next (cursor->array, cursor->index); -if (tmp) -return tmp; - - cursor->chain =dma_fence_chain_walk (cursor->chain); -return __dma_fence_unwrap_array (cursor); -} -EXPORT_SYMBOL_GPL (dma_fence_unwrap_next); - -/* Implementation for the dma_fence_merge() marco, don't use directly */ -struct dma_fence *__dma_fence_unwrap_merge (unsigned int num_fences, -struct dma_fence **fences, -struct dma_fence_unwrap *iter) -{ -struct dma_fence_array *result; -struct dma_fence *tmp, **array; -ktime_t timestamp; -unsigned int i; -size_t count; - - count =0 ; - timestamp =ns_to_ktime (0 ); -for (i =0 ; i < num_fences; ++i) { -dma_fence_unwrap_for_each (tmp, &iter[i], fences[i]) { -if (!dma_fence_is_signaled (tmp)) { - ++count; - }else { -ktime_t t =dma_fence_timestamp (tmp); - -if (ktime_after (t, timestamp)) - timestamp = t; - } - } - } - -/* -* If we couldn't find a pending fence just return a private signaled -* fence with the timestamp of the last signaled one. -*/ -if (count ==0 ) -return dma_fence_allocate_private_stub (timestamp); - - array =kmalloc_array (count,sizeof (*array),GFP_KERNEL ); -if (!array) -return NULL ; - -/* -* This trashes the input fence array and uses it as position for the -* following merge loop. This works because the dma_fence_merge() -* wrapper macro is creating this temporary array on the stack together -* with the iterators. -*/ -for (i =0 ; i < num_fences; ++i) - fences[i] =dma_fence_unwrap_first (fences[i], &iter[i]); - - count =0 ; -do { -unsigned int sel; - -restart: - tmp =NULL ; -for (i =0 ; i < num_fences; ++i) { -struct dma_fence *next; - -while (fences[i] &&dma_fence_is_signaled (fences[i])) - fences[i] =dma_fence_unwrap_next (&iter[i]); - - next = fences[i]; -if (!next) -continue ; - -/* -* We can't guarantee that inpute fences are ordered by -* context, but it is still quite likely when this -* function is used multiple times. So attempt to order -* the fences by context as we pass over them and merge -* fences with the same context. -*/ -if (!tmp || tmp->context > next->context) { - tmp = next; - sel = i; - - }else if (tmp->context < next->context) { -continue ; - - }else if (dma_fence_is_later (tmp, next)) { - fences[i] =dma_fence_unwrap_next (&iter[i]); - goto restart; - }else { - fences[sel] =dma_fence_unwrap_next (&iter[sel]); - goto restart; - } - } - -if (tmp) { - array[count++] =dma_fence_get (tmp); - fences[sel] =dma_fence_unwrap_next (&iter[sel]); - } - }while (tmp); - -if (count ==0 ) { - tmp =dma_fence_allocate_private_stub (ktime_get ()); - goto return_tmp; - } - -if (count ==1 ) { - tmp = array[0 ]; - goto return_tmp; - } - - result =dma_fence_array_create (count, array, -dma_fence_context_alloc (1 ), -1 , false); -if (!result) { - tmp =NULL ; - goto return_tmp; - } -return &result->base; - -return_tmp: -kfree (array); -return tmp; -} -EXPORT_SYMBOL_GPL (__dma_fence_unwrap_merge);
---
base-commit: eceeec79dbc646d6dace49ed1ba2f656683d5537
change-id: 20260703-5-15-dma-fence-unwrap-0f4a6c03daf2
Best regards,
Signature · 1 line
Tudor Ambarus <[email protected]>
Quoted 5 lines · Tudor Ambarus
The file
drivers/dma-buf/dma-fence-unwrap.cwas incorrectly added to the 5.15.y stable branch in commit4e82b9c11d3c("dma-buf: adddma_fence_timestamphelper") as a new file, but it was never enabled in theMakefile, and its headerinclude/linux/dma-fence-unwrap.hwas not present, making it uncompilable.
Queued for 5.15.y, thanks.
Signature · 2 lines
Thanks, Sasha