Expand cxl-poison.sh test to include extended linear cache testing.
Additional adjustments are needed for test_poison_by_region_offset()
to test ELC functionality.

Signed-off-by: Dave Jiang <[email protected]>
---
 test/cxl-poison.sh | 61 +++++++++++++++++++++++++++++-----------------
 1 file changed, 39 insertions(+), 22 deletions(-)

diff --git a/test/cxl-poison.sh b/test/cxl-poison.sh
index 8dfed1877907..0cb7bc77b814 100644
--- a/test/cxl-poison.sh
+++ b/test/cxl-poison.sh
@@ -13,11 +13,6 @@ trap 'err $LINENO' ERR
 
 check_prereq "jq"
 
-modprobe -r cxl_test
-modprobe cxl_test
-
-rc=1
-
 # THEORY OF OPERATION: Exercise cxl-cli and cxl driver ability to
 # inject, clear, and get the poison list. Do it by memdev and by region.
 
@@ -150,9 +145,18 @@ test_poison_by_region_by_dpa()
 
 test_poison_by_region_offset()
 {
-       local base gran hpa1 hpa2
+       local base gran hpa1 hpa2 cache_size
        base=$(cat /sys/bus/cxl/devices/"$region"/resource)
        gran=$(cat /sys/bus/cxl/devices/"$region"/interleave_granularity)
+       cache_size=0
+
+       if [ -f "/sys/bus/cxl/devices/$region/extended_linear_cache_size" ]; 
then
+               cache_size=$(cat 
/sys/bus/cxl/devices/"$region"/extended_linear_cache_size)
+       fi
+
+       if [[ $cache_size -gt 0 ]]; then
+               base=$((base + cache_size))
+       fi
 
        # Test two HPA addresses: base and base + granularity
        # This hits the two memdevs in the region interleave.
@@ -162,15 +166,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" 0
+       inject_poison_sysfs "$region" "$cache_size"
        check_trace_entry "$region" "$hpa1"
-       inject_poison_sysfs "$region" "$gran"
+       inject_poison_sysfs "$region" "$((gran + cache_size))"
        check_trace_entry "$region" "$hpa2"
        validate_poison_found "-r $region" 2
 
-       clear_poison_sysfs "$region" 0
+       clear_poison_sysfs "$region" "$cache_size"
        check_trace_entry "$region" "$hpa1"
-       clear_poison_sysfs "$region" "$gran"
+       clear_poison_sysfs "$region" "$((gran + cache_size))"
        check_trace_entry "$region" "$hpa2"
        validate_poison_found "-r $region" 0
 }
@@ -207,19 +211,32 @@ test_poison_by_region_offset_negative()
        clear_poison_sysfs "$region" "$large_offset" true
 }
 
-# Clear old trace events, enable cxl_poison, enable global tracing
-echo "" > /sys/kernel/tracing/trace
-echo 1 > /sys/kernel/tracing/events/cxl/cxl_poison/enable
-echo 1 > /sys/kernel/tracing/tracing_on
+run_poison_test()
+{
+       # Clear old trace events, enable cxl_poison, enable global tracing
+       echo "" > /sys/kernel/tracing/trace
+       echo 1 > /sys/kernel/tracing/events/cxl/cxl_poison/enable
+       echo 1 > /sys/kernel/tracing/tracing_on
 
-test_poison_by_memdev_by_dpa
-find_auto_region
-test_poison_by_region_by_dpa
-[ -f "/sys/kernel/debug/cxl/$region/inject_poison" ] ||
-       do_skip "test cases requires inject by region kernel support"
-test_poison_by_region_offset
-test_poison_by_region_offset_negative
+       test_poison_by_memdev_by_dpa
+       find_auto_region
+       test_poison_by_region_by_dpa
+       [ -f "/sys/kernel/debug/cxl/$region/inject_poison" ] ||
+               do_skip "test cases requires inject by region kernel support"
+       test_poison_by_region_offset
+       test_poison_by_region_offset_negative
 
-check_dmesg "$LINENO"
+       check_dmesg "$LINENO"
+}
+
+modprobe -r cxl_test
+modprobe cxl_test
+rc=1
+run_poison_test
 
 modprobe -r cxl-test
+modprobe cxl_test extended_linear_cache=1
+rc=1
+run_poison_test
+
+modprobe -r cxl_test
-- 
2.51.1


Reply via email to