[bug report] drm/amdgpu: update userqueue BOs and PDs
Dan Carpenter
dan.carpenter at linaro.org
Thu Apr 10 07:06:26 UTC 2025
Hello Arvind Yadav,
Commit 70773bef4e09 ("drm/amdgpu: update userqueue BOs and PDs") from
Sep 25, 2024 (linux-next), leads to the following Smatch static
checker warning:
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:139 amdgpu_gem_update_bo_mapping()
error: we previously assumed 'bo_va' could be null (see line 124)
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
115 static void
116 amdgpu_gem_update_bo_mapping(struct drm_file *filp,
117 struct amdgpu_bo_va *bo_va,
118 uint32_t operation,
119 uint64_t point,
120 struct dma_fence *fence,
121 struct drm_syncobj *syncobj,
122 struct dma_fence_chain *chain)
123 {
124 struct amdgpu_bo *bo = bo_va ? bo_va->base.bo : NULL;
^^^^^^^^^^
If bo_va is NULL then bo is also NULL
125 struct amdgpu_fpriv *fpriv = filp->driver_priv;
126 struct amdgpu_vm *vm = &fpriv->vm;
127 struct dma_fence *last_update;
128
129 if (!syncobj)
130 return;
131
132 /* Find the last update fence */
133 switch (operation) {
134 case AMDGPU_VA_OP_MAP:
135 case AMDGPU_VA_OP_REPLACE:
136 if (bo && (bo->tbo.base.resv == vm->root.bo->tbo.base.resv))
^^
137 last_update = vm->last_update;
138 else
--> 139 last_update = bo_va->last_pt_update;
^^^^^
This pointer is dereferenced without being checked.
140 break;
141 case AMDGPU_VA_OP_UNMAP:
142 case AMDGPU_VA_OP_CLEAR:
143 last_update = fence;
144 break;
145 default:
146 return;
147 }
148
149 /* Add fence to timeline */
150 if (!point)
151 drm_syncobj_replace_fence(syncobj, last_update);
152 else
153 drm_syncobj_add_point(syncobj, chain, last_update, point);
154 }
regards,
dan carpenter
More information about the amd-gfx
mailing list