diff options
author | Monk Liu <Monk.Liu@amd.com> | 2017-04-21 07:35:11 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-05-24 17:40:18 -0400 |
commit | 17b2e332a277bf8a1314bfa58ac17d38b77d3c14 (patch) | |
tree | a5d1df7a8428a3621c2b7eea2d59b1da9694fe5f /drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c | |
parent | 3af906f0cf6bdf9b7c300a0fa34858a02c71c730 (diff) |
drm/amdgpu:need som change on vega10 mailbox
if sriov gpu reset is invoked by job timeout, it is run
in a global work-queue which is very slow and better not call
msleep ortherwise it takes long time to get back CPU.
so make below changes:
1: Change msleep 1 to mdelay 5
2: Ignore the ack fail from pf after time out,
because VF FLR will clear ack, sometime VF FLR is done
prior to the beginning of poll_ack so we can ignore this ack
TODO:
Put job_timedout (and the following gpu reset) in a driver thread,
instead of the global work_struct.
Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Reviewed-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c index 712f36ef2efd..e967a7b17afe 100644 --- a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c +++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c | |||
@@ -124,8 +124,8 @@ static int xgpu_ai_poll_ack(struct amdgpu_device *adev) | |||
124 | r = -ETIME; | 124 | r = -ETIME; |
125 | break; | 125 | break; |
126 | } | 126 | } |
127 | msleep(1); | 127 | mdelay(5); |
128 | timeout -= 1; | 128 | timeout -= 5; |
129 | 129 | ||
130 | reg = RREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0, | 130 | reg = RREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0, |
131 | mmBIF_BX_PF0_MAILBOX_CONTROL)); | 131 | mmBIF_BX_PF0_MAILBOX_CONTROL)); |
@@ -141,12 +141,12 @@ static int xgpu_ai_poll_msg(struct amdgpu_device *adev, enum idh_event event) | |||
141 | r = xgpu_ai_mailbox_rcv_msg(adev, event); | 141 | r = xgpu_ai_mailbox_rcv_msg(adev, event); |
142 | while (r) { | 142 | while (r) { |
143 | if (timeout <= 0) { | 143 | if (timeout <= 0) { |
144 | pr_err("Doesn't get ack from pf.\n"); | 144 | pr_err("Doesn't get msg:%d from pf.\n", event); |
145 | r = -ETIME; | 145 | r = -ETIME; |
146 | break; | 146 | break; |
147 | } | 147 | } |
148 | msleep(1); | 148 | mdelay(5); |
149 | timeout -= 1; | 149 | timeout -= 5; |
150 | 150 | ||
151 | r = xgpu_ai_mailbox_rcv_msg(adev, event); | 151 | r = xgpu_ai_mailbox_rcv_msg(adev, event); |
152 | } | 152 | } |
@@ -165,7 +165,7 @@ static int xgpu_ai_send_access_requests(struct amdgpu_device *adev, | |||
165 | /* start to poll ack */ | 165 | /* start to poll ack */ |
166 | r = xgpu_ai_poll_ack(adev); | 166 | r = xgpu_ai_poll_ack(adev); |
167 | if (r) | 167 | if (r) |
168 | return r; | 168 | pr_err("Doesn't get ack from pf, continue\n"); |
169 | 169 | ||
170 | xgpu_ai_mailbox_set_valid(adev, false); | 170 | xgpu_ai_mailbox_set_valid(adev, false); |
171 | 171 | ||
@@ -174,8 +174,10 @@ static int xgpu_ai_send_access_requests(struct amdgpu_device *adev, | |||
174 | req == IDH_REQ_GPU_FINI_ACCESS || | 174 | req == IDH_REQ_GPU_FINI_ACCESS || |
175 | req == IDH_REQ_GPU_RESET_ACCESS) { | 175 | req == IDH_REQ_GPU_RESET_ACCESS) { |
176 | r = xgpu_ai_poll_msg(adev, IDH_READY_TO_ACCESS_GPU); | 176 | r = xgpu_ai_poll_msg(adev, IDH_READY_TO_ACCESS_GPU); |
177 | if (r) | 177 | if (r) { |
178 | pr_err("Doesn't get READY_TO_ACCESS_GPU from pf, give up\n"); | ||
178 | return r; | 179 | return r; |
180 | } | ||
179 | } | 181 | } |
180 | 182 | ||
181 | return 0; | 183 | return 0; |
@@ -211,7 +213,7 @@ static int xgpu_ai_mailbox_ack_irq(struct amdgpu_device *adev, | |||
211 | struct amdgpu_irq_src *source, | 213 | struct amdgpu_irq_src *source, |
212 | struct amdgpu_iv_entry *entry) | 214 | struct amdgpu_iv_entry *entry) |
213 | { | 215 | { |
214 | DRM_DEBUG("get ack intr and do nothing.\n"); | 216 | printk("get ack intr and do nothing.\n"); |
215 | return 0; | 217 | return 0; |
216 | } | 218 | } |
217 | 219 | ||