dax_region
static ssize_t dev_dax_resize(struct dax_region *dax_region,
resource_size_t avail = dax_region_avail_size(dax_region), to_alloc;
struct resource *region_res = &dax_region->res;
return alloc_dev_dax_range(dev_dax, dax_region->res.start, to_alloc);
if (res == first && res->start > dax_region->res.start) {
alloc = min(res->start - dax_region->res.start, to_alloc);
rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, alloc);
struct dax_region *dax_region = dev_dax->region;
if (!dax_region->dev->driver) {
rc = dev_dax_resize(dax_region, dev_dax, val);
struct dax_region *dax_region = dev_dax->region;
if (!dax_region->dev->driver) {
struct dax_region *dax_region = dev_dax->region;
if (!dax_region->dev->driver) {
struct dax_region *dax_region = dev_dax->region;
return dax_region->target_node;
struct dax_region *dax_region = dev_dax->region;
start = dax_region->res.start;
struct dax_region *dax_region = dev_dax->region;
if (a == &dev_attr_mapping.attr && is_static(dax_region))
a == &dev_attr_size.attr) && is_static(dax_region))
struct dax_region *dax_region = data->dax_region;
struct device *parent = dax_region->dev;
dev_dax->region = dax_region;
if (is_static(dax_region)) {
dev_set_name(dev, "dax%d.%d", dax_region->id, dev_dax->id);
rc = alloc_dev_dax_range(dev_dax, dax_region->res.start, data->size);
dev_WARN_ONCE(parent, !is_static(dax_region),
dev_dax->target_node = dax_region->target_node;
dev_dax->align = dax_region->align;
rc = devm_add_action_or_reset(dax_region->dev, unregister_dev_dax, dev);
static bool is_static(struct dax_region *dax_region)
return (dax_region->res.flags & IORESOURCE_DAX_STATIC) != 0;
struct dax_region *dax_region = dev_dax->region;
if (rc || is_static(dax_region))
if (dax_region->seed == dev)
dax_region->seed = NULL;
struct dax_region *dax_region = dev_get_drvdata(dev);
return sysfs_emit(buf, "%d\n", dax_region->id);
struct dax_region *dax_region = dev_get_drvdata(dev);
(unsigned long long)resource_size(&dax_region->res));
struct dax_region *dax_region = dev_get_drvdata(dev);
return sysfs_emit(buf, "%u\n", dax_region->align);
#define for_each_dax_region_resource(dax_region, res) \
for (res = (dax_region)->res.child; res; res = res->sibling)
static unsigned long long dax_region_avail_size(struct dax_region *dax_region)
resource_size_t size = resource_size(&dax_region->res);
for_each_dax_region_resource(dax_region, res)
struct dax_region *dax_region = dev_get_drvdata(dev);
size = dax_region_avail_size(dax_region);
struct dax_region *dax_region = dev_get_drvdata(dev);
if (is_static(dax_region))
seed = dax_region->seed;
struct dax_region *dax_region = dev_get_drvdata(dev);
if (is_static(dax_region))
youngest = dax_region->youngest;
struct dax_region *dax_region = dev_get_drvdata(dev);
if (is_static(dax_region))
avail = dax_region_avail_size(dax_region);
.dax_region = dax_region,
if (!dax_region->seed)
dax_region->seed = &dev_dax->dev;
dax_region->youngest = &dev_dax->dev;
struct dax_region *dax_region = dev_dax->region;
__release_region(&dax_region->res, range->start, range_len(range));
struct dax_region *dax_region;
dax_region = container_of(kref, struct dax_region, kref);
kfree(dax_region);
static void dax_region_put(struct dax_region *dax_region)
kref_put(&dax_region->kref, dax_region_free);
struct dax_region *dax_region;
dax_region = dev_dax->region;
ida_free(&dax_region->ida, dev_dax->id);
dax_region_put(dax_region);
struct dax_region *dax_region = dev_dax->region;
id = ida_alloc(&dax_region->ida, GFP_KERNEL);
kref_get(&dax_region->kref);
struct dax_region *dax_region = dev_get_drvdata(dev);
if (is_static(dax_region))
victim = device_find_child_by_name(dax_region->dev, buf);
if (dax_region->seed == victim)
dax_region->seed = NULL;
if (dax_region->youngest == victim)
dax_region->youngest = NULL;
struct dax_region *dax_region = dev_get_drvdata(dev);
if (is_static(dax_region))
struct dax_region *dax_region = region;
sysfs_remove_groups(&dax_region->dev->kobj,
dax_region_put(dax_region);
struct dax_region *alloc_dax_region(struct device *parent, int region_id,
struct dax_region *dax_region;
dax_region = kzalloc_obj(*dax_region);
if (!dax_region)
dev_set_drvdata(parent, dax_region);
kref_init(&dax_region->kref);
dax_region->id = region_id;
dax_region->align = align;
dax_region->dev = parent;
dax_region->target_node = target_node;
ida_init(&dax_region->ida);
dax_region->res = (struct resource) {
kfree(dax_region);
if (devm_add_action_or_reset(parent, dax_region_unregister, dax_region))
return dax_region;
struct dax_region *dax_region = dev_dax->region;
if (dev_WARN_ONCE(&dev_dax->dev, !dax_region->dev->driver,
rc = devm_add_action_or_reset(dax_region->dev, unregister_dax_mapping,
struct dax_region *dax_region = dev_dax->region;
struct resource *res = &dax_region->res;
struct dax_region *dax_region = dev_dax->region;
devm_release_action(dax_region->dev,
for_each_dax_region_resource(dax_region, res)
struct dax_region;
struct dax_region *alloc_dax_region(struct device *parent, int region_id,
struct dax_region *dax_region;
struct dax_region *dax_region;
dax_region = alloc_dax_region(dev, cxlr->id, &cxlr_dax->hpa_range, nid,
if (!dax_region)
.dax_region = dax_region,
struct dax_region *region;
struct dax_region *dax_region;
dax_region = alloc_dax_region(dev, pdev->id, &mri->range,
if (!dax_region)
.dax_region = dax_region,
struct dax_region *dax_region;
dax_region = alloc_dax_region(dev, region_id, &range,
if (!dax_region)
.dax_region = dax_region,