Lines Matching defs:dax_region
167 static bool is_static(struct dax_region *dax_region)
169 return (dax_region->res.flags & IORESOURCE_DAX_STATIC) != 0;
195 struct dax_region *dax_region = dev_dax->region;
203 if (rc || is_static(dax_region))
210 if (dax_region->seed == dev)
211 dax_region->seed = NULL;
251 struct dax_region *dax_region = dev_get_drvdata(dev);
253 return sprintf(buf, "%d\n", dax_region->id);
260 struct dax_region *dax_region = dev_get_drvdata(dev);
263 resource_size(&dax_region->res));
271 struct dax_region *dax_region = dev_get_drvdata(dev);
273 return sprintf(buf, "%u\n", dax_region->align);
278 #define for_each_dax_region_resource(dax_region, res) \
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)
283 resource_size_t size = resource_size(&dax_region->res);
286 device_lock_assert(dax_region->dev);
288 for_each_dax_region_resource(dax_region, res)
296 struct dax_region *dax_region = dev_get_drvdata(dev);
300 size = dax_region_avail_size(dax_region);
310 struct dax_region *dax_region = dev_get_drvdata(dev);
314 if (is_static(dax_region))
318 seed = dax_region->seed;
329 struct dax_region *dax_region = dev_get_drvdata(dev);
333 if (is_static(dax_region))
337 youngest = dax_region->youngest;
347 struct dax_region *dax_region = dev_get_drvdata(dev);
352 if (is_static(dax_region))
362 avail = dax_region_avail_size(dax_region);
367 .dax_region = dax_region,
383 if (!dax_region->seed)
384 dax_region->seed = &dev_dax->dev;
385 dax_region->youngest = &dev_dax->dev;
417 struct dax_region *dax_region = dev_dax->region;
419 device_lock_assert(dax_region->dev);
424 __release_region(&dax_region->res, range->start, range_len(range));
451 struct dax_region *dax_region;
453 dax_region = container_of(kref, struct dax_region, kref);
454 kfree(dax_region);
457 static void dax_region_put(struct dax_region *dax_region)
459 kref_put(&dax_region->kref, dax_region_free);
466 struct dax_region *dax_region;
473 dax_region = dev_dax->region;
474 ida_free(&dax_region->ida, dev_dax->id);
475 dax_region_put(dax_region);
493 struct dax_region *dax_region = dev_dax->region;
496 id = ida_alloc(&dax_region->ida, GFP_KERNEL);
499 kref_get(&dax_region->kref);
508 struct dax_region *dax_region = dev_get_drvdata(dev);
514 if (is_static(dax_region))
517 victim = device_find_child_by_name(dax_region->dev, buf);
531 * dax_region is registered.
536 if (dax_region->seed == victim)
537 dax_region->seed = NULL;
538 if (dax_region->youngest == victim)
539 dax_region->youngest = NULL;
559 struct dax_region *dax_region = dev_get_drvdata(dev);
561 if (is_static(dax_region))
582 .name = "dax_region",
594 struct dax_region *dax_region = region;
596 sysfs_remove_groups(&dax_region->dev->kobj,
598 dax_region_put(dax_region);
601 struct dax_region *alloc_dax_region(struct device *parent, int region_id,
605 struct dax_region *dax_region;
621 dax_region = kzalloc(sizeof(*dax_region), GFP_KERNEL);
622 if (!dax_region)
625 dev_set_drvdata(parent, dax_region);
626 kref_init(&dax_region->kref);
627 dax_region->id = region_id;
628 dax_region->align = align;
629 dax_region->dev = parent;
630 dax_region->target_node = target_node;
631 ida_init(&dax_region->ida);
632 dax_region->res = (struct resource) {
639 kfree(dax_region);
643 if (devm_add_action_or_reset(parent, dax_region_unregister, dax_region))
645 return dax_region;
665 struct dax_region *dax_region = dev_dax->region;
669 device_lock_assert(dax_region->dev);
681 struct dax_region *dax_region = dev_dax->region;
683 device_lock(dax_region->dev);
685 device_unlock(dax_region->dev);
696 struct dax_region *dax_region = dev_dax->region;
698 device_unlock(dax_region->dev);
772 struct dax_region *dax_region = dev_dax->region;
777 device_lock_assert(dax_region->dev);
779 if (dev_WARN_ONCE(&dev_dax->dev, !dax_region->dev->driver,
805 rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_mapping,
815 struct dax_region *dax_region = dev_dax->region;
816 struct resource *res = &dax_region->res;
823 device_lock_assert(dax_region->dev);
877 struct dax_region *dax_region = dev_dax->region;
883 device_lock_assert(dax_region->dev);
929 struct dax_region *dax_region = dev_dax->region;
941 devm_release_action(dax_region->dev,
950 for_each_dax_region_resource(dax_region, res)
992 static ssize_t dev_dax_resize(struct dax_region *dax_region,
995 resource_size_t avail = dax_region_avail_size(dax_region), to_alloc;
997 struct resource *region_res = &dax_region->res;
1025 return alloc_dev_dax_range(dev_dax, dax_region->res.start, to_alloc);
1032 if (res == first && res->start > dax_region->res.start) {
1033 alloc = min(res->start - dax_region->res.start, to_alloc);
1034 rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, alloc);
1071 struct dax_region *dax_region = dev_dax->region;
1082 device_lock(dax_region->dev);
1083 if (!dax_region->dev->driver) {
1084 device_unlock(dax_region->dev);
1088 rc = dev_dax_resize(dax_region, dev_dax, val);
1090 device_unlock(dax_region->dev);
1130 struct dax_region *dax_region = dev_dax->region;
1140 device_lock(dax_region->dev);
1141 if (!dax_region->dev->driver) {
1142 device_unlock(dax_region->dev);
1151 device_unlock(dax_region->dev);
1187 struct dax_region *dax_region = dev_dax->region;
1198 device_lock(dax_region->dev);
1199 if (!dax_region->dev->driver) {
1200 device_unlock(dax_region->dev);
1217 device_unlock(dax_region->dev);
1224 struct dax_region *dax_region = dev_dax->region;
1226 return dax_region->target_node;
1242 struct dax_region *dax_region = dev_dax->region;
1246 start = dax_region->res.start;
1276 struct dax_region *dax_region = dev_dax->region;
1282 if (a == &dev_attr_mapping.attr && is_static(dax_region))
1285 a == &dev_attr_size.attr) && is_static(dax_region))
1329 struct dax_region *dax_region = data->dax_region;
1330 struct device *parent = dax_region->dev;
1341 dev_dax->region = dax_region;
1342 if (is_static(dax_region)) {
1364 dev_set_name(dev, "dax%d.%d", dax_region->id, dev_dax->id);
1366 rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, data->size);
1371 dev_WARN_ONCE(parent, !is_static(dax_region),
1372 "custom dev_pagemap requires a static dax_region\n");
1399 dev_dax->target_node = dax_region->target_node;
1400 dev_dax->align = dax_region->align;
1416 rc = devm_add_action_or_reset(dax_region->dev, unregister_dev_dax, dev);