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

Reply via email to