Message ID | 6f03d2d26d17beb33d28c7471a4fbfc1ec8a8e21.1707351560.git.alison.schofield@intel.com |
---|---|
State | Superseded |
Headers | show |
Series | Support poison list retrieval | expand |
On 2/7/24 6:01 PM, alison.schofield@intel.com wrote: > From: Alison Schofield <alison.schofield@intel.com> > > The --media-errors option to 'cxl list' retrieves poison lists from > memory devices supporting the capability and displays the returned > media_error records in the cxl list json. This option can apply to > memdevs or regions. > > Include media-errors in the -vvv verbose option. > > Example usage in the Documentation/cxl/cxl-list.txt update. > > Signed-off-by: Alison Schofield <alison.schofield@intel.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> > --- > Documentation/cxl/cxl-list.txt | 79 +++++++++++++++++++++++++++++++++- > cxl/filter.h | 3 ++ > cxl/list.c | 3 ++ > 3 files changed, 84 insertions(+), 1 deletion(-) > > diff --git a/Documentation/cxl/cxl-list.txt b/Documentation/cxl/cxl-list.txt > index 838de4086678..5c20614ef579 100644 > --- a/Documentation/cxl/cxl-list.txt > +++ b/Documentation/cxl/cxl-list.txt > @@ -415,6 +415,83 @@ OPTIONS > --region:: > Specify CXL region device name(s), or device id(s), to filter the listing. > > +-L:: > +--media-errors:: > + Include media-error information. The poison list is retrieved from the > + device(s) and media_error records are added to the listing. Apply this > + option to memdevs and regions where devices support the poison list > + capability. > + > + "decoder" and "hpa" are included when the media-error is in a mapped > + address. > + > + "source" will be one of: External, Internal, Injected, Vendor Specific, > + or Unknown, as defined in CXL Specification v3.1 Table 8-140. > + > +---- > +# cxl list -m mem1 --media-errors > +[ > + { > + "memdev":"mem1", > + "pmem_size":1073741824, > + "ram_size":1073741824, > + "serial":1, > + "numa_node":1, > + "host":"cxl_mem.1", > + "media_errors":[ > + { > + "dpa":0, > + "length":64, > + "source":"Internal" > + }, > + { > + "decoder":"decoder10.0", > + "hpa":1035355557888, > + "dpa":1073741824, > + "length":64, > + "source":"External" > + }, > + { > + "decoder":"decoder10.0", > + "hpa":1035355566080, > + "dpa":1073745920, > + "length":64, > + "source":"Injected" > + } > + ] > + } > +] > + > +# cxl list -r region5 --media-errors > +[ > + { > + "region":"region5", > + "resource":1035355553792, > + "size":2147483648, > + "type":"pmem", > + "interleave_ways":2, > + "interleave_granularity":4096, > + "decode_state":"commit", > + "media_errors":[ > + { > + "decoder":"decoder10.0", > + "hpa":1035355557888, > + "dpa":1073741824, > + "length":64, > + "source":"External" > + }, > + { > + "decoder":"decoder8.1", > + "hpa":1035355553792, > + "dpa":1073741824, > + "length":64, > + "source":"Internal" > + } > + ] > + } > +] > +---- > + > -v:: > --verbose:: > Increase verbosity of the output. This can be specified > @@ -431,7 +508,7 @@ OPTIONS > devices with --idle. > - *-vvv* > Everything *-vv* provides, plus enable > - --health and --partition. > + --health, --partition, --media-errors. > > --debug:: > If the cxl tool was built with debug enabled, turn on debug > diff --git a/cxl/filter.h b/cxl/filter.h > index 3f65990f835a..956a46e0c7a9 100644 > --- a/cxl/filter.h > +++ b/cxl/filter.h > @@ -30,6 +30,7 @@ struct cxl_filter_params { > bool fw; > bool alert_config; > bool dax; > + bool media_errors; > int verbose; > struct log_ctx ctx; > }; > @@ -88,6 +89,8 @@ static inline unsigned long cxl_filter_to_flags(struct cxl_filter_params *param) > flags |= UTIL_JSON_ALERT_CONFIG; > if (param->dax) > flags |= UTIL_JSON_DAX | UTIL_JSON_DAX_DEVS; > + if (param->media_errors) > + flags |= UTIL_JSON_MEDIA_ERRORS; > return flags; > } > > diff --git a/cxl/list.c b/cxl/list.c > index 93ba51ef895c..0b25d78248d5 100644 > --- a/cxl/list.c > +++ b/cxl/list.c > @@ -57,6 +57,8 @@ static const struct option options[] = { > "include memory device firmware information"), > OPT_BOOLEAN('A', "alert-config", ¶m.alert_config, > "include alert configuration information"), > + OPT_BOOLEAN('L', "media-errors", ¶m.media_errors, > + "include media-error information "), > OPT_INCR('v', "verbose", ¶m.verbose, "increase output detail"), > #ifdef ENABLE_DEBUG > OPT_BOOLEAN(0, "debug", &debug, "debug list walk"), > @@ -121,6 +123,7 @@ int cmd_list(int argc, const char **argv, struct cxl_ctx *ctx) > param.fw = true; > param.alert_config = true; > param.dax = true; > + param.media_errors = true; > /* fallthrough */ > case 2: > param.idle = true;
diff --git a/Documentation/cxl/cxl-list.txt b/Documentation/cxl/cxl-list.txt index 838de4086678..5c20614ef579 100644 --- a/Documentation/cxl/cxl-list.txt +++ b/Documentation/cxl/cxl-list.txt @@ -415,6 +415,83 @@ OPTIONS --region:: Specify CXL region device name(s), or device id(s), to filter the listing. +-L:: +--media-errors:: + Include media-error information. The poison list is retrieved from the + device(s) and media_error records are added to the listing. Apply this + option to memdevs and regions where devices support the poison list + capability. + + "decoder" and "hpa" are included when the media-error is in a mapped + address. + + "source" will be one of: External, Internal, Injected, Vendor Specific, + or Unknown, as defined in CXL Specification v3.1 Table 8-140. + +---- +# cxl list -m mem1 --media-errors +[ + { + "memdev":"mem1", + "pmem_size":1073741824, + "ram_size":1073741824, + "serial":1, + "numa_node":1, + "host":"cxl_mem.1", + "media_errors":[ + { + "dpa":0, + "length":64, + "source":"Internal" + }, + { + "decoder":"decoder10.0", + "hpa":1035355557888, + "dpa":1073741824, + "length":64, + "source":"External" + }, + { + "decoder":"decoder10.0", + "hpa":1035355566080, + "dpa":1073745920, + "length":64, + "source":"Injected" + } + ] + } +] + +# cxl list -r region5 --media-errors +[ + { + "region":"region5", + "resource":1035355553792, + "size":2147483648, + "type":"pmem", + "interleave_ways":2, + "interleave_granularity":4096, + "decode_state":"commit", + "media_errors":[ + { + "decoder":"decoder10.0", + "hpa":1035355557888, + "dpa":1073741824, + "length":64, + "source":"External" + }, + { + "decoder":"decoder8.1", + "hpa":1035355553792, + "dpa":1073741824, + "length":64, + "source":"Internal" + } + ] + } +] +---- + -v:: --verbose:: Increase verbosity of the output. This can be specified @@ -431,7 +508,7 @@ OPTIONS devices with --idle. - *-vvv* Everything *-vv* provides, plus enable - --health and --partition. + --health, --partition, --media-errors. --debug:: If the cxl tool was built with debug enabled, turn on debug diff --git a/cxl/filter.h b/cxl/filter.h index 3f65990f835a..956a46e0c7a9 100644 --- a/cxl/filter.h +++ b/cxl/filter.h @@ -30,6 +30,7 @@ struct cxl_filter_params { bool fw; bool alert_config; bool dax; + bool media_errors; int verbose; struct log_ctx ctx; }; @@ -88,6 +89,8 @@ static inline unsigned long cxl_filter_to_flags(struct cxl_filter_params *param) flags |= UTIL_JSON_ALERT_CONFIG; if (param->dax) flags |= UTIL_JSON_DAX | UTIL_JSON_DAX_DEVS; + if (param->media_errors) + flags |= UTIL_JSON_MEDIA_ERRORS; return flags; } diff --git a/cxl/list.c b/cxl/list.c index 93ba51ef895c..0b25d78248d5 100644 --- a/cxl/list.c +++ b/cxl/list.c @@ -57,6 +57,8 @@ static const struct option options[] = { "include memory device firmware information"), OPT_BOOLEAN('A', "alert-config", ¶m.alert_config, "include alert configuration information"), + OPT_BOOLEAN('L', "media-errors", ¶m.media_errors, + "include media-error information "), OPT_INCR('v', "verbose", ¶m.verbose, "increase output detail"), #ifdef ENABLE_DEBUG OPT_BOOLEAN(0, "debug", &debug, "debug list walk"), @@ -121,6 +123,7 @@ int cmd_list(int argc, const char **argv, struct cxl_ctx *ctx) param.fw = true; param.alert_config = true; param.dax = true; + param.media_errors = true; /* fallthrough */ case 2: param.idle = true;