On 2/18/2026 1:11 PM, Alison Schofield wrote: > cxl-cli commands were recently added for poison inject and clear > operations by memdev. Replace the writes to sysfs with the new > commands in the cxl-poison unit test. > > All cxl-test memdevs are created as poison_injectable, so just > confirm that the new poison_injectable field is indeed 'true'. > > Continue to use the sysfs writes for inject and clear poison > by region offset until that support arrives in cxl-cli. > > Signed-off-by: Alison Schofield <[email protected]>
LGTM Reviewed-by: Ben Cheatham <[email protected]> > --- > > Change in v3: > Use new field 'poison_injectable' in memdev selection (BenC) > Update commit log to include poison_injectable check. > > Change in v2: > Use final format of new cxl-cli cmds: > inject-media-poison and clear-media-poison > > > test/cxl-poison.sh | 82 +++++++++++++++++++++++++--------------------- > 1 file changed, 44 insertions(+), 38 deletions(-) > > diff --git a/test/cxl-poison.sh b/test/cxl-poison.sh > index 58cf132b613b..bbd147c85a77 100644 > --- a/test/cxl-poison.sh > +++ b/test/cxl-poison.sh > @@ -20,7 +20,8 @@ find_memdev() > { > readarray -t capable_mems < <("$CXL" list -b "$CXL_TEST_BUS" -M | > jq -r ".[] | select(.pmem_size != null) | > - select(.ram_size != null) | .memdev") > + select(.ram_size != null) | > + select(.poison_injectable == true) | .memdev") > > if [ ${#capable_mems[@]} == 0 ]; then > echo "no memdevs found for test" > @@ -41,32 +42,37 @@ find_auto_region() > echo "$region" > } > > -# When cxl-cli support for inject and clear arrives, replace > -# the writes to /sys/kernel/debug with the new cxl commands. > - > -_do_poison_sysfs() > +_do_poison() > { > local action="$1" dev="$2" addr="$3" > local expect_fail=${4:-false} > > - if "$expect_fail"; then > - if echo "$addr" > > "/sys/kernel/debug/cxl/$dev/${action}_poison"; then > - echo "Expected ${action}_poison to fail for $addr" > - err "$LINENO" > - fi > - else > - echo "$addr" > "/sys/kernel/debug/cxl/$dev/${action}_poison" > + # Regions use sysfs, memdevs use cxl-cli commands > + if [[ "$dev" =~ ^region ]]; then > + local sysfs_path="/sys/kernel/debug/cxl/$dev/${action}_poison" > + "$expect_fail" && echo "$addr" > "$sysfs_path" && err "$LINENO" > + "$expect_fail" || echo "$addr" > "$sysfs_path" > + return > fi > + > + case "$action" in > + inject) local cmd=("$CXL" inject-media-poison "$dev" -a "$addr") ;; > + clear) local cmd=("$CXL" clear-media-poison "$dev" -a "$addr") ;; > + *) err "$LINENO" ;; > + esac > + > + "$expect_fail" && "${cmd[@]}" && err "$LINENO" > + "$expect_fail" || "${cmd[@]}" > } > > -inject_poison_sysfs() > +inject_poison() > { > - _do_poison_sysfs 'inject' "$@" > + _do_poison 'inject' "$@" > } > > -clear_poison_sysfs() > +clear_poison() > { > - _do_poison_sysfs 'clear' "$@" > + _do_poison 'clear' "$@" > } > > check_trace_entry() > @@ -121,27 +127,27 @@ validate_poison_found() > test_poison_by_memdev_by_dpa() > { > find_memdev > - inject_poison_sysfs "$memdev" "0x40000000" > - inject_poison_sysfs "$memdev" "0x40001000" > - inject_poison_sysfs "$memdev" "0x600" > - inject_poison_sysfs "$memdev" "0x0" > + inject_poison "$memdev" "0x40000000" > + inject_poison "$memdev" "0x40001000" > + inject_poison "$memdev" "0x600" > + inject_poison "$memdev" "0x0" > validate_poison_found "-m $memdev" 4 > > - clear_poison_sysfs "$memdev" "0x40000000" > - clear_poison_sysfs "$memdev" "0x40001000" > - clear_poison_sysfs "$memdev" "0x600" > - clear_poison_sysfs "$memdev" "0x0" > + clear_poison "$memdev" "0x40000000" > + clear_poison "$memdev" "0x40001000" > + clear_poison "$memdev" "0x600" > + clear_poison "$memdev" "0x0" > validate_poison_found "-m $memdev" 0 > } > > test_poison_by_region_by_dpa() > { > - inject_poison_sysfs "$mem0" "0" > - inject_poison_sysfs "$mem1" "0" > + inject_poison "$mem0" "0" > + inject_poison "$mem1" "0" > validate_poison_found "-r $region" 2 > > - clear_poison_sysfs "$mem0" "0" > - clear_poison_sysfs "$mem1" "0" > + clear_poison "$mem0" "0" > + clear_poison "$mem1" "0" > validate_poison_found "-r $region" 0 > } > > @@ -168,15 +174,15 @@ test_poison_by_region_offset() > # Inject at the offset and check result using the hpa > # ABI takes an offset, but recall the hpa to check trace event > > - inject_poison_sysfs "$region" "$cache_size" > + inject_poison "$region" "$cache_size" > check_trace_entry "$region" "$hpa1" > - inject_poison_sysfs "$region" "$((gran + cache_size))" > + inject_poison "$region" "$((gran + cache_size))" > check_trace_entry "$region" "$hpa2" > validate_poison_found "-r $region" 2 > > - clear_poison_sysfs "$region" "$cache_size" > + clear_poison "$region" "$cache_size" > check_trace_entry "$region" "$hpa1" > - clear_poison_sysfs "$region" "$((gran + cache_size))" > + clear_poison "$region" "$((gran + cache_size))" > check_trace_entry "$region" "$hpa2" > validate_poison_found "-r $region" 0 > } > @@ -196,21 +202,21 @@ test_poison_by_region_offset_negative() > if [[ $cache_size -gt 0 ]]; then > cache_offset=$((cache_size - 1)) > echo "Testing offset within cache: $cache_offset (cache_size: > $cache_size)" > - inject_poison_sysfs "$region" "$cache_offset" true > - clear_poison_sysfs "$region" "$cache_offset" true > + inject_poison "$region" "$cache_offset" true > + clear_poison "$region" "$cache_offset" true > else > echo "Skipping cache test - cache_size is 0" > fi > > # Offset exceeds region size > exceed_offset=$((region_size)) > - inject_poison_sysfs "$region" "$exceed_offset" true > - clear_poison_sysfs "$region" "$exceed_offset" true > + inject_poison "$region" "$exceed_offset" true > + clear_poison "$region" "$exceed_offset" true > > # Offset exceeds region size by a lot > large_offset=$((region_size * 2)) > - inject_poison_sysfs "$region" "$large_offset" true > - clear_poison_sysfs "$region" "$large_offset" true > + inject_poison "$region" "$large_offset" true > + clear_poison "$region" "$large_offset" true > } > > is_unaligned() {
