Skip to main content

starnix_core/fs/sysfs/
kernel_directory.rs

1// Copyright 2023 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use crate::task::Kernel;
6use crate::vfs::pseudo::simple_directory::SimpleDirectoryMutator;
7use crate::vfs::pseudo::simple_file::create_bytes_file_with_handler;
8use crate::vfs::pseudo::stub_empty_file::StubEmptyFile;
9use starnix_logging::bug_ref;
10use starnix_uapi::file_mode::mode;
11
12/// This directory contains various files and subdirectories that provide information about
13/// the running kernel.
14pub fn build_kernel_directory(kernel: &Kernel, dir: &SimpleDirectoryMutator) {
15    let dir_mode = 0o755;
16    dir.subdir("debug", dir_mode, |_| ());
17    dir.subdir("tracing", dir_mode, |_| ());
18    dir.subdir("wakeup_reasons", dir_mode, |dir| {
19        let read_only_file_mode = mode!(IFREG, 0o444);
20        dir.entry(
21            "last_resume_reason",
22            create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
23                kernel.suspend_resume_manager.suspend_stats().last_resume_reason.unwrap_or_default()
24            }),
25            read_only_file_mode,
26        );
27        dir.entry(
28            "last_suspend_time",
29            create_bytes_file_with_handler(kernel.weak_self.clone(), |kernel| {
30                let suspend_stats = kernel.suspend_resume_manager.suspend_stats();
31                // First number is the time spent in suspend and resume processes.
32                // Second number is the time spent in sleep state.
33                format!(
34                    "{} {}",
35                    suspend_stats.last_time_in_suspend_operations.into_seconds_f64(),
36                    suspend_stats.last_time_in_sleep.into_seconds_f64()
37                )
38            }),
39            read_only_file_mode,
40        );
41    });
42
43    dir.subdir("fs", dir_mode, |dir| {
44        dir.subdir("cgroup", dir_mode, |dir| {
45            dir.entry(
46                "cgroup.subtree_control",
47                StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
48                mode!(IFREG, 0o644),
49            );
50            for name in ["apps", "system"] {
51                dir.subdir(name, dir_mode, |dir| {
52                    dir.entry(
53                        "cgroup.subtree_control",
54                        StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
55                        mode!(IFREG, 0o644),
56                    );
57                });
58            }
59        });
60    });
61    dir.subdir("dmabuf", dir_mode, |dir| {
62        // TODO(https://fxbug.dev/452096300"): Do not report any buffer for now.
63        dir.subdir("buffers", dir_mode, |_| {});
64    });
65    dir.subdir("ion", dir_mode, |dir| {
66        dir.entry(
67            "total_heaps_kb",
68            StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
69            mode!(IFREG, 0o444),
70        );
71        dir.entry(
72            "total_pools_kb",
73            StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
74            mode!(IFREG, 0o444),
75        );
76    });
77    dir.subdir("mm", dir_mode, |dir| {
78        dir.entry(
79            "cma",
80            StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
81            mode!(IFREG, 0o444),
82        );
83        dir.subdir("lru_gen", dir_mode, |dir| {
84            dir.entry(
85                "enabled",
86                StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
87                mode!(IFREG, 0o644),
88            );
89        });
90        dir.subdir("pgsize_migration", dir_mode, |dir| {
91            dir.entry(
92                "enabled",
93                StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
94                mode!(IFREG, 0o644),
95            );
96        });
97        dir.subdir("transparent_hugepage", dir_mode, |dir| {
98            dir.entry(
99                "enabled",
100                StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/322894184")),
101                mode!(IFREG, 0o644),
102            );
103        });
104    });
105}