Commit 9399aa667ab0 ("cxl/region: Add -f option for disable-region")
introduced a regression when destroying a region.

Add a tests for destroying a region.

Cc: Dave Jiang <[email protected]>
Signed-off-by: Ira Weiny <[email protected]>
---
 test/cxl-destroy-region.sh | 76 ++++++++++++++++++++++++++++++++++++++++++++++
 test/meson.build           |  2 ++
 2 files changed, 78 insertions(+)

diff --git a/test/cxl-destroy-region.sh b/test/cxl-destroy-region.sh
new file mode 100644
index 000000000000..251720a98688
--- /dev/null
+++ b/test/cxl-destroy-region.sh
@@ -0,0 +1,76 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2023 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
+rc=1
+
+check_destroy_ram()
+{
+       mem=$1
+       decoder=$2
+
+       region=$($CXL create-region -d "$decoder" -m "$mem" | jq -r ".region")
+       if [ "$region" == "null" ]; then
+               err "$LINENO"
+       fi
+       $CXL enable-region "$region"
+
+       # default is memory is system-ram offline
+       $CXL disable-region $region
+       $CXL destroy-region $region
+}
+
+check_destroy_devdax()
+{
+       mem=$1
+       decoder=$2
+
+       region=$($CXL create-region -d "$decoder" -m "$mem" | jq -r ".region")
+       if [ "$region" == "null" ]; then
+               err "$LINENO"
+       fi
+       $CXL enable-region "$region"
+
+       dax=$($CXL list -X -r "$region" | jq -r ".[].daxregion.devices" | jq -r 
'.[].chardev')
+
+       $DAXCTL reconfigure-device -m devdax "$dax"
+
+       $CXL disable-region $region
+       $CXL destroy-region $region
+}
+
+# Find a memory device to create regions on to test the destroy
+readarray -t mems < <("$CXL" list -b cxl_test -M | jq -r '.[].memdev')
+for mem in ${mems[@]}; do
+        ramsize=$($CXL list -m $mem | jq -r '.[].ram_size')
+        if [ "$ramsize" == "null" ]; then
+                continue
+        fi
+        decoder=$($CXL list -b cxl_test -D -d root -m "$mem" |
+                  jq -r ".[] |
+                  select(.volatile_capable == true) |
+                  select(.nr_targets == 1) |
+                  select(.size >= ${ramsize}) |
+                  .decoder")
+        if [[ $decoder ]]; then
+               check_destroy_ram $mem $decoder
+               check_destroy_devdax $mem $decoder
+                break
+        fi
+done
+
+check_dmesg "$LINENO"
+
+modprobe -r cxl_test
diff --git a/test/meson.build b/test/meson.build
index 2706fa5d633c..126d663dfce2 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -158,6 +158,7 @@ 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_poison = find_program('cxl-poison.sh')
+cxl_destroy_region = find_program('cxl-destroy-region.sh')
 
 tests = [
   [ 'libndctl',               libndctl,                  'ndctl' ],
@@ -188,6 +189,7 @@ tests = [
   [ 'cxl-xor-region.sh',      cxl_xor_region,     'cxl'   ],
   [ 'cxl-events.sh',          cxl_events,         'cxl'   ],
   [ 'cxl-poison.sh',          cxl_poison,         'cxl'   ],
+  [ 'cxl-destroy-region.sh',  cxl_destroy_region, 'cxl'   ],
 ]
 
 if get_option('destructive').enabled()

-- 
2.42.0


Reply via email to