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        dir.entry(
63            "buffers",
64            StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
65            mode!(IFREG, 0o444),
66        );
67    });
68    dir.subdir("ion", dir_mode, |dir| {
69        dir.entry(
70            "total_heaps_kb",
71            StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
72            mode!(IFREG, 0o444),
73        );
74        dir.entry(
75            "total_pools_kb",
76            StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
77            mode!(IFREG, 0o444),
78        );
79    });
80    dir.subdir("mm", dir_mode, |dir| {
81        dir.entry(
82            "cma",
83            StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
84            mode!(IFREG, 0o444),
85        );
86        dir.subdir("lru_gen", dir_mode, |dir| {
87            dir.entry(
88                "enabled",
89                StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
90                mode!(IFREG, 0o644),
91            );
92        });
93        dir.subdir("pgsize_migration", dir_mode, |dir| {
94            dir.entry(
95                "enabled",
96                StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/452096300")),
97                mode!(IFREG, 0o644),
98            );
99        });
100        dir.subdir("transparent_hugepage", dir_mode, |dir| {
101            dir.entry(
102                "enabled",
103                StubEmptyFile::new_node(bug_ref!("https://fxbug.dev/322894184")),
104                mode!(IFREG, 0o644),
105            );
106        });
107    });
108}