On Fri, Oct 9, 2026 at 5:56 AM Jesse Zhang <[email protected]> wrote: > > The UQ_FW_AREAS query computes the copy_to_user() result into ret and > then returns 0 anyway, so userspace never learns that the metadata was > not written. With an invalid return pointer all three IP types (GFX, > COMPUTE, DMA) report success on Navi31. > > Return the copy_to_user() result like the other INFO queries do. > > Fixes: 44b69cf1d35c ("drm/amdgpu: Update AMDGPU_INFO_UQ_FW_AREAS query for > compute") > Signed-off-by: Jesse Zhang <[email protected]>
Reviewed-by: Alex Deucher <[email protected]> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 15 ++++++--------- > 1 file changed, 6 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > index 1589b6a6575f..b98091f31dda 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > @@ -1430,25 +1430,22 @@ int amdgpu_info_ioctl(struct drm_device *dev, void > *data, struct drm_file *filp) > if (ret) > return ret; > > - ret = copy_to_user(out, &meta_info, > - min((size_t)size, > sizeof(meta_info))) ? -EFAULT : 0; > - return 0; > + return copy_to_user(out, &meta_info, > + min((size_t)size, > sizeof(meta_info))) ? -EFAULT : 0; > case AMDGPU_HW_IP_COMPUTE: > ret = amdgpu_userq_metadata_info_compute(adev, info, > &meta_info.compute); > if (ret) > return ret; > > - ret = copy_to_user(out, &meta_info, > - min((size_t)size, > sizeof(meta_info))) ? -EFAULT : 0; > - return 0; > + return copy_to_user(out, &meta_info, > + min((size_t)size, > sizeof(meta_info))) ? -EFAULT : 0; > case AMDGPU_HW_IP_DMA: > ret = amdgpu_userq_metadata_info_sdma(adev, info, > &meta_info.sdma); > if (ret) > return ret; > > - ret = copy_to_user(out, &meta_info, > - min((size_t)size, > sizeof(meta_info))) ? -EFAULT : 0; > - return 0; > + return copy_to_user(out, &meta_info, > + min((size_t)size, > sizeof(meta_info))) ? -EFAULT : 0; > default: > return -EINVAL; > } > -- > 2.50.1 >
