cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

namespace_devs.c (56323B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright(c) 2013-2015 Intel Corporation. All rights reserved.
      4 */
      5#include <linux/module.h>
      6#include <linux/device.h>
      7#include <linux/sort.h>
      8#include <linux/slab.h>
      9#include <linux/list.h>
     10#include <linux/nd.h>
     11#include "nd-core.h"
     12#include "pmem.h"
     13#include "pfn.h"
     14#include "nd.h"
     15
     16static void namespace_io_release(struct device *dev)
     17{
     18	struct nd_namespace_io *nsio = to_nd_namespace_io(dev);
     19
     20	kfree(nsio);
     21}
     22
     23static void namespace_pmem_release(struct device *dev)
     24{
     25	struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
     26	struct nd_region *nd_region = to_nd_region(dev->parent);
     27
     28	if (nspm->id >= 0)
     29		ida_simple_remove(&nd_region->ns_ida, nspm->id);
     30	kfree(nspm->alt_name);
     31	kfree(nspm->uuid);
     32	kfree(nspm);
     33}
     34
     35static bool is_namespace_pmem(const struct device *dev);
     36static bool is_namespace_io(const struct device *dev);
     37
     38static int is_uuid_busy(struct device *dev, void *data)
     39{
     40	uuid_t *uuid1 = data, *uuid2 = NULL;
     41
     42	if (is_namespace_pmem(dev)) {
     43		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
     44
     45		uuid2 = nspm->uuid;
     46	} else if (is_nd_btt(dev)) {
     47		struct nd_btt *nd_btt = to_nd_btt(dev);
     48
     49		uuid2 = nd_btt->uuid;
     50	} else if (is_nd_pfn(dev)) {
     51		struct nd_pfn *nd_pfn = to_nd_pfn(dev);
     52
     53		uuid2 = nd_pfn->uuid;
     54	}
     55
     56	if (uuid2 && uuid_equal(uuid1, uuid2))
     57		return -EBUSY;
     58
     59	return 0;
     60}
     61
     62static int is_namespace_uuid_busy(struct device *dev, void *data)
     63{
     64	if (is_nd_region(dev))
     65		return device_for_each_child(dev, data, is_uuid_busy);
     66	return 0;
     67}
     68
     69/**
     70 * nd_is_uuid_unique - verify that no other namespace has @uuid
     71 * @dev: any device on a nvdimm_bus
     72 * @uuid: uuid to check
     73 */
     74bool nd_is_uuid_unique(struct device *dev, uuid_t *uuid)
     75{
     76	struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
     77
     78	if (!nvdimm_bus)
     79		return false;
     80	WARN_ON_ONCE(!is_nvdimm_bus_locked(&nvdimm_bus->dev));
     81	if (device_for_each_child(&nvdimm_bus->dev, uuid,
     82				is_namespace_uuid_busy) != 0)
     83		return false;
     84	return true;
     85}
     86
     87bool pmem_should_map_pages(struct device *dev)
     88{
     89	struct nd_region *nd_region = to_nd_region(dev->parent);
     90	struct nd_namespace_common *ndns = to_ndns(dev);
     91	struct nd_namespace_io *nsio;
     92
     93	if (!IS_ENABLED(CONFIG_ZONE_DEVICE))
     94		return false;
     95
     96	if (!test_bit(ND_REGION_PAGEMAP, &nd_region->flags))
     97		return false;
     98
     99	if (is_nd_pfn(dev) || is_nd_btt(dev))
    100		return false;
    101
    102	if (ndns->force_raw)
    103		return false;
    104
    105	nsio = to_nd_namespace_io(dev);
    106	if (region_intersects(nsio->res.start, resource_size(&nsio->res),
    107				IORESOURCE_SYSTEM_RAM,
    108				IORES_DESC_NONE) == REGION_MIXED)
    109		return false;
    110
    111	return ARCH_MEMREMAP_PMEM == MEMREMAP_WB;
    112}
    113EXPORT_SYMBOL(pmem_should_map_pages);
    114
    115unsigned int pmem_sector_size(struct nd_namespace_common *ndns)
    116{
    117	if (is_namespace_pmem(&ndns->dev)) {
    118		struct nd_namespace_pmem *nspm;
    119
    120		nspm = to_nd_namespace_pmem(&ndns->dev);
    121		if (nspm->lbasize == 0 || nspm->lbasize == 512)
    122			/* default */;
    123		else if (nspm->lbasize == 4096)
    124			return 4096;
    125		else
    126			dev_WARN(&ndns->dev, "unsupported sector size: %ld\n",
    127					nspm->lbasize);
    128	}
    129
    130	/*
    131	 * There is no namespace label (is_namespace_io()), or the label
    132	 * indicates the default sector size.
    133	 */
    134	return 512;
    135}
    136EXPORT_SYMBOL(pmem_sector_size);
    137
    138const char *nvdimm_namespace_disk_name(struct nd_namespace_common *ndns,
    139		char *name)
    140{
    141	struct nd_region *nd_region = to_nd_region(ndns->dev.parent);
    142	const char *suffix = NULL;
    143
    144	if (ndns->claim && is_nd_btt(ndns->claim))
    145		suffix = "s";
    146
    147	if (is_namespace_pmem(&ndns->dev) || is_namespace_io(&ndns->dev)) {
    148		int nsidx = 0;
    149
    150		if (is_namespace_pmem(&ndns->dev)) {
    151			struct nd_namespace_pmem *nspm;
    152
    153			nspm = to_nd_namespace_pmem(&ndns->dev);
    154			nsidx = nspm->id;
    155		}
    156
    157		if (nsidx)
    158			sprintf(name, "pmem%d.%d%s", nd_region->id, nsidx,
    159					suffix ? suffix : "");
    160		else
    161			sprintf(name, "pmem%d%s", nd_region->id,
    162					suffix ? suffix : "");
    163	} else {
    164		return NULL;
    165	}
    166
    167	return name;
    168}
    169EXPORT_SYMBOL(nvdimm_namespace_disk_name);
    170
    171const uuid_t *nd_dev_to_uuid(struct device *dev)
    172{
    173	if (!dev)
    174		return &uuid_null;
    175
    176	if (is_namespace_pmem(dev)) {
    177		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
    178
    179		return nspm->uuid;
    180	} else
    181		return &uuid_null;
    182}
    183EXPORT_SYMBOL(nd_dev_to_uuid);
    184
    185static ssize_t nstype_show(struct device *dev,
    186		struct device_attribute *attr, char *buf)
    187{
    188	struct nd_region *nd_region = to_nd_region(dev->parent);
    189
    190	return sprintf(buf, "%d\n", nd_region_to_nstype(nd_region));
    191}
    192static DEVICE_ATTR_RO(nstype);
    193
    194static ssize_t __alt_name_store(struct device *dev, const char *buf,
    195		const size_t len)
    196{
    197	char *input, *pos, *alt_name, **ns_altname;
    198	ssize_t rc;
    199
    200	if (is_namespace_pmem(dev)) {
    201		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
    202
    203		ns_altname = &nspm->alt_name;
    204	} else
    205		return -ENXIO;
    206
    207	if (dev->driver || to_ndns(dev)->claim)
    208		return -EBUSY;
    209
    210	input = kstrndup(buf, len, GFP_KERNEL);
    211	if (!input)
    212		return -ENOMEM;
    213
    214	pos = strim(input);
    215	if (strlen(pos) + 1 > NSLABEL_NAME_LEN) {
    216		rc = -EINVAL;
    217		goto out;
    218	}
    219
    220	alt_name = kzalloc(NSLABEL_NAME_LEN, GFP_KERNEL);
    221	if (!alt_name) {
    222		rc = -ENOMEM;
    223		goto out;
    224	}
    225	kfree(*ns_altname);
    226	*ns_altname = alt_name;
    227	sprintf(*ns_altname, "%s", pos);
    228	rc = len;
    229
    230out:
    231	kfree(input);
    232	return rc;
    233}
    234
    235static int nd_namespace_label_update(struct nd_region *nd_region,
    236		struct device *dev)
    237{
    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)
    241		return 0;
    242
    243	/*
    244	 * Only allow label writes that will result in a valid namespace
    245	 * or deletion of an existing namespace.
    246	 */
    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);
    250
    251		if (size == 0 && nspm->uuid)
    252			/* delete allocation */;
    253		else if (!nspm->uuid)
    254			return 0;
    255
    256		return nd_pmem_namespace_label_update(nd_region, nspm, size);
    257	} else
    258		return -ENXIO;
    259}
    260
    261static ssize_t alt_name_store(struct device *dev,
    262		struct device_attribute *attr, const char *buf, size_t len)
    263{
    264	struct nd_region *nd_region = to_nd_region(dev->parent);
    265	ssize_t rc;
    266
    267	device_lock(dev);
    268	nvdimm_bus_lock(dev);
    269	wait_nvdimm_bus_probe_idle(dev);
    270	rc = __alt_name_store(dev, buf, len);
    271	if (rc >= 0)
    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);
    275	device_unlock(dev);
    276
    277	return rc < 0 ? rc : len;
    278}
    279
    280static ssize_t alt_name_show(struct device *dev,
    281		struct device_attribute *attr, char *buf)
    282{
    283	char *ns_altname;
    284
    285	if (is_namespace_pmem(dev)) {
    286		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
    287
    288		ns_altname = nspm->alt_name;
    289	} else
    290		return -ENXIO;
    291
    292	return sprintf(buf, "%s\n", ns_altname ? ns_altname : "");
    293}
    294static DEVICE_ATTR_RW(alt_name);
    295
    296static int scan_free(struct nd_region *nd_region,
    297		struct nd_mapping *nd_mapping, struct nd_label_id *label_id,
    298		resource_size_t n)
    299{
    300	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
    301	int rc = 0;
    302
    303	while (n) {
    304		struct resource *res, *last;
    305
    306		last = NULL;
    307		for_each_dpa_resource(ndd, res)
    308			if (strcmp(res->name, label_id->id) == 0)
    309				last = res;
    310		res = last;
    311		if (!res)
    312			return 0;
    313
    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 */
    319			continue;
    320		}
    321
    322		rc = adjust_resource(res, res->start, resource_size(res) - n);
    323		if (rc == 0)
    324			res->flags |= DPA_RESOURCE_ADJUSTED;
    325		nd_dbg_dpa(nd_region, ndd, res, "shrink %d\n", rc);
    326		break;
    327	}
    328
    329	return rc;
    330}
    331
    332/**
    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
    337 *
    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
    341 * set.
    342 */
    343static int shrink_dpa_allocation(struct nd_region *nd_region,
    344		struct nd_label_id *label_id, resource_size_t n)
    345{
    346	int i;
    347
    348	for (i = 0; i < nd_region->ndr_mappings; i++) {
    349		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
    350		int rc;
    351
    352		rc = scan_free(nd_region, nd_mapping, label_id, n);
    353		if (rc)
    354			return rc;
    355	}
    356
    357	return 0;
    358}
    359
    360static resource_size_t init_dpa_allocation(struct nd_label_id *label_id,
    361		struct nd_region *nd_region, struct nd_mapping *nd_mapping,
    362		resource_size_t n)
    363{
    364	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
    365	struct resource *res;
    366	int rc = 0;
    367
    368	/* first resource allocation for this label-id or dimm */
    369	res = nvdimm_allocate_dpa(ndd, label_id, nd_mapping->start, n);
    370	if (!res)
    371		rc = -EBUSY;
    372
    373	nd_dbg_dpa(nd_region, ndd, res, "init %d\n", rc);
    374	return rc ? n : 0;
    375}
    376
    377
    378/**
    379 * space_valid() - validate free dpa space against constraints
    380 * @nd_region: hosting region of the free space
    381 * @ndd: dimm device data for debug
    382 * @label_id: namespace id to allocate space
    383 * @prev: potential allocation that precedes free space
    384 * @next: allocation that follows the given free space range
    385 * @exist: first allocation with same id in the mapping
    386 * @n: range that must satisfied for pmem allocations
    387 * @valid: free space range to validate
    388 *
    389 * BLK-space is valid as long as it does not precede a PMEM
    390 * allocation in a given region. PMEM-space must be contiguous
    391 * and adjacent to an existing existing allocation (if one
    392 * exists).  If reserving PMEM any space is valid.
    393 */
    394static void space_valid(struct nd_region *nd_region, struct nvdimm_drvdata *ndd,
    395		struct nd_label_id *label_id, struct resource *prev,
    396		struct resource *next, struct resource *exist,
    397		resource_size_t n, struct resource *valid)
    398{
    399	bool is_reserve = strcmp(label_id->id, "pmem-reserve") == 0;
    400	unsigned long align;
    401
    402	align = nd_region->align / nd_region->ndr_mappings;
    403	valid->start = ALIGN(valid->start, align);
    404	valid->end = ALIGN_DOWN(valid->end + 1, align) - 1;
    405
    406	if (valid->start >= valid->end)
    407		goto invalid;
    408
    409	if (is_reserve)
    410		return;
    411
    412	/* allocation needs to be contiguous, so this is all or nothing */
    413	if (resource_size(valid) < n)
    414		goto invalid;
    415
    416	/* we've got all the space we need and no existing allocation */
    417	if (!exist)
    418		return;
    419
    420	/* allocation needs to be contiguous with the existing namespace */
    421	if (valid->start == exist->end + 1
    422			|| valid->end == exist->start - 1)
    423		return;
    424
    425 invalid:
    426	/* truncate @valid size to 0 */
    427	valid->end = valid->start - 1;
    428}
    429
    430enum alloc_loc {
    431	ALLOC_ERR = 0, ALLOC_BEFORE, ALLOC_MID, ALLOC_AFTER,
    432};
    433
    434static resource_size_t scan_allocate(struct nd_region *nd_region,
    435		struct nd_mapping *nd_mapping, struct nd_label_id *label_id,
    436		resource_size_t n)
    437{
    438	resource_size_t mapping_end = nd_mapping->start + nd_mapping->size - 1;
    439	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
    440	struct resource *res, *exist = NULL, valid;
    441	const resource_size_t to_allocate = n;
    442	int first;
    443
    444	for_each_dpa_resource(ndd, res)
    445		if (strcmp(label_id->id, res->name) == 0)
    446			exist = res;
    447
    448	valid.start = nd_mapping->start;
    449	valid.end = mapping_end;
    450	valid.name = "free space";
    451 retry:
    452	first = 0;
    453	for_each_dpa_resource(ndd, res) {
    454		struct resource *next = res->sibling, *new_res = NULL;
    455		resource_size_t allocate, available = 0;
    456		enum alloc_loc loc = ALLOC_ERR;
    457		const char *action;
    458		int rc = 0;
    459
    460		/* ignore resources outside this nd_mapping */
    461		if (res->start > mapping_end)
    462			continue;
    463		if (res->end < nd_mapping->start)
    464			continue;
    465
    466		/* space at the beginning of the mapping */
    467		if (!first++ && res->start > nd_mapping->start) {
    468			valid.start = nd_mapping->start;
    469			valid.end = res->start - 1;
    470			space_valid(nd_region, ndd, label_id, NULL, next, exist,
    471					to_allocate, &valid);
    472			available = resource_size(&valid);
    473			if (available)
    474				loc = ALLOC_BEFORE;
    475		}
    476
    477		/* space between allocations */
    478		if (!loc && next) {
    479			valid.start = res->start + resource_size(res);
    480			valid.end = min(mapping_end, next->start - 1);
    481			space_valid(nd_region, ndd, label_id, res, next, exist,
    482					to_allocate, &valid);
    483			available = resource_size(&valid);
    484			if (available)
    485				loc = ALLOC_MID;
    486		}
    487
    488		/* space at the end of the mapping */
    489		if (!loc && !next) {
    490			valid.start = res->start + resource_size(res);
    491			valid.end = mapping_end;
    492			space_valid(nd_region, ndd, label_id, res, next, exist,
    493					to_allocate, &valid);
    494			available = resource_size(&valid);
    495			if (available)
    496				loc = ALLOC_AFTER;
    497		}
    498
    499		if (!loc || !available)
    500			continue;
    501		allocate = min(available, n);
    502		switch (loc) {
    503		case ALLOC_BEFORE:
    504			if (strcmp(res->name, label_id->id) == 0) {
    505				/* adjust current resource up */
    506				rc = adjust_resource(res, res->start - allocate,
    507						resource_size(res) + allocate);
    508				action = "cur grow up";
    509			} else
    510				action = "allocate";
    511			break;
    512		case ALLOC_MID:
    513			if (strcmp(next->name, label_id->id) == 0) {
    514				/* adjust next resource up */
    515				rc = adjust_resource(next, next->start
    516						- allocate, resource_size(next)
    517						+ allocate);
    518				new_res = next;
    519				action = "next grow up";
    520			} else if (strcmp(res->name, label_id->id) == 0) {
    521				action = "grow down";
    522			} else
    523				action = "allocate";
    524			break;
    525		case ALLOC_AFTER:
    526			if (strcmp(res->name, label_id->id) == 0)
    527				action = "grow down";
    528			else
    529				action = "allocate";
    530			break;
    531		default:
    532			return n;
    533		}
    534
    535		if (strcmp(action, "allocate") == 0) {
    536			new_res = nvdimm_allocate_dpa(ndd, label_id,
    537					valid.start, allocate);
    538			if (!new_res)
    539				rc = -EBUSY;
    540		} else if (strcmp(action, "grow down") == 0) {
    541			/* adjust current resource down */
    542			rc = adjust_resource(res, res->start, resource_size(res)
    543					+ allocate);
    544			if (rc == 0)
    545				res->flags |= DPA_RESOURCE_ADJUSTED;
    546		}
    547
    548		if (!new_res)
    549			new_res = res;
    550
    551		nd_dbg_dpa(nd_region, ndd, new_res, "%s(%d) %d\n",
    552				action, loc, rc);
    553
    554		if (rc)
    555			return n;
    556
    557		n -= allocate;
    558		if (n) {
    559			/*
    560			 * Retry scan with newly inserted resources.
    561			 * For example, if we did an ALLOC_BEFORE
    562			 * insertion there may also have been space
    563			 * available for an ALLOC_AFTER insertion, so we
    564			 * need to check this same resource again
    565			 */
    566			goto retry;
    567		} else
    568			return 0;
    569	}
    570
    571	if (n == to_allocate)
    572		return init_dpa_allocation(label_id, nd_region, nd_mapping, n);
    573	return n;
    574}
    575
    576static int merge_dpa(struct nd_region *nd_region,
    577		struct nd_mapping *nd_mapping, struct nd_label_id *label_id)
    578{
    579	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
    580	struct resource *res;
    581
    582	if (strncmp("pmem", label_id->id, 4) == 0)
    583		return 0;
    584 retry:
    585	for_each_dpa_resource(ndd, res) {
    586		int rc;
    587		struct resource *next = res->sibling;
    588		resource_size_t end = res->start + resource_size(res);
    589
    590		if (!next || strcmp(res->name, label_id->id) != 0
    591				|| strcmp(next->name, label_id->id) != 0
    592				|| end != next->start)
    593			continue;
    594		end += resource_size(next);
    595		nvdimm_free_dpa(ndd, next);
    596		rc = adjust_resource(res, res->start, end - res->start);
    597		nd_dbg_dpa(nd_region, ndd, res, "merge %d\n", rc);
    598		if (rc)
    599			return rc;
    600		res->flags |= DPA_RESOURCE_ADJUSTED;
    601		goto retry;
    602	}
    603
    604	return 0;
    605}
    606
    607int __reserve_free_pmem(struct device *dev, void *data)
    608{
    609	struct nvdimm *nvdimm = data;
    610	struct nd_region *nd_region;
    611	struct nd_label_id label_id;
    612	int i;
    613
    614	if (!is_memory(dev))
    615		return 0;
    616
    617	nd_region = to_nd_region(dev);
    618	if (nd_region->ndr_mappings == 0)
    619		return 0;
    620
    621	memset(&label_id, 0, sizeof(label_id));
    622	strcat(label_id.id, "pmem-reserve");
    623	for (i = 0; i < nd_region->ndr_mappings; i++) {
    624		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
    625		resource_size_t n, rem = 0;
    626
    627		if (nd_mapping->nvdimm != nvdimm)
    628			continue;
    629
    630		n = nd_pmem_available_dpa(nd_region, nd_mapping);
    631		if (n == 0)
    632			return 0;
    633		rem = scan_allocate(nd_region, nd_mapping, &label_id, n);
    634		dev_WARN_ONCE(&nd_region->dev, rem,
    635				"pmem reserve underrun: %#llx of %#llx bytes\n",
    636				(unsigned long long) n - rem,
    637				(unsigned long long) n);
    638		return rem ? -ENXIO : 0;
    639	}
    640
    641	return 0;
    642}
    643
    644void release_free_pmem(struct nvdimm_bus *nvdimm_bus,
    645		struct nd_mapping *nd_mapping)
    646{
    647	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
    648	struct resource *res, *_res;
    649
    650	for_each_dpa_resource_safe(ndd, res, _res)
    651		if (strcmp(res->name, "pmem-reserve") == 0)
    652			nvdimm_free_dpa(ndd, res);
    653}
    654
    655/**
    656 * grow_dpa_allocation - for each dimm allocate n bytes for @label_id
    657 * @nd_region: the set of dimms to allocate @n more bytes from
    658 * @label_id: unique identifier for the namespace consuming this dpa range
    659 * @n: number of bytes per-dimm to add to the existing allocation
    660 *
    661 * Assumes resources are ordered.  For BLK regions, first consume
    662 * BLK-only available DPA free space, then consume PMEM-aliased DPA
    663 * space starting at the highest DPA.  For PMEM regions start
    664 * allocations from the start of an interleave set and end at the first
    665 * BLK allocation or the end of the interleave set, whichever comes
    666 * first.
    667 */
    668static int grow_dpa_allocation(struct nd_region *nd_region,
    669		struct nd_label_id *label_id, resource_size_t n)
    670{
    671	int i;
    672
    673	for (i = 0; i < nd_region->ndr_mappings; i++) {
    674		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
    675		resource_size_t rem = n;
    676		int rc;
    677
    678		rem = scan_allocate(nd_region, nd_mapping, label_id, rem);
    679		dev_WARN_ONCE(&nd_region->dev, rem,
    680				"allocation underrun: %#llx of %#llx bytes\n",
    681				(unsigned long long) n - rem,
    682				(unsigned long long) n);
    683		if (rem)
    684			return -ENXIO;
    685
    686		rc = merge_dpa(nd_region, nd_mapping, label_id);
    687		if (rc)
    688			return rc;
    689	}
    690
    691	return 0;
    692}
    693
    694static void nd_namespace_pmem_set_resource(struct nd_region *nd_region,
    695		struct nd_namespace_pmem *nspm, resource_size_t size)
    696{
    697	struct resource *res = &nspm->nsio.res;
    698	resource_size_t offset = 0;
    699
    700	if (size && !nspm->uuid) {
    701		WARN_ON_ONCE(1);
    702		size = 0;
    703	}
    704
    705	if (size && nspm->uuid) {
    706		struct nd_mapping *nd_mapping = &nd_region->mapping[0];
    707		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
    708		struct nd_label_id label_id;
    709		struct resource *res;
    710
    711		if (!ndd) {
    712			size = 0;
    713			goto out;
    714		}
    715
    716		nd_label_gen_id(&label_id, nspm->uuid, 0);
    717
    718		/* calculate a spa offset from the dpa allocation offset */
    719		for_each_dpa_resource(ndd, res)
    720			if (strcmp(res->name, label_id.id) == 0) {
    721				offset = (res->start - nd_mapping->start)
    722					* nd_region->ndr_mappings;
    723				goto out;
    724			}
    725
    726		WARN_ON_ONCE(1);
    727		size = 0;
    728	}
    729
    730 out:
    731	res->start = nd_region->ndr_start + offset;
    732	res->end = res->start + size - 1;
    733}
    734
    735static bool uuid_not_set(const uuid_t *uuid, struct device *dev,
    736			 const char *where)
    737{
    738	if (!uuid) {
    739		dev_dbg(dev, "%s: uuid not set\n", where);
    740		return true;
    741	}
    742	return false;
    743}
    744
    745static ssize_t __size_store(struct device *dev, unsigned long long val)
    746{
    747	resource_size_t allocated = 0, available = 0;
    748	struct nd_region *nd_region = to_nd_region(dev->parent);
    749	struct nd_namespace_common *ndns = to_ndns(dev);
    750	struct nd_mapping *nd_mapping;
    751	struct nvdimm_drvdata *ndd;
    752	struct nd_label_id label_id;
    753	u32 flags = 0, remainder;
    754	int rc, i, id = -1;
    755	uuid_t *uuid = NULL;
    756
    757	if (dev->driver || ndns->claim)
    758		return -EBUSY;
    759
    760	if (is_namespace_pmem(dev)) {
    761		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
    762
    763		uuid = nspm->uuid;
    764		id = nspm->id;
    765	}
    766
    767	/*
    768	 * We need a uuid for the allocation-label and dimm(s) on which
    769	 * to store the label.
    770	 */
    771	if (uuid_not_set(uuid, dev, __func__))
    772		return -ENXIO;
    773	if (nd_region->ndr_mappings == 0) {
    774		dev_dbg(dev, "not associated with dimm(s)\n");
    775		return -ENXIO;
    776	}
    777
    778	div_u64_rem(val, nd_region->align, &remainder);
    779	if (remainder) {
    780		dev_dbg(dev, "%llu is not %ldK aligned\n", val,
    781				nd_region->align / SZ_1K);
    782		return -EINVAL;
    783	}
    784
    785	nd_label_gen_id(&label_id, uuid, flags);
    786	for (i = 0; i < nd_region->ndr_mappings; i++) {
    787		nd_mapping = &nd_region->mapping[i];
    788		ndd = to_ndd(nd_mapping);
    789
    790		/*
    791		 * All dimms in an interleave set, need to be enabled
    792		 * for the size to be changed.
    793		 */
    794		if (!ndd)
    795			return -ENXIO;
    796
    797		allocated += nvdimm_allocated_dpa(ndd, &label_id);
    798	}
    799	available = nd_region_allocatable_dpa(nd_region);
    800
    801	if (val > available + allocated)
    802		return -ENOSPC;
    803
    804	if (val == allocated)
    805		return 0;
    806
    807	val = div_u64(val, nd_region->ndr_mappings);
    808	allocated = div_u64(allocated, nd_region->ndr_mappings);
    809	if (val < allocated)
    810		rc = shrink_dpa_allocation(nd_region, &label_id,
    811				allocated - val);
    812	else
    813		rc = grow_dpa_allocation(nd_region, &label_id, val - allocated);
    814
    815	if (rc)
    816		return rc;
    817
    818	if (is_namespace_pmem(dev)) {
    819		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
    820
    821		nd_namespace_pmem_set_resource(nd_region, nspm,
    822				val * nd_region->ndr_mappings);
    823	}
    824
    825	/*
    826	 * Try to delete the namespace if we deleted all of its
    827	 * allocation, this is not the seed or 0th device for the
    828	 * region, and it is not actively claimed by a btt, pfn, or dax
    829	 * instance.
    830	 */
    831	if (val == 0 && id != 0 && nd_region->ns_seed != dev && !ndns->claim)
    832		nd_device_unregister(dev, ND_ASYNC);
    833
    834	return rc;
    835}
    836
    837static ssize_t size_store(struct device *dev,
    838		struct device_attribute *attr, const char *buf, size_t len)
    839{
    840	struct nd_region *nd_region = to_nd_region(dev->parent);
    841	unsigned long long val;
    842	uuid_t **uuid = NULL;
    843	int rc;
    844
    845	rc = kstrtoull(buf, 0, &val);
    846	if (rc)
    847		return rc;
    848
    849	device_lock(dev);
    850	nvdimm_bus_lock(dev);
    851	wait_nvdimm_bus_probe_idle(dev);
    852	rc = __size_store(dev, val);
    853	if (rc >= 0)
    854		rc = nd_namespace_label_update(nd_region, dev);
    855
    856	if (is_namespace_pmem(dev)) {
    857		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
    858
    859		uuid = &nspm->uuid;
    860	}
    861
    862	if (rc == 0 && val == 0 && uuid) {
    863		/* setting size zero == 'delete namespace' */
    864		kfree(*uuid);
    865		*uuid = NULL;
    866	}
    867
    868	dev_dbg(dev, "%llx %s (%d)\n", val, rc < 0 ? "fail" : "success", rc);
    869
    870	nvdimm_bus_unlock(dev);
    871	device_unlock(dev);
    872
    873	return rc < 0 ? rc : len;
    874}
    875
    876resource_size_t __nvdimm_namespace_capacity(struct nd_namespace_common *ndns)
    877{
    878	struct device *dev = &ndns->dev;
    879
    880	if (is_namespace_pmem(dev)) {
    881		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
    882
    883		return resource_size(&nspm->nsio.res);
    884	} else if (is_namespace_io(dev)) {
    885		struct nd_namespace_io *nsio = to_nd_namespace_io(dev);
    886
    887		return resource_size(&nsio->res);
    888	} else
    889		WARN_ONCE(1, "unknown namespace type\n");
    890	return 0;
    891}
    892
    893resource_size_t nvdimm_namespace_capacity(struct nd_namespace_common *ndns)
    894{
    895	resource_size_t size;
    896
    897	nvdimm_bus_lock(&ndns->dev);
    898	size = __nvdimm_namespace_capacity(ndns);
    899	nvdimm_bus_unlock(&ndns->dev);
    900
    901	return size;
    902}
    903EXPORT_SYMBOL(nvdimm_namespace_capacity);
    904
    905bool nvdimm_namespace_locked(struct nd_namespace_common *ndns)
    906{
    907	int i;
    908	bool locked = false;
    909	struct device *dev = &ndns->dev;
    910	struct nd_region *nd_region = to_nd_region(dev->parent);
    911
    912	for (i = 0; i < nd_region->ndr_mappings; i++) {
    913		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
    914		struct nvdimm *nvdimm = nd_mapping->nvdimm;
    915
    916		if (test_bit(NDD_LOCKED, &nvdimm->flags)) {
    917			dev_dbg(dev, "%s locked\n", nvdimm_name(nvdimm));
    918			locked = true;
    919		}
    920	}
    921	return locked;
    922}
    923EXPORT_SYMBOL(nvdimm_namespace_locked);
    924
    925static ssize_t size_show(struct device *dev,
    926		struct device_attribute *attr, char *buf)
    927{
    928	return sprintf(buf, "%llu\n", (unsigned long long)
    929			nvdimm_namespace_capacity(to_ndns(dev)));
    930}
    931static DEVICE_ATTR(size, 0444, size_show, size_store);
    932
    933static uuid_t *namespace_to_uuid(struct device *dev)
    934{
    935	if (is_namespace_pmem(dev)) {
    936		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
    937
    938		return nspm->uuid;
    939	}
    940	return ERR_PTR(-ENXIO);
    941}
    942
    943static ssize_t uuid_show(struct device *dev, struct device_attribute *attr,
    944			 char *buf)
    945{
    946	uuid_t *uuid = namespace_to_uuid(dev);
    947
    948	if (IS_ERR(uuid))
    949		return PTR_ERR(uuid);
    950	if (uuid)
    951		return sprintf(buf, "%pUb\n", uuid);
    952	return sprintf(buf, "\n");
    953}
    954
    955/**
    956 * namespace_update_uuid - check for a unique uuid and whether we're "renaming"
    957 * @nd_region: parent region so we can updates all dimms in the set
    958 * @dev: namespace type for generating label_id
    959 * @new_uuid: incoming uuid
    960 * @old_uuid: reference to the uuid storage location in the namespace object
    961 */
    962static int namespace_update_uuid(struct nd_region *nd_region,
    963				 struct device *dev, uuid_t *new_uuid,
    964				 uuid_t **old_uuid)
    965{
    966	struct nd_label_id old_label_id;
    967	struct nd_label_id new_label_id;
    968	int i;
    969
    970	if (!nd_is_uuid_unique(dev, new_uuid))
    971		return -EINVAL;
    972
    973	if (*old_uuid == NULL)
    974		goto out;
    975
    976	/*
    977	 * If we've already written a label with this uuid, then it's
    978	 * too late to rename because we can't reliably update the uuid
    979	 * without losing the old namespace.  Userspace must delete this
    980	 * namespace to abandon the old uuid.
    981	 */
    982	for (i = 0; i < nd_region->ndr_mappings; i++) {
    983		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
    984
    985		/*
    986		 * This check by itself is sufficient because old_uuid
    987		 * would be NULL above if this uuid did not exist in the
    988		 * currently written set.
    989		 *
    990		 * FIXME: can we delete uuid with zero dpa allocated?
    991		 */
    992		if (list_empty(&nd_mapping->labels))
    993			return -EBUSY;
    994	}
    995
    996	nd_label_gen_id(&old_label_id, *old_uuid, 0);
    997	nd_label_gen_id(&new_label_id, new_uuid, 0);
    998	for (i = 0; i < nd_region->ndr_mappings; i++) {
    999		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
   1000		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
   1001		struct nd_label_ent *label_ent;
   1002		struct resource *res;
   1003
   1004		for_each_dpa_resource(ndd, res)
   1005			if (strcmp(res->name, old_label_id.id) == 0)
   1006				sprintf((void *) res->name, "%s",
   1007						new_label_id.id);
   1008
   1009		mutex_lock(&nd_mapping->lock);
   1010		list_for_each_entry(label_ent, &nd_mapping->labels, list) {
   1011			struct nd_namespace_label *nd_label = label_ent->label;
   1012			struct nd_label_id label_id;
   1013			uuid_t uuid;
   1014
   1015			if (!nd_label)
   1016				continue;
   1017			nsl_get_uuid(ndd, nd_label, &uuid);
   1018			nd_label_gen_id(&label_id, &uuid,
   1019					nsl_get_flags(ndd, nd_label));
   1020			if (strcmp(old_label_id.id, label_id.id) == 0)
   1021				set_bit(ND_LABEL_REAP, &label_ent->flags);
   1022		}
   1023		mutex_unlock(&nd_mapping->lock);
   1024	}
   1025	kfree(*old_uuid);
   1026 out:
   1027	*old_uuid = new_uuid;
   1028	return 0;
   1029}
   1030
   1031static ssize_t uuid_store(struct device *dev,
   1032		struct device_attribute *attr, const char *buf, size_t len)
   1033{
   1034	struct nd_region *nd_region = to_nd_region(dev->parent);
   1035	uuid_t *uuid = NULL;
   1036	uuid_t **ns_uuid;
   1037	ssize_t rc = 0;
   1038
   1039	if (is_namespace_pmem(dev)) {
   1040		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
   1041
   1042		ns_uuid = &nspm->uuid;
   1043	} else
   1044		return -ENXIO;
   1045
   1046	device_lock(dev);
   1047	nvdimm_bus_lock(dev);
   1048	wait_nvdimm_bus_probe_idle(dev);
   1049	if (to_ndns(dev)->claim)
   1050		rc = -EBUSY;
   1051	if (rc >= 0)
   1052		rc = nd_uuid_store(dev, &uuid, buf, len);
   1053	if (rc >= 0)
   1054		rc = namespace_update_uuid(nd_region, dev, uuid, ns_uuid);
   1055	if (rc >= 0)
   1056		rc = nd_namespace_label_update(nd_region, dev);
   1057	else
   1058		kfree(uuid);
   1059	dev_dbg(dev, "result: %zd wrote: %s%s", rc, buf,
   1060			buf[len - 1] == '\n' ? "" : "\n");
   1061	nvdimm_bus_unlock(dev);
   1062	device_unlock(dev);
   1063
   1064	return rc < 0 ? rc : len;
   1065}
   1066static DEVICE_ATTR_RW(uuid);
   1067
   1068static ssize_t resource_show(struct device *dev,
   1069		struct device_attribute *attr, char *buf)
   1070{
   1071	struct resource *res;
   1072
   1073	if (is_namespace_pmem(dev)) {
   1074		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
   1075
   1076		res = &nspm->nsio.res;
   1077	} else if (is_namespace_io(dev)) {
   1078		struct nd_namespace_io *nsio = to_nd_namespace_io(dev);
   1079
   1080		res = &nsio->res;
   1081	} else
   1082		return -ENXIO;
   1083
   1084	/* no address to convey if the namespace has no allocation */
   1085	if (resource_size(res) == 0)
   1086		return -ENXIO;
   1087	return sprintf(buf, "%#llx\n", (unsigned long long) res->start);
   1088}
   1089static DEVICE_ATTR_ADMIN_RO(resource);
   1090
   1091static const unsigned long pmem_lbasize_supported[] = { 512, 4096, 0 };
   1092
   1093static ssize_t sector_size_show(struct device *dev,
   1094		struct device_attribute *attr, char *buf)
   1095{
   1096	if (is_namespace_pmem(dev)) {
   1097		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
   1098
   1099		return nd_size_select_show(nspm->lbasize,
   1100				pmem_lbasize_supported, buf);
   1101	}
   1102	return -ENXIO;
   1103}
   1104
   1105static ssize_t sector_size_store(struct device *dev,
   1106		struct device_attribute *attr, const char *buf, size_t len)
   1107{
   1108	struct nd_region *nd_region = to_nd_region(dev->parent);
   1109	const unsigned long *supported;
   1110	unsigned long *lbasize;
   1111	ssize_t rc = 0;
   1112
   1113	if (is_namespace_pmem(dev)) {
   1114		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
   1115
   1116		lbasize = &nspm->lbasize;
   1117		supported = pmem_lbasize_supported;
   1118	} else
   1119		return -ENXIO;
   1120
   1121	device_lock(dev);
   1122	nvdimm_bus_lock(dev);
   1123	if (to_ndns(dev)->claim)
   1124		rc = -EBUSY;
   1125	if (rc >= 0)
   1126		rc = nd_size_select_store(dev, buf, lbasize, supported);
   1127	if (rc >= 0)
   1128		rc = nd_namespace_label_update(nd_region, dev);
   1129	dev_dbg(dev, "result: %zd %s: %s%s", rc, rc < 0 ? "tried" : "wrote",
   1130			buf, buf[len - 1] == '\n' ? "" : "\n");
   1131	nvdimm_bus_unlock(dev);
   1132	device_unlock(dev);
   1133
   1134	return rc ? rc : len;
   1135}
   1136static DEVICE_ATTR_RW(sector_size);
   1137
   1138static ssize_t dpa_extents_show(struct device *dev,
   1139		struct device_attribute *attr, char *buf)
   1140{
   1141	struct nd_region *nd_region = to_nd_region(dev->parent);
   1142	struct nd_label_id label_id;
   1143	uuid_t *uuid = NULL;
   1144	int count = 0, i;
   1145	u32 flags = 0;
   1146
   1147	nvdimm_bus_lock(dev);
   1148	if (is_namespace_pmem(dev)) {
   1149		struct nd_namespace_pmem *nspm = to_nd_namespace_pmem(dev);
   1150
   1151		uuid = nspm->uuid;
   1152		flags = 0;
   1153	}
   1154
   1155	if (!uuid)
   1156		goto out;
   1157
   1158	nd_label_gen_id(&label_id, uuid, flags);
   1159	for (i = 0; i < nd_region->ndr_mappings; i++) {
   1160		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
   1161		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
   1162		struct resource *res;
   1163
   1164		for_each_dpa_resource(ndd, res)
   1165			if (strcmp(res->name, label_id.id) == 0)
   1166				count++;
   1167	}
   1168 out:
   1169	nvdimm_bus_unlock(dev);
   1170
   1171	return sprintf(buf, "%d\n", count);
   1172}
   1173static DEVICE_ATTR_RO(dpa_extents);
   1174
   1175static int btt_claim_class(struct device *dev)
   1176{
   1177	struct nd_region *nd_region = to_nd_region(dev->parent);
   1178	int i, loop_bitmask = 0;
   1179
   1180	for (i = 0; i < nd_region->ndr_mappings; i++) {
   1181		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
   1182		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
   1183		struct nd_namespace_index *nsindex;
   1184
   1185		/*
   1186		 * If any of the DIMMs do not support labels the only
   1187		 * possible BTT format is v1.
   1188		 */
   1189		if (!ndd) {
   1190			loop_bitmask = 0;
   1191			break;
   1192		}
   1193
   1194		nsindex = to_namespace_index(ndd, ndd->ns_current);
   1195		if (nsindex == NULL)
   1196			loop_bitmask |= 1;
   1197		else {
   1198			/* check whether existing labels are v1.1 or v1.2 */
   1199			if (__le16_to_cpu(nsindex->major) == 1
   1200					&& __le16_to_cpu(nsindex->minor) == 1)
   1201				loop_bitmask |= 2;
   1202			else
   1203				loop_bitmask |= 4;
   1204		}
   1205	}
   1206	/*
   1207	 * If nsindex is null loop_bitmask's bit 0 will be set, and if an index
   1208	 * block is found, a v1.1 label for any mapping will set bit 1, and a
   1209	 * v1.2 label will set bit 2.
   1210	 *
   1211	 * At the end of the loop, at most one of the three bits must be set.
   1212	 * If multiple bits were set, it means the different mappings disagree
   1213	 * about their labels, and this must be cleaned up first.
   1214	 *
   1215	 * If all the label index blocks are found to agree, nsindex of NULL
   1216	 * implies labels haven't been initialized yet, and when they will,
   1217	 * they will be of the 1.2 format, so we can assume BTT2.0
   1218	 *
   1219	 * If 1.1 labels are found, we enforce BTT1.1, and if 1.2 labels are
   1220	 * found, we enforce BTT2.0
   1221	 *
   1222	 * If the loop was never entered, default to BTT1.1 (legacy namespaces)
   1223	 */
   1224	switch (loop_bitmask) {
   1225	case 0:
   1226	case 2:
   1227		return NVDIMM_CCLASS_BTT;
   1228	case 1:
   1229	case 4:
   1230		return NVDIMM_CCLASS_BTT2;
   1231	default:
   1232		return -ENXIO;
   1233	}
   1234}
   1235
   1236static ssize_t holder_show(struct device *dev,
   1237		struct device_attribute *attr, char *buf)
   1238{
   1239	struct nd_namespace_common *ndns = to_ndns(dev);
   1240	ssize_t rc;
   1241
   1242	device_lock(dev);
   1243	rc = sprintf(buf, "%s\n", ndns->claim ? dev_name(ndns->claim) : "");
   1244	device_unlock(dev);
   1245
   1246	return rc;
   1247}
   1248static DEVICE_ATTR_RO(holder);
   1249
   1250static int __holder_class_store(struct device *dev, const char *buf)
   1251{
   1252	struct nd_namespace_common *ndns = to_ndns(dev);
   1253
   1254	if (dev->driver || ndns->claim)
   1255		return -EBUSY;
   1256
   1257	if (sysfs_streq(buf, "btt")) {
   1258		int rc = btt_claim_class(dev);
   1259
   1260		if (rc < NVDIMM_CCLASS_NONE)
   1261			return rc;
   1262		ndns->claim_class = rc;
   1263	} else if (sysfs_streq(buf, "pfn"))
   1264		ndns->claim_class = NVDIMM_CCLASS_PFN;
   1265	else if (sysfs_streq(buf, "dax"))
   1266		ndns->claim_class = NVDIMM_CCLASS_DAX;
   1267	else if (sysfs_streq(buf, ""))
   1268		ndns->claim_class = NVDIMM_CCLASS_NONE;
   1269	else
   1270		return -EINVAL;
   1271
   1272	return 0;
   1273}
   1274
   1275static ssize_t holder_class_store(struct device *dev,
   1276		struct device_attribute *attr, const char *buf, size_t len)
   1277{
   1278	struct nd_region *nd_region = to_nd_region(dev->parent);
   1279	int rc;
   1280
   1281	device_lock(dev);
   1282	nvdimm_bus_lock(dev);
   1283	wait_nvdimm_bus_probe_idle(dev);
   1284	rc = __holder_class_store(dev, buf);
   1285	if (rc >= 0)
   1286		rc = nd_namespace_label_update(nd_region, dev);
   1287	dev_dbg(dev, "%s(%d)\n", rc < 0 ? "fail " : "", rc);
   1288	nvdimm_bus_unlock(dev);
   1289	device_unlock(dev);
   1290
   1291	return rc < 0 ? rc : len;
   1292}
   1293
   1294static ssize_t holder_class_show(struct device *dev,
   1295		struct device_attribute *attr, char *buf)
   1296{
   1297	struct nd_namespace_common *ndns = to_ndns(dev);
   1298	ssize_t rc;
   1299
   1300	device_lock(dev);
   1301	if (ndns->claim_class == NVDIMM_CCLASS_NONE)
   1302		rc = sprintf(buf, "\n");
   1303	else if ((ndns->claim_class == NVDIMM_CCLASS_BTT) ||
   1304			(ndns->claim_class == NVDIMM_CCLASS_BTT2))
   1305		rc = sprintf(buf, "btt\n");
   1306	else if (ndns->claim_class == NVDIMM_CCLASS_PFN)
   1307		rc = sprintf(buf, "pfn\n");
   1308	else if (ndns->claim_class == NVDIMM_CCLASS_DAX)
   1309		rc = sprintf(buf, "dax\n");
   1310	else
   1311		rc = sprintf(buf, "<unknown>\n");
   1312	device_unlock(dev);
   1313
   1314	return rc;
   1315}
   1316static DEVICE_ATTR_RW(holder_class);
   1317
   1318static ssize_t mode_show(struct device *dev,
   1319		struct device_attribute *attr, char *buf)
   1320{
   1321	struct nd_namespace_common *ndns = to_ndns(dev);
   1322	struct device *claim;
   1323	char *mode;
   1324	ssize_t rc;
   1325
   1326	device_lock(dev);
   1327	claim = ndns->claim;
   1328	if (claim && is_nd_btt(claim))
   1329		mode = "safe";
   1330	else if (claim && is_nd_pfn(claim))
   1331		mode = "memory";
   1332	else if (claim && is_nd_dax(claim))
   1333		mode = "dax";
   1334	else if (!claim && pmem_should_map_pages(dev))
   1335		mode = "memory";
   1336	else
   1337		mode = "raw";
   1338	rc = sprintf(buf, "%s\n", mode);
   1339	device_unlock(dev);
   1340
   1341	return rc;
   1342}
   1343static DEVICE_ATTR_RO(mode);
   1344
   1345static ssize_t force_raw_store(struct device *dev,
   1346		struct device_attribute *attr, const char *buf, size_t len)
   1347{
   1348	bool force_raw;
   1349	int rc = strtobool(buf, &force_raw);
   1350
   1351	if (rc)
   1352		return rc;
   1353
   1354	to_ndns(dev)->force_raw = force_raw;
   1355	return len;
   1356}
   1357
   1358static ssize_t force_raw_show(struct device *dev,
   1359		struct device_attribute *attr, char *buf)
   1360{
   1361	return sprintf(buf, "%d\n", to_ndns(dev)->force_raw);
   1362}
   1363static DEVICE_ATTR_RW(force_raw);
   1364
   1365static struct attribute *nd_namespace_attributes[] = {
   1366	&dev_attr_nstype.attr,
   1367	&dev_attr_size.attr,
   1368	&dev_attr_mode.attr,
   1369	&dev_attr_uuid.attr,
   1370	&dev_attr_holder.attr,
   1371	&dev_attr_resource.attr,
   1372	&dev_attr_alt_name.attr,
   1373	&dev_attr_force_raw.attr,
   1374	&dev_attr_sector_size.attr,
   1375	&dev_attr_dpa_extents.attr,
   1376	&dev_attr_holder_class.attr,
   1377	NULL,
   1378};
   1379
   1380static umode_t namespace_visible(struct kobject *kobj,
   1381		struct attribute *a, int n)
   1382{
   1383	struct device *dev = container_of(kobj, struct device, kobj);
   1384
   1385	if (is_namespace_pmem(dev)) {
   1386		if (a == &dev_attr_size.attr)
   1387			return 0644;
   1388
   1389		return a->mode;
   1390	}
   1391
   1392	/* base is_namespace_io() attributes */
   1393	if (a == &dev_attr_nstype.attr || a == &dev_attr_size.attr ||
   1394	    a == &dev_attr_holder.attr || a == &dev_attr_holder_class.attr ||
   1395	    a == &dev_attr_force_raw.attr || a == &dev_attr_mode.attr ||
   1396	    a == &dev_attr_resource.attr)
   1397		return a->mode;
   1398
   1399	return 0;
   1400}
   1401
   1402static struct attribute_group nd_namespace_attribute_group = {
   1403	.attrs = nd_namespace_attributes,
   1404	.is_visible = namespace_visible,
   1405};
   1406
   1407static const struct attribute_group *nd_namespace_attribute_groups[] = {
   1408	&nd_device_attribute_group,
   1409	&nd_namespace_attribute_group,
   1410	&nd_numa_attribute_group,
   1411	NULL,
   1412};
   1413
   1414static const struct device_type namespace_io_device_type = {
   1415	.name = "nd_namespace_io",
   1416	.release = namespace_io_release,
   1417	.groups = nd_namespace_attribute_groups,
   1418};
   1419
   1420static const struct device_type namespace_pmem_device_type = {
   1421	.name = "nd_namespace_pmem",
   1422	.release = namespace_pmem_release,
   1423	.groups = nd_namespace_attribute_groups,
   1424};
   1425
   1426static bool is_namespace_pmem(const struct device *dev)
   1427{
   1428	return dev ? dev->type == &namespace_pmem_device_type : false;
   1429}
   1430
   1431static bool is_namespace_io(const struct device *dev)
   1432{
   1433	return dev ? dev->type == &namespace_io_device_type : false;
   1434}
   1435
   1436struct nd_namespace_common *nvdimm_namespace_common_probe(struct device *dev)
   1437{
   1438	struct nd_btt *nd_btt = is_nd_btt(dev) ? to_nd_btt(dev) : NULL;
   1439	struct nd_pfn *nd_pfn = is_nd_pfn(dev) ? to_nd_pfn(dev) : NULL;
   1440	struct nd_dax *nd_dax = is_nd_dax(dev) ? to_nd_dax(dev) : NULL;
   1441	struct nd_namespace_common *ndns = NULL;
   1442	resource_size_t size;
   1443
   1444	if (nd_btt || nd_pfn || nd_dax) {
   1445		if (nd_btt)
   1446			ndns = nd_btt->ndns;
   1447		else if (nd_pfn)
   1448			ndns = nd_pfn->ndns;
   1449		else if (nd_dax)
   1450			ndns = nd_dax->nd_pfn.ndns;
   1451
   1452		if (!ndns)
   1453			return ERR_PTR(-ENODEV);
   1454
   1455		/*
   1456		 * Flush any in-progess probes / removals in the driver
   1457		 * for the raw personality of this namespace.
   1458		 */
   1459		device_lock(&ndns->dev);
   1460		device_unlock(&ndns->dev);
   1461		if (ndns->dev.driver) {
   1462			dev_dbg(&ndns->dev, "is active, can't bind %s\n",
   1463					dev_name(dev));
   1464			return ERR_PTR(-EBUSY);
   1465		}
   1466		if (dev_WARN_ONCE(&ndns->dev, ndns->claim != dev,
   1467					"host (%s) vs claim (%s) mismatch\n",
   1468					dev_name(dev),
   1469					dev_name(ndns->claim)))
   1470			return ERR_PTR(-ENXIO);
   1471	} else {
   1472		ndns = to_ndns(dev);
   1473		if (ndns->claim) {
   1474			dev_dbg(dev, "claimed by %s, failing probe\n",
   1475				dev_name(ndns->claim));
   1476
   1477			return ERR_PTR(-ENXIO);
   1478		}
   1479	}
   1480
   1481	if (nvdimm_namespace_locked(ndns))
   1482		return ERR_PTR(-EACCES);
   1483
   1484	size = nvdimm_namespace_capacity(ndns);
   1485	if (size < ND_MIN_NAMESPACE_SIZE) {
   1486		dev_dbg(&ndns->dev, "%pa, too small must be at least %#x\n",
   1487				&size, ND_MIN_NAMESPACE_SIZE);
   1488		return ERR_PTR(-ENODEV);
   1489	}
   1490
   1491	/*
   1492	 * Note, alignment validation for fsdax and devdax mode
   1493	 * namespaces happens in nd_pfn_validate() where infoblock
   1494	 * padding parameters can be applied.
   1495	 */
   1496	if (pmem_should_map_pages(dev)) {
   1497		struct nd_namespace_io *nsio = to_nd_namespace_io(&ndns->dev);
   1498		struct resource *res = &nsio->res;
   1499
   1500		if (!IS_ALIGNED(res->start | (res->end + 1),
   1501					memremap_compat_align())) {
   1502			dev_err(&ndns->dev, "%pr misaligned, unable to map\n", res);
   1503			return ERR_PTR(-EOPNOTSUPP);
   1504		}
   1505	}
   1506
   1507	if (is_namespace_pmem(&ndns->dev)) {
   1508		struct nd_namespace_pmem *nspm;
   1509
   1510		nspm = to_nd_namespace_pmem(&ndns->dev);
   1511		if (uuid_not_set(nspm->uuid, &ndns->dev, __func__))
   1512			return ERR_PTR(-ENODEV);
   1513	}
   1514
   1515	return ndns;
   1516}
   1517EXPORT_SYMBOL(nvdimm_namespace_common_probe);
   1518
   1519int devm_namespace_enable(struct device *dev, struct nd_namespace_common *ndns,
   1520		resource_size_t size)
   1521{
   1522	return devm_nsio_enable(dev, to_nd_namespace_io(&ndns->dev), size);
   1523}
   1524EXPORT_SYMBOL_GPL(devm_namespace_enable);
   1525
   1526void devm_namespace_disable(struct device *dev, struct nd_namespace_common *ndns)
   1527{
   1528	devm_nsio_disable(dev, to_nd_namespace_io(&ndns->dev));
   1529}
   1530EXPORT_SYMBOL_GPL(devm_namespace_disable);
   1531
   1532static struct device **create_namespace_io(struct nd_region *nd_region)
   1533{
   1534	struct nd_namespace_io *nsio;
   1535	struct device *dev, **devs;
   1536	struct resource *res;
   1537
   1538	nsio = kzalloc(sizeof(*nsio), GFP_KERNEL);
   1539	if (!nsio)
   1540		return NULL;
   1541
   1542	devs = kcalloc(2, sizeof(struct device *), GFP_KERNEL);
   1543	if (!devs) {
   1544		kfree(nsio);
   1545		return NULL;
   1546	}
   1547
   1548	dev = &nsio->common.dev;
   1549	dev->type = &namespace_io_device_type;
   1550	dev->parent = &nd_region->dev;
   1551	res = &nsio->res;
   1552	res->name = dev_name(&nd_region->dev);
   1553	res->flags = IORESOURCE_MEM;
   1554	res->start = nd_region->ndr_start;
   1555	res->end = res->start + nd_region->ndr_size - 1;
   1556
   1557	devs[0] = dev;
   1558	return devs;
   1559}
   1560
   1561static bool has_uuid_at_pos(struct nd_region *nd_region, const uuid_t *uuid,
   1562			    u64 cookie, u16 pos)
   1563{
   1564	struct nd_namespace_label *found = NULL;
   1565	int i;
   1566
   1567	for (i = 0; i < nd_region->ndr_mappings; i++) {
   1568		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
   1569		struct nd_interleave_set *nd_set = nd_region->nd_set;
   1570		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
   1571		struct nd_label_ent *label_ent;
   1572		bool found_uuid = false;
   1573
   1574		list_for_each_entry(label_ent, &nd_mapping->labels, list) {
   1575			struct nd_namespace_label *nd_label = label_ent->label;
   1576			u16 position;
   1577
   1578			if (!nd_label)
   1579				continue;
   1580			position = nsl_get_position(ndd, nd_label);
   1581
   1582			if (!nsl_validate_isetcookie(ndd, nd_label, cookie))
   1583				continue;
   1584
   1585			if (!nsl_uuid_equal(ndd, nd_label, uuid))
   1586				continue;
   1587
   1588			if (!nsl_validate_type_guid(ndd, nd_label,
   1589						    &nd_set->type_guid))
   1590				continue;
   1591
   1592			if (found_uuid) {
   1593				dev_dbg(ndd->dev, "duplicate entry for uuid\n");
   1594				return false;
   1595			}
   1596			found_uuid = true;
   1597			if (!nsl_validate_nlabel(nd_region, ndd, nd_label))
   1598				continue;
   1599			if (position != pos)
   1600				continue;
   1601			found = nd_label;
   1602			break;
   1603		}
   1604		if (found)
   1605			break;
   1606	}
   1607	return found != NULL;
   1608}
   1609
   1610static int select_pmem_id(struct nd_region *nd_region, const uuid_t *pmem_id)
   1611{
   1612	int i;
   1613
   1614	if (!pmem_id)
   1615		return -ENODEV;
   1616
   1617	for (i = 0; i < nd_region->ndr_mappings; i++) {
   1618		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
   1619		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
   1620		struct nd_namespace_label *nd_label = NULL;
   1621		u64 hw_start, hw_end, pmem_start, pmem_end;
   1622		struct nd_label_ent *label_ent;
   1623
   1624		lockdep_assert_held(&nd_mapping->lock);
   1625		list_for_each_entry(label_ent, &nd_mapping->labels, list) {
   1626			nd_label = label_ent->label;
   1627			if (!nd_label)
   1628				continue;
   1629			if (nsl_uuid_equal(ndd, nd_label, pmem_id))
   1630				break;
   1631			nd_label = NULL;
   1632		}
   1633
   1634		if (!nd_label) {
   1635			WARN_ON(1);
   1636			return -EINVAL;
   1637		}
   1638
   1639		/*
   1640		 * Check that this label is compliant with the dpa
   1641		 * range published in NFIT
   1642		 */
   1643		hw_start = nd_mapping->start;
   1644		hw_end = hw_start + nd_mapping->size;
   1645		pmem_start = nsl_get_dpa(ndd, nd_label);
   1646		pmem_end = pmem_start + nsl_get_rawsize(ndd, nd_label);
   1647		if (pmem_start >= hw_start && pmem_start < hw_end
   1648				&& pmem_end <= hw_end && pmem_end > hw_start)
   1649			/* pass */;
   1650		else {
   1651			dev_dbg(&nd_region->dev, "%s invalid label for %pUb\n",
   1652				dev_name(ndd->dev),
   1653				nsl_uuid_raw(ndd, nd_label));
   1654			return -EINVAL;
   1655		}
   1656
   1657		/* move recently validated label to the front of the list */
   1658		list_move(&label_ent->list, &nd_mapping->labels);
   1659	}
   1660	return 0;
   1661}
   1662
   1663/**
   1664 * create_namespace_pmem - validate interleave set labelling, retrieve label0
   1665 * @nd_region: region with mappings to validate
   1666 * @nspm: target namespace to create
   1667 * @nd_label: target pmem namespace label to evaluate
   1668 */
   1669static struct device *create_namespace_pmem(struct nd_region *nd_region,
   1670					    struct nd_mapping *nd_mapping,
   1671					    struct nd_namespace_label *nd_label)
   1672{
   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;
   1682	struct device *dev;
   1683	uuid_t uuid;
   1684	int rc = 0;
   1685	u16 i;
   1686
   1687	if (cookie == 0) {
   1688		dev_dbg(&nd_region->dev, "invalid interleave-set-cookie\n");
   1689		return ERR_PTR(-ENXIO);
   1690	}
   1691
   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);
   1697
   1698		dev_dbg(&nd_region->dev, "valid altcookie in label: %pUb\n",
   1699			nsl_uuid_raw(ndd, nd_label));
   1700	}
   1701
   1702	nspm = kzalloc(sizeof(*nspm), GFP_KERNEL);
   1703	if (!nspm)
   1704		return ERR_PTR(-ENOMEM);
   1705
   1706	nspm->id = -1;
   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;
   1713
   1714	for (i = 0; i < nd_region->ndr_mappings; i++) {
   1715		uuid_t uuid;
   1716
   1717		nsl_get_uuid(ndd, nd_label, &uuid);
   1718		if (has_uuid_at_pos(nd_region, &uuid, cookie, i))
   1719			continue;
   1720		if (has_uuid_at_pos(nd_region, &uuid, altcookie, i))
   1721			continue;
   1722		break;
   1723	}
   1724
   1725	if (i < nd_region->ndr_mappings) {
   1726		struct nvdimm *nvdimm = nd_region->mapping[i].nvdimm;
   1727
   1728		/*
   1729		 * Give up if we don't find an instance of a uuid at each
   1730		 * position (from 0 to nd_region->ndr_mappings - 1), or if we
   1731		 * find a dimm with two instances of the same uuid.
   1732		 */
   1733		dev_err(&nd_region->dev, "%s missing label for %pUb\n",
   1734			nvdimm_name(nvdimm), nsl_uuid_raw(ndd, nd_label));
   1735		rc = -EINVAL;
   1736		goto err;
   1737	}
   1738
   1739	/*
   1740	 * Fix up each mapping's 'labels' to have the validated pmem label for
   1741	 * that position at labels[0], and NULL at labels[1].  In the process,
   1742	 * check that the namespace aligns with interleave-set.
   1743	 */
   1744	nsl_get_uuid(ndd, nd_label, &uuid);
   1745	rc = select_pmem_id(nd_region, &uuid);
   1746	if (rc)
   1747		goto err;
   1748
   1749	/* Calculate total size and populate namespace properties from label0 */
   1750	for (i = 0; i < nd_region->ndr_mappings; i++) {
   1751		struct nd_namespace_label *label0;
   1752		struct nvdimm_drvdata *ndd;
   1753
   1754		nd_mapping = &nd_region->mapping[i];
   1755		label_ent = list_first_entry_or_null(&nd_mapping->labels,
   1756				typeof(*label_ent), list);
   1757		label0 = label_ent ? label_ent->label : NULL;
   1758
   1759		if (!label0) {
   1760			WARN_ON(1);
   1761			continue;
   1762		}
   1763
   1764		ndd = to_ndd(nd_mapping);
   1765		size += nsl_get_rawsize(ndd, label0);
   1766		if (nsl_get_position(ndd, label0) != 0)
   1767			continue;
   1768		WARN_ON(nspm->alt_name || nspm->uuid);
   1769		nspm->alt_name = kmemdup(nsl_ref_name(ndd, label0),
   1770					 NSLABEL_NAME_LEN, GFP_KERNEL);
   1771		nsl_get_uuid(ndd, label0, &uuid);
   1772		nspm->uuid = kmemdup(&uuid, sizeof(uuid_t), GFP_KERNEL);
   1773		nspm->lbasize = nsl_get_lbasize(ndd, label0);
   1774		nspm->nsio.common.claim_class =
   1775			nsl_get_claim_class(ndd, label0);
   1776	}
   1777
   1778	if (!nspm->alt_name || !nspm->uuid) {
   1779		rc = -ENOMEM;
   1780		goto err;
   1781	}
   1782
   1783	nd_namespace_pmem_set_resource(nd_region, nspm, size);
   1784
   1785	return dev;
   1786 err:
   1787	namespace_pmem_release(dev);
   1788	switch (rc) {
   1789	case -EINVAL:
   1790		dev_dbg(&nd_region->dev, "invalid label(s)\n");
   1791		break;
   1792	case -ENODEV:
   1793		dev_dbg(&nd_region->dev, "label not found\n");
   1794		break;
   1795	default:
   1796		dev_dbg(&nd_region->dev, "unexpected err: %d\n", rc);
   1797		break;
   1798	}
   1799	return ERR_PTR(rc);
   1800}
   1801
   1802static struct device *nd_namespace_pmem_create(struct nd_region *nd_region)
   1803{
   1804	struct nd_namespace_pmem *nspm;
   1805	struct resource *res;
   1806	struct device *dev;
   1807
   1808	if (!is_memory(&nd_region->dev))
   1809		return NULL;
   1810
   1811	nspm = kzalloc(sizeof(*nspm), GFP_KERNEL);
   1812	if (!nspm)
   1813		return NULL;
   1814
   1815	dev = &nspm->nsio.common.dev;
   1816	dev->type = &namespace_pmem_device_type;
   1817	dev->parent = &nd_region->dev;
   1818	res = &nspm->nsio.res;
   1819	res->name = dev_name(&nd_region->dev);
   1820	res->flags = IORESOURCE_MEM;
   1821
   1822	nspm->id = ida_simple_get(&nd_region->ns_ida, 0, 0, GFP_KERNEL);
   1823	if (nspm->id < 0) {
   1824		kfree(nspm);
   1825		return NULL;
   1826	}
   1827	dev_set_name(dev, "namespace%d.%d", nd_region->id, nspm->id);
   1828	nd_namespace_pmem_set_resource(nd_region, nspm, 0);
   1829
   1830	return dev;
   1831}
   1832
   1833static struct lock_class_key nvdimm_namespace_key;
   1834
   1835void nd_region_create_ns_seed(struct nd_region *nd_region)
   1836{
   1837	WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev));
   1838
   1839	if (nd_region_to_nstype(nd_region) == ND_DEVICE_NAMESPACE_IO)
   1840		return;
   1841
   1842	nd_region->ns_seed = nd_namespace_pmem_create(nd_region);
   1843
   1844	/*
   1845	 * Seed creation failures are not fatal, provisioning is simply
   1846	 * disabled until memory becomes available
   1847	 */
   1848	if (!nd_region->ns_seed)
   1849		dev_err(&nd_region->dev, "failed to create namespace\n");
   1850	else {
   1851		device_initialize(nd_region->ns_seed);
   1852		lockdep_set_class(&nd_region->ns_seed->mutex,
   1853				  &nvdimm_namespace_key);
   1854		nd_device_register(nd_region->ns_seed);
   1855	}
   1856}
   1857
   1858void nd_region_create_dax_seed(struct nd_region *nd_region)
   1859{
   1860	WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev));
   1861	nd_region->dax_seed = nd_dax_create(nd_region);
   1862	/*
   1863	 * Seed creation failures are not fatal, provisioning is simply
   1864	 * disabled until memory becomes available
   1865	 */
   1866	if (!nd_region->dax_seed)
   1867		dev_err(&nd_region->dev, "failed to create dax namespace\n");
   1868}
   1869
   1870void nd_region_create_pfn_seed(struct nd_region *nd_region)
   1871{
   1872	WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev));
   1873	nd_region->pfn_seed = nd_pfn_create(nd_region);
   1874	/*
   1875	 * Seed creation failures are not fatal, provisioning is simply
   1876	 * disabled until memory becomes available
   1877	 */
   1878	if (!nd_region->pfn_seed)
   1879		dev_err(&nd_region->dev, "failed to create pfn namespace\n");
   1880}
   1881
   1882void nd_region_create_btt_seed(struct nd_region *nd_region)
   1883{
   1884	WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev));
   1885	nd_region->btt_seed = nd_btt_create(nd_region);
   1886	/*
   1887	 * Seed creation failures are not fatal, provisioning is simply
   1888	 * disabled until memory becomes available
   1889	 */
   1890	if (!nd_region->btt_seed)
   1891		dev_err(&nd_region->dev, "failed to create btt namespace\n");
   1892}
   1893
   1894static int add_namespace_resource(struct nd_region *nd_region,
   1895		struct nd_namespace_label *nd_label, struct device **devs,
   1896		int count)
   1897{
   1898	struct nd_mapping *nd_mapping = &nd_region->mapping[0];
   1899	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
   1900	int i;
   1901
   1902	for (i = 0; i < count; i++) {
   1903		uuid_t *uuid = namespace_to_uuid(devs[i]);
   1904
   1905		if (IS_ERR(uuid)) {
   1906			WARN_ON(1);
   1907			continue;
   1908		}
   1909
   1910		if (!nsl_uuid_equal(ndd, nd_label, uuid))
   1911			continue;
   1912		dev_err(&nd_region->dev,
   1913			"error: conflicting extents for uuid: %pUb\n", uuid);
   1914		return -ENXIO;
   1915	}
   1916
   1917	return i;
   1918}
   1919
   1920static int cmp_dpa(const void *a, const void *b)
   1921{
   1922	const struct device *dev_a = *(const struct device **) a;
   1923	const struct device *dev_b = *(const struct device **) b;
   1924	struct nd_namespace_pmem *nspm_a, *nspm_b;
   1925
   1926	if (is_namespace_io(dev_a))
   1927		return 0;
   1928
   1929	nspm_a = to_nd_namespace_pmem(dev_a);
   1930	nspm_b = to_nd_namespace_pmem(dev_b);
   1931
   1932	return memcmp(&nspm_a->nsio.res.start, &nspm_b->nsio.res.start,
   1933			sizeof(resource_size_t));
   1934}
   1935
   1936static struct device **scan_labels(struct nd_region *nd_region)
   1937{
   1938	int i, count = 0;
   1939	struct device *dev, **devs = NULL;
   1940	struct nd_label_ent *label_ent, *e;
   1941	struct nd_mapping *nd_mapping = &nd_region->mapping[0];
   1942	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
   1943	resource_size_t map_end = nd_mapping->start + nd_mapping->size - 1;
   1944
   1945	/* "safe" because create_namespace_pmem() might list_move() label_ent */
   1946	list_for_each_entry_safe(label_ent, e, &nd_mapping->labels, list) {
   1947		struct nd_namespace_label *nd_label = label_ent->label;
   1948		struct device **__devs;
   1949
   1950		if (!nd_label)
   1951			continue;
   1952
   1953		/* skip labels that describe extents outside of the region */
   1954		if (nsl_get_dpa(ndd, nd_label) < nd_mapping->start ||
   1955		    nsl_get_dpa(ndd, nd_label) > map_end)
   1956			continue;
   1957
   1958		i = add_namespace_resource(nd_region, nd_label, devs, count);
   1959		if (i < 0)
   1960			goto err;
   1961		if (i < count)
   1962			continue;
   1963		__devs = kcalloc(count + 2, sizeof(dev), GFP_KERNEL);
   1964		if (!__devs)
   1965			goto err;
   1966		memcpy(__devs, devs, sizeof(dev) * count);
   1967		kfree(devs);
   1968		devs = __devs;
   1969
   1970		dev = create_namespace_pmem(nd_region, nd_mapping, nd_label);
   1971		if (IS_ERR(dev)) {
   1972			switch (PTR_ERR(dev)) {
   1973			case -EAGAIN:
   1974				/* skip invalid labels */
   1975				continue;
   1976			case -ENODEV:
   1977				/* fallthrough to seed creation */
   1978				break;
   1979			default:
   1980				goto err;
   1981			}
   1982		} else
   1983			devs[count++] = dev;
   1984
   1985	}
   1986
   1987	dev_dbg(&nd_region->dev, "discovered %d namespace%s\n", count,
   1988		count == 1 ? "" : "s");
   1989
   1990	if (count == 0) {
   1991		struct nd_namespace_pmem *nspm;
   1992
   1993		/* Publish a zero-sized namespace for userspace to configure. */
   1994		nd_mapping_free_labels(nd_mapping);
   1995
   1996		devs = kcalloc(2, sizeof(dev), GFP_KERNEL);
   1997		if (!devs)
   1998			goto err;
   1999
   2000		nspm = kzalloc(sizeof(*nspm), GFP_KERNEL);
   2001		if (!nspm)
   2002			goto err;
   2003		dev = &nspm->nsio.common.dev;
   2004		dev->type = &namespace_pmem_device_type;
   2005		nd_namespace_pmem_set_resource(nd_region, nspm, 0);
   2006		dev->parent = &nd_region->dev;
   2007		devs[count++] = dev;
   2008	} else if (is_memory(&nd_region->dev)) {
   2009		/* clean unselected labels */
   2010		for (i = 0; i < nd_region->ndr_mappings; i++) {
   2011			struct list_head *l, *e;
   2012			LIST_HEAD(list);
   2013			int j;
   2014
   2015			nd_mapping = &nd_region->mapping[i];
   2016			if (list_empty(&nd_mapping->labels)) {
   2017				WARN_ON(1);
   2018				continue;
   2019			}
   2020
   2021			j = count;
   2022			list_for_each_safe(l, e, &nd_mapping->labels) {
   2023				if (!j--)
   2024					break;
   2025				list_move_tail(l, &list);
   2026			}
   2027			nd_mapping_free_labels(nd_mapping);
   2028			list_splice_init(&list, &nd_mapping->labels);
   2029		}
   2030	}
   2031
   2032	if (count > 1)
   2033		sort(devs, count, sizeof(struct device *), cmp_dpa, NULL);
   2034
   2035	return devs;
   2036
   2037 err:
   2038	if (devs) {
   2039		for (i = 0; devs[i]; i++)
   2040			namespace_pmem_release(devs[i]);
   2041		kfree(devs);
   2042	}
   2043	return NULL;
   2044}
   2045
   2046static struct device **create_namespaces(struct nd_region *nd_region)
   2047{
   2048	struct nd_mapping *nd_mapping;
   2049	struct device **devs;
   2050	int i;
   2051
   2052	if (nd_region->ndr_mappings == 0)
   2053		return NULL;
   2054
   2055	/* lock down all mappings while we scan labels */
   2056	for (i = 0; i < nd_region->ndr_mappings; i++) {
   2057		nd_mapping = &nd_region->mapping[i];
   2058		mutex_lock_nested(&nd_mapping->lock, i);
   2059	}
   2060
   2061	devs = scan_labels(nd_region);
   2062
   2063	for (i = 0; i < nd_region->ndr_mappings; i++) {
   2064		int reverse = nd_region->ndr_mappings - 1 - i;
   2065
   2066		nd_mapping = &nd_region->mapping[reverse];
   2067		mutex_unlock(&nd_mapping->lock);
   2068	}
   2069
   2070	return devs;
   2071}
   2072
   2073static void deactivate_labels(void *region)
   2074{
   2075	struct nd_region *nd_region = region;
   2076	int i;
   2077
   2078	for (i = 0; i < nd_region->ndr_mappings; i++) {
   2079		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
   2080		struct nvdimm_drvdata *ndd = nd_mapping->ndd;
   2081		struct nvdimm *nvdimm = nd_mapping->nvdimm;
   2082
   2083		mutex_lock(&nd_mapping->lock);
   2084		nd_mapping_free_labels(nd_mapping);
   2085		mutex_unlock(&nd_mapping->lock);
   2086
   2087		put_ndd(ndd);
   2088		nd_mapping->ndd = NULL;
   2089		if (ndd)
   2090			atomic_dec(&nvdimm->busy);
   2091	}
   2092}
   2093
   2094static int init_active_labels(struct nd_region *nd_region)
   2095{
   2096	int i, rc = 0;
   2097
   2098	for (i = 0; i < nd_region->ndr_mappings; i++) {
   2099		struct nd_mapping *nd_mapping = &nd_region->mapping[i];
   2100		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
   2101		struct nvdimm *nvdimm = nd_mapping->nvdimm;
   2102		struct nd_label_ent *label_ent;
   2103		int count, j;
   2104
   2105		/*
   2106		 * If the dimm is disabled then we may need to prevent
   2107		 * the region from being activated.
   2108		 */
   2109		if (!ndd) {
   2110			if (test_bit(NDD_LOCKED, &nvdimm->flags))
   2111				/* fail, label data may be unreadable */;
   2112			else if (test_bit(NDD_LABELING, &nvdimm->flags))
   2113				/* fail, labels needed to disambiguate dpa */;
   2114			else
   2115				continue;
   2116
   2117			dev_err(&nd_region->dev, "%s: is %s, failing probe\n",
   2118					dev_name(&nd_mapping->nvdimm->dev),
   2119					test_bit(NDD_LOCKED, &nvdimm->flags)
   2120					? "locked" : "disabled");
   2121			rc = -ENXIO;
   2122			goto out;
   2123		}
   2124		nd_mapping->ndd = ndd;
   2125		atomic_inc(&nvdimm->busy);
   2126		get_ndd(ndd);
   2127
   2128		count = nd_label_active_count(ndd);
   2129		dev_dbg(ndd->dev, "count: %d\n", count);
   2130		if (!count)
   2131			continue;
   2132		for (j = 0; j < count; j++) {
   2133			struct nd_namespace_label *label;
   2134
   2135			label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL);
   2136			if (!label_ent)
   2137				break;
   2138			label = nd_label_active(ndd, j);
   2139			label_ent->label = label;
   2140
   2141			mutex_lock(&nd_mapping->lock);
   2142			list_add_tail(&label_ent->list, &nd_mapping->labels);
   2143			mutex_unlock(&nd_mapping->lock);
   2144		}
   2145
   2146		if (j < count)
   2147			break;
   2148	}
   2149
   2150	if (i < nd_region->ndr_mappings)
   2151		rc = -ENOMEM;
   2152
   2153out:
   2154	if (rc) {
   2155		deactivate_labels(nd_region);
   2156		return rc;
   2157	}
   2158
   2159	return devm_add_action_or_reset(&nd_region->dev, deactivate_labels,
   2160					nd_region);
   2161}
   2162
   2163int nd_region_register_namespaces(struct nd_region *nd_region, int *err)
   2164{
   2165	struct device **devs = NULL;
   2166	int i, rc = 0, type;
   2167
   2168	*err = 0;
   2169	nvdimm_bus_lock(&nd_region->dev);
   2170	rc = init_active_labels(nd_region);
   2171	if (rc) {
   2172		nvdimm_bus_unlock(&nd_region->dev);
   2173		return rc;
   2174	}
   2175
   2176	type = nd_region_to_nstype(nd_region);
   2177	switch (type) {
   2178	case ND_DEVICE_NAMESPACE_IO:
   2179		devs = create_namespace_io(nd_region);
   2180		break;
   2181	case ND_DEVICE_NAMESPACE_PMEM:
   2182		devs = create_namespaces(nd_region);
   2183		break;
   2184	default:
   2185		break;
   2186	}
   2187	nvdimm_bus_unlock(&nd_region->dev);
   2188
   2189	if (!devs)
   2190		return -ENODEV;
   2191
   2192	for (i = 0; devs[i]; i++) {
   2193		struct device *dev = devs[i];
   2194		int id;
   2195
   2196		if (type == ND_DEVICE_NAMESPACE_PMEM) {
   2197			struct nd_namespace_pmem *nspm;
   2198
   2199			nspm = to_nd_namespace_pmem(dev);
   2200			id = ida_simple_get(&nd_region->ns_ida, 0, 0,
   2201					    GFP_KERNEL);
   2202			nspm->id = id;
   2203		} else
   2204			id = i;
   2205
   2206		if (id < 0)
   2207			break;
   2208		dev_set_name(dev, "namespace%d.%d", nd_region->id, id);
   2209		device_initialize(dev);
   2210		lockdep_set_class(&dev->mutex, &nvdimm_namespace_key);
   2211		nd_device_register(dev);
   2212	}
   2213	if (i)
   2214		nd_region->ns_seed = devs[0];
   2215
   2216	if (devs[i]) {
   2217		int j;
   2218
   2219		for (j = i; devs[j]; j++) {
   2220			struct device *dev = devs[j];
   2221
   2222			device_initialize(dev);
   2223			put_device(dev);
   2224		}
   2225		*err = j - i;
   2226		/*
   2227		 * All of the namespaces we tried to register failed, so
   2228		 * fail region activation.
   2229		 */
   2230		if (*err == 0)
   2231			rc = -ENODEV;
   2232	}
   2233	kfree(devs);
   2234
   2235	if (rc == -ENODEV)
   2236		return rc;
   2237
   2238	return i;
   2239}