On 4/29/25 11:12, Liang, Prike wrote:
>>> + if (!IS_ERR_OR_NULL(fpriv->evf_mgr.ev_fence)) {
>>
>> Please don't use ERR_PTR functions on members.
>>
>>> + r = amdgpu_eviction_fence_attach(&fpriv->evf_mgr, abo);
>>> + if (r) {
>>> + DRM_DEBUG_DRIVER("Failed to attach eviction fence to
>> BO\n");
>>> + amdgpu_bo_unreserve(abo);
>>> + return r;
>>> + }
>>
>> We should always have a stub fence in fpriv->evf_mgr.ev_fence, so those
>> checks
>> are unnecessary.
> I checked that when enabling the kq and uq at the same time, and before
> schedule any user queue task then the eviction fence is NULL.
Yeah, but that case is handled by amdgpu_eviction_fence_attach() and *NOT* here.
You are completely messing up the logic with that stuff here.
Regards,
Christian.
> Based on the current design, the eviction fence only be created at the user
> queue BOs restored time.
>
>> Regards,
>> Christian.
>>
>>> }
>>>
>>> amdgpu_bo_unreserve(abo);
>>> @@ -362,7 +365,8 @@ static void amdgpu_gem_object_close(struct
>> drm_gem_object *obj,
>>> goto out_unlock;
>>> }
>>>
>>> - if (!amdgpu_vm_is_bo_always_valid(vm, bo))
>>> + if (!amdgpu_vm_is_bo_always_valid(vm, bo) &&
>>> + !IS_ERR_OR_NULL(fpriv->evf_mgr.ev_fence))
>>> amdgpu_eviction_fence_detach(&fpriv->evf_mgr, bo);
>>>
>>> bo_va = amdgpu_vm_bo_find(vm, bo);
>