Several region setup helpers open-code the same decoder and memdev
lookups.

Factor the common queries into shared helpers. This reduces duplicate
logic and simplifies adding new region configuration tests.

No functional change.

Assisted-by: Claude:Opus-4-8
Signed-off-by: Alison Schofield <[email protected]>
---
 test/cxl-create-region.sh | 73 ++++++++++++++++++---------------------
 1 file changed, 33 insertions(+), 40 deletions(-)

diff --git a/test/cxl-create-region.sh b/test/cxl-create-region.sh
index d7a6840fed1a..5941e18f338d 100644
--- a/test/cxl-create-region.sh
+++ b/test/cxl-create-region.sh
@@ -25,17 +25,21 @@ destroy_regions()
        fi
 }
 
+# Find the pmem capable single-target root decoder for a memdev
+find_x1_decoder()
+{
+       $CXL list -b cxl_test -D -d root -m "$1" |
+                 jq -r ".[] |
+                 select(.pmem_capable == true) |
+                 select(.nr_targets == 1) |
+                 .decoder"
+}
+
 create_x1_region()
 {
        mem="$1"
 
-       # find a pmem capable root decoder for this mem
-       decoder=$($CXL list -b cxl_test -D -d root -m "$mem" |
-                 jq -r ".[] |
-                 select(.pmem_capable == true) |
-                 select(.nr_targets == 1) |
-                 .decoder")
-
+       decoder=$(find_x1_decoder "$mem")
        if [[ ! $decoder ]]; then
                echo "no suitable decoder found for $mem, skipping"
                return
@@ -69,13 +73,7 @@ create_subregions()
        slice=$((256 << 20))
        mem="$1"
 
-       # find a pmem capable root decoder for this mem
-       decoder=$($CXL list -b cxl_test -D -d root -m "$mem" |
-                 jq -r ".[] |
-                 select(.pmem_capable == true) |
-                 select(.nr_targets == 1) |
-                 .decoder")
-
+       decoder=$(find_x1_decoder "$mem")
        if [[ ! $decoder ]]; then
                echo "no suitable decoder found for $mem, skipping"
                return
@@ -133,6 +131,17 @@ create_single()
        destroy_regions "$region"
 }
 
+# Find the index'th memdev behind the decoder's target at position
+find_memdev()
+{
+       local decoder="$1" position="$2" index="$3"
+       local port_dev
+
+       port_dev=$($CXL list -T -d "$decoder" | jq -r ".[] |
+               .targets | .[] | select(.position == $position) | .target")
+       $CXL list -M -p "$port_dev" | jq -r ".[$index].memdev"
+}
+
 create_and_destroy_region()
 {
        region=$($CXL create-region -d "$decoder" -m "$memdevs" |
@@ -155,9 +164,7 @@ setup_x1()
                .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")
+       mem0=$(find_memdev "$decoder" 0 0)
        memdevs="$mem0"
 }
 
@@ -170,12 +177,8 @@ setup_x2()
                .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")
+       mem0=$(find_memdev "$decoder" 0 0)
+       mem1=$(find_memdev "$decoder" 1 0)
        memdevs="$mem0 $mem1"
 }
 
@@ -188,14 +191,10 @@ setup_x4()
                .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")
+       mem0=$(find_memdev "$decoder" 0 0)
+       mem1=$(find_memdev "$decoder" 1 0)
+       mem2=$(find_memdev "$decoder" 0 1)
+       mem3=$(find_memdev "$decoder" 1 1)
        memdevs="$mem0 $mem1 $mem2 $mem3"
 }
 
@@ -213,15 +212,9 @@ setup_x3()
        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")
+       mem0=$(find_memdev "$decoder" 0 0)
+       mem1=$(find_memdev "$decoder" 1 0)
+       mem2=$(find_memdev "$decoder" 2 0)
        memdevs="$mem0 $mem1 $mem2"
 }
 
-- 
2.37.3


Reply via email to