#!/bin/sh
export PATH=/bin:/sbin
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devtmpfs devtmpfs /dev
mkdir -p /sys/kernel/tracing
mount -t tracefs tracefs /sys/kernel/tracing
echo LAB_GUEST_BOOT
uname -a
sleep 3
for d in /sys/bus/pci/devices/*; do
    if [ "$(cat "$d/vendor")" = 0x8086 ] && [ "$(cat "$d/device")" = 0x0d93 ]; then
        bdf=${d##*/}
        echo "CXL_DEVICE $bdf"
        echo cxl_compression > "$d/driver_override"
        if [ -L "$d/driver" ]; then echo "$bdf" > "$d/driver/unbind"; fi
        echo "$bdf" > /sys/bus/pci/drivers/cxl_compression/bind
    fi
done
sleep 3
echo NODE_PRIVATE
cat /sys/devices/system/node/has_private_memory
echo NODE_ONLINE
cat /sys/devices/system/node/online
cat /sys/devices/system/node/node*/meminfo
nid=$(cat /sys/devices/system/node/has_private_memory)
echo lz4 > /sys/block/zram0/comp_algorithm
echo 256M > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0
for phase in disabled enabled; do
 echo PHASE_BEGIN_$phase
 if [ "$phase" = disabled ]; then echo false > /sys/kernel/mm/numa/demotion_enabled; else echo true > /sys/kernel/mm/numa/demotion_enabled; fi
 cat /sys/kernel/mm/numa/demotion_enabled
 /bin/stress "$phase" "$nid"
 echo "WORKLOAD_EXIT_$phase $?"
 sleep 2
 echo PHASE_END_$phase
done
echo PROBE_BEGIN_initial
/bin/stress probe "$nid"
echo PROBE_END_initial
echo INJECT_LOW_READY
sleep 4
echo PROBE_BEGIN_blocked
/bin/stress probe "$nid"
echo PROBE_END_blocked
echo PHASE_BEGIN_blocked
/bin/stress blocked "$nid"
echo "WORKLOAD_EXIT_blocked $?"
echo PHASE_END_blocked
echo INJECT_HIGH_READY
sleep 4
echo PROBE_BEGIN_resumed
/bin/stress probe "$nid"
echo PROBE_END_resumed
swapoff /dev/zram0
echo 1 > /sys/block/zram0/reset
echo LAB_GUEST_DONE
poweroff -f
