Lines Matching refs:dax_region

134 static bool is_static(struct dax_region *dax_region)  in is_static()  argument
136 return (dax_region->res.flags & IORESOURCE_DAX_STATIC) != 0; in is_static()
156 struct dax_region *dax_region = dev_dax->region; in dax_bus_probe() local
164 if (rc || is_static(dax_region)) in dax_bus_probe()
171 if (dax_region->seed == dev) in dax_bus_probe()
172 dax_region->seed = NULL; in dax_bus_probe()
216 struct dax_region *dax_region = dev_get_drvdata(dev); in id_show() local
218 return sprintf(buf, "%d\n", dax_region->id); in id_show()
225 struct dax_region *dax_region = dev_get_drvdata(dev); in region_size_show() local
228 resource_size(&dax_region->res)); in region_size_show()
236 struct dax_region *dax_region = dev_get_drvdata(dev); in region_align_show() local
238 return sprintf(buf, "%u\n", dax_region->align); in region_align_show()
243 #define for_each_dax_region_resource(dax_region, res) \ argument
244 for (res = (dax_region)->res.child; res; res = res->sibling)
246 static unsigned long long dax_region_avail_size(struct dax_region *dax_region) in dax_region_avail_size() argument
248 resource_size_t size = resource_size(&dax_region->res); in dax_region_avail_size()
251 device_lock_assert(dax_region->dev); in dax_region_avail_size()
253 for_each_dax_region_resource(dax_region, res) in dax_region_avail_size()
261 struct dax_region *dax_region = dev_get_drvdata(dev); in available_size_show() local
265 size = dax_region_avail_size(dax_region); in available_size_show()
275 struct dax_region *dax_region = dev_get_drvdata(dev); in seed_show() local
279 if (is_static(dax_region)) in seed_show()
283 seed = dax_region->seed; in seed_show()
294 struct dax_region *dax_region = dev_get_drvdata(dev); in create_show() local
298 if (is_static(dax_region)) in create_show()
302 youngest = dax_region->youngest; in create_show()
312 struct dax_region *dax_region = dev_get_drvdata(dev); in create_store() local
317 if (is_static(dax_region)) in create_store()
327 avail = dax_region_avail_size(dax_region); in create_store()
332 .dax_region = dax_region, in create_store()
348 if (!dax_region->seed) in create_store()
349 dax_region->seed = &dev_dax->dev; in create_store()
350 dax_region->youngest = &dev_dax->dev; in create_store()
374 struct dax_region *dax_region = dev_dax->region; in trim_dev_dax_range() local
376 device_lock_assert(dax_region->dev); in trim_dev_dax_range()
381 __release_region(&dax_region->res, range->start, range_len(range)); in trim_dev_dax_range()
409 struct dax_region *dax_region = dev_dax->region; in __free_dev_dax_id() local
415 if (is_static(dax_region) || dev_dax->id < 0) in __free_dev_dax_id()
417 ida_free(&dax_region->ida, dev_dax->id); in __free_dev_dax_id()
436 struct dax_region *dax_region = dev_get_drvdata(dev); in delete_store() local
442 if (is_static(dax_region)) in delete_store()
445 victim = device_find_child_by_name(dax_region->dev, buf); in delete_store()
464 if (dax_region->seed == victim) in delete_store()
465 dax_region->seed = NULL; in delete_store()
466 if (dax_region->youngest == victim) in delete_store()
467 dax_region->youngest = NULL; in delete_store()
487 struct dax_region *dax_region = dev_get_drvdata(dev); in dax_region_visible() local
489 if (is_static(dax_region)) in dax_region_visible()
522 struct dax_region *dax_region; in dax_region_free() local
524 dax_region = container_of(kref, struct dax_region, kref); in dax_region_free()
525 kfree(dax_region); in dax_region_free()
528 void dax_region_put(struct dax_region *dax_region) in dax_region_put() argument
530 kref_put(&dax_region->kref, dax_region_free); in dax_region_put()
536 struct dax_region *dax_region = region; in dax_region_unregister() local
538 sysfs_remove_groups(&dax_region->dev->kobj, in dax_region_unregister()
540 dax_region_put(dax_region); in dax_region_unregister()
543 struct dax_region *alloc_dax_region(struct device *parent, int region_id, in alloc_dax_region()
547 struct dax_region *dax_region; in alloc_dax_region() local
563 dax_region = kzalloc(sizeof(*dax_region), GFP_KERNEL); in alloc_dax_region()
564 if (!dax_region) in alloc_dax_region()
567 dev_set_drvdata(parent, dax_region); in alloc_dax_region()
568 kref_init(&dax_region->kref); in alloc_dax_region()
569 dax_region->id = region_id; in alloc_dax_region()
570 dax_region->align = align; in alloc_dax_region()
571 dax_region->dev = parent; in alloc_dax_region()
572 dax_region->target_node = target_node; in alloc_dax_region()
573 ida_init(&dax_region->ida); in alloc_dax_region()
574 dax_region->res = (struct resource) { in alloc_dax_region()
581 kfree(dax_region); in alloc_dax_region()
585 kref_get(&dax_region->kref); in alloc_dax_region()
586 if (devm_add_action_or_reset(parent, dax_region_unregister, dax_region)) in alloc_dax_region()
588 return dax_region; in alloc_dax_region()
606 struct dax_region *dax_region = dev_dax->region; in unregister_dax_mapping() local
610 device_lock_assert(dax_region->dev); in unregister_dax_mapping()
623 struct dax_region *dax_region = dev_dax->region; in get_dax_range() local
625 device_lock(dax_region->dev); in get_dax_range()
627 device_unlock(dax_region->dev); in get_dax_range()
638 struct dax_region *dax_region = dev_dax->region; in put_dax_range() local
640 device_unlock(dax_region->dev); in put_dax_range()
714 struct dax_region *dax_region = dev_dax->region; in devm_register_dax_mapping() local
719 device_lock_assert(dax_region->dev); in devm_register_dax_mapping()
721 if (dev_WARN_ONCE(&dev_dax->dev, !dax_region->dev->driver, in devm_register_dax_mapping()
746 rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_mapping, in devm_register_dax_mapping()
756 struct dax_region *dax_region = dev_dax->region; in alloc_dev_dax_range() local
757 struct resource *res = &dax_region->res; in alloc_dev_dax_range()
764 device_lock_assert(dax_region->dev); in alloc_dev_dax_range()
826 struct dax_region *dax_region = dev_dax->region; in adjust_dev_dax_range() local
832 device_lock_assert(dax_region->dev); in adjust_dev_dax_range()
878 struct dax_region *dax_region = dev_dax->region; in dev_dax_shrink() local
890 devm_release_action(dax_region->dev, in dev_dax_shrink()
899 for_each_dax_region_resource(dax_region, res) in dev_dax_shrink()
941 static ssize_t dev_dax_resize(struct dax_region *dax_region, in dev_dax_resize() argument
944 resource_size_t avail = dax_region_avail_size(dax_region), to_alloc; in dev_dax_resize()
946 struct resource *region_res = &dax_region->res; in dev_dax_resize()
974 return alloc_dev_dax_range(dev_dax, dax_region->res.start, to_alloc); in dev_dax_resize()
981 if (res == first && res->start > dax_region->res.start) { in dev_dax_resize()
982 alloc = min(res->start - dax_region->res.start, to_alloc); in dev_dax_resize()
983 rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, alloc); in dev_dax_resize()
1020 struct dax_region *dax_region = dev_dax->region; in size_store() local
1031 device_lock(dax_region->dev); in size_store()
1032 if (!dax_region->dev->driver) { in size_store()
1033 device_unlock(dax_region->dev); in size_store()
1037 rc = dev_dax_resize(dax_region, dev_dax, val); in size_store()
1039 device_unlock(dax_region->dev); in size_store()
1079 struct dax_region *dax_region = dev_dax->region; in mapping_store() local
1089 device_lock(dax_region->dev); in mapping_store()
1090 if (!dax_region->dev->driver) { in mapping_store()
1091 device_unlock(dax_region->dev); in mapping_store()
1100 device_unlock(dax_region->dev); in mapping_store()
1143 struct dax_region *dax_region = dev_dax->region; in align_store() local
1154 device_lock(dax_region->dev); in align_store()
1155 if (!dax_region->dev->driver) { in align_store()
1156 device_unlock(dax_region->dev); in align_store()
1173 device_unlock(dax_region->dev); in align_store()
1180 struct dax_region *dax_region = dev_dax->region; in dev_dax_target_node() local
1182 return dax_region->target_node; in dev_dax_target_node()
1198 struct dax_region *dax_region = dev_dax->region; in resource_show() local
1202 start = dax_region->res.start; in resource_show()
1232 struct dax_region *dax_region = dev_dax->region; in dev_dax_visible() local
1238 if (a == &dev_attr_mapping.attr && is_static(dax_region)) in dev_dax_visible()
1241 a == &dev_attr_size.attr) && is_static(dax_region)) in dev_dax_visible()
1270 struct dax_region *dax_region = dev_dax->region; in dev_dax_release() local
1275 dax_region_put(dax_region); in dev_dax_release()
1287 struct dax_region *dax_region = data->dax_region; in devm_create_dev_dax() local
1288 struct device *parent = dax_region->dev; in devm_create_dev_dax()
1299 if (is_static(dax_region)) { in devm_create_dev_dax()
1314 rc = ida_alloc(&dax_region->ida, GFP_KERNEL); in devm_create_dev_dax()
1320 dev_dax->region = dax_region; in devm_create_dev_dax()
1323 dev_set_name(dev, "dax%d.%d", dax_region->id, dev_dax->id); in devm_create_dev_dax()
1325 rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, data->size); in devm_create_dev_dax()
1330 dev_WARN_ONCE(parent, !is_static(dax_region), in devm_create_dev_dax()
1355 dev_dax->target_node = dax_region->target_node; in devm_create_dev_dax()
1356 dev_dax->align = dax_region->align; in devm_create_dev_dax()
1358 kref_get(&dax_region->kref); in devm_create_dev_dax()
1376 rc = devm_add_action_or_reset(dax_region->dev, unregister_dev_dax, dev); in devm_create_dev_dax()