All of lore.kernel.org
 help / color / mirror / Atom feed
From: alison.schofield@intel.com
To: Ben Widawsky <ben.widawsky@intel.com>,
	Dan Williams <dan.j.williams@intel.com>,
	Ira Weiny <ira.weiny@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>
Cc: Alison Schofield <alison.schofield@intel.com>,
	nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org
Subject: [ndctl PATCH] cxl/list: Handle GET_PARTITION_INFO command as optional
Date: Tue, 22 Feb 2022 10:23:28 -0800	[thread overview]
Message-ID: <20220222182328.1009333-1-alison.schofield@intel.com> (raw)

From: Alison Schofield <alison.schofield@intel.com>

CXL specifies GET_PARTITION_INFO mailbox command as optional. A device
may not support the command when it has no partitionable space.

Flip the order in which the command cxl-list retrieves the partition
info so that the fields reported by the IDENTIFY mailbox command are
always reported, and then the fields reported by the GET_PARTITION_INFO
mailbox command are optionally reported.

Fixes: 7581aba52da0 ("cxl: add memdev partition information to cxl-list")
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
---

Vishal, I wasn't sure whether to rev the original patchset or post as a
fix. Let me know.


 cxl/json.c | 97 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 52 insertions(+), 45 deletions(-)

diff --git a/cxl/json.c b/cxl/json.c
index 69671b3e7fe9..fdc6f73a86c1 100644
--- a/cxl/json.c
+++ b/cxl/json.c
@@ -204,48 +204,6 @@ static struct json_object *util_cxl_memdev_partition_to_json(struct cxl_memdev *
 	if (!memdev)
 		goto err_jobj;
 
-	/* Retrieve partition info in GET_PARTITION_INFO mbox cmd */
-	cmd = cxl_cmd_new_get_partition(memdev);
-	if (!cmd)
-		goto err_jobj;
-
-	rc = cxl_cmd_submit(cmd);
-	if (rc < 0)
-		goto err_cmd;
-	rc = cxl_cmd_get_mbox_status(cmd);
-	if (rc != 0)
-		goto err_cmd;
-
-	cap = cxl_cmd_partition_get_active_volatile_size(cmd);
-	if (cap != ULLONG_MAX) {
-		jobj = util_json_object_size(cap, flags);
-		if (jobj)
-			json_object_object_add(jpart,
-					"active_volatile_size", jobj);
-	}
-	cap = cxl_cmd_partition_get_active_persistent_size(cmd);
-	if (cap != ULLONG_MAX) {
-		jobj = util_json_object_size(cap, flags);
-		if (jobj)
-			json_object_object_add(jpart,
-					"active_persistent_size", jobj);
-	}
-	cap = cxl_cmd_partition_get_next_volatile_size(cmd);
-	if (cap != ULLONG_MAX) {
-		jobj = util_json_object_size(cap, flags);
-		if (jobj)
-			json_object_object_add(jpart,
-					"next_volatile_size", jobj);
-	}
-	cap = cxl_cmd_partition_get_next_persistent_size(cmd);
-	if (cap != ULLONG_MAX) {
-		jobj = util_json_object_size(cap, flags);
-		if (jobj)
-			json_object_object_add(jpart,
-					"next_persistent_size", jobj);
-	}
-	cxl_cmd_unref(cmd);
-
 	/* Retrieve partition info in the IDENTIFY mbox cmd */
 	cmd = cxl_cmd_new_identify(memdev);
 	if (!cmd)
@@ -253,10 +211,10 @@ static struct json_object *util_cxl_memdev_partition_to_json(struct cxl_memdev *
 
 	rc = cxl_cmd_submit(cmd);
 	if (rc < 0)
-		goto err_cmd;
+		goto err_identify;
 	rc = cxl_cmd_get_mbox_status(cmd);
 	if (rc != 0)
-		goto err_cmd;
+		goto err_identify;
 
 	cap = cxl_cmd_identify_get_total_size(cmd);
 	if (cap != ULLONG_MAX) {
@@ -284,10 +242,59 @@ static struct json_object *util_cxl_memdev_partition_to_json(struct cxl_memdev *
 		json_object_object_add(jpart, "partition_alignment_size", jobj);
 
 	cxl_cmd_unref(cmd);
+
+	/* Return now if there is no partition info to get. */
+	if (!cap)
+		return jpart;
+
+	/* Retrieve partition info in GET_PARTITION_INFO mbox cmd */
+	cmd = cxl_cmd_new_get_partition(memdev);
+	if (!cmd)
+		return jpart;
+
+	rc = cxl_cmd_submit(cmd);
+	if (rc < 0)
+		goto err_get;
+	rc = cxl_cmd_get_mbox_status(cmd);
+	if (rc != 0)
+		goto err_get;
+
+	cap = cxl_cmd_partition_get_active_volatile_size(cmd);
+	if (cap != ULLONG_MAX) {
+		jobj = util_json_object_size(cap, flags);
+		if (jobj)
+			json_object_object_add(jpart,
+					"active_volatile_size", jobj);
+	}
+	cap = cxl_cmd_partition_get_active_persistent_size(cmd);
+	if (cap != ULLONG_MAX) {
+		jobj = util_json_object_size(cap, flags);
+		if (jobj)
+			json_object_object_add(jpart,
+					"active_persistent_size", jobj);
+	}
+	cap = cxl_cmd_partition_get_next_volatile_size(cmd);
+	if (cap != ULLONG_MAX) {
+		jobj = util_json_object_size(cap, flags);
+		if (jobj)
+			json_object_object_add(jpart,
+					"next_volatile_size", jobj);
+	}
+	cap = cxl_cmd_partition_get_next_persistent_size(cmd);
+	if (cap != ULLONG_MAX) {
+		jobj = util_json_object_size(cap, flags);
+		if (jobj)
+			json_object_object_add(jpart,
+					"next_persistent_size", jobj);
+	}
+
+err_get:
+	cxl_cmd_unref(cmd);
 	return jpart;
 
-err_cmd:
+err_identify:
 	cxl_cmd_unref(cmd);
+
 err_jobj:
 	json_object_put(jpart);
 	return NULL;
-- 
2.31.1


             reply	other threads:[~2022-02-22 18:19 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-22 18:23 alison.schofield [this message]
2022-02-22 18:48 ` [ndctl PATCH] cxl/list: Handle GET_PARTITION_INFO command as optional Verma, Vishal L

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=20220222182328.1009333-1-alison.schofield@intel.com \
    --to=alison.schofield@intel.com \
    --cc=ben.widawsky@intel.com \
    --cc=dan.j.williams@intel.com \
    --cc=ira.weiny@intel.com \
    --cc=linux-cxl@vger.kernel.org \
    --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.