All of lore.kernel.org
 help / color / mirror / Atom feed
* [radeon-alex:amd-staging-drm-next 377/447] drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1007 amdgpu_ras_add_bad_pages() warn: variable dereferenced before check 'con' (see line 1003)
@ 2019-03-26  7:16 Dan Carpenter
  0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2019-03-26  7:16 UTC (permalink / raw)
  To: kbuild, xinhui pan; +Cc: Alex Deucher, kbuild-all, dri-devel

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  

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-03-26  7:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-26  7:16 [radeon-alex:amd-staging-drm-next 377/447] drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1007 amdgpu_ras_add_bad_pages() warn: variable dereferenced before check 'con' (see line 1003) Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.