This source file includes following definitions.
- trace_clock_local
- trace_clock
- trace_clock_jiffies
- trace_clock_global
- trace_clock_counter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <linux/spinlock.h>
17 #include <linux/irqflags.h>
18 #include <linux/hardirq.h>
19 #include <linux/module.h>
20 #include <linux/percpu.h>
21 #include <linux/sched.h>
22 #include <linux/sched/clock.h>
23 #include <linux/ktime.h>
24 #include <linux/trace_clock.h>
25
26
27
28
29
30
31
32 u64 notrace trace_clock_local(void)
33 {
34 u64 clock;
35
36
37
38
39
40
41 preempt_disable_notrace();
42 clock = sched_clock();
43 preempt_enable_notrace();
44
45 return clock;
46 }
47 EXPORT_SYMBOL_GPL(trace_clock_local);
48
49
50
51
52
53
54
55
56
57 u64 notrace trace_clock(void)
58 {
59 return local_clock();
60 }
61 EXPORT_SYMBOL_GPL(trace_clock);
62
63
64
65
66
67
68
69
70 u64 notrace trace_clock_jiffies(void)
71 {
72 return jiffies_64_to_clock_t(jiffies_64 - INITIAL_JIFFIES);
73 }
74 EXPORT_SYMBOL_GPL(trace_clock_jiffies);
75
76
77
78
79
80
81
82
83
84
85
86 static struct {
87 u64 prev_time;
88 arch_spinlock_t lock;
89 } trace_clock_struct ____cacheline_aligned_in_smp =
90 {
91 .lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED,
92 };
93
94 u64 notrace trace_clock_global(void)
95 {
96 unsigned long flags;
97 int this_cpu;
98 u64 now;
99
100 raw_local_irq_save(flags);
101
102 this_cpu = raw_smp_processor_id();
103 now = sched_clock_cpu(this_cpu);
104
105
106
107
108 if (unlikely(in_nmi()))
109 goto out;
110
111 arch_spin_lock(&trace_clock_struct.lock);
112
113
114
115
116
117
118 if ((s64)(now - trace_clock_struct.prev_time) < 0)
119 now = trace_clock_struct.prev_time + 1;
120
121 trace_clock_struct.prev_time = now;
122
123 arch_spin_unlock(&trace_clock_struct.lock);
124
125 out:
126 raw_local_irq_restore(flags);
127
128 return now;
129 }
130 EXPORT_SYMBOL_GPL(trace_clock_global);
131
132 static atomic64_t trace_counter;
133
134
135
136
137
138
139 u64 notrace trace_clock_counter(void)
140 {
141 return atomic64_add_return(1, &trace_counter);
142 }