On Mon, Feb 7, 2022 at 3:06 PM <[email protected]> wrote:
>
> From: Alison Schofield <[email protected]>
>
> Users need access to a few additional fields reported by the IDENTIFY

Ah, I see the "Users need" pattern... To me, the "Users need"
statement is a step removed / secondary from the real driving
motivation which is the "CXL PMEM provisioning model specifies /
mandates".

It feels like a watered down abstraction to me.

> mailbox command: total, volatile_only, and persistent_only capacities.
> These values are useful when defining partition layouts.
>
> Add accessors to the libcxl API to retrieve these values from the
> IDENTIFY command.
>
> The fields are specified in multiples of 256MB per the CXL 2.0 spec.
> Use the capacity multiplier to convert the raw data into bytes for user
> consumption.
>
> Signed-off-by: Alison Schofield <[email protected]>
> ---
>  cxl/lib/libcxl.c   | 36 ++++++++++++++++++++++++++++++++++++
>  cxl/lib/libcxl.sym |  3 +++
>  cxl/libcxl.h       |  3 +++
>  3 files changed, 42 insertions(+)
>
> diff --git a/cxl/lib/libcxl.c b/cxl/lib/libcxl.c
> index 33cf06b..e9d7762 100644
> --- a/cxl/lib/libcxl.c
> +++ b/cxl/lib/libcxl.c
> @@ -2322,6 +2322,42 @@ CXL_EXPORT unsigned int 
> cxl_cmd_identify_get_label_size(struct cxl_cmd *cmd)
>         return le32_to_cpu(id->lsa_size);
>  }
>
> +static struct cxl_cmd_identify *
> +cmd_to_identify(struct cxl_cmd *cmd)
> +{
> +       if (cxl_cmd_validate_status(cmd, CXL_MEM_COMMAND_ID_IDENTIFY))
> +               return NULL;
> +
> +       return cmd->output_payload;
> +}
> +
> +CXL_EXPORT unsigned long long
> +cxl_cmd_identify_get_total_size(struct cxl_cmd *cmd)
> +{
> +       struct cxl_cmd_identify *c;
> +
> +       c = cmd_to_identify(cmd);
> +       return c ? capacity_to_bytes(c->total_capacity) : ULLONG_MAX;
> +}
> +
> +CXL_EXPORT unsigned long long
> +cxl_cmd_identify_get_volatile_only_size(struct cxl_cmd *cmd)
> +{
> +       struct cxl_cmd_identify *c;
> +
> +       c = cmd_to_identify(cmd);
> +       return c ? capacity_to_bytes(c->volatile_capacity) : ULLONG_MAX;
> +}
> +
> +CXL_EXPORT unsigned long long
> +cxl_cmd_identify_get_persistent_only_size(struct cxl_cmd *cmd)
> +{
> +       struct cxl_cmd_identify *c;
> +
> +       c = cmd_to_identify(cmd);
> +       return c ? capacity_to_bytes(c->persistent_capacity) : ULLONG_MAX;

Same style comments as last patch, but otherwise:

Reviewed-by: Dan Williams <[email protected]>

Reply via email to