ndd                18 drivers/nvdimm/dimm.c 	struct nvdimm_drvdata *ndd;
ndd                42 drivers/nvdimm/dimm.c 	ndd = kzalloc(sizeof(*ndd), GFP_KERNEL);
ndd                43 drivers/nvdimm/dimm.c 	if (!ndd)
ndd                46 drivers/nvdimm/dimm.c 	dev_set_drvdata(dev, ndd);
ndd                47 drivers/nvdimm/dimm.c 	ndd->dpa.name = dev_name(dev);
ndd                48 drivers/nvdimm/dimm.c 	ndd->ns_current = -1;
ndd                49 drivers/nvdimm/dimm.c 	ndd->ns_next = -1;
ndd                50 drivers/nvdimm/dimm.c 	ndd->dpa.start = 0;
ndd                51 drivers/nvdimm/dimm.c 	ndd->dpa.end = -1;
ndd                52 drivers/nvdimm/dimm.c 	ndd->dev = dev;
ndd                54 drivers/nvdimm/dimm.c 	kref_init(&ndd->kref);
ndd                71 drivers/nvdimm/dimm.c 	rc = nvdimm_init_nsarea(ndd);
ndd                90 drivers/nvdimm/dimm.c 	rc = nd_label_data_init(ndd);
ndd                96 drivers/nvdimm/dimm.c 	dev_dbg(dev, "config data size: %d\n", ndd->nsarea.config_size);
ndd                99 drivers/nvdimm/dimm.c 	if (ndd->ns_current >= 0) {
ndd               100 drivers/nvdimm/dimm.c 		rc = nd_label_reserve_dpa(ndd);
ndd               112 drivers/nvdimm/dimm.c 	put_ndd(ndd);
ndd               118 drivers/nvdimm/dimm.c 	struct nvdimm_drvdata *ndd = dev_get_drvdata(dev);
ndd               120 drivers/nvdimm/dimm.c 	if (!ndd)
ndd               126 drivers/nvdimm/dimm.c 	put_ndd(ndd);
ndd                44 drivers/nvdimm/dimm_devs.c static int validate_dimm(struct nvdimm_drvdata *ndd)
ndd                48 drivers/nvdimm/dimm_devs.c 	if (!ndd)
ndd                51 drivers/nvdimm/dimm_devs.c 	rc = nvdimm_check_config_data(ndd->dev);
ndd                53 drivers/nvdimm/dimm_devs.c 		dev_dbg(ndd->dev, "%ps: %s error: %d\n",
ndd                62 drivers/nvdimm/dimm_devs.c int nvdimm_init_nsarea(struct nvdimm_drvdata *ndd)
ndd                64 drivers/nvdimm/dimm_devs.c 	struct nd_cmd_get_config_size *cmd = &ndd->nsarea;
ndd                65 drivers/nvdimm/dimm_devs.c 	struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(ndd->dev);
ndd                67 drivers/nvdimm/dimm_devs.c 	int rc = validate_dimm(ndd);
ndd                78 drivers/nvdimm/dimm_devs.c 	rc = nd_desc->ndctl(nd_desc, to_nvdimm(ndd->dev),
ndd                85 drivers/nvdimm/dimm_devs.c int nvdimm_get_config_data(struct nvdimm_drvdata *ndd, void *buf,
ndd                88 drivers/nvdimm/dimm_devs.c 	struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(ndd->dev);
ndd                90 drivers/nvdimm/dimm_devs.c 	int rc = validate_dimm(ndd), cmd_rc = 0;
ndd                97 drivers/nvdimm/dimm_devs.c 	if (offset + len > ndd->nsarea.config_size)
ndd               100 drivers/nvdimm/dimm_devs.c 	max_cmd_size = min_t(u32, len, ndd->nsarea.max_xfer);
ndd               114 drivers/nvdimm/dimm_devs.c 		rc = nd_desc->ndctl(nd_desc, to_nvdimm(ndd->dev),
ndd               131 drivers/nvdimm/dimm_devs.c int nvdimm_set_config_data(struct nvdimm_drvdata *ndd, size_t offset,
ndd               136 drivers/nvdimm/dimm_devs.c 	int rc = validate_dimm(ndd), cmd_rc = 0;
ndd               137 drivers/nvdimm/dimm_devs.c 	struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(ndd->dev);
ndd               143 drivers/nvdimm/dimm_devs.c 	if (offset + len > ndd->nsarea.config_size)
ndd               146 drivers/nvdimm/dimm_devs.c 	max_cmd_size = min_t(u32, len, ndd->nsarea.max_xfer);
ndd               162 drivers/nvdimm/dimm_devs.c 		rc = nd_desc->ndctl(nd_desc, to_nvdimm(ndd->dev),
ndd               252 drivers/nvdimm/dimm_devs.c 	struct nvdimm_drvdata *ndd = container_of(kref, typeof(*ndd), kref);
ndd               253 drivers/nvdimm/dimm_devs.c 	struct device *dev = ndd->dev;
ndd               258 drivers/nvdimm/dimm_devs.c 	for_each_dpa_resource_safe(ndd, res, _r)
ndd               259 drivers/nvdimm/dimm_devs.c 		nvdimm_free_dpa(ndd, res);
ndd               262 drivers/nvdimm/dimm_devs.c 	kvfree(ndd->data);
ndd               263 drivers/nvdimm/dimm_devs.c 	kfree(ndd);
ndd               267 drivers/nvdimm/dimm_devs.c void get_ndd(struct nvdimm_drvdata *ndd)
ndd               269 drivers/nvdimm/dimm_devs.c 	kref_get(&ndd->kref);
ndd               272 drivers/nvdimm/dimm_devs.c void put_ndd(struct nvdimm_drvdata *ndd)
ndd               274 drivers/nvdimm/dimm_devs.c 	if (ndd)
ndd               275 drivers/nvdimm/dimm_devs.c 		kref_put(&ndd->kref, nvdimm_drvdata_release);
ndd               350 drivers/nvdimm/dimm_devs.c 	struct nvdimm_drvdata *ndd = dev_get_drvdata(dev);
ndd               354 drivers/nvdimm/dimm_devs.c 	if (!ndd)
ndd               358 drivers/nvdimm/dimm_devs.c 	nfree = nd_label_nfree(ndd);
ndd               565 drivers/nvdimm/dimm_devs.c 	struct nvdimm_drvdata *ndd;
ndd               582 drivers/nvdimm/dimm_devs.c 	ndd = to_ndd(nd_mapping);
ndd               604 drivers/nvdimm/dimm_devs.c 	for_each_dpa_resource(ndd, res) {
ndd               643 drivers/nvdimm/dimm_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               651 drivers/nvdimm/dimm_devs.c 	if (!ndd)
ndd               657 drivers/nvdimm/dimm_devs.c 	for_each_dpa_resource(ndd, res) {
ndd               675 drivers/nvdimm/dimm_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               681 drivers/nvdimm/dimm_devs.c 	if (!ndd)
ndd               684 drivers/nvdimm/dimm_devs.c 	nvdimm_bus = walk_to_nvdimm_bus(ndd->dev);
ndd               687 drivers/nvdimm/dimm_devs.c 	for_each_dpa_resource(ndd, res) {
ndd               716 drivers/nvdimm/dimm_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               720 drivers/nvdimm/dimm_devs.c 	if (!ndd)
ndd               726 drivers/nvdimm/dimm_devs.c 	for_each_dpa_resource(ndd, res) {
ndd               760 drivers/nvdimm/dimm_devs.c 	nd_dbg_dpa(nd_region, ndd, res, "%s\n", reason);
ndd               764 drivers/nvdimm/dimm_devs.c void nvdimm_free_dpa(struct nvdimm_drvdata *ndd, struct resource *res)
ndd               766 drivers/nvdimm/dimm_devs.c 	WARN_ON_ONCE(!is_nvdimm_bus_locked(ndd->dev));
ndd               768 drivers/nvdimm/dimm_devs.c 	__release_region(&ndd->dpa, res->start, resource_size(res));
ndd               771 drivers/nvdimm/dimm_devs.c struct resource *nvdimm_allocate_dpa(struct nvdimm_drvdata *ndd,
ndd               781 drivers/nvdimm/dimm_devs.c 	WARN_ON_ONCE(!is_nvdimm_bus_locked(ndd->dev));
ndd               782 drivers/nvdimm/dimm_devs.c 	res = __request_region(&ndd->dpa, start, n, name, 0);
ndd               793 drivers/nvdimm/dimm_devs.c resource_size_t nvdimm_allocated_dpa(struct nvdimm_drvdata *ndd,
ndd               799 drivers/nvdimm/dimm_devs.c 	for_each_dpa_resource(ndd, res)
ndd                37 drivers/nvdimm/label.c unsigned sizeof_namespace_label(struct nvdimm_drvdata *ndd)
ndd                39 drivers/nvdimm/label.c 	return ndd->nslabel_size;
ndd                48 drivers/nvdimm/label.c static int __nvdimm_num_label_slots(struct nvdimm_drvdata *ndd,
ndd                51 drivers/nvdimm/label.c 	return (ndd->nsarea.config_size - index_size * 2) /
ndd                52 drivers/nvdimm/label.c 			sizeof_namespace_label(ndd);
ndd                55 drivers/nvdimm/label.c int nvdimm_num_label_slots(struct nvdimm_drvdata *ndd)
ndd                59 drivers/nvdimm/label.c 	tmp_nslot = ndd->nsarea.config_size / sizeof_namespace_label(ndd);
ndd                62 drivers/nvdimm/label.c 	return __nvdimm_num_label_slots(ndd, NSINDEX_ALIGN * n);
ndd                65 drivers/nvdimm/label.c size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd)
ndd                75 drivers/nvdimm/label.c 	nslot = nvdimm_num_label_slots(ndd);
ndd                76 drivers/nvdimm/label.c 	space = ndd->nsarea.config_size - nslot * sizeof_namespace_label(ndd);
ndd                81 drivers/nvdimm/label.c 	dev_err(ndd->dev, "label area (%d) too small to host (%d byte) labels\n",
ndd                82 drivers/nvdimm/label.c 			ndd->nsarea.config_size, sizeof_namespace_label(ndd));
ndd                86 drivers/nvdimm/label.c static int __nd_label_validate(struct nvdimm_drvdata *ndd)
ndd               116 drivers/nvdimm/label.c 		to_namespace_index(ndd, 0),
ndd               117 drivers/nvdimm/label.c 		to_namespace_index(ndd, 1),
ndd               120 drivers/nvdimm/label.c 	struct device *dev = ndd->dev;
ndd               145 drivers/nvdimm/label.c 		if (labelsize != sizeof_namespace_label(ndd)) {
ndd               153 drivers/nvdimm/label.c 		sum = nd_fletcher64(nsindex[i], sizeof_namespace_index(ndd), 1);
ndd               168 drivers/nvdimm/label.c 				!= i * sizeof_namespace_index(ndd)) {
ndd               175 drivers/nvdimm/label.c 				!= (!i) * sizeof_namespace_index(ndd)) {
ndd               182 drivers/nvdimm/label.c 				!= 2 * sizeof_namespace_index(ndd)) {
ndd               190 drivers/nvdimm/label.c 		if (size > sizeof_namespace_index(ndd)
ndd               197 drivers/nvdimm/label.c 		if (nslot * sizeof_namespace_label(ndd)
ndd               198 drivers/nvdimm/label.c 				+ 2 * sizeof_namespace_index(ndd)
ndd               199 drivers/nvdimm/label.c 				> ndd->nsarea.config_size) {
ndd               201 drivers/nvdimm/label.c 					i, nslot, ndd->nsarea.config_size);
ndd               232 drivers/nvdimm/label.c static int nd_label_validate(struct nvdimm_drvdata *ndd)
ndd               246 drivers/nvdimm/label.c 		ndd->nslabel_size = label_size[i];
ndd               247 drivers/nvdimm/label.c 		rc = __nd_label_validate(ndd);
ndd               255 drivers/nvdimm/label.c static void nd_label_copy(struct nvdimm_drvdata *ndd,
ndd               263 drivers/nvdimm/label.c 	memcpy(dst, src, sizeof_namespace_index(ndd));
ndd               266 drivers/nvdimm/label.c static struct nd_namespace_label *nd_label_base(struct nvdimm_drvdata *ndd)
ndd               268 drivers/nvdimm/label.c 	void *base = to_namespace_index(ndd, 0);
ndd               270 drivers/nvdimm/label.c 	return base + 2 * sizeof_namespace_index(ndd);
ndd               273 drivers/nvdimm/label.c static int to_slot(struct nvdimm_drvdata *ndd,
ndd               279 drivers/nvdimm/label.c 	base = (unsigned long) nd_label_base(ndd);
ndd               281 drivers/nvdimm/label.c 	return (label - base) / sizeof_namespace_label(ndd);
ndd               284 drivers/nvdimm/label.c static struct nd_namespace_label *to_label(struct nvdimm_drvdata *ndd, int slot)
ndd               288 drivers/nvdimm/label.c 	base = (unsigned long) nd_label_base(ndd);
ndd               289 drivers/nvdimm/label.c 	label = base + sizeof_namespace_label(ndd) * slot;
ndd               307 drivers/nvdimm/label.c static bool preamble_index(struct nvdimm_drvdata *ndd, int idx,
ndd               313 drivers/nvdimm/label.c 	nsindex = to_namespace_index(ndd, idx);
ndd               333 drivers/nvdimm/label.c static bool preamble_current(struct nvdimm_drvdata *ndd,
ndd               337 drivers/nvdimm/label.c 	return preamble_index(ndd, ndd->ns_current, nsindex,
ndd               341 drivers/nvdimm/label.c static bool preamble_next(struct nvdimm_drvdata *ndd,
ndd               345 drivers/nvdimm/label.c 	return preamble_index(ndd, ndd->ns_next, nsindex,
ndd               349 drivers/nvdimm/label.c static bool slot_valid(struct nvdimm_drvdata *ndd,
ndd               357 drivers/nvdimm/label.c 	if (namespace_label_has(ndd, checksum)) {
ndd               362 drivers/nvdimm/label.c 		sum = nd_fletcher64(nd_label, sizeof_namespace_label(ndd), 1);
ndd               365 drivers/nvdimm/label.c 			dev_dbg(ndd->dev, "fail checksum. slot: %d expect: %#llx\n",
ndd               374 drivers/nvdimm/label.c int nd_label_reserve_dpa(struct nvdimm_drvdata *ndd)
ndd               380 drivers/nvdimm/label.c 	if (!preamble_current(ndd, &nsindex, &free, &nslot))
ndd               384 drivers/nvdimm/label.c 		struct nvdimm *nvdimm = to_nvdimm(ndd->dev);
ndd               392 drivers/nvdimm/label.c 		nd_label = to_label(ndd, slot);
ndd               394 drivers/nvdimm/label.c 		if (!slot_valid(ndd, nd_label, slot))
ndd               402 drivers/nvdimm/label.c 		res = nvdimm_allocate_dpa(ndd, &label_id,
ndd               405 drivers/nvdimm/label.c 		nd_dbg_dpa(nd_region, ndd, res, "reserve\n");
ndd               413 drivers/nvdimm/label.c int nd_label_data_init(struct nvdimm_drvdata *ndd)
ndd               421 drivers/nvdimm/label.c 	if (ndd->data)
ndd               424 drivers/nvdimm/label.c 	if (ndd->nsarea.status || ndd->nsarea.max_xfer == 0) {
ndd               425 drivers/nvdimm/label.c 		dev_dbg(ndd->dev, "failed to init config data area: (%u:%u)\n",
ndd               426 drivers/nvdimm/label.c 			ndd->nsarea.max_xfer, ndd->nsarea.config_size);
ndd               440 drivers/nvdimm/label.c 	ndd->nslabel_size = 128;
ndd               441 drivers/nvdimm/label.c 	read_size = sizeof_namespace_index(ndd) * 2;
ndd               446 drivers/nvdimm/label.c 	config_size = ndd->nsarea.config_size;
ndd               447 drivers/nvdimm/label.c 	ndd->data = kvzalloc(config_size, GFP_KERNEL);
ndd               448 drivers/nvdimm/label.c 	if (!ndd->data)
ndd               458 drivers/nvdimm/label.c 	max_xfer = min_t(size_t, ndd->nsarea.max_xfer, config_size);
ndd               473 drivers/nvdimm/label.c 	rc = nvdimm_get_config_data(ndd, ndd->data, 0, read_size);
ndd               478 drivers/nvdimm/label.c 	ndd->ns_current = nd_label_validate(ndd);
ndd               479 drivers/nvdimm/label.c 	if (ndd->ns_current < 0)
ndd               483 drivers/nvdimm/label.c 	ndd->ns_next = nd_label_next_nsindex(ndd->ns_current);
ndd               486 drivers/nvdimm/label.c 	nsindex = to_current_namespace_index(ndd);
ndd               487 drivers/nvdimm/label.c 	nd_label_copy(ndd, to_next_namespace_index(ndd), nsindex);
ndd               494 drivers/nvdimm/label.c 	for (i = 0; i < nslot; i++, offset += ndd->nslabel_size) {
ndd               499 drivers/nvdimm/label.c 			memset(ndd->data + offset, 0, ndd->nslabel_size);
ndd               504 drivers/nvdimm/label.c 		if (offset + ndd->nslabel_size <= read_size)
ndd               512 drivers/nvdimm/label.c 		label_read_size = offset + ndd->nslabel_size - read_size;
ndd               521 drivers/nvdimm/label.c 		rc = nvdimm_get_config_data(ndd, ndd->data + read_size,
ndd               530 drivers/nvdimm/label.c 	dev_dbg(ndd->dev, "len: %zu rc: %d\n", offset, rc);
ndd               535 drivers/nvdimm/label.c int nd_label_active_count(struct nvdimm_drvdata *ndd)
ndd               542 drivers/nvdimm/label.c 	if (!preamble_current(ndd, &nsindex, &free, &nslot))
ndd               548 drivers/nvdimm/label.c 		nd_label = to_label(ndd, slot);
ndd               550 drivers/nvdimm/label.c 		if (!slot_valid(ndd, nd_label, slot)) {
ndd               555 drivers/nvdimm/label.c 			dev_dbg(ndd->dev,
ndd               565 drivers/nvdimm/label.c struct nd_namespace_label *nd_label_active(struct nvdimm_drvdata *ndd, int n)
ndd               571 drivers/nvdimm/label.c 	if (!preamble_current(ndd, &nsindex, &free, &nslot))
ndd               577 drivers/nvdimm/label.c 		nd_label = to_label(ndd, slot);
ndd               578 drivers/nvdimm/label.c 		if (!slot_valid(ndd, nd_label, slot))
ndd               582 drivers/nvdimm/label.c 			return to_label(ndd, slot);
ndd               588 drivers/nvdimm/label.c u32 nd_label_alloc_slot(struct nvdimm_drvdata *ndd)
ndd               594 drivers/nvdimm/label.c 	if (!preamble_next(ndd, &nsindex, &free, &nslot))
ndd               597 drivers/nvdimm/label.c 	WARN_ON(!is_nvdimm_bus_locked(ndd->dev));
ndd               608 drivers/nvdimm/label.c bool nd_label_free_slot(struct nvdimm_drvdata *ndd, u32 slot)
ndd               614 drivers/nvdimm/label.c 	if (!preamble_next(ndd, &nsindex, &free, &nslot))
ndd               617 drivers/nvdimm/label.c 	WARN_ON(!is_nvdimm_bus_locked(ndd->dev));
ndd               624 drivers/nvdimm/label.c u32 nd_label_nfree(struct nvdimm_drvdata *ndd)
ndd               630 drivers/nvdimm/label.c 	WARN_ON(!is_nvdimm_bus_locked(ndd->dev));
ndd               632 drivers/nvdimm/label.c 	if (!preamble_next(ndd, &nsindex, &free, &nslot))
ndd               633 drivers/nvdimm/label.c 		return nvdimm_num_label_slots(ndd);
ndd               638 drivers/nvdimm/label.c static int nd_label_write_index(struct nvdimm_drvdata *ndd, int index, u32 seq,
ndd               647 drivers/nvdimm/label.c 	nsindex = to_namespace_index(ndd, index);
ndd               649 drivers/nvdimm/label.c 		nslot = nvdimm_num_label_slots(ndd);
ndd               655 drivers/nvdimm/label.c 	nsindex->labelsize = sizeof_namespace_label(ndd) >> 8;
ndd               658 drivers/nvdimm/label.c 		- (unsigned long) to_namespace_index(ndd, 0);
ndd               660 drivers/nvdimm/label.c 	nsindex->mysize = __cpu_to_le64(sizeof_namespace_index(ndd));
ndd               661 drivers/nvdimm/label.c 	offset = (unsigned long) to_namespace_index(ndd,
ndd               663 drivers/nvdimm/label.c 		- (unsigned long) to_namespace_index(ndd, 0);
ndd               665 drivers/nvdimm/label.c 	offset = (unsigned long) nd_label_base(ndd)
ndd               666 drivers/nvdimm/label.c 		- (unsigned long) to_namespace_index(ndd, 0);
ndd               670 drivers/nvdimm/label.c 	if (sizeof_namespace_label(ndd) < 256)
ndd               684 drivers/nvdimm/label.c 	checksum = nd_fletcher64(nsindex, sizeof_namespace_index(ndd), 1);
ndd               686 drivers/nvdimm/label.c 	rc = nvdimm_set_config_data(ndd, __le64_to_cpu(nsindex->myoff),
ndd               687 drivers/nvdimm/label.c 			nsindex, sizeof_namespace_index(ndd));
ndd               695 drivers/nvdimm/label.c 	WARN_ON(index != ndd->ns_next);
ndd               696 drivers/nvdimm/label.c 	nd_label_copy(ndd, to_current_namespace_index(ndd), nsindex);
ndd               697 drivers/nvdimm/label.c 	ndd->ns_current = nd_label_next_nsindex(ndd->ns_current);
ndd               698 drivers/nvdimm/label.c 	ndd->ns_next = nd_label_next_nsindex(ndd->ns_next);
ndd               699 drivers/nvdimm/label.c 	WARN_ON(ndd->ns_current == ndd->ns_next);
ndd               704 drivers/nvdimm/label.c static unsigned long nd_label_offset(struct nvdimm_drvdata *ndd,
ndd               708 drivers/nvdimm/label.c 		- (unsigned long) to_namespace_index(ndd, 0);
ndd               751 drivers/nvdimm/label.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               752 drivers/nvdimm/label.c 	u32 slot = to_slot(ndd, victim->label);
ndd               754 drivers/nvdimm/label.c 	dev_dbg(ndd->dev, "free: %d\n", slot);
ndd               755 drivers/nvdimm/label.c 	nd_label_free_slot(ndd, slot);
ndd               765 drivers/nvdimm/label.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               777 drivers/nvdimm/label.c 	if (!preamble_next(ndd, &nsindex, &free, &nslot))
ndd               782 drivers/nvdimm/label.c 	for_each_dpa_resource(ndd, res)
ndd               792 drivers/nvdimm/label.c 	slot = nd_label_alloc_slot(ndd);
ndd               795 drivers/nvdimm/label.c 	dev_dbg(ndd->dev, "allocated: %d\n", slot);
ndd               797 drivers/nvdimm/label.c 	nd_label = to_label(ndd, slot);
ndd               798 drivers/nvdimm/label.c 	memset(nd_label, 0, sizeof_namespace_label(ndd));
ndd               810 drivers/nvdimm/label.c 	if (namespace_label_has(ndd, type_guid))
ndd               812 drivers/nvdimm/label.c 	if (namespace_label_has(ndd, abstraction_guid))
ndd               816 drivers/nvdimm/label.c 	if (namespace_label_has(ndd, checksum)) {
ndd               820 drivers/nvdimm/label.c 		sum = nd_fletcher64(nd_label, sizeof_namespace_label(ndd), 1);
ndd               823 drivers/nvdimm/label.c 	nd_dbg_dpa(nd_region, ndd, res, "\n");
ndd               826 drivers/nvdimm/label.c 	offset = nd_label_offset(ndd, nd_label);
ndd               827 drivers/nvdimm/label.c 	rc = nvdimm_set_config_data(ndd, offset, nd_label,
ndd               828 drivers/nvdimm/label.c 			sizeof_namespace_label(ndd));
ndd               844 drivers/nvdimm/label.c 	rc = nd_label_write_index(ndd, ndd->ns_next,
ndd               855 drivers/nvdimm/label.c 				to_slot(ndd, nd_label));
ndd               876 drivers/nvdimm/label.c static struct resource *to_resource(struct nvdimm_drvdata *ndd,
ndd               881 drivers/nvdimm/label.c 	for_each_dpa_resource(ndd, res) {
ndd               904 drivers/nvdimm/label.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               916 drivers/nvdimm/label.c 	if (!preamble_next(ndd, &nsindex, &free, &nslot))
ndd               920 drivers/nvdimm/label.c 	nfree = nd_label_nfree(ndd);
ndd               932 drivers/nvdimm/label.c 	for_each_dpa_resource(ndd, res) {
ndd               948 drivers/nvdimm/label.c 			nd_label = to_label(ndd, slot);
ndd               952 drivers/nvdimm/label.c 			res = to_resource(ndd, nd_label);
ndd               956 drivers/nvdimm/label.c 			slot = to_slot(ndd, nd_label);
ndd               974 drivers/nvdimm/label.c 	for_each_dpa_resource(ndd, res) {
ndd               977 drivers/nvdimm/label.c 		if (!nsblk_add_resource(nd_region, ndd, nsblk, res->start)) {
ndd              1001 drivers/nvdimm/label.c 		slot = nd_label_alloc_slot(ndd);
ndd              1004 drivers/nvdimm/label.c 		dev_dbg(ndd->dev, "allocated: %d\n", slot);
ndd              1006 drivers/nvdimm/label.c 		nd_label = to_label(ndd, slot);
ndd              1007 drivers/nvdimm/label.c 		memset(nd_label, 0, sizeof_namespace_label(ndd));
ndd              1019 drivers/nvdimm/label.c 		if (namespace_label_has(ndd, type_guid)) {
ndd              1038 drivers/nvdimm/label.c 		if (namespace_label_has(ndd, type_guid))
ndd              1040 drivers/nvdimm/label.c 		if (namespace_label_has(ndd, abstraction_guid))
ndd              1045 drivers/nvdimm/label.c 		if (namespace_label_has(ndd, checksum)) {
ndd              1050 drivers/nvdimm/label.c 					sizeof_namespace_label(ndd), 1);
ndd              1055 drivers/nvdimm/label.c 		offset = nd_label_offset(ndd, nd_label);
ndd              1056 drivers/nvdimm/label.c 		rc = nvdimm_set_config_data(ndd, offset, nd_label,
ndd              1057 drivers/nvdimm/label.c 				sizeof_namespace_label(ndd));
ndd              1064 drivers/nvdimm/label.c 		dev_dbg(ndd->dev, "free: %d\n", slot);
ndd              1065 drivers/nvdimm/label.c 		nd_label_free_slot(ndd, slot);
ndd              1069 drivers/nvdimm/label.c 	rc = nd_label_write_index(ndd, ndd->ns_next,
ndd              1115 drivers/nvdimm/label.c 		nd_label = to_label(ndd, slot);
ndd              1119 drivers/nvdimm/label.c 		res = to_resource(ndd, nd_label);
ndd              1145 drivers/nvdimm/label.c 	nd_label_copy(ndd, nsindex, to_current_namespace_index(ndd));
ndd              1158 drivers/nvdimm/label.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              1178 drivers/nvdimm/label.c 	if (ndd->ns_current == -1 || ndd->ns_next == -1)
ndd              1183 drivers/nvdimm/label.c 	nsindex = to_namespace_index(ndd, 0);
ndd              1184 drivers/nvdimm/label.c 	memset(nsindex, 0, ndd->nsarea.config_size);
ndd              1186 drivers/nvdimm/label.c 		int rc = nd_label_write_index(ndd, i, 3 - i, ND_NSINDEX_INIT);
ndd              1191 drivers/nvdimm/label.c 	ndd->ns_next = 1;
ndd              1192 drivers/nvdimm/label.c 	ndd->ns_current = 0;
ndd              1199 drivers/nvdimm/label.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              1212 drivers/nvdimm/label.c 	if (!preamble_next(ndd, &nsindex, &free, &nslot))
ndd              1226 drivers/nvdimm/label.c 		slot = to_slot(ndd, nd_label);
ndd              1227 drivers/nvdimm/label.c 		nd_label_free_slot(ndd, slot);
ndd              1228 drivers/nvdimm/label.c 		dev_dbg(ndd->dev, "free: %d\n", slot);
ndd              1236 drivers/nvdimm/label.c 		dev_dbg(ndd->dev, "no more active labels\n");
ndd              1240 drivers/nvdimm/label.c 	return nd_label_write_index(ndd, ndd->ns_next,
ndd              1251 drivers/nvdimm/label.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              1262 drivers/nvdimm/label.c 		for_each_dpa_resource(ndd, res)
ndd               131 drivers/nvdimm/label.h int nd_label_data_init(struct nvdimm_drvdata *ndd);
ndd               132 drivers/nvdimm/label.h size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd);
ndd               133 drivers/nvdimm/label.h int nd_label_active_count(struct nvdimm_drvdata *ndd);
ndd               134 drivers/nvdimm/label.h struct nd_namespace_label *nd_label_active(struct nvdimm_drvdata *ndd, int n);
ndd               135 drivers/nvdimm/label.h u32 nd_label_alloc_slot(struct nvdimm_drvdata *ndd);
ndd               136 drivers/nvdimm/label.h bool nd_label_free_slot(struct nvdimm_drvdata *ndd, u32 slot);
ndd               137 drivers/nvdimm/label.h u32 nd_label_nfree(struct nvdimm_drvdata *ndd);
ndd               298 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               306 drivers/nvdimm/namespace_devs.c 	for_each_dpa_resource(ndd, res)
ndd               316 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               321 drivers/nvdimm/namespace_devs.c 	if (!nsblk->uuid || !nsblk->lbasize || !ndd)
ndd               326 drivers/nvdimm/namespace_devs.c 	for_each_dpa_resource(ndd, res) {
ndd               345 drivers/nvdimm/namespace_devs.c 		for_each_dpa_resource(ndd, res)
ndd               451 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               459 drivers/nvdimm/namespace_devs.c 		for_each_dpa_resource(ndd, res)
ndd               468 drivers/nvdimm/namespace_devs.c 			nd_dbg_dpa(nd_region, ndd, res, "delete %d\n", rc);
ndd               469 drivers/nvdimm/namespace_devs.c 			nvdimm_free_dpa(ndd, res);
ndd               486 drivers/nvdimm/namespace_devs.c 		nd_dbg_dpa(nd_region, ndd, res, "shrink %d\n", rc);
ndd               526 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               538 drivers/nvdimm/namespace_devs.c 	res = nvdimm_allocate_dpa(ndd, label_id, first_dpa, n);
ndd               542 drivers/nvdimm/namespace_devs.c 	nd_dbg_dpa(nd_region, ndd, res, "init %d\n", rc);
ndd               563 drivers/nvdimm/namespace_devs.c static void space_valid(struct nd_region *nd_region, struct nvdimm_drvdata *ndd,
ndd               620 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               625 drivers/nvdimm/namespace_devs.c 	for_each_dpa_resource(ndd, res)
ndd               634 drivers/nvdimm/namespace_devs.c 	for_each_dpa_resource(ndd, res) {
ndd               651 drivers/nvdimm/namespace_devs.c 			space_valid(nd_region, ndd, label_id, NULL, next, exist,
ndd               662 drivers/nvdimm/namespace_devs.c 			space_valid(nd_region, ndd, label_id, res, next, exist,
ndd               673 drivers/nvdimm/namespace_devs.c 			space_valid(nd_region, ndd, label_id, res, next, exist,
ndd               721 drivers/nvdimm/namespace_devs.c 			new_res = nvdimm_allocate_dpa(ndd, label_id,
ndd               736 drivers/nvdimm/namespace_devs.c 		nd_dbg_dpa(nd_region, ndd, new_res, "%s(%d) %d\n",
ndd               761 drivers/nvdimm/namespace_devs.c 	if ((is_pmem || !ndd->dpa.child) && n == to_allocate)
ndd               769 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               775 drivers/nvdimm/namespace_devs.c 	for_each_dpa_resource(ndd, res) {
ndd               785 drivers/nvdimm/namespace_devs.c 		nvdimm_free_dpa(ndd, next);
ndd               787 drivers/nvdimm/namespace_devs.c 		nd_dbg_dpa(nd_region, ndd, res, "merge %d\n", rc);
ndd               837 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               840 drivers/nvdimm/namespace_devs.c 	for_each_dpa_resource_safe(ndd, res, _res)
ndd               842 drivers/nvdimm/namespace_devs.c 			nvdimm_free_dpa(ndd, res);
ndd               933 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               937 drivers/nvdimm/namespace_devs.c 		if (!ndd) {
ndd               945 drivers/nvdimm/namespace_devs.c 		for_each_dpa_resource(ndd, res)
ndd               976 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd;
ndd              1019 drivers/nvdimm/namespace_devs.c 		ndd = to_ndd(nd_mapping);
ndd              1025 drivers/nvdimm/namespace_devs.c 		if (!ndd)
ndd              1028 drivers/nvdimm/namespace_devs.c 		allocated += nvdimm_allocated_dpa(ndd, &label_id);
ndd              1241 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              1245 drivers/nvdimm/namespace_devs.c 		for_each_dpa_resource(ndd, res)
ndd              1424 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              1427 drivers/nvdimm/namespace_devs.c 		for_each_dpa_resource(ndd, res)
ndd              1445 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              1452 drivers/nvdimm/namespace_devs.c 		if (!ndd) {
ndd              1457 drivers/nvdimm/namespace_devs.c 		nsindex = to_namespace_index(ndd, ndd->ns_current);
ndd              1800 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              1821 drivers/nvdimm/namespace_devs.c 			if (namespace_label_has(ndd, type_guid)
ndd              1824 drivers/nvdimm/namespace_devs.c 				dev_dbg(ndd->dev, "expect type_guid %pUb got %pUb\n",
ndd              1831 drivers/nvdimm/namespace_devs.c 				dev_dbg(ndd->dev, "duplicate entry for uuid\n");
ndd              1857 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              1890 drivers/nvdimm/namespace_devs.c 					dev_name(ndd->dev), nd_label->uuid);
ndd              1985 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd;
ndd              2006 drivers/nvdimm/namespace_devs.c 		ndd = to_ndd(nd_mapping);
ndd              2007 drivers/nvdimm/namespace_devs.c 		if (namespace_label_has(ndd, abstraction_guid))
ndd              2038 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd, struct nd_namespace_blk *nsblk,
ndd              2051 drivers/nvdimm/namespace_devs.c 	for_each_dpa_resource(ndd, res)
ndd              2182 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              2197 drivers/nvdimm/namespace_devs.c 			res = nsblk_add_resource(nd_region, ndd,
ndd              2202 drivers/nvdimm/namespace_devs.c 			nd_dbg_dpa(nd_region, ndd, res, "%d assign\n", count);
ndd              2221 drivers/nvdimm/namespace_devs.c 	struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              2227 drivers/nvdimm/namespace_devs.c 	if (namespace_label_has(ndd, type_guid)) {
ndd              2229 drivers/nvdimm/namespace_devs.c 			dev_dbg(ndd->dev, "expect type_guid %pUb got %pUb\n",
ndd              2236 drivers/nvdimm/namespace_devs.c 			dev_dbg(ndd->dev, "expect cookie %#llx got %#llx\n",
ndd              2253 drivers/nvdimm/namespace_devs.c 	if (namespace_label_has(ndd, abstraction_guid))
ndd              2265 drivers/nvdimm/namespace_devs.c 	res = nsblk_add_resource(nd_region, ndd, nsblk,
ndd              2269 drivers/nvdimm/namespace_devs.c 	nd_dbg_dpa(nd_region, ndd, res, "%d: assign\n", count);
ndd              2344 drivers/nvdimm/namespace_devs.c 			struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              2347 drivers/nvdimm/namespace_devs.c 			nsindex = to_namespace_index(ndd, ndd->ns_current);
ndd              2473 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd = nd_mapping->ndd;
ndd              2480 drivers/nvdimm/namespace_devs.c 		put_ndd(ndd);
ndd              2481 drivers/nvdimm/namespace_devs.c 		nd_mapping->ndd = NULL;
ndd              2482 drivers/nvdimm/namespace_devs.c 		if (ndd)
ndd              2493 drivers/nvdimm/namespace_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd              2502 drivers/nvdimm/namespace_devs.c 		if (!ndd) {
ndd              2516 drivers/nvdimm/namespace_devs.c 		nd_mapping->ndd = ndd;
ndd              2518 drivers/nvdimm/namespace_devs.c 		get_ndd(ndd);
ndd              2520 drivers/nvdimm/namespace_devs.c 		count = nd_label_active_count(ndd);
ndd              2521 drivers/nvdimm/namespace_devs.c 		dev_dbg(ndd->dev, "count: %d\n", count);
ndd              2530 drivers/nvdimm/namespace_devs.c 			label = nd_label_active(ndd, j);
ndd               153 drivers/nvdimm/nd-core.h resource_size_t nvdimm_allocated_dpa(struct nvdimm_drvdata *ndd,
ndd               157 drivers/nvdimm/nd-core.h 		struct nvdimm_drvdata *ndd, struct nd_namespace_blk *nsblk,
ndd               159 drivers/nvdimm/nd-core.h int nvdimm_num_label_slots(struct nvdimm_drvdata *ndd);
ndd               160 drivers/nvdimm/nd-core.h void get_ndd(struct nvdimm_drvdata *ndd);
ndd                64 drivers/nvdimm/nd.h 		struct nvdimm_drvdata *ndd, int i)
ndd                69 drivers/nvdimm/nd.h 	return ndd->data + sizeof_namespace_index(ndd) * i;
ndd                73 drivers/nvdimm/nd.h 		struct nvdimm_drvdata *ndd)
ndd                75 drivers/nvdimm/nd.h 	return to_namespace_index(ndd, ndd->ns_current);
ndd                79 drivers/nvdimm/nd.h 		struct nvdimm_drvdata *ndd)
ndd                81 drivers/nvdimm/nd.h 	return to_namespace_index(ndd, ndd->ns_next);
ndd                84 drivers/nvdimm/nd.h unsigned sizeof_namespace_label(struct nvdimm_drvdata *ndd);
ndd                86 drivers/nvdimm/nd.h #define namespace_label_has(ndd, field) \
ndd                88 drivers/nvdimm/nd.h 		< sizeof_namespace_label(ndd))
ndd                96 drivers/nvdimm/nd.h #define for_each_dpa_resource(ndd, res) \
ndd                97 drivers/nvdimm/nd.h 	for (res = (ndd)->dpa.child; res; res = res->sibling)
ndd                99 drivers/nvdimm/nd.h #define for_each_dpa_resource_safe(ndd, res, next) \
ndd               100 drivers/nvdimm/nd.h 	for (res = (ndd)->dpa.child, next = res ? res->sibling : NULL; \
ndd               135 drivers/nvdimm/nd.h 	struct nvdimm_drvdata *ndd;
ndd               239 drivers/nvdimm/nd.h int nvdimm_init_nsarea(struct nvdimm_drvdata *ndd);
ndd               240 drivers/nvdimm/nd.h int nvdimm_init_config_data(struct nvdimm_drvdata *ndd);
ndd               241 drivers/nvdimm/nd.h int nvdimm_get_config_data(struct nvdimm_drvdata *ndd, void *buf,
ndd               243 drivers/nvdimm/nd.h int nvdimm_set_config_data(struct nvdimm_drvdata *ndd, size_t offset,
ndd               357 drivers/nvdimm/nd.h void put_ndd(struct nvdimm_drvdata *ndd);
ndd               358 drivers/nvdimm/nd.h int nd_label_reserve_dpa(struct nvdimm_drvdata *ndd);
ndd               359 drivers/nvdimm/nd.h void nvdimm_free_dpa(struct nvdimm_drvdata *ndd, struct resource *res);
ndd               360 drivers/nvdimm/nd.h struct resource *nvdimm_allocate_dpa(struct nvdimm_drvdata *ndd,
ndd               339 drivers/nvdimm/region_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               341 drivers/nvdimm/region_devs.c 		if (ndd) {
ndd               344 drivers/nvdimm/region_devs.c 			nsindex = to_namespace_index(ndd, ndd->ns_current);
ndd               371 drivers/nvdimm/region_devs.c 		struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
ndd               374 drivers/nvdimm/region_devs.c 		if (!ndd)