hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
kernel/include/linux/sched_clock.h
....@@ -1,14 +1,39 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * sched_clock.h: support for extending counters to full 64-bit ns counter
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License version 2 as
6
- * published by the Free Software Foundation.
74 */
85 #ifndef LINUX_SCHED_CLOCK
96 #define LINUX_SCHED_CLOCK
107
118 #ifdef CONFIG_GENERIC_SCHED_CLOCK
9
+/**
10
+ * struct clock_read_data - data required to read from sched_clock()
11
+ *
12
+ * @epoch_ns: sched_clock() value at last update
13
+ * @epoch_cyc: Clock cycle value at last update.
14
+ * @sched_clock_mask: Bitmask for two's complement subtraction of non 64bit
15
+ * clocks.
16
+ * @read_sched_clock: Current clock source (or dummy source when suspended).
17
+ * @mult: Multipler for scaled math conversion.
18
+ * @shift: Shift value for scaled math conversion.
19
+ *
20
+ * Care must be taken when updating this structure; it is read by
21
+ * some very hot code paths. It occupies <=40 bytes and, when combined
22
+ * with the seqcount used to synchronize access, comfortably fits into
23
+ * a 64 byte cache line.
24
+ */
25
+struct clock_read_data {
26
+ u64 epoch_ns;
27
+ u64 epoch_cyc;
28
+ u64 sched_clock_mask;
29
+ u64 (*read_sched_clock)(void);
30
+ u32 mult;
31
+ u32 shift;
32
+};
33
+
34
+extern struct clock_read_data *sched_clock_read_begin(unsigned int *seq);
35
+extern int sched_clock_read_retry(unsigned int seq);
36
+
1237 extern void generic_sched_clock_init(void);
1338
1439 extern void sched_clock_register(u64 (*read)(void), int bits,