From 74a6f99cf3f97a602b85cea75cfac0f4b9691510 Mon Sep 17 00:00:00 2001 From: Mukul Joshi Date: Fri, 14 Aug 2026 13:40:38 -0400 Subject: [PATCH] drm/amdgpu: Handle concurrent UALINK handle import race When two threads import the same UALINK handle concurrently, the first xa_insert() succeeds and the second gets -EBUSY. Convert -EBUSY to -EAGAIN so user-space retries instead of seeing a spurious error. Signed-off-by: Mukul Joshi Reviewed-by: Felix Kuehling Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c index b8e1eb8cf19c..20a74ac00cac 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c @@ -3852,9 +3852,15 @@ int amdgpu_ualink_import_handle(struct drm_device *dev, imp_xa_node, GFP_KERNEL); if (r) { kfree(imp_xa_node); - dev_err(adev->dev, - "IMPORT: XA insert failed for handle:%llx:%llx err:%d\n", - handle.handle_hi, handle.handle_lo, r); + /* -EBUSY means another thread raced us and inserted a + * node for the same handle. Ask user-space to retry. + */ + if (r == -EBUSY) + r = -EAGAIN; + else + dev_err(adev->dev, + "IMPORT: XA insert failed for handle:%llx:%llx err:%d\n", + handle.handle_hi, handle.handle_lo, r); goto out; }