mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
dax/cxl, hmem: Initialize hmem early and defer dax_cxl binding
Move hmem/ earlier in the dax Makefile so that hmem_init() runs before dax_cxl. In addition, defer registration of the dax_cxl driver to a workqueue instead of using module_cxl_driver(). This ensures that dax_hmem has an opportunity to initialize and register its deferred callback and make ownership decisions before dax_cxl begins probing and claiming Soft Reserved ranges. Mark the dax_cxl driver as PROBE_PREFER_ASYNCHRONOUS so its probe runs out of line from other synchronous probing avoiding ordering dependencies while coordinating ownership decisions with dax_hmem. Signed-off-by: Smita Koralahalli <Smita.KoralahalliChannabasappa@amd.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Tested-by: Tomasz Wolski <tomasz.wolski@fujitsu.com> Link: https://patch.msgid.link/20260322195343.206900-6-Smita.KoralahalliChannabasappa@amd.com Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
This commit is contained in:
parent
edfcf1e21e
commit
39aa1d4be1
|
|
@ -1,4 +1,5 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
obj-y += hmem/
|
||||
obj-$(CONFIG_DAX) += dax.o
|
||||
obj-$(CONFIG_DEV_DAX) += device_dax.o
|
||||
obj-$(CONFIG_DEV_DAX_KMEM) += kmem.o
|
||||
|
|
@ -10,5 +11,3 @@ dax-y += bus.o
|
|||
device_dax-y := device.o
|
||||
dax_pmem-y := pmem.o
|
||||
dax_cxl-y := cxl.o
|
||||
|
||||
obj-y += hmem/
|
||||
|
|
|
|||
|
|
@ -38,10 +38,35 @@ static struct cxl_driver cxl_dax_region_driver = {
|
|||
.id = CXL_DEVICE_DAX_REGION,
|
||||
.drv = {
|
||||
.suppress_bind_attrs = true,
|
||||
.probe_type = PROBE_PREFER_ASYNCHRONOUS,
|
||||
},
|
||||
};
|
||||
|
||||
module_cxl_driver(cxl_dax_region_driver);
|
||||
static void cxl_dax_region_driver_register(struct work_struct *work)
|
||||
{
|
||||
cxl_driver_register(&cxl_dax_region_driver);
|
||||
}
|
||||
|
||||
static DECLARE_WORK(cxl_dax_region_driver_work, cxl_dax_region_driver_register);
|
||||
|
||||
static int __init cxl_dax_region_init(void)
|
||||
{
|
||||
/*
|
||||
* Need to resolve a race with dax_hmem wanting to drive regions
|
||||
* instead of CXL
|
||||
*/
|
||||
queue_work(system_long_wq, &cxl_dax_region_driver_work);
|
||||
return 0;
|
||||
}
|
||||
module_init(cxl_dax_region_init);
|
||||
|
||||
static void __exit cxl_dax_region_exit(void)
|
||||
{
|
||||
flush_work(&cxl_dax_region_driver_work);
|
||||
cxl_driver_unregister(&cxl_dax_region_driver);
|
||||
}
|
||||
module_exit(cxl_dax_region_exit);
|
||||
|
||||
MODULE_ALIAS_CXL(CXL_DEVICE_DAX_REGION);
|
||||
MODULE_DESCRIPTION("CXL DAX: direct access to CXL regions");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user