Message ID | 166993040668.1882361.7450361097265836752.stgit@dwillia2-xfh.jf.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | cb9cfff82f6a862c1f54b8b01d9d9a979bb8ae78 |
Headers | show |
Series | cxl: Add support for Restricted CXL hosts (RCD mode) | expand |
On Thu, 01 Dec 2022 13:33:26 -0800 Dan Williams <dan.j.williams@intel.com> 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 <rrichter@amd.com> > Signed-off-by: Dan Williams <dan.j.williams@intel.com> Seems reasonable and I can't see a disadvantage in doing this... Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > 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, > + }, > }; > > /* >
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, + }, }; /*