From: Gregory Price <[email protected]>

Repeat the online/offline pair to cover onlining from 'unplugged', and
check that offline-memory unplugs an already offline device. After each
step, check block counts and, where present, daxX.Y/state and the
'hotplug_state' reported by 'daxctl list'.

Signed-off-by: Gregory Price <[email protected]>
---
 test/daxctl-devices.sh | 53 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/test/daxctl-devices.sh b/test/daxctl-devices.sh
index 659428d..cdb13f6 100755
--- a/test/daxctl-devices.sh
+++ b/test/daxctl-devices.sh
@@ -67,6 +67,40 @@ daxctl_get_mode()
        "$DAXCTL" list -d "$1" | jq -er '.[].mode'
 }
 
+daxctl_get_online_blocks()
+{
+       "$DAXCTL" list -d "$1" | jq -er '.[].online_memblocks'
+}
+
+daxctl_get_total_blocks()
+{
+       "$DAXCTL" list -d "$1" | jq -er '.[].total_memblocks'
+}
+
+check_memory_online()
+{
+       local total
+
+       total=$(daxctl_get_total_blocks "$1")
+       (( total > 0 ))
+       [[ $(daxctl_get_online_blocks "$1") == "$total" ]]
+}
+
+check_memory_offline()
+{
+       [[ $(daxctl_get_online_blocks "$1") == "0" ]]
+}
+
+# skipped on kernels without daxX.Y/state
+check_kmem_state()
+{
+       local path="/sys/bus/dax/devices/$1/state"
+
+       [[ -f "$path" ]] || return 0
+       [[ $(cat "$path") == "$2" ]]
+       [[ $("$DAXCTL" list -d "$1" | jq -er '.[].hotplug_state') == "$2" ]]
+}
+
 set_online_policy()
 {
        echo "online" > /sys/devices/system/memory/auto_online_blocks
@@ -100,7 +134,26 @@ daxctl_test()
        "$DAXCTL" reconfigure-device -N -m system-ram "$daxdev"
        [[ $(daxctl_get_mode "$daxdev") == "system-ram" ]]
        "$DAXCTL" online-memory "$daxdev"
+       check_memory_online "$daxdev"
+       check_kmem_state "$daxdev" "online_movable"
        "$DAXCTL" offline-memory "$daxdev"
+       check_memory_offline "$daxdev"
+       check_kmem_state "$daxdev" "unplugged"
+       # again, now from 'unplugged' where supported
+       "$DAXCTL" online-memory "$daxdev"
+       check_memory_online "$daxdev"
+       check_kmem_state "$daxdev" "online_movable"
+       "$DAXCTL" offline-memory "$daxdev"
+       check_memory_offline "$daxdev"
+       check_kmem_state "$daxdev" "unplugged"
+       # an already offline device is unplugged too, where supported
+       if [[ -f /sys/bus/dax/devices/$daxdev/state ]]; then
+               "$DAXCTL" reconfigure-device -m devdax "$daxdev"
+               "$DAXCTL" reconfigure-device -N -m system-ram "$daxdev"
+               check_kmem_state "$daxdev" "offline"
+               "$DAXCTL" offline-memory "$daxdev"
+               check_kmem_state "$daxdev" "unplugged"
+       fi
        "$DAXCTL" reconfigure-device -m devdax "$daxdev"
        [[ $(daxctl_get_mode "$daxdev") == "devdax" ]]
        "$DAXCTL" reconfigure-device -m system-ram "$daxdev"
-- 
2.53.0-Meta


Reply via email to