On Thu, 01 Dec 2022 13:33:26 -0800 Dan Williams <[email protected]> wrote:
> The 'struct cxl_nvdimm_bridge' object advertises platform CXL PMEM > resources. It coordinates with libnvdimm to attach nvdimm devices and > regions for each corresponding CXL object. That coordination is > complicated, i.e. difficult to reason about, and it turns out redundant. > It is already the case that the CXL core knows how to tear down a > cxl_region when a cxl_memdev goes through ->remove(), so that pathway > can be extended to directly cleanup cxl_nvdimm and cxl_pmem_region > objects. > > Towards the goal of ripping out the cxl_nvdimm_bridge state machine, > arrange for cxl_acpi to optionally pre-load the cxl_pmem driver so that > the nvdimm bridge is active synchronously with > devm_cxl_add_nvdimm_bridge(), and remove all the bind attributes for the > cxl_nvdimm* objects since the cxl root device and cxl_memdev bind > attributes are sufficient. > > Tested-by: Robert Richter <[email protected]> > Signed-off-by: Dan Williams <[email protected]> Seems reasonable and I can't see a disadvantage in doing this... Reviewed-by: Jonathan Cameron <[email protected]> > --- > drivers/cxl/acpi.c | 1 + > drivers/cxl/pmem.c | 9 +++++++++ > 2 files changed, 10 insertions(+) > > diff --git a/drivers/cxl/acpi.c b/drivers/cxl/acpi.c > index fb9f72813067..c540da0cbf1e 100644 > --- a/drivers/cxl/acpi.c > +++ b/drivers/cxl/acpi.c > @@ -539,3 +539,4 @@ module_platform_driver(cxl_acpi_driver); > MODULE_LICENSE("GPL v2"); > MODULE_IMPORT_NS(CXL); > MODULE_IMPORT_NS(ACPI); > +MODULE_SOFTDEP("pre: cxl_pmem"); > diff --git a/drivers/cxl/pmem.c b/drivers/cxl/pmem.c > index 4c627d67281a..946e171e7d4a 100644 > --- a/drivers/cxl/pmem.c > +++ b/drivers/cxl/pmem.c > @@ -99,6 +99,9 @@ static struct cxl_driver cxl_nvdimm_driver = { > .name = "cxl_nvdimm", > .probe = cxl_nvdimm_probe, > .id = CXL_DEVICE_NVDIMM, > + .drv = { > + .suppress_bind_attrs = true, > + }, > }; > > static int cxl_pmem_get_config_size(struct cxl_dev_state *cxlds, > @@ -360,6 +363,9 @@ static struct cxl_driver cxl_nvdimm_bridge_driver = { > .probe = cxl_nvdimm_bridge_probe, > .remove = cxl_nvdimm_bridge_remove, > .id = CXL_DEVICE_NVDIMM_BRIDGE, > + .drv = { > + .suppress_bind_attrs = true, > + }, > }; > > static int match_cxl_nvdimm(struct device *dev, void *data) > @@ -583,6 +589,9 @@ static struct cxl_driver cxl_pmem_region_driver = { > .name = "cxl_pmem_region", > .probe = cxl_pmem_region_probe, > .id = CXL_DEVICE_PMEM_REGION, > + .drv = { > + .suppress_bind_attrs = true, > + }, > }; > > /* >
