On 5/23/26 2:43 AM, Anisa Su wrote:
> From: Ira Weiny <[email protected]>
> 
> CXL rev 3.1 section 8.2.9.2.1 adds the Dynamic Capacity Event Records.
> User space can use trace events for debugging of DC capacity changes.
> 
> Add DC trace points to the trace log.
> 
> Based on an original patch by Navneet Singh.
> 
> Reviewed-by: Jonathan Cameron <[email protected]>
> Reviewed-by: Dave Jiang <[email protected]>
> Reviewed-by: Fan Ni <[email protected]>
> Signed-off-by: Ira Weiny <[email protected]>
> ---
>  drivers/cxl/core/mbox.c  |  5 ++++
>  drivers/cxl/core/trace.h | 65 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 70 insertions(+)
> 
> diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c
> index 486110e1c03d..271f4556db85 100644
> --- a/drivers/cxl/core/mbox.c
> +++ b/drivers/cxl/core/mbox.c
> @@ -1030,6 +1030,11 @@ static void __cxl_event_trace_record(struct cxl_memdev 
> *cxlmd,
>               ev_type = CXL_CPER_EVENT_MEM_MODULE;
>       else if (uuid_equal(uuid, &CXL_EVENT_MEM_SPARING_UUID))
>               ev_type = CXL_CPER_EVENT_MEM_SPARING;
> +     else if (uuid_equal(uuid, &CXL_EVENT_DC_EVENT_UUID)) {
> +/* FIXME still valid? */

? address or delete?

> +             trace_cxl_dynamic_capacity(cxlmd, type, &record->event.dcd);
> +             return;
> +     }
>  
>       cxl_event_trace_record(cxlmd, type, ev_type, uuid, &record->event);
>  }
> diff --git a/drivers/cxl/core/trace.h b/drivers/cxl/core/trace.h
> index a972e4ef1936..421e492d1b3f 100644
> --- a/drivers/cxl/core/trace.h
> +++ b/drivers/cxl/core/trace.h
> @@ -1099,6 +1099,71 @@ TRACE_EVENT(cxl_poison,
>       )
>  );
>  
> +/*
> + * Dynamic Capacity Event Record - DER
> + *
> + * CXL rev 3.1 section 8.2.9.2.1.6 Table 8-50

Let's move it to 4.0

> + */
> +
> +#define CXL_DC_ADD_CAPACITY                  0x00
> +#define CXL_DC_REL_CAPACITY                  0x01
> +#define CXL_DC_FORCED_REL_CAPACITY           0x02
> +#define CXL_DC_REG_CONF_UPDATED                      0x03
> +#define show_dc_evt_type(type)       __print_symbolic(type,          \
> +     { CXL_DC_ADD_CAPACITY,  "Add capacity"},                \
> +     { CXL_DC_REL_CAPACITY,  "Release capacity"},            \
> +     { CXL_DC_FORCED_REL_CAPACITY,   "Forced capacity release"},     \
> +     { CXL_DC_REG_CONF_UPDATED,      "Region Configuration Updated"  } \
> +)
> +
> +TRACE_EVENT(cxl_dynamic_capacity,
> +
> +     TP_PROTO(const struct cxl_memdev *cxlmd, enum cxl_event_log_type log,
> +              struct cxl_event_dcd *rec),
> +
> +     TP_ARGS(cxlmd, log, rec),
> +
> +     TP_STRUCT__entry(
> +             CXL_EVT_TP_entry
> +
> +             /* Dynamic capacity Event */
> +             __field(u8, event_type)
> +             __field(u16, hostid)
> +             __field(u8, partition_id)
> +             __field(u64, dpa_start)
> +             __field(u64, length)
> +             __array(u8, uuid, UUID_SIZE)
> +             __field(u16, sh_extent_seq)
> +     ),
> +
> +     TP_fast_assign(
> +             CXL_EVT_TP_fast_assign(cxlmd, log, rec->hdr);
> +
> +             /* Dynamic_capacity Event */
> +             __entry->event_type = rec->event_type;
> +
> +             /* DCD event record data */
> +             __entry->hostid = le16_to_cpu(rec->host_id);
> +             __entry->partition_id = rec->partition_index;

CXL r4.0 8.2.10.2.1.6 Table 8-229

Couple issues.
1. This is not partition_index, it's updated_region_index.
2. It's only valid for events of type Region Configuration Updated. Otherwise 
we may be displaying garbage or 0.

So it needs a rename and also a check for validity. Better to fix it before 
rasdaemon start picking it up.

DJ

> +             __entry->dpa_start = le64_to_cpu(rec->extent.start_dpa);
> +             __entry->length = le64_to_cpu(rec->extent.length);
> +             memcpy(__entry->uuid, &rec->extent.uuid, UUID_SIZE);
> +             __entry->sh_extent_seq = 
> le16_to_cpu(rec->extent.shared_extn_seq);
> +     ),
> +
> +     CXL_EVT_TP_printk("event_type='%s' host_id='%d' partition_id='%d' " \
> +             "starting_dpa=%llx length=%llx tag=%pU " \
> +             "shared_extent_sequence=%d",
> +             show_dc_evt_type(__entry->event_type),
> +             __entry->hostid,
> +             __entry->partition_id,
> +             __entry->dpa_start,
> +             __entry->length,
> +             __entry->uuid,
> +             __entry->sh_extent_seq
> +     )
> +);
> +
>  #endif /* _CXL_EVENTS_H */
>  
>  #define TRACE_INCLUDE_FILE trace


Reply via email to