|
27 | 27 | /*
|
28 | 28 | * ktime_t:
|
29 | 29 | *
|
30 |
| - * On 64-bit CPUs a single 64-bit variable is used to store the hrtimers |
| 30 | + * A single 64-bit variable is used to store the hrtimers |
31 | 31 | * internal representation of time values in scalar nanoseconds. The
|
32 | 32 | * design plays out best on 64-bit CPUs, where most conversions are
|
33 | 33 | * NOPs and most arithmetic ktime_t operations are plain arithmetic
|
34 | 34 | * operations.
|
35 | 35 | *
|
36 |
| - * On 32-bit CPUs an optimized representation of the timespec structure |
37 |
| - * is used to avoid expensive conversions from and to timespecs. The |
38 |
| - * endian-aware order of the tv struct members is chosen to allow |
39 |
| - * mathematical operations on the tv64 member of the union too, which |
40 |
| - * for certain operations produces better code. |
41 |
| - * |
42 |
| - * For architectures with efficient support for 64/32-bit conversions the |
43 |
| - * plain scalar nanosecond based representation can be selected by the |
44 |
| - * config switch CONFIG_KTIME_SCALAR. |
45 | 36 | */
|
46 | 37 | union ktime {
|
47 | 38 | s64 tv64;
|
48 |
| -#if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR) |
49 |
| - struct { |
50 |
| -# ifdef __BIG_ENDIAN |
51 |
| - s32 sec, nsec; |
52 |
| -# else |
53 |
| - s32 nsec, sec; |
54 |
| -# endif |
55 |
| - } tv; |
56 |
| -#endif |
57 | 39 | };
|
58 | 40 |
|
59 | 41 | typedef union ktime ktime_t; /* Kill this */
|
60 | 42 |
|
61 |
| -/* |
62 |
| - * ktime_t definitions when using the 64-bit scalar representation: |
63 |
| - */ |
64 |
| - |
65 |
| -#if (BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR) |
66 |
| - |
67 | 43 | /**
|
68 | 44 | * ktime_set - Set a ktime_t variable from a seconds/nanoseconds value
|
69 | 45 | * @secs: seconds to set
|
@@ -123,153 +99,6 @@ static inline ktime_t timeval_to_ktime(struct timeval tv)
|
123 | 99 | /* Convert ktime_t to nanoseconds - NOP in the scalar storage format: */
|
124 | 100 | #define ktime_to_ns(kt) ((kt).tv64)
|
125 | 101 |
|
126 |
| -#else /* !((BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR)) */ |
127 |
| - |
128 |
| -/* |
129 |
| - * Helper macros/inlines to get the ktime_t math right in the timespec |
130 |
| - * representation. The macros are sometimes ugly - their actual use is |
131 |
| - * pretty okay-ish, given the circumstances. We do all this for |
132 |
| - * performance reasons. The pure scalar nsec_t based code was nice and |
133 |
| - * simple, but created too many 64-bit / 32-bit conversions and divisions. |
134 |
| - * |
135 |
| - * Be especially aware that negative values are represented in a way |
136 |
| - * that the tv.sec field is negative and the tv.nsec field is greater |
137 |
| - * or equal to zero but less than nanoseconds per second. This is the |
138 |
| - * same representation which is used by timespecs. |
139 |
| - * |
140 |
| - * tv.sec < 0 and 0 >= tv.nsec < NSEC_PER_SEC |
141 |
| - */ |
142 |
| - |
143 |
| -/* Set a ktime_t variable to a value in sec/nsec representation: */ |
144 |
| -static inline ktime_t ktime_set(const long secs, const unsigned long nsecs) |
145 |
| -{ |
146 |
| - return (ktime_t) { .tv = { .sec = secs, .nsec = nsecs } }; |
147 |
| -} |
148 |
| - |
149 |
| -/** |
150 |
| - * ktime_sub - subtract two ktime_t variables |
151 |
| - * @lhs: minuend |
152 |
| - * @rhs: subtrahend |
153 |
| - * |
154 |
| - * Return: The remainder of the subtraction. |
155 |
| - */ |
156 |
| -static inline ktime_t ktime_sub(const ktime_t lhs, const ktime_t rhs) |
157 |
| -{ |
158 |
| - ktime_t res; |
159 |
| - |
160 |
| - res.tv64 = lhs.tv64 - rhs.tv64; |
161 |
| - if (res.tv.nsec < 0) |
162 |
| - res.tv.nsec += NSEC_PER_SEC; |
163 |
| - |
164 |
| - return res; |
165 |
| -} |
166 |
| - |
167 |
| -/** |
168 |
| - * ktime_add - add two ktime_t variables |
169 |
| - * @add1: addend1 |
170 |
| - * @add2: addend2 |
171 |
| - * |
172 |
| - * Return: The sum of @add1 and @add2. |
173 |
| - */ |
174 |
| -static inline ktime_t ktime_add(const ktime_t add1, const ktime_t add2) |
175 |
| -{ |
176 |
| - ktime_t res; |
177 |
| - |
178 |
| - res.tv64 = add1.tv64 + add2.tv64; |
179 |
| - /* |
180 |
| - * performance trick: the (u32) -NSEC gives 0x00000000Fxxxxxxx |
181 |
| - * so we subtract NSEC_PER_SEC and add 1 to the upper 32 bit. |
182 |
| - * |
183 |
| - * it's equivalent to: |
184 |
| - * tv.nsec -= NSEC_PER_SEC |
185 |
| - * tv.sec ++; |
186 |
| - */ |
187 |
| - if (res.tv.nsec >= NSEC_PER_SEC) |
188 |
| - res.tv64 += (u32)-NSEC_PER_SEC; |
189 |
| - |
190 |
| - return res; |
191 |
| -} |
192 |
| - |
193 |
| -/** |
194 |
| - * ktime_add_ns - Add a scalar nanoseconds value to a ktime_t variable |
195 |
| - * @kt: addend |
196 |
| - * @nsec: the scalar nsec value to add |
197 |
| - * |
198 |
| - * Return: The sum of @kt and @nsec in ktime_t format. |
199 |
| - */ |
200 |
| -extern ktime_t ktime_add_ns(const ktime_t kt, u64 nsec); |
201 |
| - |
202 |
| -/** |
203 |
| - * ktime_sub_ns - Subtract a scalar nanoseconds value from a ktime_t variable |
204 |
| - * @kt: minuend |
205 |
| - * @nsec: the scalar nsec value to subtract |
206 |
| - * |
207 |
| - * Return: The subtraction of @nsec from @kt in ktime_t format. |
208 |
| - */ |
209 |
| -extern ktime_t ktime_sub_ns(const ktime_t kt, u64 nsec); |
210 |
| - |
211 |
| -/** |
212 |
| - * timespec_to_ktime - convert a timespec to ktime_t format |
213 |
| - * @ts: the timespec variable to convert |
214 |
| - * |
215 |
| - * Return: A ktime_t variable with the converted timespec value. |
216 |
| - */ |
217 |
| -static inline ktime_t timespec_to_ktime(const struct timespec ts) |
218 |
| -{ |
219 |
| - return (ktime_t) { .tv = { .sec = (s32)ts.tv_sec, |
220 |
| - .nsec = (s32)ts.tv_nsec } }; |
221 |
| -} |
222 |
| - |
223 |
| -/** |
224 |
| - * timeval_to_ktime - convert a timeval to ktime_t format |
225 |
| - * @tv: the timeval variable to convert |
226 |
| - * |
227 |
| - * Return: A ktime_t variable with the converted timeval value. |
228 |
| - */ |
229 |
| -static inline ktime_t timeval_to_ktime(const struct timeval tv) |
230 |
| -{ |
231 |
| - return (ktime_t) { .tv = { .sec = (s32)tv.tv_sec, |
232 |
| - .nsec = (s32)(tv.tv_usec * |
233 |
| - NSEC_PER_USEC) } }; |
234 |
| -} |
235 |
| - |
236 |
| -/** |
237 |
| - * ktime_to_timespec - convert a ktime_t variable to timespec format |
238 |
| - * @kt: the ktime_t variable to convert |
239 |
| - * |
240 |
| - * Return: The timespec representation of the ktime value. |
241 |
| - */ |
242 |
| -static inline struct timespec ktime_to_timespec(const ktime_t kt) |
243 |
| -{ |
244 |
| - return (struct timespec) { .tv_sec = (time_t) kt.tv.sec, |
245 |
| - .tv_nsec = (long) kt.tv.nsec }; |
246 |
| -} |
247 |
| - |
248 |
| -/** |
249 |
| - * ktime_to_timeval - convert a ktime_t variable to timeval format |
250 |
| - * @kt: the ktime_t variable to convert |
251 |
| - * |
252 |
| - * Return: The timeval representation of the ktime value. |
253 |
| - */ |
254 |
| -static inline struct timeval ktime_to_timeval(const ktime_t kt) |
255 |
| -{ |
256 |
| - return (struct timeval) { |
257 |
| - .tv_sec = (time_t) kt.tv.sec, |
258 |
| - .tv_usec = (suseconds_t) (kt.tv.nsec / NSEC_PER_USEC) }; |
259 |
| -} |
260 |
| - |
261 |
| -/** |
262 |
| - * ktime_to_ns - convert a ktime_t variable to scalar nanoseconds |
263 |
| - * @kt: the ktime_t variable to convert |
264 |
| - * |
265 |
| - * Return: The scalar nanoseconds representation of @kt. |
266 |
| - */ |
267 |
| -static inline s64 ktime_to_ns(const ktime_t kt) |
268 |
| -{ |
269 |
| - return (s64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec; |
270 |
| -} |
271 |
| - |
272 |
| -#endif /* !((BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR)) */ |
273 | 102 |
|
274 | 103 | /**
|
275 | 104 | * ktime_equal - Compares two ktime_t variables to see if they are equal
|
|
0 commit comments