[AMD Official Use Only - AMD Internal Distribution Only] Reviewed-by: Tao Zhou <tao.zhou1@xxxxxxx> > -----Original Message----- > From: Liu, Xiang(Dean) <Xiang.Liu@xxxxxxx> > Sent: Thursday, March 6, 2025 4:23 PM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Zhang, Hawking <Hawking.Zhang@xxxxxxx>; Zhou1, Tao > <Tao.Zhou1@xxxxxxx>; Liu, Xiang(Dean) <Xiang.Liu@xxxxxxx> > Subject: [PATCH v2] drm/amdgpu: Use unique CPER record id across devices > > Encode socket id to CPER record id to be unique across devices. > > v2: add pointer check for adev->smuio.funcs->get_socket_id > v2: set 0 if adev->smuio.funcs->get_socket_id is NULL > > Signed-off-by: Xiang Liu <xiang.liu@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c > index d77da7ca9a87..bc8473306063 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c > @@ -57,6 +57,8 @@ void amdgpu_cper_entry_fill_hdr(struct amdgpu_device *adev, > enum amdgpu_cper_type type, > enum cper_error_severity sev) > { > + char record_id[16]; > + > hdr->signature[0] = 'C'; > hdr->signature[1] = 'P'; > hdr->signature[2] = 'E'; > @@ -71,7 +73,13 @@ void amdgpu_cper_entry_fill_hdr(struct amdgpu_device > *adev, > > amdgpu_cper_get_timestamp(&hdr->timestamp); > > - snprintf(hdr->record_id, 8, "%d", atomic_inc_return(&adev->cper.unique_id)); > + snprintf(record_id, 9, "%d:%X", > + (adev->smuio.funcs && adev->smuio.funcs->get_socket_id) ? > + adev->smuio.funcs->get_socket_id(adev) : > + 0, > + atomic_inc_return(&adev->cper.unique_id)); > + memcpy(hdr->record_id, record_id, 8); > + > snprintf(hdr->platform_id, 16, "0x%04X:0x%04X", > adev->pdev->vendor, adev->pdev->device); > /* pmfw version should be part of creator_id according to CPER spec */ @@ - > 117,10 +125,10 @@ static int amdgpu_cper_entry_fill_section_desc(struct > amdgpu_device *adev, > section_desc->severity = sev; > section_desc->sec_type = sec_type; > > - if (adev->smuio.funcs && > - adev->smuio.funcs->get_socket_id) > - snprintf(section_desc->fru_text, 20, "OAM%d", > - adev->smuio.funcs->get_socket_id(adev)); > + snprintf(section_desc->fru_text, 20, "OAM%d", > + (adev->smuio.funcs && adev->smuio.funcs->get_socket_id) ? > + adev->smuio.funcs->get_socket_id(adev) : > + 0); > > if (bp_threshold) > section_desc->flag_bits.exceed_err_threshold = 1; > -- > 2.34.1