]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
libnvdimm/labels: Introduce the concept of multi-range namespace labels
authorDan Williams <dan.j.williams@intel.com>
Tue, 24 Aug 2021 16:06:29 +0000 (09:06 -0700)
committerDan Williams <dan.j.williams@intel.com>
Tue, 24 Aug 2021 19:08:29 +0000 (12:08 -0700)
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 <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/162982118939.1124374.9504087573920499391.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/nvdimm/label.c
drivers/nvdimm/nd.h

index e8e0d3e409a2898eba150e0ee6fbcdcf5f0a212f..7abeb123340443312d99260d26c5c70e8f00e68e 100644 (file)
@@ -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));
index 036638bdb7e3fd972a95d2a8aa5edb3cd5bc6cd3..d57f95a48fe14618e7e11ae2f957617dc9594c8c 100644 (file)
@@ -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)
 {