From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@01.org, xinhui pan <xinhui.pan@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>,
kbuild-all@01.org, dri-devel@lists.freedesktop.org
Subject: [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)
Date: Tue, 26 Mar 2019 10:16:17 +0300 [thread overview]
Message-ID: <20190326071617.GC32613@kadam> (raw)
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
reply other threads:[~2019-03-26 7:16 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190326071617.GC32613@kadam \
--to=dan.carpenter@oracle.com \
--cc=alexander.deucher@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=kbuild-all@01.org \
--cc=kbuild@01.org \
--cc=xinhui.pan@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.