File: test_percpu.py

package info (click to toggle)
drgn 0.0.33-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,892 kB
  • sloc: python: 59,081; ansic: 51,400; awk: 423; makefile: 339; sh: 113
file content (58 lines) | stat: -rw-r--r-- 2,191 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# Copyright (c) Meta Platforms, Inc. and affiliates.
# SPDX-License-Identifier: LGPL-2.1-or-later

from drgn.helpers.linux.cpumask import for_each_possible_cpu
from drgn.helpers.linux.percpu import (
    per_cpu,
    per_cpu_ptr,
    percpu_counter_sum,
    percpu_counter_sum_positive,
)
from tests.linux_kernel import LinuxKernelTestCase, prng32, skip_unless_have_test_kmod


class TestPerCpu(LinuxKernelTestCase):
    def test_per_cpu(self):
        for cpu in for_each_possible_cpu(self.prog):
            rq = per_cpu(self.prog["runqueues"], cpu)
            try:
                rq_cpu = rq.cpu
            except AttributeError:
                # Before Linux kernel commit cac5cefbade9 ("sched/smp: Make SMP
                # unconditional") (in v6.17), struct rq::cpu only exists if
                # CONFIG_SMP=y, so check this instead.
                self.assertEqual(rq.idle, self.prog["init_task"].address_of_())
            else:
                self.assertEqual(rq_cpu, cpu)

    @skip_unless_have_test_kmod
    def test_per_cpu_module_static(self):
        for cpu, expected in zip(for_each_possible_cpu(self.prog), prng32("PCPU")):
            self.assertEqual(
                per_cpu(self.prog["drgn_test_percpu_static"], cpu), expected
            )

    @skip_unless_have_test_kmod
    def test_per_cpu_module_dynamic(self):
        for cpu, expected in zip(for_each_possible_cpu(self.prog), prng32("pcpu")):
            self.assertEqual(
                per_cpu_ptr(self.prog["drgn_test_percpu_dynamic"], cpu)[0], expected
            )


@skip_unless_have_test_kmod
class TestPercpuCounter(LinuxKernelTestCase):
    def test_percpu_counter_sum(self):
        self.assertEqual(percpu_counter_sum(self.prog["drgn_test_percpu_counter"]), 13)
        self.assertEqual(
            percpu_counter_sum(self.prog["drgn_test_percpu_counter_negative"]), -66
        )

    def test_percpu_counter_sum_positive(self):
        self.assertEqual(
            percpu_counter_sum_positive(self.prog["drgn_test_percpu_counter"]), 13
        )
        self.assertEqual(
            percpu_counter_sum_positive(self.prog["drgn_test_percpu_counter_negative"]),
            0,
        )