anitazha / rpms / ndctl

Forked from rpms/ndctl 2 years ago
Clone

Blame 0133-libcxl-add-accessors-for-capacity-fields-of-the-IDEN.patch

Jeff Moyer 2c91dc
From 50b9d77232d41a33c2109894ae93ddad877c1747 Mon Sep 17 00:00:00 2001
Jeff Moyer 2c91dc
From: Alison Schofield <alison.schofield@intel.com>
Jeff Moyer 2c91dc
Date: Tue, 22 Feb 2022 11:56:04 -0800
Jeff Moyer 2c91dc
Subject: [PATCH 133/217] libcxl: add accessors for capacity fields of the
Jeff Moyer 2c91dc
 IDENTIFY command
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
The CXL PMEM provisioning model depends upon the values reported
Jeff Moyer 2c91dc
in the CXL IDENTIFY mailbox command when changing the partitioning
Jeff Moyer 2c91dc
between volatile and persistent capacity.
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
Add accessors to the libcxl API to retrieve the total, volatile only,
Jeff Moyer 2c91dc
and persistent only capacities from the IDENTIFY command.
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
The fields are specified in multiples of 256MB per the CXL 2.0 spec.
Jeff Moyer 2c91dc
Use the capacity multiplier to convert the raw data into bytes for user
Jeff Moyer 2c91dc
consumption.
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
Link: https://lore.kernel.org/r/58dec40b15a68f134466f61421751994735e55c1.1645558189.git.alison.schofield@intel.com
Jeff Moyer 2c91dc
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Jeff Moyer 2c91dc
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
Jeff Moyer 2c91dc
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Jeff Moyer 2c91dc
---
Jeff Moyer 2c91dc
 cxl/lib/libcxl.c   | 44 ++++++++++++++++++++++++++++++++++++++++++++
Jeff Moyer 2c91dc
 cxl/lib/libcxl.sym |  3 +++
Jeff Moyer 2c91dc
 cxl/libcxl.h       |  3 +++
Jeff Moyer 2c91dc
 3 files changed, 50 insertions(+)
Jeff Moyer 2c91dc
Jeff Moyer 2c91dc
diff --git a/cxl/lib/libcxl.c b/cxl/lib/libcxl.c
Jeff Moyer 2c91dc
index 4557a71..9413384 100644
Jeff Moyer 2c91dc
--- a/cxl/lib/libcxl.c
Jeff Moyer 2c91dc
+++ b/cxl/lib/libcxl.c
Jeff Moyer 2c91dc
@@ -2277,6 +2277,17 @@ CXL_EXPORT struct cxl_cmd *cxl_cmd_new_identify(struct cxl_memdev *memdev)
Jeff Moyer 2c91dc
 	return cxl_cmd_new_generic(memdev, CXL_MEM_COMMAND_ID_IDENTIFY);
Jeff Moyer 2c91dc
 }
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
+static struct cxl_cmd_identify *
Jeff Moyer 2c91dc
+cmd_to_identify(struct cxl_cmd *cmd)
Jeff Moyer 2c91dc
+{
Jeff Moyer 2c91dc
+	if (cxl_cmd_validate_status(cmd, CXL_MEM_COMMAND_ID_IDENTIFY))
Jeff Moyer 2c91dc
+		return NULL;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	if (!cmd)
Jeff Moyer 2c91dc
+		return NULL;
Jeff Moyer 2c91dc
+	return cmd->output_payload;
Jeff Moyer 2c91dc
+}
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
 CXL_EXPORT int cxl_cmd_identify_get_fw_rev(struct cxl_cmd *cmd, char *fw_rev,
Jeff Moyer 2c91dc
 		int fw_len)
Jeff Moyer 2c91dc
 {
Jeff Moyer 2c91dc
@@ -2321,6 +2332,39 @@ CXL_EXPORT unsigned int cxl_cmd_identify_get_label_size(struct cxl_cmd *cmd)
Jeff Moyer 2c91dc
 	return le32_to_cpu(id->lsa_size);
Jeff Moyer 2c91dc
 }
Jeff Moyer 2c91dc
 
Jeff Moyer 2c91dc
+CXL_EXPORT unsigned long long
Jeff Moyer 2c91dc
+cxl_cmd_identify_get_total_size(struct cxl_cmd *cmd)
Jeff Moyer 2c91dc
+{
Jeff Moyer 2c91dc
+	struct cxl_cmd_identify *c;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	c = cmd_to_identify(cmd);
Jeff Moyer 2c91dc
+	if (!c)
Jeff Moyer 2c91dc
+		return ULLONG_MAX;
Jeff Moyer 2c91dc
+	return cxl_capacity_to_bytes(c->total_capacity);
Jeff Moyer 2c91dc
+}
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+CXL_EXPORT unsigned long long
Jeff Moyer 2c91dc
+cxl_cmd_identify_get_volatile_only_size(struct cxl_cmd *cmd)
Jeff Moyer 2c91dc
+{
Jeff Moyer 2c91dc
+	struct cxl_cmd_identify *c;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	c = cmd_to_identify(cmd);
Jeff Moyer 2c91dc
+	if (!c)
Jeff Moyer 2c91dc
+		return ULLONG_MAX;
Jeff Moyer 2c91dc
+	return cxl_capacity_to_bytes(c->volatile_capacity);
Jeff Moyer 2c91dc
+}
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+CXL_EXPORT unsigned long long
Jeff Moyer 2c91dc
+cxl_cmd_identify_get_persistent_only_size(struct cxl_cmd *cmd)
Jeff Moyer 2c91dc
+{
Jeff Moyer 2c91dc
+	struct cxl_cmd_identify *c;
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
+	c = cmd_to_identify(cmd);
Jeff Moyer 2c91dc
+	if (!c)
Jeff Moyer 2c91dc
+		return ULLONG_MAX;
Jeff Moyer 2c91dc
+	return cxl_capacity_to_bytes(c->persistent_capacity);
Jeff Moyer 2c91dc
+}
Jeff Moyer 2c91dc
+
Jeff Moyer 2c91dc
 CXL_EXPORT struct cxl_cmd *cxl_cmd_new_raw(struct cxl_memdev *memdev,
Jeff Moyer 2c91dc
 		int opcode)
Jeff Moyer 2c91dc
 {
Jeff Moyer 2c91dc
diff --git a/cxl/lib/libcxl.sym b/cxl/lib/libcxl.sym
Jeff Moyer 2c91dc
index 509e62d..5ac6e9b 100644
Jeff Moyer 2c91dc
--- a/cxl/lib/libcxl.sym
Jeff Moyer 2c91dc
+++ b/cxl/lib/libcxl.sym
Jeff Moyer 2c91dc
@@ -160,4 +160,7 @@ global:
Jeff Moyer 2c91dc
 	cxl_cmd_partition_get_active_persistent_size;
Jeff Moyer 2c91dc
 	cxl_cmd_partition_get_next_volatile_size;
Jeff Moyer 2c91dc
 	cxl_cmd_partition_get_next_persistent_size;
Jeff Moyer 2c91dc
+	cxl_cmd_identify_get_total_size;
Jeff Moyer 2c91dc
+	cxl_cmd_identify_get_volatile_only_size;
Jeff Moyer 2c91dc
+	cxl_cmd_identify_get_persistent_only_size;
Jeff Moyer 2c91dc
 } LIBCXL_1;
Jeff Moyer 2c91dc
diff --git a/cxl/libcxl.h b/cxl/libcxl.h
Jeff Moyer 2c91dc
index 2c0a8d1..6e18e84 100644
Jeff Moyer 2c91dc
--- a/cxl/libcxl.h
Jeff Moyer 2c91dc
+++ b/cxl/libcxl.h
Jeff Moyer 2c91dc
@@ -201,6 +201,9 @@ int cxl_cmd_get_mbox_status(struct cxl_cmd *cmd);
Jeff Moyer 2c91dc
 int cxl_cmd_get_out_size(struct cxl_cmd *cmd);
Jeff Moyer 2c91dc
 struct cxl_cmd *cxl_cmd_new_identify(struct cxl_memdev *memdev);
Jeff Moyer 2c91dc
 int cxl_cmd_identify_get_fw_rev(struct cxl_cmd *cmd, char *fw_rev, int fw_len);
Jeff Moyer 2c91dc
+unsigned long long cxl_cmd_identify_get_total_size(struct cxl_cmd *cmd);
Jeff Moyer 2c91dc
+unsigned long long cxl_cmd_identify_get_volatile_only_size(struct cxl_cmd *cmd);
Jeff Moyer 2c91dc
+unsigned long long cxl_cmd_identify_get_persistent_only_size(struct cxl_cmd *cmd);
Jeff Moyer 2c91dc
 unsigned long long cxl_cmd_identify_get_partition_align(struct cxl_cmd *cmd);
Jeff Moyer 2c91dc
 unsigned int cxl_cmd_identify_get_label_size(struct cxl_cmd *cmd);
Jeff Moyer 2c91dc
 struct cxl_cmd *cxl_cmd_new_get_health_info(struct cxl_memdev *memdev);
Jeff Moyer 2c91dc
-- 
Jeff Moyer 2c91dc
2.27.0
Jeff Moyer 2c91dc