Lines Matching refs:dax_region
167 static bool is_static(struct dax_region *dax_region) in is_static() argument
169 return (dax_region->res.flags & IORESOURCE_DAX_STATIC) != 0; in is_static()
195 struct dax_region *dax_region = dev_dax->region; in dax_bus_probe() local
203 if (rc || is_static(dax_region)) in dax_bus_probe()
210 if (dax_region->seed == dev) in dax_bus_probe()
211 dax_region->seed = NULL; in dax_bus_probe()
251 struct dax_region *dax_region = dev_get_drvdata(dev); in id_show() local
253 return sprintf(buf, "%d\n", dax_region->id); in id_show()
260 struct dax_region *dax_region = dev_get_drvdata(dev); in region_size_show() local
263 resource_size(&dax_region->res)); in region_size_show()
271 struct dax_region *dax_region = dev_get_drvdata(dev); in region_align_show() local
273 return sprintf(buf, "%u\n", dax_region->align); in region_align_show()
278 #define for_each_dax_region_resource(dax_region, res) \ argument
279 for (res = (dax_region)->res.child; res; res = res->sibling)
281 static unsigned long long dax_region_avail_size(struct dax_region *dax_region) in dax_region_avail_size() argument
283 resource_size_t size = resource_size(&dax_region->res); in dax_region_avail_size()
286 device_lock_assert(dax_region->dev); in dax_region_avail_size()
288 for_each_dax_region_resource(dax_region, res) in dax_region_avail_size()
296 struct dax_region *dax_region = dev_get_drvdata(dev); in available_size_show() local
300 size = dax_region_avail_size(dax_region); in available_size_show()
310 struct dax_region *dax_region = dev_get_drvdata(dev); in seed_show() local
314 if (is_static(dax_region)) in seed_show()
318 seed = dax_region->seed; in seed_show()
329 struct dax_region *dax_region = dev_get_drvdata(dev); in create_show() local
333 if (is_static(dax_region)) in create_show()
337 youngest = dax_region->youngest; in create_show()
347 struct dax_region *dax_region = dev_get_drvdata(dev); in create_store() local
352 if (is_static(dax_region)) in create_store()
362 avail = dax_region_avail_size(dax_region); in create_store()
367 .dax_region = dax_region, in create_store()
383 if (!dax_region->seed) in create_store()
384 dax_region->seed = &dev_dax->dev; in create_store()
385 dax_region->youngest = &dev_dax->dev; in create_store()
417 struct dax_region *dax_region = dev_dax->region; in trim_dev_dax_range() local
419 device_lock_assert(dax_region->dev); in trim_dev_dax_range()
424 __release_region(&dax_region->res, range->start, range_len(range)); in trim_dev_dax_range()
452 struct dax_region *dax_region = dev_dax->region; in __free_dev_dax_id() local
458 if (is_static(dax_region) || dev_dax->id < 0) in __free_dev_dax_id()
460 ida_free(&dax_region->ida, dev_dax->id); in __free_dev_dax_id()
479 struct dax_region *dax_region = dev_get_drvdata(dev); in delete_store() local
485 if (is_static(dax_region)) in delete_store()
488 victim = device_find_child_by_name(dax_region->dev, buf); in delete_store()
507 if (dax_region->seed == victim) in delete_store()
508 dax_region->seed = NULL; in delete_store()
509 if (dax_region->youngest == victim) in delete_store()
510 dax_region->youngest = NULL; in delete_store()
530 struct dax_region *dax_region = dev_get_drvdata(dev); in dax_region_visible() local
532 if (is_static(dax_region)) in dax_region_visible()
565 struct dax_region *dax_region; in dax_region_free() local
567 dax_region = container_of(kref, struct dax_region, kref); in dax_region_free()
568 kfree(dax_region); in dax_region_free()
571 void dax_region_put(struct dax_region *dax_region) in dax_region_put() argument
573 kref_put(&dax_region->kref, dax_region_free); in dax_region_put()
579 struct dax_region *dax_region = region; in dax_region_unregister() local
581 sysfs_remove_groups(&dax_region->dev->kobj, in dax_region_unregister()
583 dax_region_put(dax_region); in dax_region_unregister()
586 struct dax_region *alloc_dax_region(struct device *parent, int region_id, in alloc_dax_region()
590 struct dax_region *dax_region; in alloc_dax_region() local
606 dax_region = kzalloc(sizeof(*dax_region), GFP_KERNEL); in alloc_dax_region()
607 if (!dax_region) in alloc_dax_region()
610 dev_set_drvdata(parent, dax_region); in alloc_dax_region()
611 kref_init(&dax_region->kref); in alloc_dax_region()
612 dax_region->id = region_id; in alloc_dax_region()
613 dax_region->align = align; in alloc_dax_region()
614 dax_region->dev = parent; in alloc_dax_region()
615 dax_region->target_node = target_node; in alloc_dax_region()
616 ida_init(&dax_region->ida); in alloc_dax_region()
617 dax_region->res = (struct resource) { in alloc_dax_region()
624 kfree(dax_region); in alloc_dax_region()
628 kref_get(&dax_region->kref); in alloc_dax_region()
629 if (devm_add_action_or_reset(parent, dax_region_unregister, dax_region)) in alloc_dax_region()
631 return dax_region; in alloc_dax_region()
649 struct dax_region *dax_region = dev_dax->region; in unregister_dax_mapping() local
653 device_lock_assert(dax_region->dev); in unregister_dax_mapping()
666 struct dax_region *dax_region = dev_dax->region; in get_dax_range() local
668 device_lock(dax_region->dev); in get_dax_range()
670 device_unlock(dax_region->dev); in get_dax_range()
681 struct dax_region *dax_region = dev_dax->region; in put_dax_range() local
683 device_unlock(dax_region->dev); in put_dax_range()
757 struct dax_region *dax_region = dev_dax->region; in devm_register_dax_mapping() local
762 device_lock_assert(dax_region->dev); in devm_register_dax_mapping()
764 if (dev_WARN_ONCE(&dev_dax->dev, !dax_region->dev->driver, in devm_register_dax_mapping()
789 rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_mapping, in devm_register_dax_mapping()
799 struct dax_region *dax_region = dev_dax->region; in alloc_dev_dax_range() local
800 struct resource *res = &dax_region->res; in alloc_dev_dax_range()
807 device_lock_assert(dax_region->dev); in alloc_dev_dax_range()
861 struct dax_region *dax_region = dev_dax->region; in adjust_dev_dax_range() local
867 device_lock_assert(dax_region->dev); in adjust_dev_dax_range()
913 struct dax_region *dax_region = dev_dax->region; in dev_dax_shrink() local
925 devm_release_action(dax_region->dev, in dev_dax_shrink()
934 for_each_dax_region_resource(dax_region, res) in dev_dax_shrink()
976 static ssize_t dev_dax_resize(struct dax_region *dax_region, in dev_dax_resize() argument
979 resource_size_t avail = dax_region_avail_size(dax_region), to_alloc; in dev_dax_resize()
981 struct resource *region_res = &dax_region->res; in dev_dax_resize()
1009 return alloc_dev_dax_range(dev_dax, dax_region->res.start, to_alloc); in dev_dax_resize()
1016 if (res == first && res->start > dax_region->res.start) { in dev_dax_resize()
1017 alloc = min(res->start - dax_region->res.start, to_alloc); in dev_dax_resize()
1018 rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, alloc); in dev_dax_resize()
1055 struct dax_region *dax_region = dev_dax->region; in size_store() local
1066 device_lock(dax_region->dev); in size_store()
1067 if (!dax_region->dev->driver) { in size_store()
1068 device_unlock(dax_region->dev); in size_store()
1072 rc = dev_dax_resize(dax_region, dev_dax, val); in size_store()
1074 device_unlock(dax_region->dev); in size_store()
1114 struct dax_region *dax_region = dev_dax->region; in mapping_store() local
1124 device_lock(dax_region->dev); in mapping_store()
1125 if (!dax_region->dev->driver) { in mapping_store()
1126 device_unlock(dax_region->dev); in mapping_store()
1135 device_unlock(dax_region->dev); in mapping_store()
1171 struct dax_region *dax_region = dev_dax->region; in align_store() local
1182 device_lock(dax_region->dev); in align_store()
1183 if (!dax_region->dev->driver) { in align_store()
1184 device_unlock(dax_region->dev); in align_store()
1201 device_unlock(dax_region->dev); in align_store()
1208 struct dax_region *dax_region = dev_dax->region; in dev_dax_target_node() local
1210 return dax_region->target_node; in dev_dax_target_node()
1226 struct dax_region *dax_region = dev_dax->region; in resource_show() local
1230 start = dax_region->res.start; in resource_show()
1260 struct dax_region *dax_region = dev_dax->region; in dev_dax_visible() local
1266 if (a == &dev_attr_mapping.attr && is_static(dax_region)) in dev_dax_visible()
1269 a == &dev_attr_size.attr) && is_static(dax_region)) in dev_dax_visible()
1298 struct dax_region *dax_region = dev_dax->region; in dev_dax_release() local
1303 dax_region_put(dax_region); in dev_dax_release()
1315 struct dax_region *dax_region = data->dax_region; in devm_create_dev_dax() local
1316 struct device *parent = dax_region->dev; in devm_create_dev_dax()
1327 if (is_static(dax_region)) { in devm_create_dev_dax()
1342 rc = ida_alloc(&dax_region->ida, GFP_KERNEL); in devm_create_dev_dax()
1348 dev_dax->region = dax_region; in devm_create_dev_dax()
1351 dev_set_name(dev, "dax%d.%d", dax_region->id, dev_dax->id); in devm_create_dev_dax()
1353 rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, data->size); in devm_create_dev_dax()
1358 dev_WARN_ONCE(parent, !is_static(dax_region), in devm_create_dev_dax()
1386 dev_dax->target_node = dax_region->target_node; in devm_create_dev_dax()
1387 dev_dax->align = dax_region->align; in devm_create_dev_dax()
1389 kref_get(&dax_region->kref); in devm_create_dev_dax()
1404 rc = devm_add_action_or_reset(dax_region->dev, unregister_dev_dax, dev); in devm_create_dev_dax()