| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| # Kselftest framework requirement - SKIP code is 4. |
| ksft_skip=4 |
| |
| if [ $EUID -ne 0 ] |
| then |
| echo "Run as root" |
| exit $ksft_skip |
| fi |
| |
| damon_sysfs="/sys/kernel/mm/damon/admin" |
| if [ ! -d "$damon_sysfs" ] |
| then |
| echo "damon sysfs not found" |
| exit $ksft_skip |
| fi |
| |
| # clear log |
| dmesg -C |
| |
| # start DAMON with a scheme |
| echo 1 > "$damon_sysfs/kdamonds/nr_kdamonds" |
| echo 1 > "$damon_sysfs/kdamonds/0/contexts/nr_contexts" |
| echo "vaddr" > "$damon_sysfs/kdamonds/0/contexts/0/operations" |
| echo 1 > "$damon_sysfs/kdamonds/0/contexts/0/targets/nr_targets" |
| echo $$ > "$damon_sysfs/kdamonds/0/contexts/0/targets/0/pid_target" |
| echo 1 > "$damon_sysfs/kdamonds/0/contexts/0/schemes/nr_schemes" |
| scheme_dir="$damon_sysfs/kdamonds/0/contexts/0/schemes/0" |
| echo 4096000 > "$scheme_dir/access_pattern/sz/max" |
| echo 20 > "$scheme_dir/access_pattern/nr_accesses/max" |
| echo 1024 > "$scheme_dir/access_pattern/age/max" |
| echo "on" > "$damon_sysfs/kdamonds/0/state" |
| sleep 0.3 |
| |
| # remove scheme sysfs dir |
| echo 0 > "$damon_sysfs/kdamonds/0/contexts/0/schemes/nr_schemes" |
| |
| # try to update stat of already removed scheme sysfs dir |
| echo "update_schemes_stats" > "$damon_sysfs/kdamonds/0/state" |
| if dmesg | grep -q BUG |
| then |
| echo "update_schemes_stats triggers a kernel bug" |
| dmesg |
| exit 1 |
| fi |
| |
| # try to update tried regions of already removed scheme sysfs dir |
| echo "update_schemes_tried_regions" > "$damon_sysfs/kdamonds/0/state" |
| if dmesg | grep -q BUG |
| then |
| echo "update_schemes_tried_regions triggers a kernel bug" |
| dmesg |
| exit 1 |
| fi |
| |
| echo "off" > "$damon_sysfs/kdamonds/0/state" |