tree: git://people.freedesktop.org/~agd5f/linux.git amd-staging-drm-next head: c9115f8904eef0f880d3b4f8306f553b1bb1c532 commit: ef3da5cab664c16ca25a8d479fac95a7f04080e3 [377/447] drm/amdgpu: add amdgpu_ras.c to support ras
smatch warnings: drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1007 amdgpu_ras_add_bad_pages() warn: variable dereferenced before check 'con' (see line 1003) drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1039 amdgpu_ras_reserve_bad_pages() warn: variable dereferenced before check 'con' (see line 1034) drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1066 amdgpu_ras_release_bad_pages() warn: variable dereferenced before check 'con' (see line 1062) git remote add radeon-alex git://people.freedesktop.org/~agd5f/linux.git git remote update radeon-alex git checkout ef3da5cab664c16ca25a8d479fac95a7f04080e3 vim +/con +1007 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c ef3da5ca xinhui pan 2018-10-31 997 ef3da5ca xinhui pan 2018-10-31 998 /* it deal with vram only. */ ef3da5ca xinhui pan 2018-10-31 999 int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev, ef3da5ca xinhui pan 2018-10-31 1000 unsigned long *bps, int pages) ef3da5ca xinhui pan 2018-10-31 1001 { ef3da5ca xinhui pan 2018-10-31 1002 struct amdgpu_ras *con = amdgpu_ras_get_context(adev); ef3da5ca xinhui pan 2018-10-31 @1003 struct ras_err_handler_data *data = con->eh_data; ^^^^^^^^^^^^ ef3da5ca xinhui pan 2018-10-31 1004 int i = pages; ef3da5ca xinhui pan 2018-10-31 1005 int ret = 0; ef3da5ca xinhui pan 2018-10-31 1006 ef3da5ca xinhui pan 2018-10-31 @1007 if (!con || !data || !bps || pages <= 0) ^^^ ef3da5ca xinhui pan 2018-10-31 1008 return 0; ef3da5ca xinhui pan 2018-10-31 1009 ef3da5ca xinhui pan 2018-10-31 1010 mutex_lock(&con->recovery_lock); ef3da5ca xinhui pan 2018-10-31 1011 if (!data) ef3da5ca xinhui pan 2018-10-31 1012 goto out; ef3da5ca xinhui pan 2018-10-31 1013 ef3da5ca xinhui pan 2018-10-31 1014 if (data->space_left <= pages) ef3da5ca xinhui pan 2018-10-31 1015 if (amdgpu_ras_realloc_eh_data_space(adev, data, pages)) { ef3da5ca xinhui pan 2018-10-31 1016 ret = -ENOMEM; ef3da5ca xinhui pan 2018-10-31 1017 goto out; ef3da5ca xinhui pan 2018-10-31 1018 } ef3da5ca xinhui pan 2018-10-31 1019 ef3da5ca xinhui pan 2018-10-31 1020 while (i--) ef3da5ca xinhui pan 2018-10-31 1021 data->bps[data->count++].bp = bps[i]; ef3da5ca xinhui pan 2018-10-31 1022 ef3da5ca xinhui pan 2018-10-31 1023 data->space_left -= pages; ef3da5ca xinhui pan 2018-10-31 1024 out: ef3da5ca xinhui pan 2018-10-31 1025 mutex_unlock(&con->recovery_lock); ef3da5ca xinhui pan 2018-10-31 1026 ef3da5ca xinhui pan 2018-10-31 1027 return ret; ef3da5ca xinhui pan 2018-10-31 1028 } ef3da5ca xinhui pan 2018-10-31 1029 ef3da5ca xinhui pan 2018-10-31 1030 /* called in gpu recovery/init */ ef3da5ca xinhui pan 2018-10-31 1031 int amdgpu_ras_reserve_bad_pages(struct amdgpu_device *adev) ef3da5ca xinhui pan 2018-10-31 1032 { ef3da5ca xinhui pan 2018-10-31 1033 struct amdgpu_ras *con = amdgpu_ras_get_context(adev); ef3da5ca xinhui pan 2018-10-31 @1034 struct ras_err_handler_data *data = con->eh_data; ef3da5ca xinhui pan 2018-10-31 1035 uint64_t bp; ef3da5ca xinhui pan 2018-10-31 1036 struct amdgpu_bo *bo; ef3da5ca xinhui pan 2018-10-31 1037 int i; ef3da5ca xinhui pan 2018-10-31 1038 ef3da5ca xinhui pan 2018-10-31 @1039 if (!con || !data) ef3da5ca xinhui pan 2018-10-31 1040 return 0; ef3da5ca xinhui pan 2018-10-31 1041 ef3da5ca xinhui pan 2018-10-31 1042 mutex_lock(&con->recovery_lock); ef3da5ca xinhui pan 2018-10-31 1043 /* reserve vram at driver post stage. */ ef3da5ca xinhui pan 2018-10-31 1044 for (i = data->last_reserved; i < data->count; i++) { ef3da5ca xinhui pan 2018-10-31 1045 bp = data->bps[i].bp; ef3da5ca xinhui pan 2018-10-31 1046 ef3da5ca xinhui pan 2018-10-31 1047 if (amdgpu_ras_reserve_vram(adev, bp << PAGE_SHIFT, ef3da5ca xinhui pan 2018-10-31 1048 PAGE_SIZE, &bo)) ef3da5ca xinhui pan 2018-10-31 1049 DRM_ERROR("RAS ERROR: reserve vram %llx fail\n", bp); ef3da5ca xinhui pan 2018-10-31 1050 ef3da5ca xinhui pan 2018-10-31 1051 data->bps[i].bo = bo; ef3da5ca xinhui pan 2018-10-31 1052 data->last_reserved = i + 1; ef3da5ca xinhui pan 2018-10-31 1053 } ef3da5ca xinhui pan 2018-10-31 1054 mutex_unlock(&con->recovery_lock); ef3da5ca xinhui pan 2018-10-31 1055 return 0; ef3da5ca xinhui pan 2018-10-31 1056 } ef3da5ca xinhui pan 2018-10-31 1057 ef3da5ca xinhui pan 2018-10-31 1058 /* called when driver unload */ ef3da5ca xinhui pan 2018-10-31 1059 static int amdgpu_ras_release_bad_pages(struct amdgpu_device *adev) ef3da5ca xinhui pan 2018-10-31 1060 { ef3da5ca xinhui pan 2018-10-31 1061 struct amdgpu_ras *con = amdgpu_ras_get_context(adev); ef3da5ca xinhui pan 2018-10-31 @1062 struct ras_err_handler_data *data = con->eh_data; ef3da5ca xinhui pan 2018-10-31 1063 struct amdgpu_bo *bo; ef3da5ca xinhui pan 2018-10-31 1064 int i; ef3da5ca xinhui pan 2018-10-31 1065 ef3da5ca xinhui pan 2018-10-31 @1066 if (!con || !data) ef3da5ca xinhui pan 2018-10-31 1067 return 0; ef3da5ca xinhui pan 2018-10-31 1068 ef3da5ca xinhui pan 2018-10-31 1069 mutex_lock(&con->recovery_lock); ef3da5ca xinhui pan 2018-10-31 1070 for (i = data->last_reserved - 1; i >= 0; i--) { ef3da5ca xinhui pan 2018-10-31 1071 bo = data->bps[i].bo; ef3da5ca xinhui pan 2018-10-31 1072 ef3da5ca xinhui pan 2018-10-31 1073 amdgpu_ras_release_vram(adev, &bo); ef3da5ca xinhui pan 2018-10-31 1074 ef3da5ca xinhui pan 2018-10-31 1075 data->bps[i].bo = bo; ef3da5ca xinhui pan 2018-10-31 1076 data->last_reserved = i; ef3da5ca xinhui pan 2018-10-31 1077 } ef3da5ca xinhui pan 2018-10-31 1078 mutex_unlock(&con->recovery_lock); ef3da5ca xinhui pan 2018-10-31 1079 return 0; ef3da5ca xinhui pan 2018-10-31 1080 } ef3da5ca xinhui pan 2018-10-31 1081 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel