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()
451 struct dax_region *dax_region; in dax_region_free() local
453 dax_region = container_of(kref, struct dax_region, kref); in dax_region_free()
454 kfree(dax_region); in dax_region_free()
457 static void dax_region_put(struct dax_region *dax_region) in dax_region_put() argument
459 kref_put(&dax_region->kref, dax_region_free); in dax_region_put()
466 struct dax_region *dax_region; in __free_dev_dax_id() local
473 dax_region = dev_dax->region; in __free_dev_dax_id()
474 ida_free(&dax_region->ida, dev_dax->id); in __free_dev_dax_id()
475 dax_region_put(dax_region); in __free_dev_dax_id()
493 struct dax_region *dax_region = dev_dax->region; in alloc_dev_dax_id() local
496 id = ida_alloc(&dax_region->ida, GFP_KERNEL); in alloc_dev_dax_id()
499 kref_get(&dax_region->kref); in alloc_dev_dax_id()
508 struct dax_region *dax_region = dev_get_drvdata(dev); in delete_store() local
514 if (is_static(dax_region)) in delete_store()
517 victim = device_find_child_by_name(dax_region->dev, buf); in delete_store()
536 if (dax_region->seed == victim) in delete_store()
537 dax_region->seed = NULL; in delete_store()
538 if (dax_region->youngest == victim) in delete_store()
539 dax_region->youngest = NULL; in delete_store()
559 struct dax_region *dax_region = dev_get_drvdata(dev); in dax_region_visible() local
561 if (is_static(dax_region)) in dax_region_visible()
594 struct dax_region *dax_region = region; in dax_region_unregister() local
596 sysfs_remove_groups(&dax_region->dev->kobj, in dax_region_unregister()
598 dax_region_put(dax_region); in dax_region_unregister()
601 struct dax_region *alloc_dax_region(struct device *parent, int region_id, in alloc_dax_region()
605 struct dax_region *dax_region; in alloc_dax_region() local
621 dax_region = kzalloc(sizeof(*dax_region), GFP_KERNEL); in alloc_dax_region()
622 if (!dax_region) in alloc_dax_region()
625 dev_set_drvdata(parent, dax_region); in alloc_dax_region()
626 kref_init(&dax_region->kref); in alloc_dax_region()
627 dax_region->id = region_id; in alloc_dax_region()
628 dax_region->align = align; in alloc_dax_region()
629 dax_region->dev = parent; in alloc_dax_region()
630 dax_region->target_node = target_node; in alloc_dax_region()
631 ida_init(&dax_region->ida); in alloc_dax_region()
632 dax_region->res = (struct resource) { in alloc_dax_region()
639 kfree(dax_region); in alloc_dax_region()
643 if (devm_add_action_or_reset(parent, dax_region_unregister, dax_region)) in alloc_dax_region()
645 return dax_region; in alloc_dax_region()
665 struct dax_region *dax_region = dev_dax->region; in unregister_dax_mapping() local
669 device_lock_assert(dax_region->dev); in unregister_dax_mapping()
681 struct dax_region *dax_region = dev_dax->region; in get_dax_range() local
683 device_lock(dax_region->dev); in get_dax_range()
685 device_unlock(dax_region->dev); in get_dax_range()
696 struct dax_region *dax_region = dev_dax->region; in put_dax_range() local
698 device_unlock(dax_region->dev); in put_dax_range()
772 struct dax_region *dax_region = dev_dax->region; in devm_register_dax_mapping() local
777 device_lock_assert(dax_region->dev); in devm_register_dax_mapping()
779 if (dev_WARN_ONCE(&dev_dax->dev, !dax_region->dev->driver, in devm_register_dax_mapping()
805 rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_mapping, in devm_register_dax_mapping()
815 struct dax_region *dax_region = dev_dax->region; in alloc_dev_dax_range() local
816 struct resource *res = &dax_region->res; in alloc_dev_dax_range()
823 device_lock_assert(dax_region->dev); in alloc_dev_dax_range()
877 struct dax_region *dax_region = dev_dax->region; in adjust_dev_dax_range() local
883 device_lock_assert(dax_region->dev); in adjust_dev_dax_range()
929 struct dax_region *dax_region = dev_dax->region; in dev_dax_shrink() local
941 devm_release_action(dax_region->dev, in dev_dax_shrink()
950 for_each_dax_region_resource(dax_region, res) in dev_dax_shrink()
992 static ssize_t dev_dax_resize(struct dax_region *dax_region, in dev_dax_resize() argument
995 resource_size_t avail = dax_region_avail_size(dax_region), to_alloc; in dev_dax_resize()
997 struct resource *region_res = &dax_region->res; in dev_dax_resize()
1025 return alloc_dev_dax_range(dev_dax, dax_region->res.start, to_alloc); in dev_dax_resize()
1032 if (res == first && res->start > dax_region->res.start) { in dev_dax_resize()
1033 alloc = min(res->start - dax_region->res.start, to_alloc); in dev_dax_resize()
1034 rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, alloc); in dev_dax_resize()
1071 struct dax_region *dax_region = dev_dax->region; in size_store() local
1082 device_lock(dax_region->dev); in size_store()
1083 if (!dax_region->dev->driver) { in size_store()
1084 device_unlock(dax_region->dev); in size_store()
1088 rc = dev_dax_resize(dax_region, dev_dax, val); in size_store()
1090 device_unlock(dax_region->dev); in size_store()
1130 struct dax_region *dax_region = dev_dax->region; in mapping_store() local
1140 device_lock(dax_region->dev); in mapping_store()
1141 if (!dax_region->dev->driver) { in mapping_store()
1142 device_unlock(dax_region->dev); in mapping_store()
1151 device_unlock(dax_region->dev); in mapping_store()
1187 struct dax_region *dax_region = dev_dax->region; in align_store() local
1198 device_lock(dax_region->dev); in align_store()
1199 if (!dax_region->dev->driver) { in align_store()
1200 device_unlock(dax_region->dev); in align_store()
1217 device_unlock(dax_region->dev); in align_store()
1224 struct dax_region *dax_region = dev_dax->region; in dev_dax_target_node() local
1226 return dax_region->target_node; in dev_dax_target_node()
1242 struct dax_region *dax_region = dev_dax->region; in resource_show() local
1246 start = dax_region->res.start; in resource_show()
1276 struct dax_region *dax_region = dev_dax->region; in dev_dax_visible() local
1282 if (a == &dev_attr_mapping.attr && is_static(dax_region)) in dev_dax_visible()
1285 a == &dev_attr_size.attr) && is_static(dax_region)) in dev_dax_visible()
1329 struct dax_region *dax_region = data->dax_region; in devm_create_dev_dax() local
1330 struct device *parent = dax_region->dev; in devm_create_dev_dax()
1341 dev_dax->region = dax_region; in devm_create_dev_dax()
1342 if (is_static(dax_region)) { in devm_create_dev_dax()
1364 dev_set_name(dev, "dax%d.%d", dax_region->id, dev_dax->id); in devm_create_dev_dax()
1366 rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, data->size); in devm_create_dev_dax()
1371 dev_WARN_ONCE(parent, !is_static(dax_region), in devm_create_dev_dax()
1399 dev_dax->target_node = dax_region->target_node; in devm_create_dev_dax()
1400 dev_dax->align = dax_region->align; in devm_create_dev_dax()
1416 rc = devm_add_action_or_reset(dax_region->dev, unregister_dev_dax, dev); in devm_create_dev_dax()