On Tue, 24 Aug 2021 09:06:29 -0700
Dan Williams <[email protected]> wrote:

> The CXL specification defines a mechanism for namespaces to be comprised
> of multiple dis-contiguous ranges. Introduce that concept to the legacy
> NVDIMM namespace implementation with a new nsl_set_nrange() helper, that
> sets the number of ranges to 1. Once the NVDIMM subsystem supports CXL
> labels and updates its namespace capacity provisioning for
> dis-contiguous support nsl_set_nrange() can be updated, but in the
> meantime CXL label validation requires nrange be non-zero.
> 
> Reported-by: Jonathan Cameron <[email protected]>
> Signed-off-by: Dan Williams <[email protected]>
FWIW which may well be mostly so I remember to skip this one
when reading v4+ if you need them.

Reviewed-by: Jonathan Cameron <[email protected]>
> ---
>  drivers/nvdimm/label.c |    1 +
>  drivers/nvdimm/nd.h    |   13 +++++++++++++
>  2 files changed, 14 insertions(+)
> 
> diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
> index e8e0d3e409a2..7abeb1233404 100644
> --- a/drivers/nvdimm/label.c
> +++ b/drivers/nvdimm/label.c
> @@ -901,6 +901,7 @@ static int __pmem_label_update(struct nd_region 
> *nd_region,
>       nsl_set_name(ndd, nd_label, nspm->alt_name);
>       nsl_set_flags(ndd, nd_label, flags);
>       nsl_set_nlabel(ndd, nd_label, nd_region->ndr_mappings);
> +     nsl_set_nrange(ndd, nd_label, 1);
>       nsl_set_position(ndd, nd_label, pos);
>       nsl_set_isetcookie(ndd, nd_label, cookie);
>       nsl_set_rawsize(ndd, nd_label, resource_size(res));
> diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
> index 036638bdb7e3..d57f95a48fe1 100644
> --- a/drivers/nvdimm/nd.h
> +++ b/drivers/nvdimm/nd.h
> @@ -164,6 +164,19 @@ static inline void nsl_set_nlabel(struct nvdimm_drvdata 
> *ndd,
>       nd_label->nlabel = __cpu_to_le16(nlabel);
>  }
>  
> +static inline u16 nsl_get_nrange(struct nvdimm_drvdata *ndd,
> +                              struct nd_namespace_label *nd_label)
> +{
> +     /* EFI labels do not have an nrange field */
> +     return 1;
> +}
> +
> +static inline void nsl_set_nrange(struct nvdimm_drvdata *ndd,
> +                               struct nd_namespace_label *nd_label,
> +                               u16 nrange)
> +{
> +}
> +
>  static inline u64 nsl_get_lbasize(struct nvdimm_drvdata *ndd,
>                                 struct nd_namespace_label *nd_label)
>  {
> 


Reply via email to