1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright(c) 2013-2015 Intel Corporation. All rights reserved.
5 #include <linux/kstrtox.h>
6 #include <linux/module.h>
7 #include <linux/device.h>
8 #include <linux/sort.h>
9 #include <linux/slab.h>
10 #include <linux/list.h>
17 static void namespace_io_release(struct device
*dev
)
19 struct nd_namespace_io
*nsio
= to_nd_namespace_io(dev
);
24 static void namespace_pmem_release(struct device
*dev
)
26 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
27 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
30 ida_free(&nd_region
->ns_ida
, nspm
->id
);
31 kfree(nspm
->alt_name
);
36 static bool is_namespace_pmem(const struct device
*dev
);
37 static bool is_namespace_io(const struct device
*dev
);
39 static int is_uuid_busy(struct device
*dev
, void *data
)
41 uuid_t
*uuid1
= data
, *uuid2
= NULL
;
43 if (is_namespace_pmem(dev
)) {
44 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
47 } else if (is_nd_btt(dev
)) {
48 struct nd_btt
*nd_btt
= to_nd_btt(dev
);
51 } else if (is_nd_pfn(dev
)) {
52 struct nd_pfn
*nd_pfn
= to_nd_pfn(dev
);
57 if (uuid2
&& uuid_equal(uuid1
, uuid2
))
63 static int is_namespace_uuid_busy(struct device
*dev
, void *data
)
65 if (is_nd_region(dev
))
66 return device_for_each_child(dev
, data
, is_uuid_busy
);
71 * nd_is_uuid_unique - verify that no other namespace has @uuid
72 * @dev: any device on a nvdimm_bus
73 * @uuid: uuid to check
75 * Returns: %true if the uuid is unique, %false if not
77 bool nd_is_uuid_unique(struct device
*dev
, uuid_t
*uuid
)
79 struct nvdimm_bus
*nvdimm_bus
= walk_to_nvdimm_bus(dev
);
83 WARN_ON_ONCE(!is_nvdimm_bus_locked(&nvdimm_bus
->dev
));
84 if (device_for_each_child(&nvdimm_bus
->dev
, uuid
,
85 is_namespace_uuid_busy
) != 0)
90 bool pmem_should_map_pages(struct device
*dev
)
92 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
93 struct nd_namespace_common
*ndns
= to_ndns(dev
);
94 struct nd_namespace_io
*nsio
;
96 if (!IS_ENABLED(CONFIG_ZONE_DEVICE
))
99 if (!test_bit(ND_REGION_PAGEMAP
, &nd_region
->flags
))
102 if (is_nd_pfn(dev
) || is_nd_btt(dev
))
108 nsio
= to_nd_namespace_io(dev
);
109 if (region_intersects(nsio
->res
.start
, resource_size(&nsio
->res
),
110 IORESOURCE_SYSTEM_RAM
,
111 IORES_DESC_NONE
) == REGION_MIXED
)
114 return ARCH_MEMREMAP_PMEM
== MEMREMAP_WB
;
116 EXPORT_SYMBOL(pmem_should_map_pages
);
118 unsigned int pmem_sector_size(struct nd_namespace_common
*ndns
)
120 if (is_namespace_pmem(&ndns
->dev
)) {
121 struct nd_namespace_pmem
*nspm
;
123 nspm
= to_nd_namespace_pmem(&ndns
->dev
);
124 if (nspm
->lbasize
== 0 || nspm
->lbasize
== 512)
126 else if (nspm
->lbasize
== 4096)
129 dev_WARN(&ndns
->dev
, "unsupported sector size: %ld\n",
134 * There is no namespace label (is_namespace_io()), or the label
135 * indicates the default sector size.
139 EXPORT_SYMBOL(pmem_sector_size
);
141 const char *nvdimm_namespace_disk_name(struct nd_namespace_common
*ndns
,
144 struct nd_region
*nd_region
= to_nd_region(ndns
->dev
.parent
);
145 const char *suffix
= NULL
;
147 if (ndns
->claim
&& is_nd_btt(ndns
->claim
))
150 if (is_namespace_pmem(&ndns
->dev
) || is_namespace_io(&ndns
->dev
)) {
153 if (is_namespace_pmem(&ndns
->dev
)) {
154 struct nd_namespace_pmem
*nspm
;
156 nspm
= to_nd_namespace_pmem(&ndns
->dev
);
161 sprintf(name
, "pmem%d.%d%s", nd_region
->id
, nsidx
,
162 suffix
? suffix
: "");
164 sprintf(name
, "pmem%d%s", nd_region
->id
,
165 suffix
? suffix
: "");
172 EXPORT_SYMBOL(nvdimm_namespace_disk_name
);
174 const uuid_t
*nd_dev_to_uuid(struct device
*dev
)
176 if (dev
&& is_namespace_pmem(dev
)) {
177 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
183 EXPORT_SYMBOL(nd_dev_to_uuid
);
185 static ssize_t
nstype_show(struct device
*dev
,
186 struct device_attribute
*attr
, char *buf
)
188 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
190 return sprintf(buf
, "%d\n", nd_region_to_nstype(nd_region
));
192 static DEVICE_ATTR_RO(nstype
);
194 static ssize_t
__alt_name_store(struct device
*dev
, const char *buf
,
197 char *input
, *pos
, *alt_name
, **ns_altname
;
200 if (is_namespace_pmem(dev
)) {
201 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
203 ns_altname
= &nspm
->alt_name
;
207 if (dev
->driver
|| to_ndns(dev
)->claim
)
210 input
= kstrndup(buf
, len
, GFP_KERNEL
);
215 if (strlen(pos
) + 1 > NSLABEL_NAME_LEN
) {
220 alt_name
= kzalloc(NSLABEL_NAME_LEN
, GFP_KERNEL
);
226 *ns_altname
= alt_name
;
227 sprintf(*ns_altname
, "%s", pos
);
235 static int nd_namespace_label_update(struct nd_region
*nd_region
,
238 dev_WARN_ONCE(dev
, dev
->driver
|| to_ndns(dev
)->claim
,
239 "namespace must be idle during label update\n");
240 if (dev
->driver
|| to_ndns(dev
)->claim
)
244 * Only allow label writes that will result in a valid namespace
245 * or deletion of an existing namespace.
247 if (is_namespace_pmem(dev
)) {
248 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
249 resource_size_t size
= resource_size(&nspm
->nsio
.res
);
251 if (size
== 0 && nspm
->uuid
)
252 /* delete allocation */;
253 else if (!nspm
->uuid
)
256 return nd_pmem_namespace_label_update(nd_region
, nspm
, size
);
261 static ssize_t
alt_name_store(struct device
*dev
,
262 struct device_attribute
*attr
, const char *buf
, size_t len
)
264 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
268 nvdimm_bus_lock(dev
);
269 wait_nvdimm_bus_probe_idle(dev
);
270 rc
= __alt_name_store(dev
, buf
, len
);
272 rc
= nd_namespace_label_update(nd_region
, dev
);
273 dev_dbg(dev
, "%s(%zd)\n", rc
< 0 ? "fail " : "", rc
);
274 nvdimm_bus_unlock(dev
);
277 return rc
< 0 ? rc
: len
;
280 static ssize_t
alt_name_show(struct device
*dev
,
281 struct device_attribute
*attr
, char *buf
)
285 if (is_namespace_pmem(dev
)) {
286 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
288 ns_altname
= nspm
->alt_name
;
292 return sprintf(buf
, "%s\n", ns_altname
? ns_altname
: "");
294 static DEVICE_ATTR_RW(alt_name
);
296 static int scan_free(struct nd_region
*nd_region
,
297 struct nd_mapping
*nd_mapping
, struct nd_label_id
*label_id
,
300 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
304 struct resource
*res
, *last
;
307 for_each_dpa_resource(ndd
, res
)
308 if (strcmp(res
->name
, label_id
->id
) == 0)
314 if (n
>= resource_size(res
)) {
315 n
-= resource_size(res
);
316 nd_dbg_dpa(nd_region
, ndd
, res
, "delete %d\n", rc
);
317 nvdimm_free_dpa(ndd
, res
);
318 /* retry with last resource deleted */
322 rc
= adjust_resource(res
, res
->start
, resource_size(res
) - n
);
324 res
->flags
|= DPA_RESOURCE_ADJUSTED
;
325 nd_dbg_dpa(nd_region
, ndd
, res
, "shrink %d\n", rc
);
333 * shrink_dpa_allocation - for each dimm in region free n bytes for label_id
334 * @nd_region: the set of dimms to reclaim @n bytes from
335 * @label_id: unique identifier for the namespace consuming this dpa range
336 * @n: number of bytes per-dimm to release
338 * Assumes resources are ordered. Starting from the end try to
339 * adjust_resource() the allocation to @n, but if @n is larger than the
340 * allocation delete it and find the 'new' last allocation in the label
343 * Returns: %0 on success on -errno on error
345 static int shrink_dpa_allocation(struct nd_region
*nd_region
,
346 struct nd_label_id
*label_id
, resource_size_t n
)
350 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
351 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
354 rc
= scan_free(nd_region
, nd_mapping
, label_id
, n
);
362 static resource_size_t
init_dpa_allocation(struct nd_label_id
*label_id
,
363 struct nd_region
*nd_region
, struct nd_mapping
*nd_mapping
,
366 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
367 struct resource
*res
;
370 /* first resource allocation for this label-id or dimm */
371 res
= nvdimm_allocate_dpa(ndd
, label_id
, nd_mapping
->start
, n
);
375 nd_dbg_dpa(nd_region
, ndd
, res
, "init %d\n", rc
);
381 * space_valid() - validate free dpa space against constraints
382 * @nd_region: hosting region of the free space
383 * @ndd: dimm device data for debug
384 * @label_id: namespace id to allocate space
385 * @prev: potential allocation that precedes free space
386 * @next: allocation that follows the given free space range
387 * @exist: first allocation with same id in the mapping
388 * @n: range that must satisfied for pmem allocations
389 * @valid: free space range to validate
391 * BLK-space is valid as long as it does not precede a PMEM
392 * allocation in a given region. PMEM-space must be contiguous
393 * and adjacent to an existing allocation (if one
394 * exists). If reserving PMEM any space is valid.
396 static void space_valid(struct nd_region
*nd_region
, struct nvdimm_drvdata
*ndd
,
397 struct nd_label_id
*label_id
, struct resource
*prev
,
398 struct resource
*next
, struct resource
*exist
,
399 resource_size_t n
, struct resource
*valid
)
401 bool is_reserve
= strcmp(label_id
->id
, "pmem-reserve") == 0;
404 align
= nd_region
->align
/ nd_region
->ndr_mappings
;
405 valid
->start
= ALIGN(valid
->start
, align
);
406 valid
->end
= ALIGN_DOWN(valid
->end
+ 1, align
) - 1;
408 if (valid
->start
>= valid
->end
)
414 /* allocation needs to be contiguous, so this is all or nothing */
415 if (resource_size(valid
) < n
)
418 /* we've got all the space we need and no existing allocation */
422 /* allocation needs to be contiguous with the existing namespace */
423 if (valid
->start
== exist
->end
+ 1
424 || valid
->end
== exist
->start
- 1)
428 /* truncate @valid size to 0 */
429 valid
->end
= valid
->start
- 1;
433 ALLOC_ERR
= 0, ALLOC_BEFORE
, ALLOC_MID
, ALLOC_AFTER
,
436 static resource_size_t
scan_allocate(struct nd_region
*nd_region
,
437 struct nd_mapping
*nd_mapping
, struct nd_label_id
*label_id
,
440 resource_size_t mapping_end
= nd_mapping
->start
+ nd_mapping
->size
- 1;
441 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
442 struct resource
*res
, *exist
= NULL
, valid
;
443 const resource_size_t to_allocate
= n
;
446 for_each_dpa_resource(ndd
, res
)
447 if (strcmp(label_id
->id
, res
->name
) == 0)
450 valid
.start
= nd_mapping
->start
;
451 valid
.end
= mapping_end
;
452 valid
.name
= "free space";
455 for_each_dpa_resource(ndd
, res
) {
456 struct resource
*next
= res
->sibling
, *new_res
= NULL
;
457 resource_size_t allocate
, available
= 0;
458 enum alloc_loc loc
= ALLOC_ERR
;
462 /* ignore resources outside this nd_mapping */
463 if (res
->start
> mapping_end
)
465 if (res
->end
< nd_mapping
->start
)
468 /* space at the beginning of the mapping */
469 if (!first
++ && res
->start
> nd_mapping
->start
) {
470 valid
.start
= nd_mapping
->start
;
471 valid
.end
= res
->start
- 1;
472 space_valid(nd_region
, ndd
, label_id
, NULL
, next
, exist
,
473 to_allocate
, &valid
);
474 available
= resource_size(&valid
);
479 /* space between allocations */
481 valid
.start
= res
->start
+ resource_size(res
);
482 valid
.end
= min(mapping_end
, next
->start
- 1);
483 space_valid(nd_region
, ndd
, label_id
, res
, next
, exist
,
484 to_allocate
, &valid
);
485 available
= resource_size(&valid
);
490 /* space at the end of the mapping */
492 valid
.start
= res
->start
+ resource_size(res
);
493 valid
.end
= mapping_end
;
494 space_valid(nd_region
, ndd
, label_id
, res
, next
, exist
,
495 to_allocate
, &valid
);
496 available
= resource_size(&valid
);
501 if (!loc
|| !available
)
503 allocate
= min(available
, n
);
506 if (strcmp(res
->name
, label_id
->id
) == 0) {
507 /* adjust current resource up */
508 rc
= adjust_resource(res
, res
->start
- allocate
,
509 resource_size(res
) + allocate
);
510 action
= "cur grow up";
515 if (strcmp(next
->name
, label_id
->id
) == 0) {
516 /* adjust next resource up */
517 rc
= adjust_resource(next
, next
->start
518 - allocate
, resource_size(next
)
521 action
= "next grow up";
522 } else if (strcmp(res
->name
, label_id
->id
) == 0) {
523 action
= "grow down";
528 if (strcmp(res
->name
, label_id
->id
) == 0)
529 action
= "grow down";
537 if (strcmp(action
, "allocate") == 0) {
538 new_res
= nvdimm_allocate_dpa(ndd
, label_id
,
539 valid
.start
, allocate
);
542 } else if (strcmp(action
, "grow down") == 0) {
543 /* adjust current resource down */
544 rc
= adjust_resource(res
, res
->start
, resource_size(res
)
547 res
->flags
|= DPA_RESOURCE_ADJUSTED
;
553 nd_dbg_dpa(nd_region
, ndd
, new_res
, "%s(%d) %d\n",
562 * Retry scan with newly inserted resources.
563 * For example, if we did an ALLOC_BEFORE
564 * insertion there may also have been space
565 * available for an ALLOC_AFTER insertion, so we
566 * need to check this same resource again
573 if (n
== to_allocate
)
574 return init_dpa_allocation(label_id
, nd_region
, nd_mapping
, n
);
578 static int merge_dpa(struct nd_region
*nd_region
,
579 struct nd_mapping
*nd_mapping
, struct nd_label_id
*label_id
)
581 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
582 struct resource
*res
;
584 if (strncmp("pmem", label_id
->id
, 4) == 0)
587 for_each_dpa_resource(ndd
, res
) {
589 struct resource
*next
= res
->sibling
;
590 resource_size_t end
= res
->start
+ resource_size(res
);
592 if (!next
|| strcmp(res
->name
, label_id
->id
) != 0
593 || strcmp(next
->name
, label_id
->id
) != 0
594 || end
!= next
->start
)
596 end
+= resource_size(next
);
597 nvdimm_free_dpa(ndd
, next
);
598 rc
= adjust_resource(res
, res
->start
, end
- res
->start
);
599 nd_dbg_dpa(nd_region
, ndd
, res
, "merge %d\n", rc
);
602 res
->flags
|= DPA_RESOURCE_ADJUSTED
;
609 int __reserve_free_pmem(struct device
*dev
, void *data
)
611 struct nvdimm
*nvdimm
= data
;
612 struct nd_region
*nd_region
;
613 struct nd_label_id label_id
;
619 nd_region
= to_nd_region(dev
);
620 if (nd_region
->ndr_mappings
== 0)
623 memset(&label_id
, 0, sizeof(label_id
));
624 strcat(label_id
.id
, "pmem-reserve");
625 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
626 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
627 resource_size_t n
, rem
= 0;
629 if (nd_mapping
->nvdimm
!= nvdimm
)
632 n
= nd_pmem_available_dpa(nd_region
, nd_mapping
);
635 rem
= scan_allocate(nd_region
, nd_mapping
, &label_id
, n
);
636 dev_WARN_ONCE(&nd_region
->dev
, rem
,
637 "pmem reserve underrun: %#llx of %#llx bytes\n",
638 (unsigned long long) n
- rem
,
639 (unsigned long long) n
);
640 return rem
? -ENXIO
: 0;
646 void release_free_pmem(struct nvdimm_bus
*nvdimm_bus
,
647 struct nd_mapping
*nd_mapping
)
649 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
650 struct resource
*res
, *_res
;
652 for_each_dpa_resource_safe(ndd
, res
, _res
)
653 if (strcmp(res
->name
, "pmem-reserve") == 0)
654 nvdimm_free_dpa(ndd
, res
);
658 * grow_dpa_allocation - for each dimm allocate n bytes for @label_id
659 * @nd_region: the set of dimms to allocate @n more bytes from
660 * @label_id: unique identifier for the namespace consuming this dpa range
661 * @n: number of bytes per-dimm to add to the existing allocation
663 * Assumes resources are ordered. For BLK regions, first consume
664 * BLK-only available DPA free space, then consume PMEM-aliased DPA
665 * space starting at the highest DPA. For PMEM regions start
666 * allocations from the start of an interleave set and end at the first
667 * BLK allocation or the end of the interleave set, whichever comes
670 * Returns: %0 on success on -errno on error
672 static int grow_dpa_allocation(struct nd_region
*nd_region
,
673 struct nd_label_id
*label_id
, resource_size_t n
)
677 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
678 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
679 resource_size_t rem
= n
;
682 rem
= scan_allocate(nd_region
, nd_mapping
, label_id
, rem
);
683 dev_WARN_ONCE(&nd_region
->dev
, rem
,
684 "allocation underrun: %#llx of %#llx bytes\n",
685 (unsigned long long) n
- rem
,
686 (unsigned long long) n
);
690 rc
= merge_dpa(nd_region
, nd_mapping
, label_id
);
698 static void nd_namespace_pmem_set_resource(struct nd_region
*nd_region
,
699 struct nd_namespace_pmem
*nspm
, resource_size_t size
)
701 struct resource
*res
= &nspm
->nsio
.res
;
702 resource_size_t offset
= 0;
704 if (size
&& !nspm
->uuid
) {
709 if (size
&& nspm
->uuid
) {
710 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[0];
711 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
712 struct nd_label_id label_id
;
713 struct resource
*res
;
720 nd_label_gen_id(&label_id
, nspm
->uuid
, 0);
722 /* calculate a spa offset from the dpa allocation offset */
723 for_each_dpa_resource(ndd
, res
)
724 if (strcmp(res
->name
, label_id
.id
) == 0) {
725 offset
= (res
->start
- nd_mapping
->start
)
726 * nd_region
->ndr_mappings
;
735 res
->start
= nd_region
->ndr_start
+ offset
;
736 res
->end
= res
->start
+ size
- 1;
739 static bool uuid_not_set(const uuid_t
*uuid
, struct device
*dev
,
743 dev_dbg(dev
, "%s: uuid not set\n", where
);
749 static ssize_t
__size_store(struct device
*dev
, unsigned long long val
)
751 resource_size_t allocated
= 0, available
= 0;
752 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
753 struct nd_namespace_common
*ndns
= to_ndns(dev
);
754 struct nd_mapping
*nd_mapping
;
755 struct nvdimm_drvdata
*ndd
;
756 struct nd_label_id label_id
;
757 u32 flags
= 0, remainder
;
761 if (dev
->driver
|| ndns
->claim
)
764 if (is_namespace_pmem(dev
)) {
765 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
772 * We need a uuid for the allocation-label and dimm(s) on which
773 * to store the label.
775 if (uuid_not_set(uuid
, dev
, __func__
))
777 if (nd_region
->ndr_mappings
== 0) {
778 dev_dbg(dev
, "not associated with dimm(s)\n");
782 div_u64_rem(val
, nd_region
->align
, &remainder
);
784 dev_dbg(dev
, "%llu is not %ldK aligned\n", val
,
785 nd_region
->align
/ SZ_1K
);
789 nd_label_gen_id(&label_id
, uuid
, flags
);
790 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
791 nd_mapping
= &nd_region
->mapping
[i
];
792 ndd
= to_ndd(nd_mapping
);
795 * All dimms in an interleave set, need to be enabled
796 * for the size to be changed.
801 allocated
+= nvdimm_allocated_dpa(ndd
, &label_id
);
803 available
= nd_region_allocatable_dpa(nd_region
);
805 if (val
> available
+ allocated
)
808 if (val
== allocated
)
811 val
= div_u64(val
, nd_region
->ndr_mappings
);
812 allocated
= div_u64(allocated
, nd_region
->ndr_mappings
);
814 rc
= shrink_dpa_allocation(nd_region
, &label_id
,
817 rc
= grow_dpa_allocation(nd_region
, &label_id
, val
- allocated
);
822 if (is_namespace_pmem(dev
)) {
823 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
825 nd_namespace_pmem_set_resource(nd_region
, nspm
,
826 val
* nd_region
->ndr_mappings
);
830 * Try to delete the namespace if we deleted all of its
831 * allocation, this is not the seed or 0th device for the
832 * region, and it is not actively claimed by a btt, pfn, or dax
835 if (val
== 0 && id
!= 0 && nd_region
->ns_seed
!= dev
&& !ndns
->claim
)
836 nd_device_unregister(dev
, ND_ASYNC
);
841 static ssize_t
size_store(struct device
*dev
,
842 struct device_attribute
*attr
, const char *buf
, size_t len
)
844 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
845 unsigned long long val
;
848 rc
= kstrtoull(buf
, 0, &val
);
853 nvdimm_bus_lock(dev
);
854 wait_nvdimm_bus_probe_idle(dev
);
855 rc
= __size_store(dev
, val
);
857 rc
= nd_namespace_label_update(nd_region
, dev
);
859 /* setting size zero == 'delete namespace' */
860 if (rc
== 0 && val
== 0 && is_namespace_pmem(dev
)) {
861 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
867 dev_dbg(dev
, "%llx %s (%d)\n", val
, rc
< 0 ? "fail" : "success", rc
);
869 nvdimm_bus_unlock(dev
);
872 return rc
< 0 ? rc
: len
;
875 resource_size_t
__nvdimm_namespace_capacity(struct nd_namespace_common
*ndns
)
877 struct device
*dev
= &ndns
->dev
;
879 if (is_namespace_pmem(dev
)) {
880 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
882 return resource_size(&nspm
->nsio
.res
);
883 } else if (is_namespace_io(dev
)) {
884 struct nd_namespace_io
*nsio
= to_nd_namespace_io(dev
);
886 return resource_size(&nsio
->res
);
888 WARN_ONCE(1, "unknown namespace type\n");
892 resource_size_t
nvdimm_namespace_capacity(struct nd_namespace_common
*ndns
)
894 resource_size_t size
;
896 nvdimm_bus_lock(&ndns
->dev
);
897 size
= __nvdimm_namespace_capacity(ndns
);
898 nvdimm_bus_unlock(&ndns
->dev
);
902 EXPORT_SYMBOL(nvdimm_namespace_capacity
);
904 bool nvdimm_namespace_locked(struct nd_namespace_common
*ndns
)
908 struct device
*dev
= &ndns
->dev
;
909 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
911 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
912 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
913 struct nvdimm
*nvdimm
= nd_mapping
->nvdimm
;
915 if (test_bit(NDD_LOCKED
, &nvdimm
->flags
)) {
916 dev_dbg(dev
, "%s locked\n", nvdimm_name(nvdimm
));
922 EXPORT_SYMBOL(nvdimm_namespace_locked
);
924 static ssize_t
size_show(struct device
*dev
,
925 struct device_attribute
*attr
, char *buf
)
927 return sprintf(buf
, "%llu\n", (unsigned long long)
928 nvdimm_namespace_capacity(to_ndns(dev
)));
930 static DEVICE_ATTR(size
, 0444, size_show
, size_store
);
932 static uuid_t
*namespace_to_uuid(struct device
*dev
)
934 if (is_namespace_pmem(dev
)) {
935 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
939 return ERR_PTR(-ENXIO
);
942 static ssize_t
uuid_show(struct device
*dev
, struct device_attribute
*attr
,
945 uuid_t
*uuid
= namespace_to_uuid(dev
);
948 return PTR_ERR(uuid
);
950 return sprintf(buf
, "%pUb\n", uuid
);
951 return sprintf(buf
, "\n");
955 * namespace_update_uuid - check for a unique uuid and whether we're "renaming"
956 * @nd_region: parent region so we can updates all dimms in the set
957 * @dev: namespace type for generating label_id
958 * @new_uuid: incoming uuid
959 * @old_uuid: reference to the uuid storage location in the namespace object
961 * Returns: %0 on success on -errno on error
963 static int namespace_update_uuid(struct nd_region
*nd_region
,
964 struct device
*dev
, uuid_t
*new_uuid
,
967 struct nd_label_id old_label_id
;
968 struct nd_label_id new_label_id
;
971 if (!nd_is_uuid_unique(dev
, new_uuid
))
974 if (*old_uuid
== NULL
)
978 * If we've already written a label with this uuid, then it's
979 * too late to rename because we can't reliably update the uuid
980 * without losing the old namespace. Userspace must delete this
981 * namespace to abandon the old uuid.
983 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
984 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
987 * This check by itself is sufficient because old_uuid
988 * would be NULL above if this uuid did not exist in the
989 * currently written set.
991 * FIXME: can we delete uuid with zero dpa allocated?
993 if (list_empty(&nd_mapping
->labels
))
997 nd_label_gen_id(&old_label_id
, *old_uuid
, 0);
998 nd_label_gen_id(&new_label_id
, new_uuid
, 0);
999 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
1000 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
1001 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
1002 struct nd_label_ent
*label_ent
;
1003 struct resource
*res
;
1005 for_each_dpa_resource(ndd
, res
)
1006 if (strcmp(res
->name
, old_label_id
.id
) == 0)
1007 sprintf((void *) res
->name
, "%s",
1010 mutex_lock(&nd_mapping
->lock
);
1011 list_for_each_entry(label_ent
, &nd_mapping
->labels
, list
) {
1012 struct nd_namespace_label
*nd_label
= label_ent
->label
;
1013 struct nd_label_id label_id
;
1018 nsl_get_uuid(ndd
, nd_label
, &uuid
);
1019 nd_label_gen_id(&label_id
, &uuid
,
1020 nsl_get_flags(ndd
, nd_label
));
1021 if (strcmp(old_label_id
.id
, label_id
.id
) == 0)
1022 set_bit(ND_LABEL_REAP
, &label_ent
->flags
);
1024 mutex_unlock(&nd_mapping
->lock
);
1028 *old_uuid
= new_uuid
;
1032 static ssize_t
uuid_store(struct device
*dev
,
1033 struct device_attribute
*attr
, const char *buf
, size_t len
)
1035 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
1036 uuid_t
*uuid
= NULL
;
1040 if (is_namespace_pmem(dev
)) {
1041 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
1043 ns_uuid
= &nspm
->uuid
;
1048 nvdimm_bus_lock(dev
);
1049 wait_nvdimm_bus_probe_idle(dev
);
1050 if (to_ndns(dev
)->claim
)
1053 rc
= nd_uuid_store(dev
, &uuid
, buf
, len
);
1055 rc
= namespace_update_uuid(nd_region
, dev
, uuid
, ns_uuid
);
1057 rc
= nd_namespace_label_update(nd_region
, dev
);
1060 dev_dbg(dev
, "result: %zd wrote: %s%s", rc
, buf
,
1061 buf
[len
- 1] == '\n' ? "" : "\n");
1062 nvdimm_bus_unlock(dev
);
1065 return rc
< 0 ? rc
: len
;
1067 static DEVICE_ATTR_RW(uuid
);
1069 static ssize_t
resource_show(struct device
*dev
,
1070 struct device_attribute
*attr
, char *buf
)
1072 struct resource
*res
;
1074 if (is_namespace_pmem(dev
)) {
1075 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
1077 res
= &nspm
->nsio
.res
;
1078 } else if (is_namespace_io(dev
)) {
1079 struct nd_namespace_io
*nsio
= to_nd_namespace_io(dev
);
1085 /* no address to convey if the namespace has no allocation */
1086 if (resource_size(res
) == 0)
1088 return sprintf(buf
, "%#llx\n", (unsigned long long) res
->start
);
1090 static DEVICE_ATTR_ADMIN_RO(resource
);
1092 static const unsigned long pmem_lbasize_supported
[] = { 512, 4096, 0 };
1094 static ssize_t
sector_size_show(struct device
*dev
,
1095 struct device_attribute
*attr
, char *buf
)
1097 if (is_namespace_pmem(dev
)) {
1098 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
1100 return nd_size_select_show(nspm
->lbasize
,
1101 pmem_lbasize_supported
, buf
);
1106 static ssize_t
sector_size_store(struct device
*dev
,
1107 struct device_attribute
*attr
, const char *buf
, size_t len
)
1109 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
1110 const unsigned long *supported
;
1111 unsigned long *lbasize
;
1114 if (is_namespace_pmem(dev
)) {
1115 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
1117 lbasize
= &nspm
->lbasize
;
1118 supported
= pmem_lbasize_supported
;
1123 nvdimm_bus_lock(dev
);
1124 if (to_ndns(dev
)->claim
)
1127 rc
= nd_size_select_store(dev
, buf
, lbasize
, supported
);
1129 rc
= nd_namespace_label_update(nd_region
, dev
);
1130 dev_dbg(dev
, "result: %zd %s: %s%s", rc
, rc
< 0 ? "tried" : "wrote",
1131 buf
, buf
[len
- 1] == '\n' ? "" : "\n");
1132 nvdimm_bus_unlock(dev
);
1135 return rc
? rc
: len
;
1137 static DEVICE_ATTR_RW(sector_size
);
1139 static ssize_t
dpa_extents_show(struct device
*dev
,
1140 struct device_attribute
*attr
, char *buf
)
1142 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
1143 struct nd_label_id label_id
;
1144 uuid_t
*uuid
= NULL
;
1148 nvdimm_bus_lock(dev
);
1149 if (is_namespace_pmem(dev
)) {
1150 struct nd_namespace_pmem
*nspm
= to_nd_namespace_pmem(dev
);
1159 nd_label_gen_id(&label_id
, uuid
, flags
);
1160 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
1161 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
1162 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
1163 struct resource
*res
;
1165 for_each_dpa_resource(ndd
, res
)
1166 if (strcmp(res
->name
, label_id
.id
) == 0)
1170 nvdimm_bus_unlock(dev
);
1172 return sprintf(buf
, "%d\n", count
);
1174 static DEVICE_ATTR_RO(dpa_extents
);
1176 static int btt_claim_class(struct device
*dev
)
1178 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
1179 int i
, loop_bitmask
= 0;
1181 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
1182 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
1183 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
1184 struct nd_namespace_index
*nsindex
;
1187 * If any of the DIMMs do not support labels the only
1188 * possible BTT format is v1.
1195 nsindex
= to_namespace_index(ndd
, ndd
->ns_current
);
1196 if (nsindex
== NULL
)
1199 /* check whether existing labels are v1.1 or v1.2 */
1200 if (__le16_to_cpu(nsindex
->major
) == 1
1201 && __le16_to_cpu(nsindex
->minor
) == 1)
1208 * If nsindex is null loop_bitmask's bit 0 will be set, and if an index
1209 * block is found, a v1.1 label for any mapping will set bit 1, and a
1210 * v1.2 label will set bit 2.
1212 * At the end of the loop, at most one of the three bits must be set.
1213 * If multiple bits were set, it means the different mappings disagree
1214 * about their labels, and this must be cleaned up first.
1216 * If all the label index blocks are found to agree, nsindex of NULL
1217 * implies labels haven't been initialized yet, and when they will,
1218 * they will be of the 1.2 format, so we can assume BTT2.0
1220 * If 1.1 labels are found, we enforce BTT1.1, and if 1.2 labels are
1221 * found, we enforce BTT2.0
1223 * If the loop was never entered, default to BTT1.1 (legacy namespaces)
1225 switch (loop_bitmask
) {
1228 return NVDIMM_CCLASS_BTT
;
1231 return NVDIMM_CCLASS_BTT2
;
1237 static ssize_t
holder_show(struct device
*dev
,
1238 struct device_attribute
*attr
, char *buf
)
1240 struct nd_namespace_common
*ndns
= to_ndns(dev
);
1244 rc
= sprintf(buf
, "%s\n", ndns
->claim
? dev_name(ndns
->claim
) : "");
1249 static DEVICE_ATTR_RO(holder
);
1251 static int __holder_class_store(struct device
*dev
, const char *buf
)
1253 struct nd_namespace_common
*ndns
= to_ndns(dev
);
1255 if (dev
->driver
|| ndns
->claim
)
1258 if (sysfs_streq(buf
, "btt")) {
1259 int rc
= btt_claim_class(dev
);
1261 if (rc
< NVDIMM_CCLASS_NONE
)
1263 ndns
->claim_class
= rc
;
1264 } else if (sysfs_streq(buf
, "pfn"))
1265 ndns
->claim_class
= NVDIMM_CCLASS_PFN
;
1266 else if (sysfs_streq(buf
, "dax"))
1267 ndns
->claim_class
= NVDIMM_CCLASS_DAX
;
1268 else if (sysfs_streq(buf
, ""))
1269 ndns
->claim_class
= NVDIMM_CCLASS_NONE
;
1276 static ssize_t
holder_class_store(struct device
*dev
,
1277 struct device_attribute
*attr
, const char *buf
, size_t len
)
1279 struct nd_region
*nd_region
= to_nd_region(dev
->parent
);
1283 nvdimm_bus_lock(dev
);
1284 wait_nvdimm_bus_probe_idle(dev
);
1285 rc
= __holder_class_store(dev
, buf
);
1287 rc
= nd_namespace_label_update(nd_region
, dev
);
1288 dev_dbg(dev
, "%s(%d)\n", rc
< 0 ? "fail " : "", rc
);
1289 nvdimm_bus_unlock(dev
);
1292 return rc
< 0 ? rc
: len
;
1295 static ssize_t
holder_class_show(struct device
*dev
,
1296 struct device_attribute
*attr
, char *buf
)
1298 struct nd_namespace_common
*ndns
= to_ndns(dev
);
1302 if (ndns
->claim_class
== NVDIMM_CCLASS_NONE
)
1303 rc
= sprintf(buf
, "\n");
1304 else if ((ndns
->claim_class
== NVDIMM_CCLASS_BTT
) ||
1305 (ndns
->claim_class
== NVDIMM_CCLASS_BTT2
))
1306 rc
= sprintf(buf
, "btt\n");
1307 else if (ndns
->claim_class
== NVDIMM_CCLASS_PFN
)
1308 rc
= sprintf(buf
, "pfn\n");
1309 else if (ndns
->claim_class
== NVDIMM_CCLASS_DAX
)
1310 rc
= sprintf(buf
, "dax\n");
1312 rc
= sprintf(buf
, "<unknown>\n");
1317 static DEVICE_ATTR_RW(holder_class
);
1319 static ssize_t
mode_show(struct device
*dev
,
1320 struct device_attribute
*attr
, char *buf
)
1322 struct nd_namespace_common
*ndns
= to_ndns(dev
);
1323 struct device
*claim
;
1328 claim
= ndns
->claim
;
1329 if (claim
&& is_nd_btt(claim
))
1331 else if (claim
&& is_nd_pfn(claim
))
1333 else if (claim
&& is_nd_dax(claim
))
1335 else if (!claim
&& pmem_should_map_pages(dev
))
1339 rc
= sprintf(buf
, "%s\n", mode
);
1344 static DEVICE_ATTR_RO(mode
);
1346 static ssize_t
force_raw_store(struct device
*dev
,
1347 struct device_attribute
*attr
, const char *buf
, size_t len
)
1350 int rc
= kstrtobool(buf
, &force_raw
);
1355 to_ndns(dev
)->force_raw
= force_raw
;
1359 static ssize_t
force_raw_show(struct device
*dev
,
1360 struct device_attribute
*attr
, char *buf
)
1362 return sprintf(buf
, "%d\n", to_ndns(dev
)->force_raw
);
1364 static DEVICE_ATTR_RW(force_raw
);
1366 static struct attribute
*nd_namespace_attributes
[] = {
1367 &dev_attr_nstype
.attr
,
1368 &dev_attr_size
.attr
,
1369 &dev_attr_mode
.attr
,
1370 &dev_attr_uuid
.attr
,
1371 &dev_attr_holder
.attr
,
1372 &dev_attr_resource
.attr
,
1373 &dev_attr_alt_name
.attr
,
1374 &dev_attr_force_raw
.attr
,
1375 &dev_attr_sector_size
.attr
,
1376 &dev_attr_dpa_extents
.attr
,
1377 &dev_attr_holder_class
.attr
,
1381 static umode_t
namespace_visible(struct kobject
*kobj
,
1382 struct attribute
*a
, int n
)
1384 struct device
*dev
= container_of(kobj
, struct device
, kobj
);
1386 if (is_namespace_pmem(dev
)) {
1387 if (a
== &dev_attr_size
.attr
)
1393 /* base is_namespace_io() attributes */
1394 if (a
== &dev_attr_nstype
.attr
|| a
== &dev_attr_size
.attr
||
1395 a
== &dev_attr_holder
.attr
|| a
== &dev_attr_holder_class
.attr
||
1396 a
== &dev_attr_force_raw
.attr
|| a
== &dev_attr_mode
.attr
||
1397 a
== &dev_attr_resource
.attr
)
1403 static struct attribute_group nd_namespace_attribute_group
= {
1404 .attrs
= nd_namespace_attributes
,
1405 .is_visible
= namespace_visible
,
1408 static const struct attribute_group
*nd_namespace_attribute_groups
[] = {
1409 &nd_device_attribute_group
,
1410 &nd_namespace_attribute_group
,
1411 &nd_numa_attribute_group
,
1415 static const struct device_type namespace_io_device_type
= {
1416 .name
= "nd_namespace_io",
1417 .release
= namespace_io_release
,
1418 .groups
= nd_namespace_attribute_groups
,
1421 static const struct device_type namespace_pmem_device_type
= {
1422 .name
= "nd_namespace_pmem",
1423 .release
= namespace_pmem_release
,
1424 .groups
= nd_namespace_attribute_groups
,
1427 static bool is_namespace_pmem(const struct device
*dev
)
1429 return dev
? dev
->type
== &namespace_pmem_device_type
: false;
1432 static bool is_namespace_io(const struct device
*dev
)
1434 return dev
? dev
->type
== &namespace_io_device_type
: false;
1437 struct nd_namespace_common
*nvdimm_namespace_common_probe(struct device
*dev
)
1439 struct nd_btt
*nd_btt
= is_nd_btt(dev
) ? to_nd_btt(dev
) : NULL
;
1440 struct nd_pfn
*nd_pfn
= is_nd_pfn(dev
) ? to_nd_pfn(dev
) : NULL
;
1441 struct nd_dax
*nd_dax
= is_nd_dax(dev
) ? to_nd_dax(dev
) : NULL
;
1442 struct nd_namespace_common
*ndns
= NULL
;
1443 resource_size_t size
;
1445 if (nd_btt
|| nd_pfn
|| nd_dax
) {
1447 ndns
= nd_btt
->ndns
;
1449 ndns
= nd_pfn
->ndns
;
1451 ndns
= nd_dax
->nd_pfn
.ndns
;
1454 return ERR_PTR(-ENODEV
);
1457 * Flush any in-progess probes / removals in the driver
1458 * for the raw personality of this namespace.
1460 device_lock(&ndns
->dev
);
1461 device_unlock(&ndns
->dev
);
1462 if (ndns
->dev
.driver
) {
1463 dev_dbg(&ndns
->dev
, "is active, can't bind %s\n",
1465 return ERR_PTR(-EBUSY
);
1467 if (dev_WARN_ONCE(&ndns
->dev
, ndns
->claim
!= dev
,
1468 "host (%s) vs claim (%s) mismatch\n",
1470 dev_name(ndns
->claim
)))
1471 return ERR_PTR(-ENXIO
);
1473 ndns
= to_ndns(dev
);
1475 dev_dbg(dev
, "claimed by %s, failing probe\n",
1476 dev_name(ndns
->claim
));
1478 return ERR_PTR(-ENXIO
);
1482 if (nvdimm_namespace_locked(ndns
))
1483 return ERR_PTR(-EACCES
);
1485 size
= nvdimm_namespace_capacity(ndns
);
1486 if (size
< ND_MIN_NAMESPACE_SIZE
) {
1487 dev_dbg(&ndns
->dev
, "%pa, too small must be at least %#x\n",
1488 &size
, ND_MIN_NAMESPACE_SIZE
);
1489 return ERR_PTR(-ENODEV
);
1493 * Note, alignment validation for fsdax and devdax mode
1494 * namespaces happens in nd_pfn_validate() where infoblock
1495 * padding parameters can be applied.
1497 if (pmem_should_map_pages(dev
)) {
1498 struct nd_namespace_io
*nsio
= to_nd_namespace_io(&ndns
->dev
);
1499 struct resource
*res
= &nsio
->res
;
1501 if (!IS_ALIGNED(res
->start
| (res
->end
+ 1),
1502 memremap_compat_align())) {
1503 dev_err(&ndns
->dev
, "%pr misaligned, unable to map\n", res
);
1504 return ERR_PTR(-EOPNOTSUPP
);
1508 if (is_namespace_pmem(&ndns
->dev
)) {
1509 struct nd_namespace_pmem
*nspm
;
1511 nspm
= to_nd_namespace_pmem(&ndns
->dev
);
1512 if (uuid_not_set(nspm
->uuid
, &ndns
->dev
, __func__
))
1513 return ERR_PTR(-ENODEV
);
1518 EXPORT_SYMBOL(nvdimm_namespace_common_probe
);
1520 int devm_namespace_enable(struct device
*dev
, struct nd_namespace_common
*ndns
,
1521 resource_size_t size
)
1523 return devm_nsio_enable(dev
, to_nd_namespace_io(&ndns
->dev
), size
);
1525 EXPORT_SYMBOL_GPL(devm_namespace_enable
);
1527 void devm_namespace_disable(struct device
*dev
, struct nd_namespace_common
*ndns
)
1529 devm_nsio_disable(dev
, to_nd_namespace_io(&ndns
->dev
));
1531 EXPORT_SYMBOL_GPL(devm_namespace_disable
);
1533 static struct device
**create_namespace_io(struct nd_region
*nd_region
)
1535 struct nd_namespace_io
*nsio
;
1536 struct device
*dev
, **devs
;
1537 struct resource
*res
;
1539 nsio
= kzalloc(sizeof(*nsio
), GFP_KERNEL
);
1543 devs
= kcalloc(2, sizeof(struct device
*), GFP_KERNEL
);
1549 dev
= &nsio
->common
.dev
;
1550 dev
->type
= &namespace_io_device_type
;
1551 dev
->parent
= &nd_region
->dev
;
1553 res
->name
= dev_name(&nd_region
->dev
);
1554 res
->flags
= IORESOURCE_MEM
;
1555 res
->start
= nd_region
->ndr_start
;
1556 res
->end
= res
->start
+ nd_region
->ndr_size
- 1;
1562 static bool has_uuid_at_pos(struct nd_region
*nd_region
, const uuid_t
*uuid
,
1563 u64 cookie
, u16 pos
)
1565 struct nd_namespace_label
*found
= NULL
;
1568 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
1569 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
1570 struct nd_interleave_set
*nd_set
= nd_region
->nd_set
;
1571 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
1572 struct nd_label_ent
*label_ent
;
1573 bool found_uuid
= false;
1575 list_for_each_entry(label_ent
, &nd_mapping
->labels
, list
) {
1576 struct nd_namespace_label
*nd_label
= label_ent
->label
;
1581 position
= nsl_get_position(ndd
, nd_label
);
1583 if (!nsl_validate_isetcookie(ndd
, nd_label
, cookie
))
1586 if (!nsl_uuid_equal(ndd
, nd_label
, uuid
))
1589 if (!nsl_validate_type_guid(ndd
, nd_label
,
1590 &nd_set
->type_guid
))
1594 dev_dbg(ndd
->dev
, "duplicate entry for uuid\n");
1598 if (!nsl_validate_nlabel(nd_region
, ndd
, nd_label
))
1600 if (position
!= pos
)
1608 return found
!= NULL
;
1611 static int select_pmem_id(struct nd_region
*nd_region
, const uuid_t
*pmem_id
)
1615 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
1616 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
1617 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
1618 struct nd_namespace_label
*nd_label
= NULL
;
1619 u64 hw_start
, hw_end
, pmem_start
, pmem_end
;
1620 struct nd_label_ent
*label_ent
;
1622 lockdep_assert_held(&nd_mapping
->lock
);
1623 list_for_each_entry(label_ent
, &nd_mapping
->labels
, list
) {
1624 nd_label
= label_ent
->label
;
1627 if (nsl_uuid_equal(ndd
, nd_label
, pmem_id
))
1638 * Check that this label is compliant with the dpa
1639 * range published in NFIT
1641 hw_start
= nd_mapping
->start
;
1642 hw_end
= hw_start
+ nd_mapping
->size
;
1643 pmem_start
= nsl_get_dpa(ndd
, nd_label
);
1644 pmem_end
= pmem_start
+ nsl_get_rawsize(ndd
, nd_label
);
1645 if (pmem_start
>= hw_start
&& pmem_start
< hw_end
1646 && pmem_end
<= hw_end
&& pmem_end
> hw_start
)
1649 dev_dbg(&nd_region
->dev
, "%s invalid label for %pUb\n",
1651 nsl_uuid_raw(ndd
, nd_label
));
1655 /* move recently validated label to the front of the list */
1656 list_move(&label_ent
->list
, &nd_mapping
->labels
);
1662 * create_namespace_pmem - validate interleave set labelling, retrieve label0
1663 * @nd_region: region with mappings to validate
1664 * @nd_mapping: container of dpa-resource-root + labels
1665 * @nd_label: target pmem namespace label to evaluate
1667 * Returns: the created &struct device on success or ERR_PTR(-errno) on error
1669 static struct device
*create_namespace_pmem(struct nd_region
*nd_region
,
1670 struct nd_mapping
*nd_mapping
,
1671 struct nd_namespace_label
*nd_label
)
1673 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
1674 struct nd_namespace_index
*nsindex
=
1675 to_namespace_index(ndd
, ndd
->ns_current
);
1676 u64 cookie
= nd_region_interleave_set_cookie(nd_region
, nsindex
);
1677 u64 altcookie
= nd_region_interleave_set_altcookie(nd_region
);
1678 struct nd_label_ent
*label_ent
;
1679 struct nd_namespace_pmem
*nspm
;
1680 resource_size_t size
= 0;
1681 struct resource
*res
;
1688 dev_dbg(&nd_region
->dev
, "invalid interleave-set-cookie\n");
1689 return ERR_PTR(-ENXIO
);
1692 if (!nsl_validate_isetcookie(ndd
, nd_label
, cookie
)) {
1693 dev_dbg(&nd_region
->dev
, "invalid cookie in label: %pUb\n",
1694 nsl_uuid_raw(ndd
, nd_label
));
1695 if (!nsl_validate_isetcookie(ndd
, nd_label
, altcookie
))
1696 return ERR_PTR(-EAGAIN
);
1698 dev_dbg(&nd_region
->dev
, "valid altcookie in label: %pUb\n",
1699 nsl_uuid_raw(ndd
, nd_label
));
1702 nspm
= kzalloc(sizeof(*nspm
), GFP_KERNEL
);
1704 return ERR_PTR(-ENOMEM
);
1707 dev
= &nspm
->nsio
.common
.dev
;
1708 dev
->type
= &namespace_pmem_device_type
;
1709 dev
->parent
= &nd_region
->dev
;
1710 res
= &nspm
->nsio
.res
;
1711 res
->name
= dev_name(&nd_region
->dev
);
1712 res
->flags
= IORESOURCE_MEM
;
1714 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
1715 nsl_get_uuid(ndd
, nd_label
, &uuid
);
1716 if (has_uuid_at_pos(nd_region
, &uuid
, cookie
, i
))
1718 if (has_uuid_at_pos(nd_region
, &uuid
, altcookie
, i
))
1723 if (i
< nd_region
->ndr_mappings
) {
1724 struct nvdimm
*nvdimm
= nd_region
->mapping
[i
].nvdimm
;
1727 * Give up if we don't find an instance of a uuid at each
1728 * position (from 0 to nd_region->ndr_mappings - 1), or if we
1729 * find a dimm with two instances of the same uuid.
1731 dev_err(&nd_region
->dev
, "%s missing label for %pUb\n",
1732 nvdimm_name(nvdimm
), nsl_uuid_raw(ndd
, nd_label
));
1738 * Fix up each mapping's 'labels' to have the validated pmem label for
1739 * that position at labels[0], and NULL at labels[1]. In the process,
1740 * check that the namespace aligns with interleave-set.
1742 nsl_get_uuid(ndd
, nd_label
, &uuid
);
1743 rc
= select_pmem_id(nd_region
, &uuid
);
1747 /* Calculate total size and populate namespace properties from label0 */
1748 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
1749 struct nd_namespace_label
*label0
;
1750 struct nvdimm_drvdata
*ndd
;
1752 nd_mapping
= &nd_region
->mapping
[i
];
1753 label_ent
= list_first_entry_or_null(&nd_mapping
->labels
,
1754 typeof(*label_ent
), list
);
1755 label0
= label_ent
? label_ent
->label
: NULL
;
1762 ndd
= to_ndd(nd_mapping
);
1763 size
+= nsl_get_rawsize(ndd
, label0
);
1764 if (nsl_get_position(ndd
, label0
) != 0)
1766 WARN_ON(nspm
->alt_name
|| nspm
->uuid
);
1767 nspm
->alt_name
= kmemdup(nsl_ref_name(ndd
, label0
),
1768 NSLABEL_NAME_LEN
, GFP_KERNEL
);
1769 nsl_get_uuid(ndd
, label0
, &uuid
);
1770 nspm
->uuid
= kmemdup(&uuid
, sizeof(uuid_t
), GFP_KERNEL
);
1771 nspm
->lbasize
= nsl_get_lbasize(ndd
, label0
);
1772 nspm
->nsio
.common
.claim_class
=
1773 nsl_get_claim_class(ndd
, label0
);
1776 if (!nspm
->alt_name
|| !nspm
->uuid
) {
1781 nd_namespace_pmem_set_resource(nd_region
, nspm
, size
);
1785 namespace_pmem_release(dev
);
1788 dev_dbg(&nd_region
->dev
, "invalid label(s)\n");
1791 dev_dbg(&nd_region
->dev
, "unexpected err: %d\n", rc
);
1797 static struct device
*nd_namespace_pmem_create(struct nd_region
*nd_region
)
1799 struct nd_namespace_pmem
*nspm
;
1800 struct resource
*res
;
1803 if (!is_memory(&nd_region
->dev
))
1806 nspm
= kzalloc(sizeof(*nspm
), GFP_KERNEL
);
1810 dev
= &nspm
->nsio
.common
.dev
;
1811 dev
->type
= &namespace_pmem_device_type
;
1812 dev
->parent
= &nd_region
->dev
;
1813 res
= &nspm
->nsio
.res
;
1814 res
->name
= dev_name(&nd_region
->dev
);
1815 res
->flags
= IORESOURCE_MEM
;
1817 nspm
->id
= ida_alloc(&nd_region
->ns_ida
, GFP_KERNEL
);
1822 dev_set_name(dev
, "namespace%d.%d", nd_region
->id
, nspm
->id
);
1823 nd_namespace_pmem_set_resource(nd_region
, nspm
, 0);
1828 static struct lock_class_key nvdimm_namespace_key
;
1830 void nd_region_create_ns_seed(struct nd_region
*nd_region
)
1832 WARN_ON(!is_nvdimm_bus_locked(&nd_region
->dev
));
1834 if (nd_region_to_nstype(nd_region
) == ND_DEVICE_NAMESPACE_IO
)
1837 nd_region
->ns_seed
= nd_namespace_pmem_create(nd_region
);
1840 * Seed creation failures are not fatal, provisioning is simply
1841 * disabled until memory becomes available
1843 if (!nd_region
->ns_seed
)
1844 dev_err(&nd_region
->dev
, "failed to create namespace\n");
1846 device_initialize(nd_region
->ns_seed
);
1847 lockdep_set_class(&nd_region
->ns_seed
->mutex
,
1848 &nvdimm_namespace_key
);
1849 nd_device_register(nd_region
->ns_seed
);
1853 void nd_region_create_dax_seed(struct nd_region
*nd_region
)
1855 WARN_ON(!is_nvdimm_bus_locked(&nd_region
->dev
));
1856 nd_region
->dax_seed
= nd_dax_create(nd_region
);
1858 * Seed creation failures are not fatal, provisioning is simply
1859 * disabled until memory becomes available
1861 if (!nd_region
->dax_seed
)
1862 dev_err(&nd_region
->dev
, "failed to create dax namespace\n");
1865 void nd_region_create_pfn_seed(struct nd_region
*nd_region
)
1867 WARN_ON(!is_nvdimm_bus_locked(&nd_region
->dev
));
1868 nd_region
->pfn_seed
= nd_pfn_create(nd_region
);
1870 * Seed creation failures are not fatal, provisioning is simply
1871 * disabled until memory becomes available
1873 if (!nd_region
->pfn_seed
)
1874 dev_err(&nd_region
->dev
, "failed to create pfn namespace\n");
1877 void nd_region_create_btt_seed(struct nd_region
*nd_region
)
1879 WARN_ON(!is_nvdimm_bus_locked(&nd_region
->dev
));
1880 nd_region
->btt_seed
= nd_btt_create(nd_region
);
1882 * Seed creation failures are not fatal, provisioning is simply
1883 * disabled until memory becomes available
1885 if (!nd_region
->btt_seed
)
1886 dev_err(&nd_region
->dev
, "failed to create btt namespace\n");
1889 static int add_namespace_resource(struct nd_region
*nd_region
,
1890 struct nd_namespace_label
*nd_label
, struct device
**devs
,
1893 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[0];
1894 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
1897 for (i
= 0; i
< count
; i
++) {
1898 uuid_t
*uuid
= namespace_to_uuid(devs
[i
]);
1905 if (!nsl_uuid_equal(ndd
, nd_label
, uuid
))
1907 dev_err(&nd_region
->dev
,
1908 "error: conflicting extents for uuid: %pUb\n", uuid
);
1915 static int cmp_dpa(const void *a
, const void *b
)
1917 const struct device
*dev_a
= *(const struct device
**) a
;
1918 const struct device
*dev_b
= *(const struct device
**) b
;
1919 struct nd_namespace_pmem
*nspm_a
, *nspm_b
;
1921 if (is_namespace_io(dev_a
))
1924 nspm_a
= to_nd_namespace_pmem(dev_a
);
1925 nspm_b
= to_nd_namespace_pmem(dev_b
);
1927 return memcmp(&nspm_a
->nsio
.res
.start
, &nspm_b
->nsio
.res
.start
,
1928 sizeof(resource_size_t
));
1931 static struct device
**scan_labels(struct nd_region
*nd_region
)
1934 struct device
*dev
, **devs
;
1935 struct nd_label_ent
*label_ent
, *e
;
1936 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[0];
1937 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
1938 resource_size_t map_end
= nd_mapping
->start
+ nd_mapping
->size
- 1;
1940 devs
= kcalloc(2, sizeof(dev
), GFP_KERNEL
);
1944 /* "safe" because create_namespace_pmem() might list_move() label_ent */
1945 list_for_each_entry_safe(label_ent
, e
, &nd_mapping
->labels
, list
) {
1946 struct nd_namespace_label
*nd_label
= label_ent
->label
;
1947 struct device
**__devs
;
1952 /* skip labels that describe extents outside of the region */
1953 if (nsl_get_dpa(ndd
, nd_label
) < nd_mapping
->start
||
1954 nsl_get_dpa(ndd
, nd_label
) > map_end
)
1957 i
= add_namespace_resource(nd_region
, nd_label
, devs
, count
);
1963 __devs
= kcalloc(count
+ 2, sizeof(dev
), GFP_KERNEL
);
1966 memcpy(__devs
, devs
, sizeof(dev
) * count
);
1971 dev
= create_namespace_pmem(nd_region
, nd_mapping
, nd_label
);
1973 switch (PTR_ERR(dev
)) {
1975 /* skip invalid labels */
1981 devs
[count
++] = dev
;
1985 dev_dbg(&nd_region
->dev
, "discovered %d namespace%s\n", count
,
1986 count
== 1 ? "" : "s");
1989 struct nd_namespace_pmem
*nspm
;
1991 /* Publish a zero-sized namespace for userspace to configure. */
1992 nd_mapping_free_labels(nd_mapping
);
1993 nspm
= kzalloc(sizeof(*nspm
), GFP_KERNEL
);
1996 dev
= &nspm
->nsio
.common
.dev
;
1997 dev
->type
= &namespace_pmem_device_type
;
1998 nd_namespace_pmem_set_resource(nd_region
, nspm
, 0);
1999 dev
->parent
= &nd_region
->dev
;
2000 devs
[count
++] = dev
;
2001 } else if (is_memory(&nd_region
->dev
)) {
2002 /* clean unselected labels */
2003 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
2004 struct list_head
*l
, *e
;
2008 nd_mapping
= &nd_region
->mapping
[i
];
2009 if (list_empty(&nd_mapping
->labels
)) {
2015 list_for_each_safe(l
, e
, &nd_mapping
->labels
) {
2018 list_move_tail(l
, &list
);
2020 nd_mapping_free_labels(nd_mapping
);
2021 list_splice_init(&list
, &nd_mapping
->labels
);
2026 sort(devs
, count
, sizeof(struct device
*), cmp_dpa
, NULL
);
2031 for (i
= 0; devs
[i
]; i
++)
2032 namespace_pmem_release(devs
[i
]);
2038 static struct device
**create_namespaces(struct nd_region
*nd_region
)
2040 struct nd_mapping
*nd_mapping
;
2041 struct device
**devs
;
2044 if (nd_region
->ndr_mappings
== 0)
2047 /* lock down all mappings while we scan labels */
2048 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
2049 nd_mapping
= &nd_region
->mapping
[i
];
2050 mutex_lock_nested(&nd_mapping
->lock
, i
);
2053 devs
= scan_labels(nd_region
);
2055 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
2056 int reverse
= nd_region
->ndr_mappings
- 1 - i
;
2058 nd_mapping
= &nd_region
->mapping
[reverse
];
2059 mutex_unlock(&nd_mapping
->lock
);
2065 static void deactivate_labels(void *region
)
2067 struct nd_region
*nd_region
= region
;
2070 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
2071 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
2072 struct nvdimm_drvdata
*ndd
= nd_mapping
->ndd
;
2073 struct nvdimm
*nvdimm
= nd_mapping
->nvdimm
;
2075 mutex_lock(&nd_mapping
->lock
);
2076 nd_mapping_free_labels(nd_mapping
);
2077 mutex_unlock(&nd_mapping
->lock
);
2080 nd_mapping
->ndd
= NULL
;
2082 atomic_dec(&nvdimm
->busy
);
2086 static int init_active_labels(struct nd_region
*nd_region
)
2090 for (i
= 0; i
< nd_region
->ndr_mappings
; i
++) {
2091 struct nd_mapping
*nd_mapping
= &nd_region
->mapping
[i
];
2092 struct nvdimm_drvdata
*ndd
= to_ndd(nd_mapping
);
2093 struct nvdimm
*nvdimm
= nd_mapping
->nvdimm
;
2094 struct nd_label_ent
*label_ent
;
2098 * If the dimm is disabled then we may need to prevent
2099 * the region from being activated.
2102 if (test_bit(NDD_LOCKED
, &nvdimm
->flags
))
2103 /* fail, label data may be unreadable */;
2104 else if (test_bit(NDD_LABELING
, &nvdimm
->flags
))
2105 /* fail, labels needed to disambiguate dpa */;
2109 dev_err(&nd_region
->dev
, "%s: is %s, failing probe\n",
2110 dev_name(&nd_mapping
->nvdimm
->dev
),
2111 test_bit(NDD_LOCKED
, &nvdimm
->flags
)
2112 ? "locked" : "disabled");
2116 nd_mapping
->ndd
= ndd
;
2117 atomic_inc(&nvdimm
->busy
);
2120 count
= nd_label_active_count(ndd
);
2121 dev_dbg(ndd
->dev
, "count: %d\n", count
);
2124 for (j
= 0; j
< count
; j
++) {
2125 struct nd_namespace_label
*label
;
2127 label_ent
= kzalloc(sizeof(*label_ent
), GFP_KERNEL
);
2130 label
= nd_label_active(ndd
, j
);
2131 label_ent
->label
= label
;
2133 mutex_lock(&nd_mapping
->lock
);
2134 list_add_tail(&label_ent
->list
, &nd_mapping
->labels
);
2135 mutex_unlock(&nd_mapping
->lock
);
2142 if (i
< nd_region
->ndr_mappings
)
2147 deactivate_labels(nd_region
);
2151 return devm_add_action_or_reset(&nd_region
->dev
, deactivate_labels
,
2155 int nd_region_register_namespaces(struct nd_region
*nd_region
, int *err
)
2157 struct device
**devs
= NULL
;
2158 int i
, rc
= 0, type
;
2161 nvdimm_bus_lock(&nd_region
->dev
);
2162 rc
= init_active_labels(nd_region
);
2164 nvdimm_bus_unlock(&nd_region
->dev
);
2168 type
= nd_region_to_nstype(nd_region
);
2170 case ND_DEVICE_NAMESPACE_IO
:
2171 devs
= create_namespace_io(nd_region
);
2173 case ND_DEVICE_NAMESPACE_PMEM
:
2174 devs
= create_namespaces(nd_region
);
2179 nvdimm_bus_unlock(&nd_region
->dev
);
2184 for (i
= 0; devs
[i
]; i
++) {
2185 struct device
*dev
= devs
[i
];
2188 if (type
== ND_DEVICE_NAMESPACE_PMEM
) {
2189 struct nd_namespace_pmem
*nspm
;
2191 nspm
= to_nd_namespace_pmem(dev
);
2192 id
= ida_alloc(&nd_region
->ns_ida
, GFP_KERNEL
);
2199 dev_set_name(dev
, "namespace%d.%d", nd_region
->id
, id
);
2200 device_initialize(dev
);
2201 lockdep_set_class(&dev
->mutex
, &nvdimm_namespace_key
);
2202 nd_device_register(dev
);
2205 nd_region
->ns_seed
= devs
[0];
2210 for (j
= i
; devs
[j
]; j
++) {
2211 struct device
*dev
= devs
[j
];
2213 device_initialize(dev
);
2218 * All of the namespaces we tried to register failed, so
2219 * fail region activation.