2026年6月26日 20:33,Christian König christian.koenig@amd.com 写道:
On 6/26/26 14:18, WenTao Liang wrote:
dma_fence_enable_sw_signaling acquires an extra reference on each chain fence. The error unwind loop calls dma_fence_put only once per chain/fence without first signaling the fence to trigger the callback that releases the signaling reference. This prevents the chain fence kref from reaching 0, permanently leaking the chain and its contained fence.
Cc: stable@vger.kernel.org mailto:stable@vger.kernel.org Fixes: dc2f7e67a28a ("dma-buf: Exercise dma-fence-chain under selftests")
Please drop that, this is a minor issue in a unit test and not anything which needs backporting.
Signed-off-by: WenTao Liang vulab@iscas.ac.cn
drivers/dma-buf/st-dma-fence-chain.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/dma-buf/st-dma-fence-chain.c b/drivers/dma-buf/st-dma-fence-chain.c index 821023dd34df..7dc18e294387 100644 --- a/drivers/dma-buf/st-dma-fence-chain.c +++ b/drivers/dma-buf/st-dma-fence-chain.c @@ -152,7 +152,10 @@ static int fence_chains_init(struct fence_chains *fc, unsigned int count,
unwind: for (i = 0; i < count; i++) {
dma_fence_put(fc->fences[i]);
if (fc->fences[i]) {dma_fence_signal(fc->fences[i]);dma_fence_put(fc->fences[i]);}The usual text book idiom for such cleanup cases is:
while (i--) { dma_fence_signal(fc->fences[i]); dma_fence_put(fc->chains[i]); }
Additional to that we need a different error handling target for the case that the mock_chain() allocation fails (or just do another dma_fence_put there).
Regards, Christian.
dma_fence_put(fc->chains[i]);} kvfree(fc->fences);
Hi Christian,
Understood. Since this is only a minor issue in a unit test and does not affect production code, I agree that it does not need backporting to stable.
I'll drop this patch.
Thanks for your review.
Best regards,
WenTao Liang