starnix_core/fs/sysfs/
kernel_directory.rs1use 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
12pub 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 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.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}