From: Ira Weiny <ira.weiny@intel.com>
To: Dave Jiang <dave.jiang@intel.com>, <linux-cxl@vger.kernel.org>
Cc: <vishal.l.verma@intel.com>, Dan Williams <dan.j.williams@intel.com>
Subject: Re: [NDCTL PATCH v3] ndctl: cxl: Remove dependency for attributes derived from IDENTIFY command
Date: Mon, 22 Apr 2024 14:35:11 -0700 [thread overview]
Message-ID: <6626d80fa51ea_ab5652947a@iweiny-mobl.notmuch> (raw)
In-Reply-To: <20240422211755.417632-1-dave.jiang@intel.com>
Dave Jiang wrote:
> A memdev may optionally not host a mailbox and therefore not able to execute
> the IDENTIFY command. Currently the kernel emits empty strings for some of
> the attributes instead of making them invisible in order to keep backward
> compatibility for CXL CLI. Remove dependency of CXL CLI on the existance of
> these attributes and only expose them if they exist. Without the dependency
> the kernel will be able to make the non-existant attributes invisible.
>
> Link: https://lore.kernel.org/all/20230606121534.00003870@Huawei.com/
> Suggested-by: Dan Williams <dan.j.williams@intel.com>
> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Patch seems ok but what is the deprecation schedule for the kernel to drop
the attributes?
Ira
> ---
> v3:
> - Check against SIZE_MAX (Vishal)
> ---
> cxl/lib/libcxl.c | 48 ++++++++++++++++++++++++++----------------------
> cxl/memdev.c | 18 +++++++++++++-----
> 2 files changed, 39 insertions(+), 27 deletions(-)
>
> diff --git a/cxl/lib/libcxl.c b/cxl/lib/libcxl.c
> index 91725ac7ffd8..91eedd1c4688 100644
> --- a/cxl/lib/libcxl.c
> +++ b/cxl/lib/libcxl.c
> @@ -1280,14 +1280,12 @@ static void *add_cxl_memdev(void *parent, int id, const char *cxlmem_base)
> memdev->minor = minor(st.st_rdev);
>
> sprintf(path, "%s/pmem/size", cxlmem_base);
> - if (sysfs_read_attr(ctx, path, buf) < 0)
> - goto err_read;
> - memdev->pmem_size = strtoull(buf, NULL, 0);
> + if (sysfs_read_attr(ctx, path, buf) == 0)
> + memdev->pmem_size = strtoull(buf, NULL, 0);
>
> sprintf(path, "%s/ram/size", cxlmem_base);
> - if (sysfs_read_attr(ctx, path, buf) < 0)
> - goto err_read;
> - memdev->ram_size = strtoull(buf, NULL, 0);
> + if (sysfs_read_attr(ctx, path, buf) == 0)
> + memdev->ram_size = strtoull(buf, NULL, 0);
>
> sprintf(path, "%s/pmem/qos_class", cxlmem_base);
> if (sysfs_read_attr(ctx, path, buf) < 0)
> @@ -1302,18 +1300,22 @@ static void *add_cxl_memdev(void *parent, int id, const char *cxlmem_base)
> memdev->ram_qos_class = atoi(buf);
>
> sprintf(path, "%s/payload_max", cxlmem_base);
> - if (sysfs_read_attr(ctx, path, buf) < 0)
> - goto err_read;
> - memdev->payload_max = strtoull(buf, NULL, 0);
> - if (memdev->payload_max < 0)
> - goto err_read;
> + if (sysfs_read_attr(ctx, path, buf) == 0) {
> + memdev->payload_max = strtoull(buf, NULL, 0);
> + if (memdev->payload_max < 0)
> + goto err_read;
> + } else {
> + memdev->payload_max = -1;
> + }
>
> sprintf(path, "%s/label_storage_size", cxlmem_base);
> - if (sysfs_read_attr(ctx, path, buf) < 0)
> - goto err_read;
> - memdev->lsa_size = strtoull(buf, NULL, 0);
> - if (memdev->lsa_size == ULLONG_MAX)
> - goto err_read;
> + if (sysfs_read_attr(ctx, path, buf) == 0) {
> + memdev->lsa_size = strtoull(buf, NULL, 0);
> + if (memdev->lsa_size == ULLONG_MAX)
> + goto err_read;
> + } else {
> + memdev->lsa_size = SIZE_MAX;
> + }
>
> sprintf(path, "%s/serial", cxlmem_base);
> if (sysfs_read_attr(ctx, path, buf) < 0)
> @@ -1340,12 +1342,11 @@ static void *add_cxl_memdev(void *parent, int id, const char *cxlmem_base)
> host[0] = '\0';
>
> sprintf(path, "%s/firmware_version", cxlmem_base);
> - if (sysfs_read_attr(ctx, path, buf) < 0)
> - goto err_read;
> -
> - memdev->firmware_version = strdup(buf);
> - if (!memdev->firmware_version)
> - goto err_read;
> + if (sysfs_read_attr(ctx, path, buf) == 0) {
> + memdev->firmware_version = strdup(buf);
> + if (!memdev->firmware_version)
> + goto err_read;
> + }
>
> memdev->dev_buf = calloc(1, strlen(cxlmem_base) + 50);
> if (!memdev->dev_buf)
> @@ -4570,6 +4571,9 @@ static int lsa_op(struct cxl_memdev *memdev, int op, void *buf,
> if (length == 0)
> return 0;
>
> + if (memdev->payload_max < 0)
> + return -EINVAL;
> +
> label_iter_max = memdev->payload_max - sizeof(struct cxl_cmd_set_lsa);
> while (remaining) {
> cur_len = min((size_t)label_iter_max, remaining);
> diff --git a/cxl/memdev.c b/cxl/memdev.c
> index 35920fc81d66..6e44d1578d03 100644
> --- a/cxl/memdev.c
> +++ b/cxl/memdev.c
> @@ -487,10 +487,13 @@ static int action_zero(struct cxl_memdev *memdev, struct action_context *actx)
> size_t size;
> int rc;
>
> - if (param.len)
> + if (param.len) {
> size = param.len;
> - else
> + } else {
> size = cxl_memdev_get_label_size(memdev);
> + if (size == SIZE_MAX)
> + return -EINVAL;
> + }
>
> if (cxl_memdev_nvdimm_bridge_active(memdev)) {
> log_err(&ml,
> @@ -523,6 +526,9 @@ static int action_write(struct cxl_memdev *memdev, struct action_context *actx)
> if (!size) {
> size_t label_size = cxl_memdev_get_label_size(memdev);
>
> + if (label_size == SIZE_MAX)
> + return -EINVAL;
> +
> fseek(actx->f_in, 0L, SEEK_END);
> size = ftell(actx->f_in);
> fseek(actx->f_in, 0L, SEEK_SET);
> @@ -561,11 +567,13 @@ static int action_read(struct cxl_memdev *memdev, struct action_context *actx)
> char *buf;
> int rc;
>
> - if (param.len)
> + if (param.len) {
> size = param.len;
> - else
> + } else {
> size = cxl_memdev_get_label_size(memdev);
> -
> + if (size == SIZE_MAX)
> + return -EINVAL;
> + }
> buf = calloc(1, size);
> if (!buf)
> return -ENOMEM;
> --
> 2.44.0
>
>
prev parent reply other threads:[~2024-04-22 21:35 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-22 21:17 [NDCTL PATCH v3] ndctl: cxl: Remove dependency for attributes derived from IDENTIFY command Dave Jiang
2024-04-22 21:35 ` Ira Weiny [this message]
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=6626d80fa51ea_ab5652947a@iweiny-mobl.notmuch \
--to=ira.weiny@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=linux-cxl@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox