mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
tools/testing/cxl: Prevent cxl_test from confusing production modules
The cxl_test machinery builds modified versions of the modules in drivers/cxl/ and intercepts some of their calls to allow cxl_test to inject mock CXL topologies for test. However, if cxl_test attempts the same with production modules, fireworks ensue as Luis discovered [1]. Prevent that scenario by arranging for cxl_test to check for a "watermark" symbol in each of the modules it expects to be modified before the test can run. This turns undefined runtime behavior or crashes into a safer failure to load the cxl_test module. Link: http://lore.kernel.org/r/20221209062919.1096779-1-mcgrof@kernel.org [1] Reported-by: Luis Chamberlain <mcgrof@kernel.org> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
e520d52d7c
commit
8c149eb011
@ -24,22 +24,27 @@ obj-m += cxl_acpi.o
|
||||
cxl_acpi-y := $(CXL_SRC)/acpi.o
|
||||
cxl_acpi-y += mock_acpi.o
|
||||
cxl_acpi-y += config_check.o
|
||||
cxl_acpi-y += cxl_acpi_test.o
|
||||
|
||||
obj-m += cxl_pmem.o
|
||||
|
||||
cxl_pmem-y := $(CXL_SRC)/pmem.o
|
||||
cxl_pmem-y += $(CXL_SRC)/security.o
|
||||
cxl_pmem-y += config_check.o
|
||||
cxl_pmem-y += cxl_pmem_test.o
|
||||
|
||||
obj-m += cxl_port.o
|
||||
|
||||
cxl_port-y := $(CXL_SRC)/port.o
|
||||
cxl_port-y += config_check.o
|
||||
cxl_port-y += cxl_port_test.o
|
||||
|
||||
|
||||
obj-m += cxl_mem.o
|
||||
|
||||
cxl_mem-y := $(CXL_SRC)/mem.o
|
||||
cxl_mem-y += config_check.o
|
||||
cxl_mem-y += cxl_mem_test.o
|
||||
|
||||
obj-m += cxl_core.o
|
||||
|
||||
@ -53,5 +58,6 @@ cxl_core-y += $(CXL_CORE_SRC)/hdm.o
|
||||
cxl_core-$(CONFIG_TRACING) += $(CXL_CORE_SRC)/trace.o
|
||||
cxl_core-$(CONFIG_CXL_REGION) += $(CXL_CORE_SRC)/region.o
|
||||
cxl_core-y += config_check.o
|
||||
cxl_core-y += cxl_core_test.o
|
||||
|
||||
obj-m += test/
|
||||
|
6
tools/testing/cxl/cxl_acpi_test.c
Normal file
6
tools/testing/cxl/cxl_acpi_test.c
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright(c) 2022 Intel Corporation. All rights reserved. */
|
||||
|
||||
#include "watermark.h"
|
||||
|
||||
cxl_test_watermark(cxl_acpi);
|
6
tools/testing/cxl/cxl_core_test.c
Normal file
6
tools/testing/cxl/cxl_core_test.c
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright(c) 2022 Intel Corporation. All rights reserved. */
|
||||
|
||||
#include "watermark.h"
|
||||
|
||||
cxl_test_watermark(cxl_core);
|
6
tools/testing/cxl/cxl_mem_test.c
Normal file
6
tools/testing/cxl/cxl_mem_test.c
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright(c) 2022 Intel Corporation. All rights reserved. */
|
||||
|
||||
#include "watermark.h"
|
||||
|
||||
cxl_test_watermark(cxl_mem);
|
6
tools/testing/cxl/cxl_pmem_test.c
Normal file
6
tools/testing/cxl/cxl_pmem_test.c
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright(c) 2022 Intel Corporation. All rights reserved. */
|
||||
|
||||
#include "watermark.h"
|
||||
|
||||
cxl_test_watermark(cxl_pmem);
|
6
tools/testing/cxl/cxl_port_test.c
Normal file
6
tools/testing/cxl/cxl_port_test.c
Normal file
@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright(c) 2022 Intel Corporation. All rights reserved. */
|
||||
|
||||
#include "watermark.h"
|
||||
|
||||
cxl_test_watermark(cxl_port);
|
@ -9,6 +9,8 @@
|
||||
#include <linux/pci.h>
|
||||
#include <linux/mm.h>
|
||||
#include <cxlmem.h>
|
||||
|
||||
#include "../watermark.h"
|
||||
#include "mock.h"
|
||||
|
||||
static int interleave_arithmetic;
|
||||
@ -1119,6 +1121,12 @@ static __init int cxl_test_init(void)
|
||||
{
|
||||
int rc, i;
|
||||
|
||||
cxl_acpi_test();
|
||||
cxl_core_test();
|
||||
cxl_mem_test();
|
||||
cxl_pmem_test();
|
||||
cxl_port_test();
|
||||
|
||||
register_cxl_mock_ops(&cxl_mock_ops);
|
||||
|
||||
cxl_mock_pool = gen_pool_create(ilog2(SZ_2M), NUMA_NO_NODE);
|
||||
|
25
tools/testing/cxl/watermark.h
Normal file
25
tools/testing/cxl/watermark.h
Normal file
@ -0,0 +1,25 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright(c) 2022 Intel Corporation. All rights reserved. */
|
||||
#ifndef _TEST_CXL_WATERMARK_H_
|
||||
#define _TEST_CXL_WATERMARK_H_
|
||||
#include <linux/module.h>
|
||||
#include <linux/printk.h>
|
||||
|
||||
int cxl_acpi_test(void);
|
||||
int cxl_core_test(void);
|
||||
int cxl_mem_test(void);
|
||||
int cxl_pmem_test(void);
|
||||
int cxl_port_test(void);
|
||||
|
||||
/*
|
||||
* dummy routine for cxl_test to validate it is linking to the properly
|
||||
* mocked module and not the standard one from the base tree.
|
||||
*/
|
||||
#define cxl_test_watermark(x) \
|
||||
int x##_test(void) \
|
||||
{ \
|
||||
pr_debug("%s for cxl_test\n", KBUILD_MODNAME); \
|
||||
return 0; \
|
||||
} \
|
||||
EXPORT_SYMBOL(x##_test)
|
||||
#endif /* _TEST_CXL_WATERMARK_H_ */
|
Loading…
Reference in New Issue
Block a user