@@ -873,68 +873,59 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
873873 ? - EFAULT : 0 ;
874874 }
875875 case AMDGPU_INFO_READ_MMR_REG : {
876- int ret = 0 ;
877- unsigned int n , alloc_size ;
878- uint32_t * regs ;
879876 unsigned int se_num = (info -> read_mmr_reg .instance >>
880877 AMDGPU_INFO_MMR_SE_INDEX_SHIFT ) &
881878 AMDGPU_INFO_MMR_SE_INDEX_MASK ;
882879 unsigned int sh_num = (info -> read_mmr_reg .instance >>
883880 AMDGPU_INFO_MMR_SH_INDEX_SHIFT ) &
884881 AMDGPU_INFO_MMR_SH_INDEX_MASK ;
885-
886- if (! down_read_trylock ( & adev -> reset_domain -> sem ))
887- return - ENOENT ;
882+ unsigned int alloc_size ;
883+ uint32_t * regs ;
884+ int ret ;
888885
889886 /* set full masks if the userspace set all bits
890887 * in the bitfields
891888 */
892- if (se_num == AMDGPU_INFO_MMR_SE_INDEX_MASK ) {
889+ if (se_num == AMDGPU_INFO_MMR_SE_INDEX_MASK )
893890 se_num = 0xffffffff ;
894- } else if (se_num >= AMDGPU_GFX_MAX_SE ) {
895- ret = - EINVAL ;
896- goto out ;
897- }
891+ else if (se_num >= AMDGPU_GFX_MAX_SE )
892+ return - EINVAL ;
898893
899- if (sh_num == AMDGPU_INFO_MMR_SH_INDEX_MASK ) {
894+ if (sh_num == AMDGPU_INFO_MMR_SH_INDEX_MASK )
900895 sh_num = 0xffffffff ;
901- } else if (sh_num >= AMDGPU_GFX_MAX_SH_PER_SE ) {
902- ret = - EINVAL ;
903- goto out ;
904- }
896+ else if (sh_num >= AMDGPU_GFX_MAX_SH_PER_SE )
897+ return - EINVAL ;
905898
906- if (info -> read_mmr_reg .count > 128 ) {
907- ret = - EINVAL ;
908- goto out ;
909- }
899+ if (info -> read_mmr_reg .count > 128 )
900+ return - EINVAL ;
910901
911- regs = kmalloc_array (info -> read_mmr_reg .count , sizeof (* regs ), GFP_KERNEL );
912- if (!regs ) {
913- ret = - ENOMEM ;
914- goto out ;
915- }
902+ regs = kmalloc_array (info -> read_mmr_reg .count , sizeof (* regs ),
903+ GFP_KERNEL );
904+ if (!regs )
905+ return - ENOMEM ;
916906
907+ down_read (& adev -> reset_domain -> sem );
917908 alloc_size = info -> read_mmr_reg .count * sizeof (* regs );
918-
919909 amdgpu_gfx_off_ctrl (adev , false);
910+ ret = 0 ;
920911 for (i = 0 ; i < info -> read_mmr_reg .count ; i ++ ) {
921912 if (amdgpu_asic_read_register (adev , se_num , sh_num ,
922913 info -> read_mmr_reg .dword_offset + i ,
923914 & regs [i ])) {
924915 DRM_DEBUG_KMS ("unallowed offset %#x\n" ,
925916 info -> read_mmr_reg .dword_offset + i );
926- kfree (regs );
927- amdgpu_gfx_off_ctrl (adev , true);
928917 ret = - EFAULT ;
929- goto out ;
918+ break ;
930919 }
931920 }
932921 amdgpu_gfx_off_ctrl (adev , true);
933- n = copy_to_user (out , regs , min (size , alloc_size ));
934- kfree (regs );
935- ret = (n ? - EFAULT : 0 );
936- out :
937922 up_read (& adev -> reset_domain -> sem );
923+
924+ if (!ret ) {
925+ ret = copy_to_user (out , regs , min (size , alloc_size ))
926+ ? - EFAULT : 0 ;
927+ }
928+ kfree (regs );
938929 return ret ;
939930 }
940931 case AMDGPU_INFO_DEV_INFO : {
0 commit comments