All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Jiang <dave.jiang@intel.com>
To: vishal.l.verma@intel.com
Cc: linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
	lizhijian@fujitsu.com, yangx.jy@fujitsu.com, caoqq@fujitsu.com
Subject: [PATCH 1/2] cxl: Save the decoder committed state
Date: Mon, 25 Sep 2023 12:20:34 -0700	[thread overview]
Message-ID: <169566963425.3704458.5249885814603187091.stgit@djiang5-mobl3> (raw)

Save the decoder committed state exported by the kernel to the libcxl
decoder context. The attribute is helpful for determing if a region is active.
Add libcxl API to determine if decoder is committed.
Add the committed state to the decoder for cxl list command.

Links: https://lore.kernel.org/linux-cxl/169566515694.3697523.714600762835841180.stgit@djiang5-mobl3/
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
---
 Documentation/cxl/lib/libcxl.txt |    4 ++++
 cxl/json.c                       |    4 ++++
 cxl/lib/libcxl.c                 |    9 +++++++++
 cxl/lib/libcxl.sym               |    5 +++++
 cxl/lib/private.h                |    1 +
 cxl/libcxl.h                     |    1 +
 6 files changed, 24 insertions(+)

diff --git a/Documentation/cxl/lib/libcxl.txt b/Documentation/cxl/lib/libcxl.txt
index 31bc85511270..4a2d1affa5a7 100644
--- a/Documentation/cxl/lib/libcxl.txt
+++ b/Documentation/cxl/lib/libcxl.txt
@@ -424,6 +424,7 @@ bool cxl_decoder_is_volatile_capable(struct cxl_decoder *decoder);
 bool cxl_decoder_is_mem_capable(struct cxl_decoder *decoder);
 bool cxl_decoder_is_accelmem_capable(struct cxl_decoder *decoder);
 bool cxl_decoder_is_locked(struct cxl_decoder *decoder);
+bool cxl_decoder_is_committed(struct cxl_decoder *decoder);
 ----
 The kernel protects the enumeration of the physical address layout of
 the system. Without CAP_SYS_ADMIN cxl_decoder_get_resource() returns
@@ -449,6 +450,9 @@ Platform firmware may setup the CXL decode hierarchy before the OS
 boots, and may additionally require that the OS not change the decode
 settings. This property is indicated by the cxl_decoder_is_locked() API.
 
+cxl_decoder_is_committed() provides a snapshot of the decoder state
+from the OS indicating if the decoder is committed or free.
+
 When a decoder is associated with a region cxl_decoder_get_region()
 returns that region object. Note that it is only applicable to switch
 and endpoint decoders as root decoders have a 1:N relationship with
diff --git a/cxl/json.c b/cxl/json.c
index 7678d02020b6..56ab42c747a0 100644
--- a/cxl/json.c
+++ b/cxl/json.c
@@ -857,6 +857,10 @@ struct json_object *util_cxl_decoder_to_json(struct cxl_decoder *decoder,
 					       jobj);
 	}
 
+	jobj = json_object_new_boolean(cxl_decoder_is_committed(decoder));
+	if (jobj)
+		json_object_object_add(jdecoder, "committed", jobj);
+
 	json_object_set_userdata(jdecoder, decoder, NULL);
 	return jdecoder;
 }
diff --git a/cxl/lib/libcxl.c b/cxl/lib/libcxl.c
index af4ca44eae19..094e14d6be8f 100644
--- a/cxl/lib/libcxl.c
+++ b/cxl/lib/libcxl.c
@@ -2116,6 +2116,10 @@ static void *add_cxl_decoder(void *parent, int id, const char *cxldecoder_base)
 	else
 		decoder->interleave_ways = strtoul(buf, NULL, 0);
 
+	sprintf(path, "%s/committed", cxldecoder_base);
+	if (sysfs_read_attr(ctx, path, buf) == 0)
+		decoder->committed = !!strtoul(buf, NULL, 0);
+
 	switch (port->type) {
 	case CXL_PORT_ENDPOINT:
 		sprintf(path, "%s/dpa_resource", cxldecoder_base);
@@ -2464,6 +2468,11 @@ CXL_EXPORT bool cxl_decoder_is_locked(struct cxl_decoder *decoder)
 	return decoder->locked;
 }
 
+CXL_EXPORT bool cxl_decoder_is_committed(struct cxl_decoder *decoder)
+{
+	return decoder->committed;
+}
+
 CXL_EXPORT unsigned int
 cxl_decoder_get_interleave_granularity(struct cxl_decoder *decoder)
 {
diff --git a/cxl/lib/libcxl.sym b/cxl/lib/libcxl.sym
index 8fa1cca3d0d7..eb8b5829851d 100644
--- a/cxl/lib/libcxl.sym
+++ b/cxl/lib/libcxl.sym
@@ -264,3 +264,8 @@ global:
 	cxl_memdev_update_fw;
 	cxl_memdev_cancel_fw_update;
 } LIBCXL_5;
+
+LIBCXL_7 {
+global:
+	cxl_decoder_is_committed;
+} LIBCXL_6;
diff --git a/cxl/lib/private.h b/cxl/lib/private.h
index a641727000f1..c79190827258 100644
--- a/cxl/lib/private.h
+++ b/cxl/lib/private.h
@@ -139,6 +139,7 @@ struct cxl_decoder {
 	bool mem_capable;
 	bool accelmem_capable;
 	bool locked;
+	bool committed;
 	enum cxl_decoder_target_type target_type;
 	int regions_init;
 	struct list_head targets;
diff --git a/cxl/libcxl.h b/cxl/libcxl.h
index 0f4f4b2648fb..a7fad3e30055 100644
--- a/cxl/libcxl.h
+++ b/cxl/libcxl.h
@@ -245,6 +245,7 @@ bool cxl_decoder_is_volatile_capable(struct cxl_decoder *decoder);
 bool cxl_decoder_is_mem_capable(struct cxl_decoder *decoder);
 bool cxl_decoder_is_accelmem_capable(struct cxl_decoder *decoder);
 bool cxl_decoder_is_locked(struct cxl_decoder *decoder);
+bool cxl_decoder_is_committed(struct cxl_decoder *decoder);
 unsigned int
 cxl_decoder_get_interleave_granularity(struct cxl_decoder *decoder);
 unsigned int cxl_decoder_get_interleave_ways(struct cxl_decoder *decoder);



             reply	other threads:[~2023-09-25 19:20 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-25 19:20 Dave Jiang [this message]
2023-09-25 19:20 ` [PATCH 2/2] cxl: Add check for regions before disabling memdev Dave Jiang

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=169566963425.3704458.5249885814603187091.stgit@djiang5-mobl3 \
    --to=dave.jiang@intel.com \
    --cc=caoqq@fujitsu.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=lizhijian@fujitsu.com \
    --cc=nvdimm@lists.linux.dev \
    --cc=vishal.l.verma@intel.com \
    --cc=yangx.jy@fujitsu.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.