Re: [PATCH v15 16/16] tools/testing/cxl: Add HDM decoder range checks

From: Alison Schofield

Date: Mon Oct 26 2026 - 22:42:47 EST


On Sun, Oct 11, 2026 at 02:14:22AM +0000, Srirangan Madhavan wrote:
> Test cxl_hdm_unpack_decoder() when cxl_test loads, failing module loading
> if a check fails. Cover range boundaries and overflow, an all-ones base,
> zero-size and uncommitted decoders, and a locked host-only decoder with
> 12-way interleave. Verify the decoded fields for valid inputs.
>
> Run the checks separately from the watermark hooks, using a helper
> exported only by mock cxl_core. No PCI device or MMIO is needed.

Hi Srirangan,

Thanks for adding these tests. The boundary and overflow cases provide
valuable coverage for cxl_hdm_unpack_decoder().

However, the fact that these tests don't require the mock CXL topology
suggests that they belong in KUnit rather than cxl_test.

BTW, but pointless once this moves to KUNIT, as written a failure in
any one of these checks prevents the cxl_test module from loading,
meaning all cxl unit tests would skip or fail.

Please take a look at the recently posted CXL KUnit tests. I think
this would fit nicely there.
https://lore.kernel.org/all/cover.1791949910.git.alison.schofield@xxxxxxxxx/

one bit inline below -

>
> Cache refresh, retained-state comparison, and reset restoration need
> follow-up tests with additional mock support. These checks do not cover
> reset sequencing or hardware cache invalidation.
>
> Signed-off-by: Srirangan Madhavan <smadhavan@xxxxxxxxxx>
> ---
> tools/testing/cxl/cxl_core_test.c | 78 +++++++++++++++++++++++++++++++
> tools/testing/cxl/cxl_core_test.h | 8 ++++
> tools/testing/cxl/test/cxl.c | 5 ++
> 3 files changed, 91 insertions(+)
> create mode 100644 tools/testing/cxl/cxl_core_test.h
>
> diff --git a/tools/testing/cxl/cxl_core_test.c b/tools/testing/cxl/cxl_core_test.c
> index 464a9255e4d6..8072146643bd 100644
> --- a/tools/testing/cxl/cxl_core_test.c
> +++ b/tools/testing/cxl/cxl_core_test.c
> @@ -1,6 +1,84 @@
> // SPDX-License-Identifier: GPL-2.0
> /* Copyright(c) 2022 Intel Corporation. All rights reserved. */
>
> +#include <linux/bitfield.h>
> +#include <linux/sizes.h>
> +#include "cxl.h"
> +#include "core.h"
> +#include "cxl_core_test.h"
> #include "watermark.h"
>
> cxl_test_watermark(cxl_core);
> +
> +/* Exercise the shared unpacker without HDM MMIO or a PCI device. */
> +int cxl_test_hdm_ranges(void)
> +{
> + static const struct {
> + const char *name;
> + u32 ctrl;
> + u64 base;
> + u64 size;
> + int rc;
> + unsigned long flags;
> + int ways;
> + int granularity;
> + enum cxl_decoder_type target_type;
> + } cases[] = {
> + { "valid", CXL_HDM_DECODER0_CTRL_COMMITTED,
> + SZ_1G, SZ_256M, 0, CXL_DECODER_F_ENABLE,
> + 1, 256, CXL_DECODER_DEVMEM },
> + { "overflow", CXL_HDM_DECODER0_CTRL_COMMITTED,
> + U64_MAX - 127, 256, -ENXIO },
> + { "all-ones base", CXL_HDM_DECODER0_CTRL_COMMITTED,
> + U64_MAX, SZ_256M, -ENXIO },
> + { "last address", CXL_HDM_DECODER0_CTRL_COMMITTED,
> + U64_MAX - 255, 256, 0, CXL_DECODER_F_ENABLE,
> + 1, 256, CXL_DECODER_DEVMEM },
> + { "zero size", CXL_HDM_DECODER0_CTRL_COMMITTED,
> + SZ_1G, 0, 0, CXL_DECODER_F_ENABLE,
> + 1, 256, CXL_DECODER_DEVMEM },
> + { "uncommitted stale size", 0,
> + SZ_1G, SZ_256M, 0, 0, 1, 256, 0 },

Above cases expects target___type 0 and IIUC that is not a valid
enum cxl_decoder_type value.

-- Alison

snip