On Tue, Jun 30, 2026 at 09:42:02PM -0700, Alison Schofield wrote: > Listing poison by memdev scans the unmapped tail of every partition. > When an earlier partition is fully mapped, its tail is zero length, but > the scan must continue to later partitions. A regression caused the > scan to stop at the first fully-mapped partition, leaving later > partitions unscanned. > > Backstop that behavior with a test case that fully maps a memdev's RAM > partition so its unmapped tail is zero length, then injects poison into > the unmapped PMEM partition that follows. The PMEM poison is only > reported if the scan continues past the fully-mapped RAM partition. > > Signed-off-by: Alison Schofield <[email protected]> > --- > test/cxl-poison.sh | 40 ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 40 insertions(+) > > diff --git a/test/cxl-poison.sh b/test/cxl-poison.sh > index 49aa1b68c5c1..a03e08084eb4 100644 > --- a/test/cxl-poison.sh > +++ b/test/cxl-poison.sh > @@ -219,6 +219,45 @@ test_poison_by_region_offset_negative() > clear_poison "$region" "$large_offset" true > } > > +# Backstop a driver fix where a fully mapped partition prematurely > +# terminated the unmapped poison scan. > +test_poison_unmapped_later_partition() > +{ > + local decoder ram_size pmem_dpa > + > + check_min_kver "7.3" || return 0
DaveJ found this failing in 7.3-rc1. It turns out the kernel fixup for this testcase is not yet merged. I have just pushed a new ndctl pending branch with this changed to 7.4. The kernel fixup is in this patchset from RichardC: https://lore.kernel.org/linux-cxl/[email protected]/ There is no issue with the patch, it's just bad luck that it is stuck in a Sashiko set of cleanups. -- Alison > + > + # Free the auto region to use the ram capacity > + $CXL destroy-region -f -b "$CXL_TEST_BUS" all > + > + find_memdev > + > + # Fully map the ram partition so it has a zero-length unmapped tail > + decoder=$($CXL list -b "$CXL_TEST_BUS" -D -d root -m "$memdev" | > + jq -r ".[] | > + select(.volatile_capable == true) | > + select(.nr_targets == 1) | > + .decoder") > + [[ -n "$decoder" && "$decoder" != "null" ]] || > + do_skip "no x1 volatile decoder found" > + > + ram_size=$($CXL list -m "$memdev" | jq -r ".[0].ram_size") > + [[ -n "$ram_size" && "$ram_size" != "null" ]] || err "$LINENO" > + > + region=$($CXL create-region -t ram -d "$decoder" -m "$memdev" \ > + -s "$ram_size" | jq -r ".region") > + [[ -n "$region" && "$region" != "null" ]] || err "$LINENO" > + > + # Poison the unmapped pmem tail > + pmem_dpa=$ram_size > + inject_poison "$memdev" "$pmem_dpa" > + validate_poison_found "-m $memdev" 1 > + clear_poison "$memdev" "$pmem_dpa" > + validate_poison_found "-m $memdev" 0 > + > + $CXL destroy-region -f -b "$CXL_TEST_BUS" "$region" > +} > + > is_unaligned() { > local region=$1 > local hbiw=$2 > @@ -332,6 +371,7 @@ run_poison_test() > do_skip "test cases requires inject by region kernel support" > test_poison_by_region_offset > test_poison_by_region_offset_negative > + test_poison_unmapped_later_partition > } > > modprobe -r cxl_test > > base-commit: 15e932c4e1318a9608ad9b799ad83a32a8b5970d > -- > 2.37.3 >
