File: test_percpu.py

package info (click to toggle)
drgn 0.0.31-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 5,956 kB
  • sloc: ansic: 49,446; python: 45,054; awk: 423; makefile: 339; sh: 114
file content (39 lines) | stat: -rw-r--r-- 1,441 bytes parent folder | download | duplicates (2)
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
# 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
from tests.linux_kernel import (
    LinuxKernelTestCase,
    prng32,
    skip_unless_have_test_kmod,
    smp_enabled,
)


class TestPerCpu(LinuxKernelTestCase):
    def test_per_cpu(self):
        smp = smp_enabled()
        for cpu in for_each_possible_cpu(self.prog):
            if smp:
                self.assertEqual(per_cpu(self.prog["runqueues"], cpu).cpu, cpu)
            else:
                # struct rq::cpu only exists if CONFIG_SMP=y, so just check
                # that we get something valid.
                self.assertEqual(
                    per_cpu(self.prog["runqueues"], cpu).idle.comm.string_(), b"swapper"
                )

    @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
            )