xref: /linux/tools/testing/selftests/damon/sysfs_update_removed_scheme_dir.sh (revision 8d2b0853add1d7534dc0794e3c8e0b9e8c4ec640)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4source _common.sh
5
6# Kselftest framework requirement - SKIP code is 4.
7ksft_skip=4
8
9check_dependencies
10
11damon_sysfs="/sys/kernel/mm/damon/admin"
12if [ ! -d "$damon_sysfs" ]
13then
14	echo "damon sysfs not found"
15	exit $ksft_skip
16fi
17
18# clear log
19dmesg -C
20
21# start DAMON with a scheme
22echo 1 > "$damon_sysfs/kdamonds/nr_kdamonds"
23echo 1 > "$damon_sysfs/kdamonds/0/contexts/nr_contexts"
24echo "vaddr" > "$damon_sysfs/kdamonds/0/contexts/0/operations"
25echo 1 > "$damon_sysfs/kdamonds/0/contexts/0/targets/nr_targets"
26echo $$ > "$damon_sysfs/kdamonds/0/contexts/0/targets/0/pid_target"
27echo 1 > "$damon_sysfs/kdamonds/0/contexts/0/schemes/nr_schemes"
28scheme_dir="$damon_sysfs/kdamonds/0/contexts/0/schemes/0"
29echo 4096000 > "$scheme_dir/access_pattern/sz/max"
30echo 20 > "$scheme_dir/access_pattern/nr_accesses/max"
31echo 1024 > "$scheme_dir/access_pattern/age/max"
32echo "on" > "$damon_sysfs/kdamonds/0/state"
33sleep 0.3
34
35# remove scheme sysfs dir
36echo 0 > "$damon_sysfs/kdamonds/0/contexts/0/schemes/nr_schemes"
37
38# try to update stat of already removed scheme sysfs dir
39echo "update_schemes_stats" > "$damon_sysfs/kdamonds/0/state"
40if dmesg | grep -q BUG
41then
42	echo "update_schemes_stats triggers a kernel bug"
43	dmesg
44	exit 1
45fi
46
47# try to update tried regions of already removed scheme sysfs dir
48echo "update_schemes_tried_regions" > "$damon_sysfs/kdamonds/0/state"
49if dmesg | grep -q BUG
50then
51	echo "update_schemes_tried_regions triggers a kernel bug"
52	dmesg
53	exit 1
54fi
55
56echo "off" > "$damon_sysfs/kdamonds/0/state"
57