Skip to main content

page_queues_bindings/
page_queues_bindings.rs

1// Copyright 2026 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
5// This file is automatically generated by //zircon/kernel/vm:_kernel_bindgen_crate.page-queues-bindings.bindgen.
6
7#![expect(non_camel_case_types)]
8#![expect(non_upper_case_globals)]
9#![no_std]
10pub use event_bindings::{AutounsignalEvent, Event};
11use page_bindings::vm_page_t;
12pub use zx_types::{zx_duration_mono_t, zx_instant_mono_t, zx_paddr_t};
13pub type Thread = core::ffi::c_void;
14pub type VmCowPages = *const core::ffi::c_void;
15pub type VmDebugCompressor = core::ffi::c_void;
16pub type VmPageDoublyLinkedList = usize;
17
18#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
19#[repr(C, align(8))]
20pub struct __BindgenOpaqueArray8<T>(pub T);
21impl<T: Copy + Default, const N: usize> Default for __BindgenOpaqueArray8<[T; N]> {
22    fn default() -> Self {
23        Self([<T as Default>::default(); N])
24    }
25}
26#[repr(C)]
27#[derive(Debug, Copy, Clone)]
28pub struct std_atomic<_Tp> {
29    pub _phantom_0: ::core::marker::PhantomData<::core::cell::UnsafeCell<_Tp>>,
30    pub _address: u8,
31}
32pub type std_atomic___base = u8;
33#[repr(C)]
34#[derive(Debug, Copy, Clone)]
35pub struct RelaxedAtomic<T> {
36    pub _phantom_0: ::core::marker::PhantomData<::core::cell::UnsafeCell<T>>,
37    pub _address: u8,
38}
39unsafe extern "C" {
40    pub fn cpp_page_queues_stop_threads(queues: *mut PageQueues);
41}
42#[repr(C)]
43pub struct PageQueues {
44    pub list_lock_: __BindgenOpaqueArray8<[u8; 24usize]>,
45    pub lock_: __BindgenOpaqueArray8<[u8; 24usize]>,
46    pub aging_event_: *mut Event,
47    pub aging_disabled_: bool,
48    pub __bindgen_padding_0: [u8; 7usize],
49    pub last_age_time_: __BindgenOpaqueArray8<[u8; 8usize]>,
50    pub last_age_reason_: PageQueues_AgeReason,
51    pub active_ratio_triggered_: bool,
52    pub __bindgen_padding_1: [u8; 3usize],
53    pub mru_event_: AutounsignalEvent,
54    pub lru_event_: AutounsignalEvent,
55    pub lru_action_: PageQueues_LruAction,
56    pub __bindgen_padding_2: [u8; 4usize],
57    pub page_queues_: __BindgenOpaqueArray8<[u8; 128usize]>,
58    pub isolate_queues_: __BindgenOpaqueArray8<[u8; 16usize]>,
59    pub lru_gen_: __BindgenOpaqueArray8<[u8; 8usize]>,
60    pub mru_gen_: __BindgenOpaqueArray8<[u8; 8usize]>,
61    pub page_queue_counts_: __BindgenOpaqueArray8<[u8; 128usize]>,
62    pub lazy_active_ratio_aging_skips_: __BindgenOpaqueArray8<[u8; 8usize]>,
63    pub consecutive_skipped_sweeps_: u32,
64    pub shutdown_threads_: u8,
65    pub __bindgen_padding_3: [u8; 3usize],
66    pub mru_thread_: *mut Thread,
67    pub lru_thread_: *mut Thread,
68    pub debug_compressor_: __BindgenOpaqueArray8<[u8; 8usize]>,
69    pub min_mru_rotate_time_: zx_duration_mono_t,
70    pub max_mru_rotate_time_: zx_duration_mono_t,
71    pub zero_fork_is_reclaimable_: u8,
72    pub anonymous_is_reclaimable_: u8,
73    pub __bindgen_padding_4: [u8; 6usize],
74    pub active_ratio_multiplier_: i64,
75}
76#[repr(i32)]
77#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
78pub enum PageQueues_AgeReason {
79    Timeout = 0,
80    ActiveRatio = 1,
81    Manual = 2,
82}
83#[repr(C)]
84#[derive(Debug, Copy, Clone)]
85pub struct PageQueues_ReclaimCounts {
86    pub total: usize,
87    pub newest: usize,
88    pub oldest: usize,
89}
90#[repr(C)]
91#[derive(Debug, Copy, Clone)]
92pub struct PageQueues_Counts {
93    pub reclaim: __BindgenOpaqueArray8<[u8; 64usize]>,
94    pub reclaim_isolate: usize,
95    pub pager_backed_dirty: usize,
96    pub anonymous: usize,
97    pub wired: usize,
98    pub anonymous_zero_fork: usize,
99    pub failed_reclaim: usize,
100    pub high_priority: usize,
101}
102#[repr(C)]
103#[derive(Debug, Copy, Clone)]
104pub struct PageQueues_ActiveInactiveCounts {
105    pub active: usize,
106    pub inactive: usize,
107}
108#[repr(i32)]
109#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
110pub enum PageQueues_LruAction {
111    None = 0,
112    EvictOnly = 1,
113    CompressOnly = 2,
114    EvictAndCompress = 3,
115}
116pub const PageQueues_PageQueue_PageQueueNone: PageQueues_PageQueue = 0;
117pub const PageQueues_PageQueue_PageQueueAnonymous: PageQueues_PageQueue = 1;
118pub const PageQueues_PageQueue_PageQueueWired: PageQueues_PageQueue = 2;
119pub const PageQueues_PageQueue_PageQueueHighPriority: PageQueues_PageQueue = 3;
120pub const PageQueues_PageQueue_PageQueueAnonymousZeroFork: PageQueues_PageQueue = 4;
121pub const PageQueues_PageQueue_PageQueuePagerBackedDirty: PageQueues_PageQueue = 5;
122pub const PageQueues_PageQueue_PageQueueFailedReclaim: PageQueues_PageQueue = 6;
123pub const PageQueues_PageQueue_PageQueueReclaimIsolate: PageQueues_PageQueue = 7;
124pub const PageQueues_PageQueue_PageQueueReclaimBase: PageQueues_PageQueue = 8;
125pub const PageQueues_PageQueue_PageQueueReclaimLast: PageQueues_PageQueue = 15;
126pub const PageQueues_PageQueue_PageQueueNumQueues: PageQueues_PageQueue = 16;
127pub type PageQueues_PageQueue = u8;
128pub const PageQueues_kNumReclaim: usize = 8;
129pub const PageQueues_kNumActiveQueues: usize = 2;
130pub const PageQueues_kActiveInactiveErrorMargin: usize = 512;
131pub const PageQueues_kNumOldestQueues: usize = 2;
132pub const PageQueues_kIsolateQueueDontNeed: usize = 0;
133pub const PageQueues_kIsolateQueueStandard: usize = 1;
134pub const PageQueues_kNumIsolateQueues: usize = 2;
135pub const PageQueues_kDefaultMinMruRotateTime: zx_duration_mono_t = 5000000000;
136pub const PageQueues_kDefaultMaxMruRotateTime: zx_duration_mono_t = 5000000000;
137pub const PageQueues_kDefaultActiveRatioMultiplier: u64 = 0;
138pub const PageQueues_kOpBatchSize: usize = 64;
139#[repr(C)]
140#[derive(Debug, Copy, Clone)]
141pub struct PageQueuesVmoBacklink {
142    pub cow: *mut VmCowPages,
143    pub page: *mut vm_page_t,
144    pub offset: u64,
145}
146unsafe extern "C" {
147    pub fn cpp_page_queues_init(queues: *mut u8);
148}
149unsafe extern "C" {
150    pub fn cpp_page_queues_set_wired(
151        queues: *mut PageQueues,
152        page: *mut vm_page_t,
153        cow: *mut VmCowPages,
154        offset: u64,
155    );
156}
157unsafe extern "C" {
158    pub fn cpp_page_queues_set_anonymous(
159        queues: *mut PageQueues,
160        page: *mut vm_page_t,
161        cow: *mut VmCowPages,
162        offset: u64,
163        skip_reclaim: bool,
164    );
165}
166unsafe extern "C" {
167    pub fn cpp_page_queues_set_reclaim(
168        queues: *mut PageQueues,
169        page: *mut vm_page_t,
170        cow: *mut VmCowPages,
171        offset: u64,
172    );
173}
174unsafe extern "C" {
175    pub fn cpp_page_queues_set_pager_backed_dirty(
176        queues: *mut PageQueues,
177        page: *mut vm_page_t,
178        cow: *mut VmCowPages,
179        offset: u64,
180    );
181}
182unsafe extern "C" {
183    pub fn cpp_page_queues_set_anonymous_zero_fork(
184        queues: *mut PageQueues,
185        page: *mut vm_page_t,
186        cow: *mut VmCowPages,
187        offset: u64,
188    );
189}
190unsafe extern "C" {
191    pub fn cpp_page_queues_set_high_priority(
192        queues: *mut PageQueues,
193        page: *mut vm_page_t,
194        cow: *mut VmCowPages,
195        offset: u64,
196    );
197}
198unsafe extern "C" {
199    pub fn cpp_page_queues_move_to_wired(queues: *mut PageQueues, page: *mut vm_page_t);
200}
201unsafe extern "C" {
202    pub fn cpp_page_queues_move_to_anonymous(
203        queues: *mut PageQueues,
204        page: *mut vm_page_t,
205        skip_reclaim: bool,
206    );
207}
208unsafe extern "C" {
209    pub fn cpp_page_queues_move_to_reclaim(queues: *mut PageQueues, page: *mut vm_page_t);
210}
211unsafe extern "C" {
212    pub fn cpp_page_queues_move_to_reclaim_dont_need(queues: *mut PageQueues, page: *mut vm_page_t);
213}
214unsafe extern "C" {
215    pub fn cpp_page_queues_move_to_pager_backed_dirty(
216        queues: *mut PageQueues,
217        page: *mut vm_page_t,
218    );
219}
220unsafe extern "C" {
221    pub fn cpp_page_queues_move_to_high_priority(queues: *mut PageQueues, page: *mut vm_page_t);
222}
223unsafe extern "C" {
224    pub fn cpp_page_queues_move_anonymous_to_anonymous_zero_fork(
225        queues: *mut PageQueues,
226        page: *mut vm_page_t,
227    );
228}
229unsafe extern "C" {
230    pub fn cpp_page_queues_compress_failed(queues: *mut PageQueues, page: *mut vm_page_t);
231}
232unsafe extern "C" {
233    pub fn cpp_page_queues_change_object_offset(
234        queues: *mut PageQueues,
235        page: *mut vm_page_t,
236        cow: *mut VmCowPages,
237        page_offset: u64,
238    );
239}
240unsafe extern "C" {
241    pub fn cpp_page_queues_change_object_offset_array(
242        queues: *mut PageQueues,
243        pages: *mut *mut vm_page_t,
244        cow: *mut VmCowPages,
245        offsets: *const u64,
246        count: usize,
247    );
248}
249unsafe extern "C" {
250    pub fn cpp_page_queues_change_object_offset_locked_list(
251        queues: *mut PageQueues,
252        page: *mut vm_page_t,
253        cow: *mut VmCowPages,
254        offset: u64,
255    );
256}
257unsafe extern "C" {
258    pub fn cpp_page_queues_remove(queues: *mut PageQueues, page: *mut vm_page_t);
259}
260unsafe extern "C" {
261    pub fn cpp_page_queues_remove_array_into_list(
262        queues: *mut PageQueues,
263        pages: *mut *mut vm_page_t,
264        count: usize,
265        out_list: *mut VmPageDoublyLinkedList,
266    );
267}
268unsafe extern "C" {
269    pub fn cpp_page_queues_mark_accessed(queues: *mut PageQueues, page: *mut vm_page_t);
270}
271unsafe extern "C" {
272    pub fn cpp_page_queues_get_lock(queues: *mut PageQueues) -> *mut ::core::ffi::c_void;
273}
274unsafe extern "C" {
275    pub fn cpp_page_queues_string_from_age_reason(reason: i32) -> *const ::core::ffi::c_char;
276}
277unsafe extern "C" {
278    pub fn cpp_page_queues_rotate_reclaim_queues(queues: *mut PageQueues);
279}
280unsafe extern "C" {
281    pub fn cpp_page_queues_pop_anonymous_zero_fork(
282        queues: *mut PageQueues,
283        out_backlink: *mut PageQueuesVmoBacklink,
284    ) -> bool;
285}
286unsafe extern "C" {
287    pub fn cpp_page_queues_peek_isolate(
288        queues: *mut PageQueues,
289        lowest_queue: usize,
290        out_backlink: *mut PageQueuesVmoBacklink,
291    ) -> bool;
292}
293unsafe extern "C" {
294    pub fn cpp_page_queues_get_cow_for_loaned_page(
295        queues: *mut PageQueues,
296        page: *mut vm_page_t,
297        out_backlink: *mut PageQueuesVmoBacklink,
298    ) -> bool;
299}
300unsafe extern "C" {
301    pub fn cpp_page_queues_get_reclaim_queue_counts(
302        queues: *const PageQueues,
303        out_counts: *mut PageQueues_ReclaimCounts,
304    );
305}
306unsafe extern "C" {
307    pub fn cpp_page_queues_queue_counts(
308        queues: *const PageQueues,
309        out_counts: *mut PageQueues_Counts,
310    );
311}
312unsafe extern "C" {
313    pub fn cpp_page_queues_get_active_inactive_counts(
314        queues: *const PageQueues,
315        out_counts: *mut PageQueues_ActiveInactiveCounts,
316    );
317}
318unsafe extern "C" {
319    pub fn cpp_page_queues_dump(queues: *mut PageQueues);
320}
321unsafe extern "C" {
322    pub fn cpp_page_queues_get_lru_pages_compressed() -> u64;
323}
324unsafe extern "C" {
325    pub fn cpp_page_queues_enable_anonymous_reclaim(queues: *mut PageQueues, zero_forks: bool);
326}
327unsafe extern "C" {
328    pub fn cpp_page_queues_reclaim_is_only_pager_backed(queues: *const PageQueues) -> bool;
329}
330unsafe extern "C" {
331    pub fn cpp_page_queues_is_page_reclaimable(page: *const vm_page_t) -> bool;
332}
333unsafe extern "C" {
334    pub fn cpp_page_queues_debug_page_is_reclaim(
335        queues: *const PageQueues,
336        page: *const vm_page_t,
337        out_queue: *mut usize,
338    ) -> bool;
339}
340unsafe extern "C" {
341    pub fn cpp_page_queues_debug_page_is_reclaim_isolate(
342        queues: *const PageQueues,
343        page: *const vm_page_t,
344    ) -> bool;
345}
346unsafe extern "C" {
347    pub fn cpp_page_queues_debug_page_is_pager_backed_dirty(
348        queues: *const PageQueues,
349        page: *const vm_page_t,
350    ) -> bool;
351}
352unsafe extern "C" {
353    pub fn cpp_page_queues_debug_page_is_anonymous(
354        queues: *const PageQueues,
355        page: *const vm_page_t,
356    ) -> bool;
357}
358unsafe extern "C" {
359    pub fn cpp_page_queues_debug_page_is_anonymous_zero_fork(
360        queues: *const PageQueues,
361        page: *const vm_page_t,
362    ) -> bool;
363}
364unsafe extern "C" {
365    pub fn cpp_page_queues_debug_page_is_any_anonymous(
366        queues: *const PageQueues,
367        page: *const vm_page_t,
368    ) -> bool;
369}
370unsafe extern "C" {
371    pub fn cpp_page_queues_debug_page_is_wired(
372        queues: *const PageQueues,
373        page: *const vm_page_t,
374    ) -> bool;
375}
376unsafe extern "C" {
377    pub fn cpp_page_queues_debug_page_is_high_priority(
378        queues: *const PageQueues,
379        page: *const vm_page_t,
380    ) -> bool;
381}
382unsafe extern "C" {
383    pub fn cpp_page_queues_start_threads(
384        queues: *mut PageQueues,
385        min_mru_rotate_time: zx_duration_mono_t,
386        max_mru_rotate_time: zx_duration_mono_t,
387    );
388}
389unsafe extern "C" {
390    pub fn cpp_page_queues_start_debug_compressor(queues: *mut PageQueues);
391}
392unsafe extern "C" {
393    pub fn cpp_page_queues_set_active_ratio_multiplier(queues: *mut PageQueues, multiplier: u32);
394}
395unsafe extern "C" {
396    pub fn cpp_page_queues_set_lru_action(queues: *mut PageQueues, action: i32);
397}
398unsafe extern "C" {
399    pub fn cpp_page_queues_disable_aging(queues: *mut PageQueues);
400}
401unsafe extern "C" {
402    pub fn cpp_page_queues_enable_aging(queues: *mut PageQueues);
403}
404unsafe extern "C" {
405    pub fn cpp_page_queues_set_aging_event(queues: *mut PageQueues, event: *mut Event);
406}
407unsafe extern "C" {
408    pub fn cpp_page_queues_debug_get_lru_thread(queues: *mut PageQueues) -> *mut Thread;
409}
410unsafe extern "C" {
411    pub fn cpp_page_queues_debug_get_mru_thread(queues: *mut PageQueues) -> *mut Thread;
412}
413unsafe extern "C" {
414    pub fn cpp_debug_compressor_init(compressor: *mut u8);
415}
416unsafe extern "C" {
417    pub fn cpp_debug_compressor_destroy(compressor: *mut VmDebugCompressor);
418}