From: Ira Weiny <ira.weiny@intel.com>
To: Alison Schofield <alison.schofield@intel.com>
Cc: Vishal Verma <vishal.l.verma@intel.com>,
Jonathan Cameron <jonathan.cameron@Huawei.com>,
Fan Ni <fan.ni@samsung.com>,
Navneet Singh <navneet.singh@intel.com>,
Dan Williams <dan.j.williams@intel.com>,
Dave Jiang <dave.jiang@intel.com>,
linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
Ira Weiny <ira.weiny@intel.com>
Subject: [ndctl PATCH v3 8/9] cxl/region: Add extent output to region query
Date: Fri, 15 Nov 2024 12:46:26 -0600 [thread overview]
Message-ID: <20241115-dcd-region2-v3-8-585d480ccdab@intel.com> (raw)
In-Reply-To: <20241115-dcd-region2-v3-0-585d480ccdab@intel.com>
DCD regions have 0 or more extents. The ability to list those and their
properties is useful to end users.
Add an option for extent output to region queries. An example of this
is:
$ ./build/cxl/cxl list -r 8 -Nu
{
"region":"region8",
...
"type":"dc",
...
"extents":[
{
"offset":"0x10000000",
"length":"64.00 MiB (67.11 MB)",
"tag":"00000000-0000-0000-0000-000000000000"
},
{
"offset":"0x8000000",
"length":"64.00 MiB (67.11 MB)",
"tag":"00000000-0000-0000-0000-000000000000"
}
]
}
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
---
Changes:
[djiang: report strerror() on opendir() error]
[djiang: Fix up strtoull() error checking]
[Alison: Enhance man page]
[Alison: Enhance extent processing debug]
[Alison: Fix up libcxl export symbols]
---
Documentation/cxl/cxl-list.txt | 29 ++++++++++++++++++++++++++
cxl/filter.h | 3 +++
cxl/json.c | 47 ++++++++++++++++++++++++++++++++++++++++++
cxl/json.h | 3 +++
cxl/list.c | 3 +++
util/json.h | 1 +
6 files changed, 86 insertions(+)
diff --git a/Documentation/cxl/cxl-list.txt b/Documentation/cxl/cxl-list.txt
index 9a9911e7dd9bba561c6202784017db1bb4b9f4bd..43453cc72245f586070f8c4f31b3ee475e3c6cd2 100644
--- a/Documentation/cxl/cxl-list.txt
+++ b/Documentation/cxl/cxl-list.txt
@@ -411,6 +411,35 @@ OPTIONS
}
----
+-N::
+--extents::
+ Append Dynamic Capacity extent information.
+----
+13:34:28 > ./build/cxl/cxl list -r 8 -Nu
+{
+ "region":"region8",
+ "resource":"0xf030000000",
+ "size":"512.00 MiB (536.87 MB)",
+ "type":"dc",
+ "interleave_ways":1,
+ "interleave_granularity":256,
+ "decode_state":"commit",
+ "extents":[
+ {
+ "offset":"0x10000000",
+ "length":"64.00 MiB (67.11 MB)",
+ "tag":"00000000-0000-0000-0000-000000000000"
+ },
+ {
+ "offset":"0x8000000",
+ "length":"64.00 MiB (67.11 MB)",
+ "tag":"00000000-0000-0000-0000-000000000000"
+ }
+ ]
+}
+----
+
+
-r::
--region::
Specify CXL region device name(s), or device id(s), to filter the listing.
diff --git a/cxl/filter.h b/cxl/filter.h
index 956a46e0c7a9f05abf696cce97a365164e95e50d..a31b80c87ccac407bd4ff98b302a23b33cbe413c 100644
--- a/cxl/filter.h
+++ b/cxl/filter.h
@@ -31,6 +31,7 @@ struct cxl_filter_params {
bool alert_config;
bool dax;
bool media_errors;
+ bool extents;
int verbose;
struct log_ctx ctx;
};
@@ -91,6 +92,8 @@ static inline unsigned long cxl_filter_to_flags(struct cxl_filter_params *param)
flags |= UTIL_JSON_DAX | UTIL_JSON_DAX_DEVS;
if (param->media_errors)
flags |= UTIL_JSON_MEDIA_ERRORS;
+ if (param->extents)
+ flags |= UTIL_JSON_EXTENTS;
return flags;
}
diff --git a/cxl/json.c b/cxl/json.c
index c5391be84fba51da57fc15ece7c1f94cce139276..450e62243ecdfec1aa011241ff7257ac3b37196f 100644
--- a/cxl/json.c
+++ b/cxl/json.c
@@ -1169,6 +1169,50 @@ void util_cxl_mappings_append_json(struct json_object *jregion,
json_object_object_add(jregion, "mappings", jmappings);
}
+void util_cxl_extents_append_json(struct json_object *jregion,
+ struct cxl_region *region,
+ unsigned long flags)
+{
+ struct json_object *jextents;
+ struct cxl_region_extent *extent;
+
+ jextents = json_object_new_array();
+ if (!jextents)
+ return;
+
+ cxl_extent_foreach(region, extent) {
+ struct json_object *jextent, *jobj;
+ unsigned long long val;
+ char tag_str[40];
+ uuid_t tag;
+
+ jextent = json_object_new_object();
+ if (!jextent)
+ continue;
+
+ val = cxl_extent_get_offset(extent);
+ jobj = util_json_object_hex(val, flags);
+ if (jobj)
+ json_object_object_add(jextent, "offset", jobj);
+
+ val = cxl_extent_get_length(extent);
+ jobj = util_json_object_size(val, flags);
+ if (jobj)
+ json_object_object_add(jextent, "length", jobj);
+
+ cxl_extent_get_tag(extent, tag);
+ uuid_unparse(tag, tag_str);
+ jobj = json_object_new_string(tag_str);
+ if (jobj)
+ json_object_object_add(jextent, "tag", jobj);
+
+ json_object_array_add(jextents, jextent);
+ json_object_set_userdata(jextent, extent, NULL);
+ }
+
+ json_object_object_add(jregion, "extents", jextents);
+}
+
struct json_object *util_cxl_region_to_json(struct cxl_region *region,
unsigned long flags)
{
@@ -1255,6 +1299,9 @@ struct json_object *util_cxl_region_to_json(struct cxl_region *region,
}
}
+ if (flags & UTIL_JSON_EXTENTS)
+ util_cxl_extents_append_json(jregion, region, flags);
+
if (cxl_region_qos_class_mismatch(region)) {
jobj = json_object_new_boolean(true);
if (jobj)
diff --git a/cxl/json.h b/cxl/json.h
index eb7572be4106baf0469ba9243a9a767d07df8882..f9c07ab41a337838b75ffee4486f6c48ddc99863 100644
--- a/cxl/json.h
+++ b/cxl/json.h
@@ -20,6 +20,9 @@ struct json_object *util_cxl_region_to_json(struct cxl_region *region,
void util_cxl_mappings_append_json(struct json_object *jregion,
struct cxl_region *region,
unsigned long flags);
+void util_cxl_extents_append_json(struct json_object *jregion,
+ struct cxl_region *region,
+ unsigned long flags);
void util_cxl_targets_append_json(struct json_object *jdecoder,
struct cxl_decoder *decoder,
const char *ident, const char *serial,
diff --git a/cxl/list.c b/cxl/list.c
index 0b25d78248d5f4f529fd2c2e073e43895c722568..47d135166212b87449f960e94ee75657f7040ca9 100644
--- a/cxl/list.c
+++ b/cxl/list.c
@@ -59,6 +59,8 @@ static const struct option options[] = {
"include alert configuration information"),
OPT_BOOLEAN('L', "media-errors", ¶m.media_errors,
"include media-error information "),
+ OPT_BOOLEAN('N', "extents", ¶m.extents,
+ "include extent information (Dynamic Capacity regions only)"),
OPT_INCR('v', "verbose", ¶m.verbose, "increase output detail"),
#ifdef ENABLE_DEBUG
OPT_BOOLEAN(0, "debug", &debug, "debug list walk"),
@@ -135,6 +137,7 @@ int cmd_list(int argc, const char **argv, struct cxl_ctx *ctx)
param.decoders = true;
param.targets = true;
param.regions = true;
+ param.extents = true;
/*fallthrough*/
case 0:
break;
diff --git a/util/json.h b/util/json.h
index 560f845c6753ee176f7c64b4310fe1f9b1ce6d39..79ae3240e7ce151be75f6666fcaba0ba90aba7fc 100644
--- a/util/json.h
+++ b/util/json.h
@@ -21,6 +21,7 @@ enum util_json_flags {
UTIL_JSON_TARGETS = (1 << 11),
UTIL_JSON_PARTITION = (1 << 12),
UTIL_JSON_ALERT_CONFIG = (1 << 13),
+ UTIL_JSON_EXTENTS = (1 << 14),
};
void util_display_json_array(FILE *f_out, struct json_object *jarray,
--
2.47.0
next prev parent reply other threads:[~2024-11-15 18:46 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-15 18:46 [ndctl PATCH v3 0/9] ndctl: Dynamic Capacity additions for cxl-cli Ira Weiny
2024-11-15 18:46 ` [ndctl PATCH v3 1/9] ndctl/cxl-events: Don't fail test until event counts are reported Ira Weiny
2024-11-15 18:46 ` [ndctl PATCH v3 2/9] ndctl/cxl/region: Report max size for region creation Ira Weiny
2024-11-15 18:46 ` [ndctl PATCH v3 3/9] libcxl: Separate region mode from decoder mode Ira Weiny
2024-11-15 18:46 ` [ndctl PATCH v3 4/9] cxl/region: Use new region mode in cxl-cli Ira Weiny
2024-11-15 18:46 ` [ndctl PATCH v3 5/9] libcxl: Add Dynamic Capacity region support ira.weiny
2024-11-15 18:46 ` [ndctl PATCH v3 6/9] cxl/region: Add cxl-cli support for DCD regions ira.weiny
2024-11-15 18:46 ` [ndctl PATCH v3 7/9] libcxl: Add extent functionality to DC regions Ira Weiny
2024-11-15 18:46 ` Ira Weiny [this message]
2024-11-15 18:46 ` [ndctl PATCH v3 9/9] cxl/test: Add Dynamic Capacity tests Ira Weiny
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241115-dcd-region2-v3-8-585d480ccdab@intel.com \
--to=ira.weiny@intel.com \
--cc=alison.schofield@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=fan.ni@samsung.com \
--cc=jonathan.cameron@Huawei.com \
--cc=linux-cxl@vger.kernel.org \
--cc=navneet.singh@intel.com \
--cc=nvdimm@lists.linux.dev \
--cc=vishal.l.verma@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.