Skip to content

Commit 644685a

Browse files
committed
cxl/test: Adjust the mock version of devm_cxl_switch_port_decoders_setup()
With devm_cxl_switch_port_decoders_setup() being called within cxl_core instead of by the port driver probe, adjustments are needed to deal with circular symbol dependency when this function is being mock'd. Add the appropriate changes to get around the circular dependency. Reviewed-by: Alison Schofield <alison.schofield@intel.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
1 parent d96eb90 commit 644685a

6 files changed

Lines changed: 25 additions & 7 deletions

File tree

drivers/cxl/core/hdm.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1216,12 +1216,12 @@ static int devm_cxl_enumerate_decoders(struct cxl_hdm *cxlhdm,
12161216
}
12171217

12181218
/**
1219-
* devm_cxl_switch_port_decoders_setup - allocate and setup switch decoders
1219+
* __devm_cxl_switch_port_decoders_setup - allocate and setup switch decoders
12201220
* @port: CXL port context
12211221
*
12221222
* Return 0 or -errno on error
12231223
*/
1224-
int devm_cxl_switch_port_decoders_setup(struct cxl_port *port)
1224+
int __devm_cxl_switch_port_decoders_setup(struct cxl_port *port)
12251225
{
12261226
struct cxl_hdm *cxlhdm;
12271227

@@ -1245,7 +1245,7 @@ int devm_cxl_switch_port_decoders_setup(struct cxl_port *port)
12451245
dev_err(&port->dev, "HDM decoder capability not found\n");
12461246
return -ENXIO;
12471247
}
1248-
EXPORT_SYMBOL_NS_GPL(devm_cxl_switch_port_decoders_setup, "CXL");
1248+
EXPORT_SYMBOL_NS_GPL(__devm_cxl_switch_port_decoders_setup, "CXL");
12491249

12501250
/**
12511251
* devm_cxl_endpoint_decoders_setup - allocate and setup endpoint decoders

drivers/cxl/cxl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,7 @@ struct cxl_endpoint_dvsec_info {
811811
};
812812

813813
int devm_cxl_switch_port_decoders_setup(struct cxl_port *port);
814+
int __devm_cxl_switch_port_decoders_setup(struct cxl_port *port);
814815
int devm_cxl_endpoint_decoders_setup(struct cxl_port *port);
815816

816817
struct cxl_dev_state;
@@ -934,6 +935,7 @@ u16 cxl_gpf_get_dvsec(struct device *dev);
934935
#ifndef CXL_TEST_ENABLE
935936
#define DECLARE_TESTABLE(x) __##x
936937
#define devm_cxl_add_dport_by_dev DECLARE_TESTABLE(devm_cxl_add_dport_by_dev)
938+
#define devm_cxl_switch_port_decoders_setup DECLARE_TESTABLE(devm_cxl_switch_port_decoders_setup)
937939
#endif
938940

939941
#endif /* __CXL_H__ */

tools/testing/cxl/Kbuild

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ ldflags-y += --wrap=devm_cxl_add_rch_dport
1010
ldflags-y += --wrap=cxl_rcd_component_reg_phys
1111
ldflags-y += --wrap=cxl_endpoint_parse_cdat
1212
ldflags-y += --wrap=cxl_dport_init_ras_reporting
13-
ldflags-y += --wrap=devm_cxl_switch_port_decoders_setup
1413
ldflags-y += --wrap=devm_cxl_endpoint_decoders_setup
1514

1615
DRIVERS := ../../../drivers

tools/testing/cxl/cxl_core_exports.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,13 @@ struct cxl_dport *devm_cxl_add_dport_by_dev(struct cxl_port *port,
1717
return _devm_cxl_add_dport_by_dev(port, dport_dev);
1818
}
1919
EXPORT_SYMBOL_NS_GPL(devm_cxl_add_dport_by_dev, "CXL");
20+
21+
cxl_switch_decoders_setup_fn _devm_cxl_switch_port_decoders_setup =
22+
__devm_cxl_switch_port_decoders_setup;
23+
EXPORT_SYMBOL_NS_GPL(_devm_cxl_switch_port_decoders_setup, "CXL");
24+
25+
int devm_cxl_switch_port_decoders_setup(struct cxl_port *port)
26+
{
27+
return _devm_cxl_switch_port_decoders_setup(port);
28+
}
29+
EXPORT_SYMBOL_NS_GPL(devm_cxl_switch_port_decoders_setup, "CXL");

tools/testing/cxl/exports.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,7 @@ typedef struct cxl_dport *(*cxl_add_dport_by_dev_fn)(struct cxl_port *port,
77
struct device *dport_dev);
88
extern cxl_add_dport_by_dev_fn _devm_cxl_add_dport_by_dev;
99

10+
typedef int(*cxl_switch_decoders_setup_fn)(struct cxl_port *port);
11+
extern cxl_switch_decoders_setup_fn _devm_cxl_switch_port_decoders_setup;
12+
1013
#endif

tools/testing/cxl/test/mock.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,23 @@ static LIST_HEAD(mock);
1717
static struct cxl_dport *
1818
redirect_devm_cxl_add_dport_by_dev(struct cxl_port *port,
1919
struct device *dport_dev);
20+
static int redirect_devm_cxl_switch_port_decoders_setup(struct cxl_port *port);
2021

2122
void register_cxl_mock_ops(struct cxl_mock_ops *ops)
2223
{
2324
list_add_rcu(&ops->list, &mock);
2425
_devm_cxl_add_dport_by_dev = redirect_devm_cxl_add_dport_by_dev;
26+
_devm_cxl_switch_port_decoders_setup =
27+
redirect_devm_cxl_switch_port_decoders_setup;
2528
}
2629
EXPORT_SYMBOL_GPL(register_cxl_mock_ops);
2730

2831
DEFINE_STATIC_SRCU(cxl_mock_srcu);
2932

3033
void unregister_cxl_mock_ops(struct cxl_mock_ops *ops)
3134
{
35+
_devm_cxl_switch_port_decoders_setup =
36+
__devm_cxl_switch_port_decoders_setup;
3237
_devm_cxl_add_dport_by_dev = __devm_cxl_add_dport_by_dev;
3338
list_del_rcu(&ops->list);
3439
synchronize_srcu(&cxl_mock_srcu);
@@ -138,20 +143,19 @@ __wrap_nvdimm_bus_register(struct device *dev,
138143
}
139144
EXPORT_SYMBOL_GPL(__wrap_nvdimm_bus_register);
140145

141-
int __wrap_devm_cxl_switch_port_decoders_setup(struct cxl_port *port)
146+
int redirect_devm_cxl_switch_port_decoders_setup(struct cxl_port *port)
142147
{
143148
int rc, index;
144149
struct cxl_mock_ops *ops = get_cxl_mock_ops(&index);
145150

146151
if (ops && ops->is_mock_port(port->uport_dev))
147152
rc = ops->devm_cxl_switch_port_decoders_setup(port);
148153
else
149-
rc = devm_cxl_switch_port_decoders_setup(port);
154+
rc = __devm_cxl_switch_port_decoders_setup(port);
150155
put_cxl_mock_ops(index);
151156

152157
return rc;
153158
}
154-
EXPORT_SYMBOL_NS_GPL(__wrap_devm_cxl_switch_port_decoders_setup, "CXL");
155159

156160
int __wrap_devm_cxl_endpoint_decoders_setup(struct cxl_port *port)
157161
{

0 commit comments

Comments
 (0)