Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu: add return value for convert_ras_err_addr

So upper layer can return failure directly if address conversion fails.

Signed-off-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Tao Zhou and committed by
Alex Deucher
f44a3058 76723fbc

+22 -11
+13 -6
drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c
··· 461 461 462 462 addr_out.pa.pa = pa_addr; 463 463 464 - if (adev->umc.ras && adev->umc.ras->convert_ras_err_addr) 465 - adev->umc.ras->convert_ras_err_addr(adev, &err_data, NULL, 464 + if (adev->umc.ras && adev->umc.ras->convert_ras_err_addr) { 465 + ret = adev->umc.ras->convert_ras_err_addr(adev, &err_data, NULL, 466 466 &addr_out, false); 467 - else 467 + if (ret) 468 + goto out; 469 + } else { 468 470 goto out; 471 + } 469 472 470 473 for (i = 0; i < adev->umc.retire_unit; i++) { 471 474 if (pos >= len) ··· 491 488 { 492 489 struct ta_ras_query_address_input addr_in; 493 490 struct ta_ras_query_address_output addr_out; 491 + int ret; 494 492 495 493 memset(&addr_in, 0, sizeof(addr_in)); 496 494 addr_in.ma.err_addr = err_addr; ··· 500 496 addr_in.ma.node_inst = node; 501 497 addr_in.ma.socket_id = socket; 502 498 503 - if (adev->umc.ras && adev->umc.ras->convert_ras_err_addr) 504 - adev->umc.ras->convert_ras_err_addr(adev, NULL, &addr_in, 499 + if (adev->umc.ras && adev->umc.ras->convert_ras_err_addr) { 500 + ret = adev->umc.ras->convert_ras_err_addr(adev, NULL, &addr_in, 505 501 &addr_out, dump_addr); 506 - else 502 + if (ret) 503 + return ret; 504 + } else { 507 505 return 0; 506 + } 508 507 509 508 *addr = addr_out.pa.pa; 510 509
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_umc.h
··· 70 70 enum amdgpu_mca_error_type type, void *ras_error_status); 71 71 int (*update_ecc_status)(struct amdgpu_device *adev, 72 72 uint64_t status, uint64_t ipid, uint64_t addr); 73 - void (*convert_ras_err_addr)(struct amdgpu_device *adev, 73 + int (*convert_ras_err_addr)(struct amdgpu_device *adev, 74 74 struct ras_err_data *err_data, 75 75 struct ta_ras_query_address_input *addr_in, 76 76 struct ta_ras_query_address_output *addr_out,
+8 -4
drivers/gpu/drm/amd/amdgpu/umc_v12_0.c
··· 173 173 umc_v12_0_reset_error_count(adev); 174 174 } 175 175 176 - static void umc_v12_0_convert_error_address(struct amdgpu_device *adev, 176 + static int umc_v12_0_convert_error_address(struct amdgpu_device *adev, 177 177 struct ras_err_data *err_data, 178 178 struct ta_ras_query_address_input *addr_in, 179 179 struct ta_ras_query_address_output *addr_out, ··· 183 183 uint64_t soc_pa, retired_page, column, err_addr; 184 184 struct ta_ras_query_address_output addr_out_tmp; 185 185 struct ta_ras_query_address_output *paddr_out; 186 + int ret = 0; 186 187 187 188 if (!addr_out) 188 189 paddr_out = &addr_out_tmp; ··· 194 193 if (addr_in) { 195 194 err_addr = addr_in->ma.err_addr; 196 195 addr_in->addr_type = TA_RAS_MCA_TO_PA; 197 - if (psp_ras_query_address(&adev->psp, addr_in, paddr_out)) { 196 + ret = psp_ras_query_address(&adev->psp, addr_in, paddr_out); 197 + if (ret) { 198 198 dev_warn(adev->dev, "Failed to query RAS physical address for 0x%llx", 199 199 err_addr); 200 200 201 - return; 201 + return ret; 202 202 } 203 203 204 204 bank = paddr_out->pa.bank; ··· 211 209 soc_pa = paddr_out->pa.pa; 212 210 213 211 if (!err_data && !dump_addr) 214 - return; 212 + return ret; 215 213 216 214 col = (err_addr >> 1) & 0x1fULL; 217 215 /* clear [C3 C2] in soc physical address */ ··· 243 241 amdgpu_umc_fill_error_record(err_data, err_addr, 244 242 retired_page, channel_index, umc_inst); 245 243 } 244 + 245 + return ret; 246 246 } 247 247 248 248 static int umc_v12_0_query_error_address(struct amdgpu_device *adev,