Skip to content

Commit 8c520c5

Browse files
committed
cxl: Add extended linear cache address alias emission for cxl events
Add the aliased address of extended linear cache when emitting event trace for poison, DRAM and general media of CXL events. Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Li Ming <ming.li@zohomail.com> Reviewed-by: Alison Schofield <alison.schofield@intel.com> Link: https://patch.msgid.link/20250226162224.3633792-4-dave.jiang@intel.com Signed-off-by: Dave Jiang <dave.jiang@intel.com>
1 parent 0ec9849 commit 8c520c5

File tree

3 files changed

+35
-15
lines changed

3 files changed

+35
-15
lines changed

drivers/cxl/core/mbox.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -871,7 +871,7 @@ void cxl_event_trace_record(const struct cxl_memdev *cxlmd,
871871
}
872872

873873
if (trace_cxl_general_media_enabled() || trace_cxl_dram_enabled()) {
874-
u64 dpa, hpa = ULLONG_MAX;
874+
u64 dpa, hpa = ULLONG_MAX, hpa_alias = ULLONG_MAX;
875875
struct cxl_region *cxlr;
876876

877877
/*
@@ -884,14 +884,20 @@ void cxl_event_trace_record(const struct cxl_memdev *cxlmd,
884884

885885
dpa = le64_to_cpu(evt->media_hdr.phys_addr) & CXL_DPA_MASK;
886886
cxlr = cxl_dpa_to_region(cxlmd, dpa);
887-
if (cxlr)
887+
if (cxlr) {
888+
u64 cache_size = cxlr->params.cache_size;
889+
888890
hpa = cxl_dpa_to_hpa(cxlr, cxlmd, dpa);
891+
if (cache_size)
892+
hpa_alias = hpa - cache_size;
893+
}
889894

890895
if (event_type == CXL_CPER_EVENT_GEN_MEDIA)
891896
trace_cxl_general_media(cxlmd, type, cxlr, hpa,
892-
&evt->gen_media);
897+
hpa_alias, &evt->gen_media);
893898
else if (event_type == CXL_CPER_EVENT_DRAM)
894-
trace_cxl_dram(cxlmd, type, cxlr, hpa, &evt->dram);
899+
trace_cxl_dram(cxlmd, type, cxlr, hpa, hpa_alias,
900+
&evt->dram);
895901
}
896902
}
897903
EXPORT_SYMBOL_NS_GPL(cxl_event_trace_record, "CXL");

drivers/cxl/core/region.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3260,7 +3260,7 @@ static int cxl_extended_linear_cache_resize(struct cxl_region *cxlr,
32603260

32613261
if (size != cache_size) {
32623262
dev_warn(&cxlr->dev,
3263-
"Extended Linear Cache size %#lld != CXL size %#lld. No Support!",
3263+
"Extended Linear Cache size %lld != CXL size %lld. No Support!",
32643264
cache_size, size);
32653265
return -EOPNOTSUPP;
32663266
}

drivers/cxl/core/trace.h

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -392,9 +392,10 @@ TRACE_EVENT(cxl_generic_event,
392392
TRACE_EVENT(cxl_general_media,
393393

394394
TP_PROTO(const struct cxl_memdev *cxlmd, enum cxl_event_log_type log,
395-
struct cxl_region *cxlr, u64 hpa, struct cxl_event_gen_media *rec),
395+
struct cxl_region *cxlr, u64 hpa, u64 hpa_alias0,
396+
struct cxl_event_gen_media *rec),
396397

397-
TP_ARGS(cxlmd, log, cxlr, hpa, rec),
398+
TP_ARGS(cxlmd, log, cxlr, hpa, hpa_alias0, rec),
398399

399400
TP_STRUCT__entry(
400401
CXL_EVT_TP_entry
@@ -408,6 +409,7 @@ TRACE_EVENT(cxl_general_media,
408409
__array(u8, comp_id, CXL_EVENT_GEN_MED_COMP_ID_SIZE)
409410
/* Following are out of order to pack trace record */
410411
__field(u64, hpa)
412+
__field(u64, hpa_alias0)
411413
__field_struct(uuid_t, region_uuid)
412414
__field(u16, validity_flags)
413415
__field(u8, rank)
@@ -438,6 +440,7 @@ TRACE_EVENT(cxl_general_media,
438440
CXL_EVENT_GEN_MED_COMP_ID_SIZE);
439441
__entry->validity_flags = get_unaligned_le16(&rec->media_hdr.validity_flags);
440442
__entry->hpa = hpa;
443+
__entry->hpa_alias0 = hpa_alias0;
441444
if (cxlr) {
442445
__assign_str(region_name);
443446
uuid_copy(&__entry->region_uuid, &cxlr->params.uuid);
@@ -455,7 +458,7 @@ TRACE_EVENT(cxl_general_media,
455458
"device=%x validity_flags='%s' " \
456459
"comp_id=%s comp_id_pldm_valid_flags='%s' " \
457460
"pldm_entity_id=%s pldm_resource_id=%s " \
458-
"hpa=%llx region=%s region_uuid=%pUb " \
461+
"hpa=%llx hpa_alias0=%llx region=%s region_uuid=%pUb " \
459462
"cme_threshold_ev_flags='%s' cme_count=%u",
460463
__entry->dpa, show_dpa_flags(__entry->dpa_flags),
461464
show_event_desc_flags(__entry->descriptor),
@@ -470,7 +473,7 @@ TRACE_EVENT(cxl_general_media,
470473
CXL_GMER_VALID_COMPONENT_ID_FORMAT, __entry->comp_id),
471474
show_pldm_resource_id(__entry->validity_flags, CXL_GMER_VALID_COMPONENT,
472475
CXL_GMER_VALID_COMPONENT_ID_FORMAT, __entry->comp_id),
473-
__entry->hpa, __get_str(region_name), &__entry->region_uuid,
476+
__entry->hpa, __entry->hpa_alias0, __get_str(region_name), &__entry->region_uuid,
474477
show_cme_threshold_ev_flags(__entry->cme_threshold_ev_flags), __entry->cme_count
475478
)
476479
);
@@ -529,9 +532,10 @@ TRACE_EVENT(cxl_general_media,
529532
TRACE_EVENT(cxl_dram,
530533

531534
TP_PROTO(const struct cxl_memdev *cxlmd, enum cxl_event_log_type log,
532-
struct cxl_region *cxlr, u64 hpa, struct cxl_event_dram *rec),
535+
struct cxl_region *cxlr, u64 hpa, u64 hpa_alias0,
536+
struct cxl_event_dram *rec),
533537

534-
TP_ARGS(cxlmd, log, cxlr, hpa, rec),
538+
TP_ARGS(cxlmd, log, cxlr, hpa, hpa_alias0, rec),
535539

536540
TP_STRUCT__entry(
537541
CXL_EVT_TP_entry
@@ -547,6 +551,7 @@ TRACE_EVENT(cxl_dram,
547551
__field(u32, row)
548552
__array(u8, cor_mask, CXL_EVENT_DER_CORRECTION_MASK_SIZE)
549553
__field(u64, hpa)
554+
__field(u64, hpa_alias0)
550555
__field_struct(uuid_t, region_uuid)
551556
__field(u8, rank) /* Out of order to pack trace record */
552557
__field(u8, bank_group) /* Out of order to pack trace record */
@@ -584,6 +589,7 @@ TRACE_EVENT(cxl_dram,
584589
memcpy(__entry->cor_mask, &rec->correction_mask,
585590
CXL_EVENT_DER_CORRECTION_MASK_SIZE);
586591
__entry->hpa = hpa;
592+
__entry->hpa_alias0 = hpa_alias0;
587593
if (cxlr) {
588594
__assign_str(region_name);
589595
uuid_copy(&__entry->region_uuid, &cxlr->params.uuid);
@@ -604,7 +610,7 @@ TRACE_EVENT(cxl_dram,
604610
"validity_flags='%s' " \
605611
"comp_id=%s comp_id_pldm_valid_flags='%s' " \
606612
"pldm_entity_id=%s pldm_resource_id=%s " \
607-
"hpa=%llx region=%s region_uuid=%pUb " \
613+
"hpa=%llx hpa_alias0=%llx region=%s region_uuid=%pUb " \
608614
"sub_channel=%u cme_threshold_ev_flags='%s' cvme_count=%u",
609615
__entry->dpa, show_dpa_flags(__entry->dpa_flags),
610616
show_event_desc_flags(__entry->descriptor),
@@ -622,7 +628,7 @@ TRACE_EVENT(cxl_dram,
622628
CXL_DER_VALID_COMPONENT_ID_FORMAT, __entry->comp_id),
623629
show_pldm_resource_id(__entry->validity_flags, CXL_DER_VALID_COMPONENT,
624630
CXL_DER_VALID_COMPONENT_ID_FORMAT, __entry->comp_id),
625-
__entry->hpa, __get_str(region_name), &__entry->region_uuid,
631+
__entry->hpa, __entry->hpa_alias0, __get_str(region_name), &__entry->region_uuid,
626632
__entry->sub_channel, show_cme_threshold_ev_flags(__entry->cme_threshold_ev_flags),
627633
__entry->cvme_count
628634
)
@@ -870,6 +876,7 @@ TRACE_EVENT(cxl_poison,
870876
__string(region, cxlr ? dev_name(&cxlr->dev) : "")
871877
__field(u64, overflow_ts)
872878
__field(u64, hpa)
879+
__field(u64, hpa_alias0)
873880
__field(u64, dpa)
874881
__field(u32, dpa_length)
875882
__array(char, uuid, 16)
@@ -892,23 +899,30 @@ TRACE_EVENT(cxl_poison,
892899
memcpy(__entry->uuid, &cxlr->params.uuid, 16);
893900
__entry->hpa = cxl_dpa_to_hpa(cxlr, cxlmd,
894901
__entry->dpa);
902+
if (__entry->hpa != ULLONG_MAX && cxlr->params.cache_size)
903+
__entry->hpa_alias0 = __entry->hpa +
904+
cxlr->params.cache_size;
905+
else
906+
__entry->hpa_alias0 = ULLONG_MAX;
895907
} else {
896908
__assign_str(region);
897909
memset(__entry->uuid, 0, 16);
898910
__entry->hpa = ULLONG_MAX;
911+
__entry->hpa_alias0 = ULLONG_MAX;
899912
}
900913
),
901914

902915
TP_printk("memdev=%s host=%s serial=%lld trace_type=%s region=%s " \
903-
"region_uuid=%pU hpa=0x%llx dpa=0x%llx dpa_length=0x%x " \
904-
"source=%s flags=%s overflow_time=%llu",
916+
"region_uuid=%pU hpa=0x%llx hpa_alias0=0x%llx dpa=0x%llx " \
917+
"dpa_length=0x%x source=%s flags=%s overflow_time=%llu",
905918
__get_str(memdev),
906919
__get_str(host),
907920
__entry->serial,
908921
show_poison_trace_type(__entry->trace_type),
909922
__get_str(region),
910923
__entry->uuid,
911924
__entry->hpa,
925+
__entry->hpa_alias0,
912926
__entry->dpa,
913927
__entry->dpa_length,
914928
show_poison_source(__entry->source),

0 commit comments

Comments
 (0)