]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/ras: Correct info field of bad page threshold exceed CPER
authorXiang Liu <xiang.liu@amd.com>
Mon, 20 Oct 2025 08:44:29 +0000 (16:44 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 4 Nov 2025 16:52:47 +0000 (11:52 -0500)
Correct valid_bits and ms_chk_bits of section info field for bad page
threshold exceed CPER to match OOB's behavior.

Signed-off-by: Xiang Liu <xiang.liu@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/ras/rascore/ras_cper.c

index 2343991adccf314baf0e5b591cc65ef84c571331..c2e9fa7c3e6cb7e6278a18b860dd4b399e4ed875 100644 (file)
@@ -65,7 +65,6 @@ static void fill_section_hdr(struct ras_core_context *ras_core,
        hdr->error_severity             = sev;
 
        hdr->valid_bits.platform_id     = 1;
-       hdr->valid_bits.partition_id    = 1;
        hdr->valid_bits.timestamp       = 1;
 
        ras_core_get_device_system_info(ras_core, &dev_info);
@@ -147,13 +146,19 @@ static int fill_section_fatal(struct ras_core_context *ras_core,
 }
 
 static int fill_section_runtime(struct ras_core_context *ras_core,
-               struct cper_section_runtime *runtime, struct ras_log_info *trace)
+               struct cper_section_runtime *runtime, struct ras_log_info *trace,
+               enum ras_cper_severity sev)
 {
        runtime->hdr.valid_bits.err_info_cnt = 1;
        runtime->hdr.valid_bits.err_context_cnt = 1;
 
        runtime->descriptor.error_type = RUNTIME;
        runtime->descriptor.ms_chk_bits.err_type_valid = 1;
+       if (sev == RAS_CPER_SEV_RMA) {
+               runtime->descriptor.valid_bits.ms_chk = 1;
+               runtime->descriptor.ms_chk_bits.err_type = 1;
+               runtime->descriptor.ms_chk_bits.pcc = 1;
+       }
 
        runtime->reg.reg_ctx_type = CPER_CTX_TYPE__CRASH;
        runtime->reg.reg_arr_size = sizeof(runtime->reg.reg_dump);
@@ -189,7 +194,7 @@ static int cper_generate_runtime_record(struct ras_core_context *ras_core,
                fill_section_descriptor(ras_core, descriptor, sev, RUNTIME,
                        RAS_NONSTD_SEC_OFFSET(hdr->sec_cnt, i),
                        sizeof(struct cper_section_runtime));
-               fill_section_runtime(ras_core, runtime, trace_arr[i]);
+               fill_section_runtime(ras_core, runtime, trace_arr[i], sev);
        }
 
        return 0;