Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

dax: Track all dax_region allocations under a global resource tree

Introduce a global "DAX Regions" resource root and register each
dax_region->res under it via request_resource(). Release the resource on
dax_region teardown.

By enforcing a single global namespace for dax_region allocations, this
ensures only one of dax_hmem or dax_cxl can successfully register a
dax_region for a given range.

Suggested-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Smita Koralahalli <Smita.KoralahalliChannabasappa@amd.com>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Link: https://patch.msgid.link/20260322195343.206900-7-Smita.KoralahalliChannabasappa@amd.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>

authored by

Smita Koralahalli and committed by
Dave Jiang
34f80bb9 39aa1d4b

+17 -3
+17 -3
drivers/dax/bus.c
··· 10 10 #include "dax-private.h" 11 11 #include "bus.h" 12 12 13 + static struct resource dax_regions = DEFINE_RES_MEM_NAMED(0, -1, "DAX Regions"); 13 14 static DEFINE_MUTEX(dax_bus_lock); 14 15 15 16 /* ··· 628 627 629 628 sysfs_remove_groups(&dax_region->dev->kobj, 630 629 dax_region_attribute_groups); 630 + release_resource(&dax_region->res); 631 631 dax_region_put(dax_region); 632 632 } 633 633 ··· 637 635 unsigned long flags) 638 636 { 639 637 struct dax_region *dax_region; 638 + int rc; 640 639 641 640 /* 642 641 * The DAX core assumes that it can store its private data in ··· 670 667 .flags = IORESOURCE_MEM | flags, 671 668 }; 672 669 673 - if (sysfs_create_groups(&parent->kobj, dax_region_attribute_groups)) { 674 - dax_region_put(dax_region); 675 - return NULL; 670 + rc = request_resource(&dax_regions, &dax_region->res); 671 + if (rc) { 672 + dev_dbg(parent, "dax_region resource conflict for %pR\n", 673 + &dax_region->res); 674 + goto err_res; 676 675 } 676 + 677 + if (sysfs_create_groups(&parent->kobj, dax_region_attribute_groups)) 678 + goto err_sysfs; 677 679 678 680 if (devm_add_action_or_reset(parent, dax_region_unregister, dax_region)) 679 681 return NULL; 680 682 return dax_region; 683 + 684 + err_sysfs: 685 + release_resource(&dax_region->res); 686 + err_res: 687 + dax_region_put(dax_region); 688 + return NULL; 681 689 } 682 690 EXPORT_SYMBOL_GPL(alloc_dax_region); 683 691