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]>
