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.

cxl/events: Add extra validity checks for corrected memory error count in General Media Event Record

According to the CXL Specification Revision 3.2, Section 8.2.10.2.1.1,
Table 8-57 (General Media Event Record), the Corrected Memory Error Count
field is valid under the following conditions:
1. The Threshold Event bit is set in the Memory Event Descriptor field,
and
2. The Corrected Memory Error Count must be greater than 0 for events
where the Advanced Programmable Threshold Counter has expired.

Additionally, if the Advanced Programmable Corrected Memory Error Counter
Expire bit in the Memory Event Type field is set, then the Threshold Event
bit in the Memory Event Descriptor field shall also be set.

Add validity checks for the above conditions while reporting the event to
the userspace.

Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Shiju Jose <shiju.jose@huawei.com>
Link: https://patch.msgid.link/20250717101817.2104-3-shiju.jose@huawei.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>

authored by

Shiju Jose and committed by
Dave Jiang
cd3b36cf 1f4f8166

+13 -1
+9
drivers/cxl/core/mbox.c
··· 926 926 if (cxl_store_rec_gen_media((struct cxl_memdev *)cxlmd, evt)) 927 927 dev_dbg(&cxlmd->dev, "CXL store rec_gen_media failed\n"); 928 928 929 + if (evt->gen_media.media_hdr.descriptor & 930 + CXL_GMER_EVT_DESC_THRESHOLD_EVENT) 931 + WARN_ON_ONCE((evt->gen_media.media_hdr.type & 932 + CXL_GMER_MEM_EVT_TYPE_AP_CME_COUNTER_EXPIRE) && 933 + !get_unaligned_le24(evt->gen_media.cme_count)); 934 + else 935 + WARN_ON_ONCE(evt->gen_media.media_hdr.type & 936 + CXL_GMER_MEM_EVT_TYPE_AP_CME_COUNTER_EXPIRE); 937 + 929 938 trace_cxl_general_media(cxlmd, type, cxlr, hpa, 930 939 hpa_alias, &evt->gen_media); 931 940 } else if (event_type == CXL_CPER_EVENT_DRAM) {
+4 -1
drivers/cxl/core/trace.h
··· 506 506 uuid_copy(&__entry->region_uuid, &uuid_null); 507 507 } 508 508 __entry->cme_threshold_ev_flags = rec->cme_threshold_ev_flags; 509 - __entry->cme_count = get_unaligned_le24(rec->cme_count); 509 + if (rec->media_hdr.descriptor & CXL_GMER_EVT_DESC_THRESHOLD_EVENT) 510 + __entry->cme_count = get_unaligned_le24(rec->cme_count); 511 + else 512 + __entry->cme_count = 0; 510 513 ), 511 514 512 515 CXL_EVT_TP_printk("dpa=%llx dpa_flags='%s' " \