tools/testing/cxl/test/mock.c

Source file repositories/reference/linux-study-clean/tools/testing/cxl/test/mock.c

File Facts

System
Linux kernel
Corpus path
tools/testing/cxl/test/mock.c
Extension
.c
Size
7639 bytes
Lines
308
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

if (!IS_ERR(dport)) {
			dport->rcrb.base = rcrb;
			dport->rch = true;
		}
	} else
		dport = devm_cxl_add_rch_dport(port, dport_dev, port_id, rcrb);
	put_cxl_mock_ops(index);

	return dport;
}
EXPORT_SYMBOL_NS_GPL(__wrap_devm_cxl_add_rch_dport, "CXL");

void __wrap_cxl_endpoint_parse_cdat(struct cxl_port *port)
{
	int index;
	struct cxl_mock_ops *ops = get_cxl_mock_ops(&index);
	struct cxl_memdev *cxlmd = to_cxl_memdev(port->uport_dev);

	if (ops && ops->is_mock_dev(cxlmd->dev.parent))
		ops->cxl_endpoint_parse_cdat(port);
	else
		cxl_endpoint_parse_cdat(port);
	put_cxl_mock_ops(index);
}
EXPORT_SYMBOL_NS_GPL(__wrap_cxl_endpoint_parse_cdat, "CXL");

struct cxl_dport *__wrap_devm_cxl_add_dport_by_dev(struct cxl_port *port,
						   struct device *dport_dev)
{
	int index;
	struct cxl_mock_ops *ops = get_cxl_mock_ops(&index);
	struct cxl_dport *dport;

	if (ops && ops->is_mock_port(port->uport_dev))
		dport = ops->devm_cxl_add_dport_by_dev(port, dport_dev);
	else
		dport = devm_cxl_add_dport_by_dev(port, dport_dev);
	put_cxl_mock_ops(index);

	return dport;
}
EXPORT_SYMBOL_NS_GPL(__wrap_devm_cxl_add_dport_by_dev, "CXL");

int __wrap_region_intersects(resource_size_t start, size_t size,
			     unsigned long flags, unsigned long desc)
{
	int rc = -1;
	int index;
	struct cxl_mock_ops *ops = get_cxl_mock_ops(&index);

	if (ops)
		rc = ops->region_intersects(start, size, flags, desc);
	if (rc < 0)
		rc = region_intersects(start, size, flags, desc);
	put_cxl_mock_ops(index);

	return rc;
}
EXPORT_SYMBOL_GPL(__wrap_region_intersects);

int __wrap_region_intersects_soft_reserve(resource_size_t start, size_t size)
{
	int rc = -1;
	int index;
	struct cxl_mock_ops *ops = get_cxl_mock_ops(&index);

	if (ops)
		rc = ops->region_intersects_soft_reserve(start, size);
	if (rc < 0)
		rc = region_intersects_soft_reserve(start, size);
	put_cxl_mock_ops(index);

	return rc;
}
EXPORT_SYMBOL_GPL(__wrap_region_intersects_soft_reserve);

int __wrap_walk_hmem_resources(struct device *host, walk_hmem_fn fn)
{
	int index, rc = 0;
	bool is_mock = strcmp(dev_name(host), "hmem_platform.1") == 0;
	struct cxl_mock_ops *ops = get_cxl_mock_ops(&index);

	if (is_mock) {
		if (ops)
			rc = ops->walk_hmem_resources(host, fn);
	} else {
		rc = walk_hmem_resources(host, fn);
	}
	put_cxl_mock_ops(index);
	return rc;

Annotation

Implementation Notes