1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef _BCACHEFS_CLOCK_TYPES_H |
3 | #define _BCACHEFS_CLOCK_TYPES_H |
4 | |
5 | #include "util.h" |
6 | |
7 | #define NR_IO_TIMERS (BCH_SB_MEMBERS_MAX * 3) |
8 | |
9 | /* |
10 | * Clocks/timers in units of sectors of IO: |
11 | * |
12 | * Note - they use percpu batching, so they're only approximate. |
13 | */ |
14 | |
15 | struct io_timer; |
16 | typedef void (*io_timer_fn)(struct io_timer *); |
17 | |
18 | struct io_timer { |
19 | io_timer_fn fn; |
20 | unsigned long expire; |
21 | }; |
22 | |
23 | /* Amount to buffer up on a percpu counter */ |
24 | #define IO_CLOCK_PCPU_SECTORS 128 |
25 | |
26 | typedef HEAP(struct io_timer *) io_timer_heap; |
27 | |
28 | struct io_clock { |
29 | atomic64_t now; |
30 | u16 __percpu *pcpu_buf; |
31 | unsigned max_slop; |
32 | |
33 | spinlock_t timer_lock; |
34 | io_timer_heap timers; |
35 | }; |
36 | |
37 | #endif /* _BCACHEFS_CLOCK_TYPES_H */ |
38 | |