1#! /bin/sh
2# SPDX-License-Identifier: GPL-2.0-or-later
3# Copyright (c) 2012 FUJITSU LIMITED
4# Copyright (c) 2014-2018 Linux Test Project
5# Copyright (c) 2021 Joerg Vehlow <[email protected]>
6#
7# Author: Peng Haitao <[email protected]>
8
9MEMCG_TESTFUNC=test
10TST_CNT=4
11
12
13
14# Run test cases which test memory.move_charge_at_immigrate
15test_move_charge()
16{
17	local memtypes="$1"
18	local size=$2
19	local total_size=$3
20	local move_charge_mask=$4
21	local b_rss=$5
22	local b_cache=$6
23	local a_rss=$7
24	local a_cache=$8
25
26	mkdir subgroup_a
27
28	start_memcg_process $memtypes -s $size
29
30	warmup
31	if [ $? -ne 0 ]; then
32		rmdir subgroup_a
33		return
34	fi
35
36	ROD echo $MEMCG_PROCESS_PID \> subgroup_a/tasks
37	signal_memcg_process $total_size "subgroup_a/"
38
39	ROD mkdir subgroup_b
40	echo $move_charge_mask > subgroup_b/memory.move_charge_at_immigrate
41	echo $MEMCG_PROCESS_PID > subgroup_b/tasks
42
43	cd subgroup_b
44	check_mem_stat "rss" $b_rss
45	check_mem_stat "cache" $b_cache
46	cd ../subgroup_a
47	check_mem_stat "rss" $a_rss
48	check_mem_stat "cache" $a_cache
49	cd ..
50	stop_memcg_process
51	rmdir subgroup_a subgroup_b
52}
53
54
55test1()
56{
57	tst_res TINFO "Test disable moving charges"
58	test_move_charge "--mmap-anon" $PAGESIZES $PAGESIZES 0 0 0 $PAGESIZES 0
59}
60
61test2()
62{
63	tst_res TINFO "Test move anon"
64	test_move_charge "--mmap-anon --shm --mmap-file" $PAGESIZES \
65		$((PAGESIZES * 3)) 1 $PAGESIZES 0 0 $((PAGESIZES * 2))
66}
67
68test3()
69{
70	tst_res TINFO "Test move file"
71	test_move_charge "--mmap-anon --shm --mmap-file" $PAGESIZES \
72		$((PAGESIZES * 3)) 2 0 $((PAGESIZES * 2)) $PAGESIZES 0
73}
74
75test4()
76{
77	tst_res TINFO "Test move anon and file"
78	test_move_charge "--mmap-anon --shm" $PAGESIZES \
79		$((PAGESIZES * 2)) 3 $PAGESIZES $PAGESIZES 0 0
80}
81
82. memcg_lib.sh
83tst_run
84