On Sat, Dec 14, 2024 at 08:58:32PM -0600, Ira Weiny wrote:
> CXL Dynamic Capacity Devices (DCDs) optionally support dynamic capacity
> with up to eight partitions (Regions) (dc0-dc7).  CXL regions can now be
> sparse and defined as dynamic capacity (dc).
> 
> Add support for DCD devices and regions to libcxl.  Add documentation
> for the new interfaces.

It seems helpers (defined or modified) in this set can be used more.
I gave one example below. Again, I'll catch it on the next rev.

> 
> Based on an original patch from Navneet Singh.
> 
> Signed-off-by: Sushant1 Kumar <sushant1.ku...@intel.com>
> Co-developed-by: Ira Weiny <ira.we...@intel.com>
> Signed-off-by: Ira Weiny <ira.we...@intel.com>
> ---
>  Documentation/cxl/lib/libcxl.txt | 17 ++++++-
>  cxl/lib/libcxl.c                 | 98 
> ++++++++++++++++++++++++++++++++++++++++
>  cxl/lib/libcxl.sym               |  3 ++
>  cxl/lib/private.h                |  4 ++
>  cxl/libcxl.h                     | 52 ++++++++++++++++++++-
>  5 files changed, 171 insertions(+), 3 deletions(-)

snip

> @@ -2275,6 +2305,22 @@ static void *add_cxl_decoder(void *parent, int id, 
> const char *cxldecoder_base)
>                       decoder->mode = CXL_DECODER_MODE_RAM;
>               else if (strcmp(buf, "pmem") == 0)
>                       decoder->mode = CXL_DECODER_MODE_PMEM;
> +             else if (strcmp(buf, "dc0") == 0)
> +                     decoder->mode = CXL_DECODER_MODE_DC0;
> +             else if (strcmp(buf, "dc1") == 0)
> +                     decoder->mode = CXL_DECODER_MODE_DC1;
> +             else if (strcmp(buf, "dc2") == 0)
> +                     decoder->mode = CXL_DECODER_MODE_DC2;
> +             else if (strcmp(buf, "dc3") == 0)
> +                     decoder->mode = CXL_DECODER_MODE_DC3;
> +             else if (strcmp(buf, "dc4") == 0)
> +                     decoder->mode = CXL_DECODER_MODE_DC4;
> +             else if (strcmp(buf, "dc5") == 0)
> +                     decoder->mode = CXL_DECODER_MODE_DC5;
> +             else if (strcmp(buf, "dc6") == 0)
> +                     decoder->mode = CXL_DECODER_MODE_DC6;
> +             else if (strcmp(buf, "dc7") == 0)
> +                     decoder->mode = CXL_DECODER_MODE_DC7;
>               else if (strcmp(buf, "mixed") == 0)
>                       decoder->mode = CXL_DECODER_MODE_MIXED;
>               else if (strcmp(buf, "none") == 0)

If the modes survive, above can be simplified, probably as a separate
function using cxl_region_mode_name(), cxl_decoder_mode_is_dc() to get
to the mode without all those strcmps. Check all the predefined modes
first, then all the dc modes.

snip

> @@ -2592,6 +2648,30 @@ CXL_EXPORT int cxl_decoder_set_mode(struct cxl_decoder 
> *decoder,
>       case CXL_DECODER_MODE_RAM:
>               sprintf(buf, "ram");
>               break;
> +     case CXL_DECODER_MODE_DC0:
> +             sprintf(buf, "dc0");
> +             break;
> +     case CXL_DECODER_MODE_DC1:
> +             sprintf(buf, "dc1");
> +             break;
> +     case CXL_DECODER_MODE_DC2:
> +             sprintf(buf, "dc2");
> +             break;
> +     case CXL_DECODER_MODE_DC3:
> +             sprintf(buf, "dc3");
> +             break;
> +     case CXL_DECODER_MODE_DC4:
> +             sprintf(buf, "dc4");
> +             break;
> +     case CXL_DECODER_MODE_DC5:
> +             sprintf(buf, "dc5");
> +             break;
> +     case CXL_DECODER_MODE_DC6:
> +             sprintf(buf, "dc6");
> +             break;
> +     case CXL_DECODER_MODE_DC7:
> +             sprintf(buf, "dc7");
> +             break;
>       default:
>               err(ctx, "%s: unsupported mode: %d\n",
>                   cxl_decoder_get_devname(decoder), mode);

Again, if all these modes survive, this can tidy up like:

@@ -2593,9 +2646,14 @@ CXL_EXPORT int cxl_decoder_set_mode(struct cxl_decoder 
*decoder,
                sprintf(buf, "ram");
                break;
        default:
-               err(ctx, "%s: unsupported mode: %d\n",
-                   cxl_decoder_get_devname(decoder), mode);
-               return -EINVAL;
+               if (cxl_decoder_mode_is_dc(mode)) {
+                       sprintf(buf, "dc%d", mode - CXL_DECODER_MODE_DC0);
+               } else {
+                       err(ctx, "%s: unsupported mode: %d\n",
+                           cxl_decoder_get_devname(decoder), mode);
+                       return -EINVAL;
+               }
+               break;
        }


snip to end.

Reply via email to