From: Dan Williams <dan.j.williams@intel.com> To: Vishal Verma <vishal.l.verma@intel.com> Cc: linux-cxl@vger.kernel.org, Ben Widawsky <ben.widawsky@intel.com>, Linux NVDIMM <nvdimm@lists.linux.dev> Subject: Re: [ndctl PATCH v4 13/17] cxl: add commands to read, write, and zero labels Date: Thu, 14 Oct 2021 15:34:50 -0700 [thread overview] Message-ID: <CAPcyv4gf-yR7dcLEK+L6VV7m3=1sY6CtRiWAziHw9VNBLv6E6A@mail.gmail.com> (raw) In-Reply-To: <20211007082139.3088615-14-vishal.l.verma@intel.com> On Thu, Oct 7, 2021 at 1:22 AM Vishal Verma <vishal.l.verma@intel.com> wrote: > > Add the following cxl-cli commands: read-labels, write-labels, > zero-labels. They operate on a CXL memdev, or a set of memdevs, and > allow interacting with the label storage area (LSA) on the device. > > Add man pages for the above cxl-cli commands. > > Cc: Dan Williams <dan.j.williams@intel.com> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> [..] > diff --git a/Documentation/cxl/cxl-write-labels.txt b/Documentation/cxl/cxl-write-labels.txt > new file mode 100644 > index 0000000..c4592b3 > --- /dev/null > +++ b/Documentation/cxl/cxl-write-labels.txt > @@ -0,0 +1,32 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +cxl-write-labels(1) > +=================== > + > +NAME > +---- > +cxl-write-labels - write data to the label area on a memdev > + > +SYNOPSIS > +-------- > +[verse] > +'cxl write-labels <mem> [-i <filename>]' > + > +include::labels-description.txt[] > +Read data from the input filename, or stdin, and write it to the given > +<mem> device. Note that the device must not be active in any region, ...just add: "or actively registered with the nvdimm subsystem," > +otherwise the kernel will not allow write access to the device's label > +data area. > + > +OPTIONS > +------- > +include::labels-options.txt[] > +-i:: > +--input:: > + input file > + > +SEE ALSO > +-------- > +linkcxl:cxl-read-labels[1], > +linkcxl:cxl-zero-labels[1], > +CXL-2.0 9.13.2 > diff --git a/Documentation/cxl/cxl-zero-labels.txt b/Documentation/cxl/cxl-zero-labels.txt > new file mode 100644 > index 0000000..bf95b24 > --- /dev/null > +++ b/Documentation/cxl/cxl-zero-labels.txt > @@ -0,0 +1,29 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +cxl-zero-labels(1) > +================== > + > +NAME > +---- > +cxl-zero-labels - zero out the label area on a set of memdevs > + > +SYNOPSIS > +-------- > +[verse] > +'cxl zero-labels' <mem0> [<mem1>..<memN>] [<options>] > + > +include::labels-description.txt[] > +This command resets the device to its default state by > +deleting all labels. > + > +OPTIONS > +------- > +include::labels-options.txt[] > + > +include::../copyright.txt[] > + > +SEE ALSO > +-------- > +linkcxl:cxl-read-labels[1], > +linkcxl:cxl-write-labels[1], > +CXL-2.0 9.13.2 > diff --git a/Documentation/cxl/labels-description.txt b/Documentation/cxl/labels-description.txt > new file mode 100644 > index 0000000..f60bd5d > --- /dev/null > +++ b/Documentation/cxl/labels-description.txt > @@ -0,0 +1,8 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +DESCRIPTION > +----------- > +The region label area is a small persistent partition of capacity > +available on some CXL memory devices. The label area is used to > +and configure or determine the set of memory devices participating > +in different interleave sets. > diff --git a/Documentation/cxl/labels-options.txt b/Documentation/cxl/labels-options.txt > new file mode 100644 > index 0000000..06fbac3 > --- /dev/null > +++ b/Documentation/cxl/labels-options.txt > @@ -0,0 +1,17 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +<memory device(s)>:: > +include::memdev-option.txt[] > + > +-s:: > +--size=:: > + Limit the operation to the given number of bytes. A size of 0 > + indicates to operate over the entire label capacity. > + > +-O:: > +--offset=:: > + Begin the operation at the given offset into the label area. > + > +-v:: > + Turn on verbose debug messages in the library (if libcxl was built with > + logging and debug enabled). > diff --git a/Documentation/cxl/memdev-option.txt b/Documentation/cxl/memdev-option.txt > new file mode 100644 > index 0000000..e778582 > --- /dev/null > +++ b/Documentation/cxl/memdev-option.txt > @@ -0,0 +1,4 @@ > +// SPDX-License-Identifier: GPL-2.0 > +A 'memX' device name, or a memdev id number. Restrict the operation to > +the specified memdev(s). The keyword 'all' can be specified to indicate > +the lack of any restriction. > diff --git a/cxl/builtin.h b/cxl/builtin.h > index 3797f98..78eca6e 100644 > --- a/cxl/builtin.h > +++ b/cxl/builtin.h > @@ -5,4 +5,9 @@ > > struct cxl_ctx; > int cmd_list(int argc, const char **argv, struct cxl_ctx *ctx); > +int cmd_write_labels(int argc, const char **argv, struct cxl_ctx *ctx); > +int cmd_read_labels(int argc, const char **argv, struct cxl_ctx *ctx); > +int cmd_zero_labels(int argc, const char **argv, struct cxl_ctx *ctx); > +int cmd_init_labels(int argc, const char **argv, struct cxl_ctx *ctx); > +int cmd_check_labels(int argc, const char **argv, struct cxl_ctx *ctx); > #endif /* _CXL_BUILTIN_H_ */ > diff --git a/cxl/cxl.c b/cxl/cxl.c > index a7725f8..4b1661d 100644 > --- a/cxl/cxl.c > +++ b/cxl/cxl.c > @@ -61,6 +61,9 @@ static struct cmd_struct commands[] = { > { "version", .c_fn = cmd_version }, > { "list", .c_fn = cmd_list }, > { "help", .c_fn = cmd_help }, > + { "zero-labels", .c_fn = cmd_zero_labels }, > + { "read-labels", .c_fn = cmd_read_labels }, > + { "write-labels", .c_fn = cmd_write_labels }, > }; > > int main(int argc, const char **argv) > diff --git a/cxl/memdev.c b/cxl/memdev.c > new file mode 100644 > index 0000000..ffc66df > --- /dev/null > +++ b/cxl/memdev.c > @@ -0,0 +1,314 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* Copyright (C) 2020-2021 Intel Corporation. All rights reserved. */ > +#include <stdio.h> > +#include <errno.h> > +#include <stdlib.h> > +#include <unistd.h> > +#include <limits.h> > +#include <util/log.h> > +#include <util/filter.h> > +#include <cxl/libcxl.h> > +#include <util/parse-options.h> > +#include <ccan/minmax/minmax.h> > +#include <ccan/array_size/array_size.h> > + > +struct action_context { > + FILE *f_out; > + FILE *f_in; > +}; > + > +static struct parameters { > + const char *outfile; > + const char *infile; > + unsigned len; > + unsigned offset; > + bool verbose; > +} param; > + > +#define fail(fmt, ...) \ > +do { \ > + fprintf(stderr, "cxl-%s:%s:%d: " fmt, \ > + VERSION, __func__, __LINE__, ##__VA_ARGS__); \ > +} while (0) > + > +#define BASE_OPTIONS() \ > +OPT_BOOLEAN('v',"verbose", ¶m.verbose, "turn on debug") > + > +#define READ_OPTIONS() \ > +OPT_STRING('o', "output", ¶m.outfile, "output-file", \ > + "filename to write label area contents") > + > +#define WRITE_OPTIONS() \ > +OPT_STRING('i', "input", ¶m.infile, "input-file", \ > + "filename to read label area data") > + > +#define LABEL_OPTIONS() \ > +OPT_UINTEGER('s', "size", ¶m.len, "number of label bytes to operate"), \ > +OPT_UINTEGER('O', "offset", ¶m.offset, \ > + "offset into the label area to start operation") > + > +static const struct option read_options[] = { > + BASE_OPTIONS(), > + LABEL_OPTIONS(), > + READ_OPTIONS(), > + OPT_END(), > +}; > + > +static const struct option write_options[] = { > + BASE_OPTIONS(), > + LABEL_OPTIONS(), > + WRITE_OPTIONS(), > + OPT_END(), > +}; > + > +static const struct option zero_options[] = { > + BASE_OPTIONS(), > + LABEL_OPTIONS(), > + OPT_END(), > +}; > + > +static int action_zero(struct cxl_memdev *memdev, struct action_context *actx) > +{ > + int rc; > + > + if (cxl_memdev_is_active(memdev)) { > + fprintf(stderr, "%s: memdev active, abort label write\n", > + cxl_memdev_get_devname(memdev)); > + return -EBUSY; > + } > + > + rc = cxl_memdev_zero_label(memdev); > + if (rc < 0) > + fprintf(stderr, "%s: label zeroing failed: %s\n", > + cxl_memdev_get_devname(memdev), strerror(-rc)); > + > + return rc; > +} > + > +static int action_write(struct cxl_memdev *memdev, struct action_context *actx) > +{ > + size_t size = param.len, read_len; > + unsigned char *buf; > + int rc; > + > + if (cxl_memdev_is_active(memdev)) { Similar cxl_memdev_nvdimm_bridge_active() comment as before... ...but other than that nothing else jumps out: Reviewed-by: Dan Williams <dan.j.williams@intel.com>
next prev parent reply other threads:[~2021-10-14 22:35 UTC|newest] Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-10-07 8:21 [ndctl PATCH v4 00/17] Initial CXL support Vishal Verma 2021-10-07 8:21 ` [ndctl PATCH v4 01/17] ndctl: add .clang-format Vishal Verma 2021-10-07 8:21 ` [ndctl PATCH v4 02/17] cxl: add a cxl utility and libcxl library Vishal Verma 2021-10-07 8:21 ` [ndctl PATCH v4 03/17] cxl: add a local copy of the cxl_mem UAPI header Vishal Verma 2021-10-07 8:21 ` [ndctl PATCH v4 04/17] util: add the struct_size() helper from the kernel Vishal Verma 2021-10-14 2:40 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 05/17] libcxl: add support for command query and submission Vishal Verma 2021-10-14 2:53 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 06/17] libcxl: add support for the 'Identify Device' command Vishal Verma 2021-10-07 8:21 ` [ndctl PATCH v4 07/17] libcxl: add GET_HEALTH_INFO mailbox command and accessors Vishal Verma 2021-10-14 16:01 ` Dan Williams 2021-11-02 20:22 ` Verma, Vishal L 2021-11-02 20:27 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 08/17] libcxl: add support for the 'GET_LSA' command Vishal Verma 2021-10-14 16:35 ` Dan Williams 2021-10-14 20:06 ` Verma, Vishal L 2021-10-14 20:55 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 09/17] util/hexdump: Add a util helper to print a buffer in hex Vishal Verma 2021-10-14 16:48 ` Dan Williams 2021-10-14 20:33 ` Verma, Vishal L 2021-10-14 22:39 ` Dan Williams 2021-11-02 20:25 ` Verma, Vishal L 2021-10-07 8:21 ` [ndctl PATCH v4 10/17] libcxl: add label_size to cxl_memdev, and an API to retrieve it Vishal Verma 2021-10-14 18:24 ` Dan Williams 2021-10-14 21:50 ` Verma, Vishal L 2021-10-07 8:21 ` [ndctl PATCH v4 11/17] libcxl: add a stub interface to determine whether a memdev is active Vishal Verma 2021-10-14 19:59 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 12/17] libcxl: add interfaces for label operations Vishal Verma 2021-10-14 21:27 ` Dan Williams 2021-10-14 22:18 ` Verma, Vishal L 2021-10-14 22:24 ` Verma, Vishal L 2021-10-14 22:45 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 13/17] cxl: add commands to read, write, and zero labels Vishal Verma 2021-10-14 22:34 ` Dan Williams [this message] 2021-10-07 8:21 ` [ndctl PATCH v4 14/17] Documentation/cxl: add library API documentation Vishal Verma 2021-10-14 23:31 ` Dan Williams 2021-11-05 18:58 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 15/17] ndctl: Add CXL packages to the RPM spec Vishal Verma 2021-10-14 23:33 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 16/17] cxl-cli: add bash completion Vishal Verma 2021-10-14 23:34 ` Dan Williams 2021-10-07 8:21 ` [ndctl PATCH v4 17/17] cxl: add health information to cxl-list Vishal Verma 2021-10-11 22:07 ` Verma, Vishal L 2021-10-15 0:09 ` Dan Williams 2021-10-14 23:42 ` Verma, Vishal L 2021-10-15 21:15 ` Dan Williams
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='CAPcyv4gf-yR7dcLEK+L6VV7m3=1sY6CtRiWAziHw9VNBLv6E6A@mail.gmail.com' \ --to=dan.j.williams@intel.com \ --cc=ben.widawsky@intel.com \ --cc=linux-cxl@vger.kernel.org \ --cc=nvdimm@lists.linux.dev \ --cc=vishal.l.verma@intel.com \ --subject='Re: [ndctl PATCH v4 13/17] cxl: add commands to read, write, and zero labels' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).