Message ID | 77d576abb7e7f9badbb0c117935ad1bcc74899bd.1705534719.git.alison.schofield@intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Support poison list retrieval | expand |
On 1/17/24 17:28, alison.schofield@intel.com wrote: > From: Alison Schofield <alison.schofield@intel.com> > > When parsing CXL events, callers may only be interested in events > that originate from the current process. Introduce an optional > argument to the event trace context: event_pid. When event_pid is > present, simply skip the parsing of events without a matching pid. > It is not a failure to see other, non matching events. > > The initial use case for this is device poison listings where > only the media-error records requested by this process are wanted. > > Signed-off-by: Alison Schofield <alison.schofield@intel.com> > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> > --- > cxl/event_trace.c | 5 +++++ > cxl/event_trace.h | 1 + > 2 files changed, 6 insertions(+) > > diff --git a/cxl/event_trace.c b/cxl/event_trace.c > index db8cc85f0b6f..269060898118 100644 > --- a/cxl/event_trace.c > +++ b/cxl/event_trace.c > @@ -208,6 +208,11 @@ static int cxl_event_parse(struct tep_event *event, struct tep_record *record, > return 0; > } > > + if (event_ctx->event_pid) { > + if (event_ctx->event_pid != tep_data_pid(event->tep, record)) > + return 0; > + } > + > if (event_ctx->parse_event) > return event_ctx->parse_event(event, record, > &event_ctx->jlist_head); > diff --git a/cxl/event_trace.h b/cxl/event_trace.h > index ec6267202c8b..7f7773b2201f 100644 > --- a/cxl/event_trace.h > +++ b/cxl/event_trace.h > @@ -15,6 +15,7 @@ struct event_ctx { > const char *system; > struct list_head jlist_head; > const char *event_name; /* optional */ > + int event_pid; /* optional */ > int (*parse_event)(struct tep_event *event, struct tep_record *record, > struct list_head *jlist_head); /* optional */ > };
diff --git a/cxl/event_trace.c b/cxl/event_trace.c index db8cc85f0b6f..269060898118 100644 --- a/cxl/event_trace.c +++ b/cxl/event_trace.c @@ -208,6 +208,11 @@ static int cxl_event_parse(struct tep_event *event, struct tep_record *record, return 0; } + if (event_ctx->event_pid) { + if (event_ctx->event_pid != tep_data_pid(event->tep, record)) + return 0; + } + if (event_ctx->parse_event) return event_ctx->parse_event(event, record, &event_ctx->jlist_head); diff --git a/cxl/event_trace.h b/cxl/event_trace.h index ec6267202c8b..7f7773b2201f 100644 --- a/cxl/event_trace.h +++ b/cxl/event_trace.h @@ -15,6 +15,7 @@ struct event_ctx { const char *system; struct list_head jlist_head; const char *event_name; /* optional */ + int event_pid; /* optional */ int (*parse_event)(struct tep_event *event, struct tep_record *record, struct list_head *jlist_head); /* optional */ };