[PATCH 091/109] drm/amd/ras: fix ras cmd returning incorrect cper count
Alex Deucher <[email protected]>
| Newsgroups | org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <[email protected]> |
From: YiPeng Chai <[email protected]> Fix ras cmd returning incorrect cper count. Signed-off-by: YiPeng Chai <[email protected]> Reviewed-by: Hawking Zhang <[email protected]> Signed-off-by: Alex Deucher <[email protected]> --- drivers/gpu/drm/amd/ras/core/cmd.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/amd/ras/core/cmd.c b/drivers/gpu/drm/amd/ras/core/cmd.c index ea5f6194d9863..2eb67ccc562d5 100644 --- a/drivers/gpu/drm/amd/ras/core/cmd.c +++ b/drivers/gpu/drm/amd/ras/core/cmd.c @@ -198,13 +198,13 @@ static int ras_cmd_get_cper_records(struct ras_core_context *ras_core, (struct ras_cmd_cper_record_req *)cmd->input_buff_raw; struct ras_cmd_cper_record_rsp *rsp = (struct ras_cmd_cper_record_rsp *)cmd->output_buff_raw; - struct ras_log_info *trace = NULL; - uint32_t trace_count = MAX_RECORD_PER_BATCH; + struct ras_log_info *batch_logs = NULL; + uint32_t nr_batch_logs = MAX_RECORD_PER_BATCH; struct ras_log_batch_overview overview; uint32_t offset = 0, real_data_len = 0; uint64_t batch_id; uint8_t *buf_ptr = (uint8_t *)(uintptr_t)req->buf_ptr; - int ret = 0, i, count; + int ret = 0, i, count, valid_batch_count = 0; if ((cmd->input_size != sizeof(struct ras_cmd_cper_record_req)) || (cmd->output_buf_size < sizeof(*rsp))) @@ -214,8 +214,8 @@ static int ras_cmd_get_cper_records(struct ras_core_context *ras_core, req->buf_size > RAS_CMD_MAX_CPER_BUF_SZ) return RAS_CMD__ERROR_INVALID_INPUT_DATA; - trace = kcalloc(trace_count, sizeof(*trace), GFP_KERNEL); - if (!trace) { + batch_logs = kcalloc(nr_batch_logs, sizeof(*batch_logs), GFP_KERNEL); + if (!batch_logs) { ret = RAS_CMD__ERROR_GENERIC; goto out; } @@ -226,14 +226,15 @@ static int ras_cmd_get_cper_records(struct ras_core_context *ras_core, if (batch_id >= overview.last_batch_id) break; - count = ras_log_ring_get_batch_records(ras_core, batch_id, trace, - trace_count); + count = ras_log_ring_get_batch_records(ras_core, batch_id, batch_logs, + nr_batch_logs); if (count > 0) { - ret = ras_cper_generate_batch_cper(ras_core, trace, count, + ret = ras_cper_generate_batch_cper(ras_core, batch_logs, count, &buf_ptr[offset], req->buf_size - offset, &real_data_len); if (ret) break; + valid_batch_count++; offset += real_data_len; } } @@ -244,7 +245,7 @@ static int ras_cmd_get_cper_records(struct ras_core_context *ras_core, } rsp->real_data_size = offset; - rsp->real_cper_num = i; + rsp->real_cper_num = valid_batch_count; rsp->remain_num = (ret == -ENOMEM) ? (req->cper_num - i) : 0; rsp->version = 0; @@ -252,7 +253,7 @@ static int ras_cmd_get_cper_records(struct ras_core_context *ras_core, ret = RAS_CMD__SUCCESS; out: - kfree(trace); + kfree(batch_logs); return ret; } -- 2.55.0