On 12/18/25 10:29, Srinivasan Shanmugam wrote:
> signal_eviction_fence() is declared to return bool, but returns -EINVAL
> when no eviction fence is present. This makes the "no fence" or "the
> NULL-fence" path evaluate to true and triggers a Smatch warning.
>
> v2: Return true instead to explicitly indicate that there is no eviction
> fence to signal and that eviction is already complete. This matches the
> existing caller logic where a NULL fence means "nothing to do" and
> allows restore handling to proceed normally. (Christian)
>
> Fixes the below:
> drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.c:2099
> signal_eviction_fence()
> warn: '(-22)' is not bool
>
> drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.c
> 2090 static bool signal_eviction_fence(struct kfd_process *p)
> ^^^^
>
> 2091 {
> 2092 struct dma_fence *ef;
> 2093 bool ret;
> 2094
> 2095 rcu_read_lock();
> 2096 ef = dma_fence_get_rcu_safe(&p->ef);
> 2097 rcu_read_unlock();
> 2098 if (!ef)
> --> 2099 return -EINVAL;
>
> This should be either true or false.
> Probably true because presumably
> it has been tested?
>
> 2100
> 2101 ret = dma_fence_check_and_signal(ef);
> 2102 dma_fence_put(ef);
> 2103
> 2104 return ret;
> 2105 }
>
> Fixes: 37865e02e6cc ("drm/amdkfd: Fix eviction fence handling")
> Reported by: Dan Carpenter <[email protected]>
> Cc: Philip Yang <[email protected]>
> Cc: Gang BA <[email protected]>
> Cc: Felix Kuehling <[email protected]>
> Signed-off-by: Srinivasan Shanmugam <[email protected]>
Reviewed-by: Christian König <[email protected]>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_process.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> index 028853d39841..82109f939c13 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> @@ -2097,7 +2097,7 @@ static int signal_eviction_fence(struct kfd_process *p)
> ef = dma_fence_get_rcu_safe(&p->ef);
> rcu_read_unlock();
> if (!ef)
> - return -EINVAL;
> + return true;
>
> ret = dma_fence_signal(ef);
> dma_fence_put(ef);