Lines Matching refs:nd_region

26 	struct nd_region *nd_region = to_nd_region(dev->parent);  in namespace_pmem_release()  local
29 ida_simple_remove(&nd_region->ns_ida, nspm->id); in namespace_pmem_release()
89 struct nd_region *nd_region = to_nd_region(dev->parent); in pmem_should_map_pages() local
96 if (!test_bit(ND_REGION_PAGEMAP, &nd_region->flags)) in pmem_should_map_pages()
141 struct nd_region *nd_region = to_nd_region(ndns->dev.parent); in nvdimm_namespace_disk_name() local
158 sprintf(name, "pmem%d.%d%s", nd_region->id, nsidx, in nvdimm_namespace_disk_name()
161 sprintf(name, "pmem%d%s", nd_region->id, in nvdimm_namespace_disk_name()
185 struct nd_region *nd_region = to_nd_region(dev->parent); in nstype_show() local
187 return sprintf(buf, "%d\n", nd_region_to_nstype(nd_region)); in nstype_show()
232 static int nd_namespace_label_update(struct nd_region *nd_region, in nd_namespace_label_update() argument
253 return nd_pmem_namespace_label_update(nd_region, nspm, size); in nd_namespace_label_update()
261 struct nd_region *nd_region = to_nd_region(dev->parent); in alt_name_store() local
269 rc = nd_namespace_label_update(nd_region, dev); in alt_name_store()
293 static int scan_free(struct nd_region *nd_region, in scan_free() argument
313 nd_dbg_dpa(nd_region, ndd, res, "delete %d\n", rc); in scan_free()
322 nd_dbg_dpa(nd_region, ndd, res, "shrink %d\n", rc); in scan_free()
340 static int shrink_dpa_allocation(struct nd_region *nd_region, in shrink_dpa_allocation() argument
345 for (i = 0; i < nd_region->ndr_mappings; i++) { in shrink_dpa_allocation()
346 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in shrink_dpa_allocation()
349 rc = scan_free(nd_region, nd_mapping, label_id, n); in shrink_dpa_allocation()
358 struct nd_region *nd_region, struct nd_mapping *nd_mapping, in init_dpa_allocation() argument
370 nd_dbg_dpa(nd_region, ndd, res, "init %d\n", rc); in init_dpa_allocation()
391 static void space_valid(struct nd_region *nd_region, struct nvdimm_drvdata *ndd, in space_valid() argument
399 align = nd_region->align / nd_region->ndr_mappings; in space_valid()
431 static resource_size_t scan_allocate(struct nd_region *nd_region, in scan_allocate() argument
467 space_valid(nd_region, ndd, label_id, NULL, next, exist, in scan_allocate()
478 space_valid(nd_region, ndd, label_id, res, next, exist, in scan_allocate()
489 space_valid(nd_region, ndd, label_id, res, next, exist, in scan_allocate()
548 nd_dbg_dpa(nd_region, ndd, new_res, "%s(%d) %d\n", in scan_allocate()
569 return init_dpa_allocation(label_id, nd_region, nd_mapping, n); in scan_allocate()
573 static int merge_dpa(struct nd_region *nd_region, in merge_dpa() argument
594 nd_dbg_dpa(nd_region, ndd, res, "merge %d\n", rc); in merge_dpa()
607 struct nd_region *nd_region; in __reserve_free_pmem() local
614 nd_region = to_nd_region(dev); in __reserve_free_pmem()
615 if (nd_region->ndr_mappings == 0) in __reserve_free_pmem()
620 for (i = 0; i < nd_region->ndr_mappings; i++) { in __reserve_free_pmem()
621 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in __reserve_free_pmem()
627 n = nd_pmem_available_dpa(nd_region, nd_mapping); in __reserve_free_pmem()
630 rem = scan_allocate(nd_region, nd_mapping, &label_id, n); in __reserve_free_pmem()
631 dev_WARN_ONCE(&nd_region->dev, rem, in __reserve_free_pmem()
665 static int grow_dpa_allocation(struct nd_region *nd_region, in grow_dpa_allocation() argument
670 for (i = 0; i < nd_region->ndr_mappings; i++) { in grow_dpa_allocation()
671 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in grow_dpa_allocation()
675 rem = scan_allocate(nd_region, nd_mapping, label_id, rem); in grow_dpa_allocation()
676 dev_WARN_ONCE(&nd_region->dev, rem, in grow_dpa_allocation()
683 rc = merge_dpa(nd_region, nd_mapping, label_id); in grow_dpa_allocation()
691 static void nd_namespace_pmem_set_resource(struct nd_region *nd_region, in nd_namespace_pmem_set_resource() argument
703 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; in nd_namespace_pmem_set_resource()
719 * nd_region->ndr_mappings; in nd_namespace_pmem_set_resource()
728 res->start = nd_region->ndr_start + offset; in nd_namespace_pmem_set_resource()
745 struct nd_region *nd_region = to_nd_region(dev->parent); in __size_store() local
770 if (nd_region->ndr_mappings == 0) { in __size_store()
775 div_u64_rem(val, nd_region->align, &remainder); in __size_store()
778 nd_region->align / SZ_1K); in __size_store()
783 for (i = 0; i < nd_region->ndr_mappings; i++) { in __size_store()
784 nd_mapping = &nd_region->mapping[i]; in __size_store()
796 available = nd_region_allocatable_dpa(nd_region); in __size_store()
804 val = div_u64(val, nd_region->ndr_mappings); in __size_store()
805 allocated = div_u64(allocated, nd_region->ndr_mappings); in __size_store()
807 rc = shrink_dpa_allocation(nd_region, &label_id, in __size_store()
810 rc = grow_dpa_allocation(nd_region, &label_id, val - allocated); in __size_store()
818 nd_namespace_pmem_set_resource(nd_region, nspm, in __size_store()
819 val * nd_region->ndr_mappings); in __size_store()
828 if (val == 0 && id != 0 && nd_region->ns_seed != dev && !ndns->claim) in __size_store()
837 struct nd_region *nd_region = to_nd_region(dev->parent); in size_store() local
850 rc = nd_namespace_label_update(nd_region, dev); in size_store()
902 struct nd_region *nd_region = to_nd_region(dev->parent); in nvdimm_namespace_locked() local
904 for (i = 0; i < nd_region->ndr_mappings; i++) { in nvdimm_namespace_locked()
905 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in nvdimm_namespace_locked()
954 static int namespace_update_uuid(struct nd_region *nd_region, in namespace_update_uuid() argument
974 for (i = 0; i < nd_region->ndr_mappings; i++) { in namespace_update_uuid()
975 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in namespace_update_uuid()
990 for (i = 0; i < nd_region->ndr_mappings; i++) { in namespace_update_uuid()
991 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in namespace_update_uuid()
1026 struct nd_region *nd_region = to_nd_region(dev->parent); in uuid_store() local
1046 rc = namespace_update_uuid(nd_region, dev, uuid, ns_uuid); in uuid_store()
1048 rc = nd_namespace_label_update(nd_region, dev); in uuid_store()
1100 struct nd_region *nd_region = to_nd_region(dev->parent); in sector_size_store() local
1120 rc = nd_namespace_label_update(nd_region, dev); in sector_size_store()
1133 struct nd_region *nd_region = to_nd_region(dev->parent); in dpa_extents_show() local
1151 for (i = 0; i < nd_region->ndr_mappings; i++) { in dpa_extents_show()
1152 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in dpa_extents_show()
1169 struct nd_region *nd_region = to_nd_region(dev->parent); in btt_claim_class() local
1172 for (i = 0; i < nd_region->ndr_mappings; i++) { in btt_claim_class()
1173 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in btt_claim_class()
1270 struct nd_region *nd_region = to_nd_region(dev->parent); in holder_class_store() local
1278 rc = nd_namespace_label_update(nd_region, dev); in holder_class_store()
1524 static struct device **create_namespace_io(struct nd_region *nd_region) in create_namespace_io() argument
1542 dev->parent = &nd_region->dev; in create_namespace_io()
1544 res->name = dev_name(&nd_region->dev); in create_namespace_io()
1546 res->start = nd_region->ndr_start; in create_namespace_io()
1547 res->end = res->start + nd_region->ndr_size - 1; in create_namespace_io()
1553 static bool has_uuid_at_pos(struct nd_region *nd_region, const uuid_t *uuid, in has_uuid_at_pos() argument
1559 for (i = 0; i < nd_region->ndr_mappings; i++) { in has_uuid_at_pos()
1560 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in has_uuid_at_pos()
1561 struct nd_interleave_set *nd_set = nd_region->nd_set; in has_uuid_at_pos()
1589 if (!nsl_validate_nlabel(nd_region, ndd, nd_label)) in has_uuid_at_pos()
1602 static int select_pmem_id(struct nd_region *nd_region, const uuid_t *pmem_id) in select_pmem_id() argument
1609 for (i = 0; i < nd_region->ndr_mappings; i++) { in select_pmem_id()
1610 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in select_pmem_id()
1643 dev_dbg(&nd_region->dev, "%s invalid label for %pUb\n", in select_pmem_id()
1661 static struct device *create_namespace_pmem(struct nd_region *nd_region, in create_namespace_pmem() argument
1668 u64 cookie = nd_region_interleave_set_cookie(nd_region, nsindex); in create_namespace_pmem()
1669 u64 altcookie = nd_region_interleave_set_altcookie(nd_region); in create_namespace_pmem()
1680 dev_dbg(&nd_region->dev, "invalid interleave-set-cookie\n"); in create_namespace_pmem()
1685 dev_dbg(&nd_region->dev, "invalid cookie in label: %pUb\n", in create_namespace_pmem()
1690 dev_dbg(&nd_region->dev, "valid altcookie in label: %pUb\n", in create_namespace_pmem()
1701 dev->parent = &nd_region->dev; in create_namespace_pmem()
1703 res->name = dev_name(&nd_region->dev); in create_namespace_pmem()
1706 for (i = 0; i < nd_region->ndr_mappings; i++) { in create_namespace_pmem()
1708 if (has_uuid_at_pos(nd_region, &uuid, cookie, i)) in create_namespace_pmem()
1710 if (has_uuid_at_pos(nd_region, &uuid, altcookie, i)) in create_namespace_pmem()
1715 if (i < nd_region->ndr_mappings) { in create_namespace_pmem()
1716 struct nvdimm *nvdimm = nd_region->mapping[i].nvdimm; in create_namespace_pmem()
1723 dev_err(&nd_region->dev, "%s missing label for %pUb\n", in create_namespace_pmem()
1735 rc = select_pmem_id(nd_region, &uuid); in create_namespace_pmem()
1740 for (i = 0; i < nd_region->ndr_mappings; i++) { in create_namespace_pmem()
1744 nd_mapping = &nd_region->mapping[i]; in create_namespace_pmem()
1773 nd_namespace_pmem_set_resource(nd_region, nspm, size); in create_namespace_pmem()
1780 dev_dbg(&nd_region->dev, "invalid label(s)\n"); in create_namespace_pmem()
1783 dev_dbg(&nd_region->dev, "label not found\n"); in create_namespace_pmem()
1786 dev_dbg(&nd_region->dev, "unexpected err: %d\n", rc); in create_namespace_pmem()
1792 static struct device *nd_namespace_pmem_create(struct nd_region *nd_region) in nd_namespace_pmem_create() argument
1798 if (!is_memory(&nd_region->dev)) in nd_namespace_pmem_create()
1807 dev->parent = &nd_region->dev; in nd_namespace_pmem_create()
1809 res->name = dev_name(&nd_region->dev); in nd_namespace_pmem_create()
1812 nspm->id = ida_simple_get(&nd_region->ns_ida, 0, 0, GFP_KERNEL); in nd_namespace_pmem_create()
1817 dev_set_name(dev, "namespace%d.%d", nd_region->id, nspm->id); in nd_namespace_pmem_create()
1818 nd_namespace_pmem_set_resource(nd_region, nspm, 0); in nd_namespace_pmem_create()
1825 void nd_region_create_ns_seed(struct nd_region *nd_region) in nd_region_create_ns_seed() argument
1827 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); in nd_region_create_ns_seed()
1829 if (nd_region_to_nstype(nd_region) == ND_DEVICE_NAMESPACE_IO) in nd_region_create_ns_seed()
1832 nd_region->ns_seed = nd_namespace_pmem_create(nd_region); in nd_region_create_ns_seed()
1838 if (!nd_region->ns_seed) in nd_region_create_ns_seed()
1839 dev_err(&nd_region->dev, "failed to create namespace\n"); in nd_region_create_ns_seed()
1841 device_initialize(nd_region->ns_seed); in nd_region_create_ns_seed()
1842 lockdep_set_class(&nd_region->ns_seed->mutex, in nd_region_create_ns_seed()
1844 nd_device_register(nd_region->ns_seed); in nd_region_create_ns_seed()
1848 void nd_region_create_dax_seed(struct nd_region *nd_region) in nd_region_create_dax_seed() argument
1850 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); in nd_region_create_dax_seed()
1851 nd_region->dax_seed = nd_dax_create(nd_region); in nd_region_create_dax_seed()
1856 if (!nd_region->dax_seed) in nd_region_create_dax_seed()
1857 dev_err(&nd_region->dev, "failed to create dax namespace\n"); in nd_region_create_dax_seed()
1860 void nd_region_create_pfn_seed(struct nd_region *nd_region) in nd_region_create_pfn_seed() argument
1862 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); in nd_region_create_pfn_seed()
1863 nd_region->pfn_seed = nd_pfn_create(nd_region); in nd_region_create_pfn_seed()
1868 if (!nd_region->pfn_seed) in nd_region_create_pfn_seed()
1869 dev_err(&nd_region->dev, "failed to create pfn namespace\n"); in nd_region_create_pfn_seed()
1872 void nd_region_create_btt_seed(struct nd_region *nd_region) in nd_region_create_btt_seed() argument
1874 WARN_ON(!is_nvdimm_bus_locked(&nd_region->dev)); in nd_region_create_btt_seed()
1875 nd_region->btt_seed = nd_btt_create(nd_region); in nd_region_create_btt_seed()
1880 if (!nd_region->btt_seed) in nd_region_create_btt_seed()
1881 dev_err(&nd_region->dev, "failed to create btt namespace\n"); in nd_region_create_btt_seed()
1884 static int add_namespace_resource(struct nd_region *nd_region, in add_namespace_resource() argument
1888 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; in add_namespace_resource()
1902 dev_err(&nd_region->dev, in add_namespace_resource()
1926 static struct device **scan_labels(struct nd_region *nd_region) in scan_labels() argument
1931 struct nd_mapping *nd_mapping = &nd_region->mapping[0]; in scan_labels()
1948 i = add_namespace_resource(nd_region, nd_label, devs, count); in scan_labels()
1960 dev = create_namespace_pmem(nd_region, nd_mapping, nd_label); in scan_labels()
1977 dev_dbg(&nd_region->dev, "discovered %d namespace%s\n", count, in scan_labels()
1995 nd_namespace_pmem_set_resource(nd_region, nspm, 0); in scan_labels()
1996 dev->parent = &nd_region->dev; in scan_labels()
1998 } else if (is_memory(&nd_region->dev)) { in scan_labels()
2000 for (i = 0; i < nd_region->ndr_mappings; i++) { in scan_labels()
2005 nd_mapping = &nd_region->mapping[i]; in scan_labels()
2036 static struct device **create_namespaces(struct nd_region *nd_region) in create_namespaces() argument
2042 if (nd_region->ndr_mappings == 0) in create_namespaces()
2046 for (i = 0; i < nd_region->ndr_mappings; i++) { in create_namespaces()
2047 nd_mapping = &nd_region->mapping[i]; in create_namespaces()
2051 devs = scan_labels(nd_region); in create_namespaces()
2053 for (i = 0; i < nd_region->ndr_mappings; i++) { in create_namespaces()
2054 int reverse = nd_region->ndr_mappings - 1 - i; in create_namespaces()
2056 nd_mapping = &nd_region->mapping[reverse]; in create_namespaces()
2065 struct nd_region *nd_region = region; in deactivate_labels() local
2068 for (i = 0; i < nd_region->ndr_mappings; i++) { in deactivate_labels()
2069 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in deactivate_labels()
2084 static int init_active_labels(struct nd_region *nd_region) in init_active_labels() argument
2088 for (i = 0; i < nd_region->ndr_mappings; i++) { in init_active_labels()
2089 struct nd_mapping *nd_mapping = &nd_region->mapping[i]; in init_active_labels()
2107 dev_err(&nd_region->dev, "%s: is %s, failing probe\n", in init_active_labels()
2140 if (i < nd_region->ndr_mappings) in init_active_labels()
2145 deactivate_labels(nd_region); in init_active_labels()
2149 return devm_add_action_or_reset(&nd_region->dev, deactivate_labels, in init_active_labels()
2150 nd_region); in init_active_labels()
2153 int nd_region_register_namespaces(struct nd_region *nd_region, int *err) in nd_region_register_namespaces() argument
2159 nvdimm_bus_lock(&nd_region->dev); in nd_region_register_namespaces()
2160 rc = init_active_labels(nd_region); in nd_region_register_namespaces()
2162 nvdimm_bus_unlock(&nd_region->dev); in nd_region_register_namespaces()
2166 type = nd_region_to_nstype(nd_region); in nd_region_register_namespaces()
2169 devs = create_namespace_io(nd_region); in nd_region_register_namespaces()
2172 devs = create_namespaces(nd_region); in nd_region_register_namespaces()
2177 nvdimm_bus_unlock(&nd_region->dev); in nd_region_register_namespaces()
2190 id = ida_simple_get(&nd_region->ns_ida, 0, 0, in nd_region_register_namespaces()
2198 dev_set_name(dev, "namespace%d.%d", nd_region->id, id); in nd_region_register_namespaces()
2204 nd_region->ns_seed = devs[0]; in nd_region_register_namespaces()