Skip to content

Commit 4cc3d2f

Browse files
davejiangSasha Levin
authored andcommitted
cxl: Move devm_cxl_add_nvdimm_bridge() to cxl_pmem.ko
[ Upstream commit e7e222a ] Moving the symbol devm_cxl_add_nvdimm_bridge() to drivers/cxl/cxl_pmem.c, so that cxl_pmem can export a symbol that gives cxl_acpi a depedency on cxl_pmem kernel module. This is a prepatory patch to resolve the issue of a race for nvdimm_bus object that is created during cxl_acpi_probe(). No functional changes besides moving code. Suggested-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Ira Weiny <ira.weiny@intel.com> Tested-by: Alison Schofield <alison.schofield@intel.com> Reviewed-by: Alison Schofield <alison.schofield@intel.com?> Link: https://patch.msgid.link/20260205001633.1813643-2-dave.jiang@intel.com Signed-off-by: Dave Jiang <dave.jiang@intel.com> Stable-dep-of: 96a1fd0 ("cxl: Fix race of nvdimm_bus object when creating nvdimm objects") Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 4083114 commit 4cc3d2f

File tree

3 files changed

+19
-10
lines changed

3 files changed

+19
-10
lines changed

drivers/cxl/core/pmem.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,8 @@ static void unregister_nvb(void *_cxl_nvb)
115115
device_unregister(&cxl_nvb->dev);
116116
}
117117

118-
/**
119-
* devm_cxl_add_nvdimm_bridge() - add the root of a LIBNVDIMM topology
120-
* @host: platform firmware root device
121-
* @port: CXL port at the root of a CXL topology
122-
*
123-
* Return: bridge device that can host cxl_nvdimm objects
124-
*/
125-
struct cxl_nvdimm_bridge *devm_cxl_add_nvdimm_bridge(struct device *host,
126-
struct cxl_port *port)
118+
struct cxl_nvdimm_bridge *__devm_cxl_add_nvdimm_bridge(struct device *host,
119+
struct cxl_port *port)
127120
{
128121
struct cxl_nvdimm_bridge *cxl_nvb;
129122
struct device *dev;
@@ -155,7 +148,7 @@ struct cxl_nvdimm_bridge *devm_cxl_add_nvdimm_bridge(struct device *host,
155148
put_device(dev);
156149
return ERR_PTR(rc);
157150
}
158-
EXPORT_SYMBOL_NS_GPL(devm_cxl_add_nvdimm_bridge, "CXL");
151+
EXPORT_SYMBOL_FOR_MODULES(__devm_cxl_add_nvdimm_bridge, "cxl_pmem");
159152

160153
static void cxl_nvdimm_release(struct device *dev)
161154
{

drivers/cxl/cxl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,8 @@ void cxl_driver_unregister(struct cxl_driver *cxl_drv);
893893
struct cxl_nvdimm_bridge *to_cxl_nvdimm_bridge(struct device *dev);
894894
struct cxl_nvdimm_bridge *devm_cxl_add_nvdimm_bridge(struct device *host,
895895
struct cxl_port *port);
896+
struct cxl_nvdimm_bridge *__devm_cxl_add_nvdimm_bridge(struct device *host,
897+
struct cxl_port *port);
896898
struct cxl_nvdimm *to_cxl_nvdimm(struct device *dev);
897899
bool is_cxl_nvdimm(struct device *dev);
898900
int devm_cxl_add_nvdimm(struct cxl_port *parent_port, struct cxl_memdev *cxlmd);

drivers/cxl/pmem.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,20 @@
1313

1414
static __read_mostly DECLARE_BITMAP(exclusive_cmds, CXL_MEM_COMMAND_ID_MAX);
1515

16+
/**
17+
* __devm_cxl_add_nvdimm_bridge() - add the root of a LIBNVDIMM topology
18+
* @host: platform firmware root device
19+
* @port: CXL port at the root of a CXL topology
20+
*
21+
* Return: bridge device that can host cxl_nvdimm objects
22+
*/
23+
struct cxl_nvdimm_bridge *devm_cxl_add_nvdimm_bridge(struct device *host,
24+
struct cxl_port *port)
25+
{
26+
return __devm_cxl_add_nvdimm_bridge(host, port);
27+
}
28+
EXPORT_SYMBOL_NS_GPL(devm_cxl_add_nvdimm_bridge, "CXL");
29+
1630
static void clear_exclusive(void *mds)
1731
{
1832
clear_exclusive_cxl_commands(mds, exclusive_cmds);

0 commit comments

Comments
 (0)