@@ -408,6 +408,100 @@ static __always_inline const struct cpumask *cast_mask(struct bpf_cpumask *mask)
408
408
void bpf_rcu_read_lock (void ) __ksym ;
409
409
void bpf_rcu_read_unlock (void ) __ksym ;
410
410
411
+ /*
412
+ * Time helpers, most of which are from jiffies.h.
413
+ */
414
+
415
+ /**
416
+ * time_delta - Calculate the delta between new and old time stamp
417
+ * @after: first comparable as u64
418
+ * @before: second comparable as u64
419
+ *
420
+ * Return: the time difference, which is >= 0
421
+ */
422
+ static inline s64 time_delta (u64 after , u64 before )
423
+ {
424
+ return (s64 )(after - before ) > 0 ? : 0 ;
425
+ }
426
+
427
+ /**
428
+ * time_after - returns true if the time a is after time b.
429
+ * @a: first comparable as u64
430
+ * @b: second comparable as u64
431
+ *
432
+ * Do this with "<0" and ">=0" to only test the sign of the result. A
433
+ * good compiler would generate better code (and a really good compiler
434
+ * wouldn't care). Gcc is currently neither.
435
+ *
436
+ * Return: %true is time a is after time b, otherwise %false.
437
+ */
438
+ static inline bool time_after (u64 a , u64 b )
439
+ {
440
+ return (s64 )(b - a ) < 0 ;
441
+ }
442
+
443
+ /**
444
+ * time_before - returns true if the time a is before time b.
445
+ * @a: first comparable as u64
446
+ * @b: second comparable as u64
447
+ *
448
+ * Return: %true is time a is before time b, otherwise %false.
449
+ */
450
+ static inline bool time_before (u64 a , u64 b )
451
+ {
452
+ return time_after (b , a );
453
+ }
454
+
455
+ /**
456
+ * time_after_eq - returns true if the time a is after or the same as time b.
457
+ * @a: first comparable as u64
458
+ * @b: second comparable as u64
459
+ *
460
+ * Return: %true is time a is after or the same as time b, otherwise %false.
461
+ */
462
+ static inline bool time_after_eq (u64 a , u64 b )
463
+ {
464
+ return (s64 )(a - b ) >= 0 ;
465
+ }
466
+
467
+ /**
468
+ * time_before_eq - returns true if the time a is before or the same as time b.
469
+ * @a: first comparable as u64
470
+ * @b: second comparable as u64
471
+ *
472
+ * Return: %true is time a is before or the same as time b, otherwise %false.
473
+ */
474
+ static inline bool time_before_eq (u64 a , u64 b )
475
+ {
476
+ return time_after_eq (b , a );
477
+ }
478
+
479
+ /**
480
+ * time_in_range - Calculate whether a is in the range of [b, c].
481
+ * @a: time to test
482
+ * @b: beginning of the range
483
+ * @c: end of the range
484
+ *
485
+ * Return: %true is time a is in the range [b, c], otherwise %false.
486
+ */
487
+ static inline bool time_in_range (u64 a , u64 b , u64 c )
488
+ {
489
+ return time_after_eq (a , b ) && time_before_eq (a , c );
490
+ }
491
+
492
+ /**
493
+ * time_in_range_open - Calculate whether a is in the range of [b, c).
494
+ * @a: time to test
495
+ * @b: beginning of the range
496
+ * @c: end of the range
497
+ *
498
+ * Return: %true is time a is in the range [b, c), otherwise %false.
499
+ */
500
+ static inline bool time_in_range_open (u64 a , u64 b , u64 c )
501
+ {
502
+ return time_after_eq (a , b ) && time_before (a , c );
503
+ }
504
+
411
505
412
506
/*
413
507
* Other helpers
0 commit comments