In the CXL Unit Test Suite, region creation coverage is split between cxl-create-region.sh and cxl-xor-region.sh.
Consolidate the XOR coverage into cxl-create-region.sh so region creation testing lives in one place. This avoids maintaining parallel test infrastructure and makes it easier to add new region creation cases. Remove the now redundant cxl-xor-region.sh. Continue to maintain cxl-region-sysfs.sh because it exercises the CXL driver ABI directly. Assisted-by: Claude:Opus-4-8 Signed-off-by: Alison Schofield <[email protected]> --- test/cxl-create-region.sh | 111 ++++++++++++++++++++++++++++++++ test/cxl-xor-region.sh | 129 -------------------------------------- test/meson.build | 2 - 3 files changed, 111 insertions(+), 131 deletions(-) delete mode 100644 test/cxl-xor-region.sh diff --git a/test/cxl-create-region.sh b/test/cxl-create-region.sh index 658b9b8ff58a..d7a6840fed1a 100644 --- a/test/cxl-create-region.sh +++ b/test/cxl-create-region.sh @@ -133,6 +133,98 @@ create_single() destroy_regions "$region" } +create_and_destroy_region() +{ + region=$($CXL create-region -d "$decoder" -m "$memdevs" | + jq -r ".region") + + if [[ ! $region ]]; then + echo "create-region failed for $decoder" + err "$LINENO" + fi + + destroy_regions "$region" +} + +setup_x1() +{ + # Find an x1 decoder + decoder=$($CXL list -b cxl_test -D -d root | jq -r ".[] | + select(.pmem_capable == true) | + select(.nr_targets == 1) | + .decoder") + + # Find a memdev for this host-bridge + port_dev0=$($CXL list -T -d "$decoder" | jq -r ".[] | + .targets | .[] | select(.position == 0) | .target") + mem0=$($CXL list -M -p "$port_dev0" | jq -r ".[0].memdev") + memdevs="$mem0" +} + +setup_x2() +{ + # Find an x2 decoder + decoder=$($CXL list -b cxl_test -D -d root | jq -r ".[] | + select(.pmem_capable == true) | + select(.nr_targets == 2) | + .decoder") + + # Find a memdev for each host-bridge interleave position + port_dev0=$($CXL list -T -d "$decoder" | jq -r ".[] | + .targets | .[] | select(.position == 0) | .target") + port_dev1=$($CXL list -T -d "$decoder" | jq -r ".[] | + .targets | .[] | select(.position == 1) | .target") + mem0=$($CXL list -M -p "$port_dev0" | jq -r ".[0].memdev") + mem1=$($CXL list -M -p "$port_dev1" | jq -r ".[0].memdev") + memdevs="$mem0 $mem1" +} + +setup_x4() +{ + # find an x2 decoder + decoder=$($CXL list -b cxl_test -D -d root | jq -r ".[] | + select(.pmem_capable == true) | + select(.nr_targets == 2) | + .decoder") + + # Find a memdev for each host-bridge interleave position + port_dev0=$($CXL list -T -d "$decoder" | jq -r ".[] | + .targets | .[] | select(.position == 0) | .target") + port_dev1=$($CXL list -T -d "$decoder" | jq -r ".[] | + .targets | .[] | select(.position == 1) | .target") + mem0=$($CXL list -M -p "$port_dev0" | jq -r ".[0].memdev") + mem1=$($CXL list -M -p "$port_dev1" | jq -r ".[0].memdev") + mem2=$($CXL list -M -p "$port_dev0" | jq -r ".[1].memdev") + mem3=$($CXL list -M -p "$port_dev1" | jq -r ".[1].memdev") + memdevs="$mem0 $mem1 $mem2 $mem3" +} + +setup_x3() +{ + # find an x3 decoder + decoder=$($CXL list -b cxl_test -D -d root | jq -r ".[] | + select(.pmem_capable == true) | + select(.nr_targets == 3) | + .decoder") + + if [[ ! $decoder ]]; then + echo "no x3 decoder found, skipping xor-x3 test" + return + fi + + # Find a memdev for each host-bridge interleave position + port_dev0=$($CXL list -T -d "$decoder" | jq -r ".[] | + .targets | .[] | select(.position == 0) | .target") + port_dev1=$($CXL list -T -d "$decoder" | jq -r ".[] | + .targets | .[] | select(.position == 1) | .target") + port_dev2=$($CXL list -T -d "$decoder" | jq -r ".[] | + .targets | .[] | select(.position == 2) | .target") + mem0=$($CXL list -M -p "$port_dev0" | jq -r ".[0].memdev") + mem1=$($CXL list -M -p "$port_dev1" | jq -r ".[0].memdev") + mem2=$($CXL list -M -p "$port_dev2" | jq -r ".[0].memdev") + memdevs="$mem0 $mem1 $mem2" +} + # test region creation on devices behind a single-port host-bridge create_single @@ -149,6 +241,25 @@ for mem in ${mems[@]}; do create_subregions "$mem" done +# Reload cxl_test with XOR interleave arithmetic to exercise the XOR math +# option of the CXL driver. Create x1,2,3,4 regions across the XOR roots. +# As with the modulo tests above, changes to the CXL topology in +# tools/testing/cxl/test/cxl.c may require an update here. +modprobe -r cxl_test +modprobe cxl_test interleave_arithmetic=1 + +setup_x1 +create_and_destroy_region +setup_x2 +create_and_destroy_region +setup_x4 +create_and_destroy_region +# x3 decoder may not be available in cxl/test topo yet +setup_x3 +if [[ $decoder ]]; then + create_and_destroy_region +fi + check_dmesg "$LINENO" modprobe -r cxl_test diff --git a/test/cxl-xor-region.sh b/test/cxl-xor-region.sh deleted file mode 100644 index fb4f9a0a1515..000000000000 --- a/test/cxl-xor-region.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/bash -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2022 Intel Corporation. All rights reserved. - -. $(dirname $0)/common - -rc=77 - -set -ex - -trap 'err $LINENO' ERR - -check_prereq "jq" - -modprobe -r cxl_test -modprobe cxl_test interleave_arithmetic=1 -rc=1 - -# THEORY OF OPERATION: Create x1,2,3,4 regions to exercise the XOR math -# option of the CXL driver. As with other cxl_test tests, changes to the -# CXL topology in tools/testing/cxl/test/cxl.c may require an update here. - -create_and_destroy_region() -{ - region=$($CXL create-region -d "$decoder" -m "$memdevs" | - jq -r ".region") - - if [[ ! $region ]]; then - echo "create-region failed for $decoder" - err "$LINENO" - fi - - $CXL destroy-region -f -b cxl_test "$region" -} - -setup_x1() -{ - # Find an x1 decoder - decoder=$($CXL list -b cxl_test -D -d root | jq -r ".[] | - select(.pmem_capable == true) | - select(.nr_targets == 1) | - .decoder") - - # Find a memdev for this host-bridge - port_dev0=$($CXL list -T -d "$decoder" | jq -r ".[] | - .targets | .[] | select(.position == 0) | .target") - mem0=$($CXL list -M -p "$port_dev0" | jq -r ".[0].memdev") - memdevs="$mem0" -} - -setup_x2() -{ - # Find an x2 decoder - decoder=$($CXL list -b cxl_test -D -d root | jq -r ".[] | - select(.pmem_capable == true) | - select(.nr_targets == 2) | - .decoder") - - # Find a memdev for each host-bridge interleave position - port_dev0=$($CXL list -T -d "$decoder" | jq -r ".[] | - .targets | .[] | select(.position == 0) | .target") - port_dev1=$($CXL list -T -d "$decoder" | jq -r ".[] | - .targets | .[] | select(.position == 1) | .target") - mem0=$($CXL list -M -p "$port_dev0" | jq -r ".[0].memdev") - mem1=$($CXL list -M -p "$port_dev1" | jq -r ".[0].memdev") - memdevs="$mem0 $mem1" -} - -setup_x4() -{ - # find an x2 decoder - decoder=$($CXL list -b cxl_test -D -d root | jq -r ".[] | - select(.pmem_capable == true) | - select(.nr_targets == 2) | - .decoder") - - # Find a memdev for each host-bridge interleave position - port_dev0=$($CXL list -T -d "$decoder" | jq -r ".[] | - .targets | .[] | select(.position == 0) | .target") - port_dev1=$($CXL list -T -d "$decoder" | jq -r ".[] | - .targets | .[] | select(.position == 1) | .target") - mem0=$($CXL list -M -p "$port_dev0" | jq -r ".[0].memdev") - mem1=$($CXL list -M -p "$port_dev1" | jq -r ".[0].memdev") - mem2=$($CXL list -M -p "$port_dev0" | jq -r ".[1].memdev") - mem3=$($CXL list -M -p "$port_dev1" | jq -r ".[1].memdev") - memdevs="$mem0 $mem1 $mem2 $mem3" -} - -setup_x3() -{ - # find an x3 decoder - decoder=$($CXL list -b cxl_test -D -d root | jq -r ".[] | - select(.pmem_capable == true) | - select(.nr_targets == 3) | - .decoder") - - if [[ ! $decoder ]]; then - echo "no x3 decoder found, skipping xor-x3 test" - return - fi - - # Find a memdev for each host-bridge interleave position - port_dev0=$($CXL list -T -d "$decoder" | jq -r ".[] | - .targets | .[] | select(.position == 0) | .target") - port_dev1=$($CXL list -T -d "$decoder" | jq -r ".[] | - .targets | .[] | select(.position == 1) | .target") - port_dev2=$($CXL list -T -d "$decoder" | jq -r ".[] | - .targets | .[] | select(.position == 2) | .target") - mem0=$($CXL list -M -p "$port_dev0" | jq -r ".[0].memdev") - mem1=$($CXL list -M -p "$port_dev1" | jq -r ".[0].memdev") - mem2=$($CXL list -M -p "$port_dev2" | jq -r ".[0].memdev") - memdevs="$mem0 $mem1 $mem2" -} - -setup_x1 -create_and_destroy_region -setup_x2 -create_and_destroy_region -setup_x4 -create_and_destroy_region -# x3 decoder may not be available in cxl/test topo yet -setup_x3 -if [[ $decoder ]]; then - create_and_destroy_region -fi - -check_dmesg "$LINENO" - -modprobe -r cxl_test diff --git a/test/meson.build b/test/meson.build index 56aed9cc3c9d..5729d26d2a31 100644 --- a/test/meson.build +++ b/test/meson.build @@ -161,7 +161,6 @@ cxl_topo = find_program('cxl-topology.sh') cxl_sysfs = find_program('cxl-region-sysfs.sh') cxl_labels = find_program('cxl-labels.sh') cxl_create_region = find_program('cxl-create-region.sh') -cxl_xor_region = find_program('cxl-xor-region.sh') cxl_update_firmware = find_program('cxl-update-firmware.sh') cxl_events = find_program('cxl-events.sh') cxl_sanitize = find_program('cxl-sanitize.sh') @@ -198,7 +197,6 @@ tests = [ [ 'cxl-region-sysfs.sh', cxl_sysfs, 'cxl' ], [ 'cxl-labels.sh', cxl_labels, 'cxl' ], [ 'cxl-create-region.sh', cxl_create_region, 'cxl' ], - [ 'cxl-xor-region.sh', cxl_xor_region, 'cxl' ], [ 'cxl-events.sh', cxl_events, 'cxl' ], [ 'cxl-sanitize.sh', cxl_sanitize, 'cxl' ], [ 'cxl-destroy-region.sh', cxl_destroy_region, 'cxl' ], -- 2.37.3
