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.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}