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)