~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/hrtimer_defs.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _LINUX_HRTIMER_DEFS_H
  3 #define _LINUX_HRTIMER_DEFS_H
  4 
  5 #include <linux/ktime.h>
  6 #include <linux/timerqueue.h>
  7 #include <linux/seqlock.h>
  8 
  9 #ifdef CONFIG_HIGH_RES_TIMERS
 10 
 11 /*
 12  * The resolution of the clocks. The resolution value is returned in
 13  * the clock_getres() system call to give application programmers an
 14  * idea of the (in)accuracy of timers. Timer values are rounded up to
 15  * this resolution values.
 16  */
 17 # define HIGH_RES_NSEC          1
 18 # define KTIME_HIGH_RES         (HIGH_RES_NSEC)
 19 # define MONOTONIC_RES_NSEC     HIGH_RES_NSEC
 20 # define KTIME_MONOTONIC_RES    KTIME_HIGH_RES
 21 
 22 #else
 23 
 24 # define MONOTONIC_RES_NSEC     LOW_RES_NSEC
 25 # define KTIME_MONOTONIC_RES    KTIME_LOW_RES
 26 
 27 #endif
 28 
 29 #ifdef CONFIG_64BIT
 30 # define __hrtimer_clock_base_align     ____cacheline_aligned
 31 #else
 32 # define __hrtimer_clock_base_align
 33 #endif
 34 
 35 /**
 36  * struct hrtimer_clock_base - the timer base for a specific clock
 37  * @cpu_base:           per cpu clock base
 38  * @index:              clock type index for per_cpu support when moving a
 39  *                      timer to a base on another cpu.
 40  * @clockid:            clock id for per_cpu support
 41  * @seq:                seqcount around __run_hrtimer
 42  * @running:            pointer to the currently running hrtimer
 43  * @active:             red black tree root node for the active timers
 44  * @get_time:           function to retrieve the current time of the clock
 45  * @offset:             offset of this clock to the monotonic base
 46  */
 47 struct hrtimer_clock_base {
 48         struct hrtimer_cpu_base *cpu_base;
 49         unsigned int            index;
 50         clockid_t               clockid;
 51         seqcount_raw_spinlock_t seq;
 52         struct hrtimer          *running;
 53         struct timerqueue_head  active;
 54         ktime_t                 (*get_time)(void);
 55         ktime_t                 offset;
 56 } __hrtimer_clock_base_align;
 57 
 58 enum  hrtimer_base_type {
 59         HRTIMER_BASE_MONOTONIC,
 60         HRTIMER_BASE_REALTIME,
 61         HRTIMER_BASE_BOOTTIME,
 62         HRTIMER_BASE_TAI,
 63         HRTIMER_BASE_MONOTONIC_SOFT,
 64         HRTIMER_BASE_REALTIME_SOFT,
 65         HRTIMER_BASE_BOOTTIME_SOFT,
 66         HRTIMER_BASE_TAI_SOFT,
 67         HRTIMER_MAX_CLOCK_BASES,
 68 };
 69 
 70 /**
 71  * struct hrtimer_cpu_base - the per cpu clock bases
 72  * @lock:               lock protecting the base and associated clock bases
 73  *                      and timers
 74  * @cpu:                cpu number
 75  * @active_bases:       Bitfield to mark bases with active timers
 76  * @clock_was_set_seq:  Sequence counter of clock was set events
 77  * @hres_active:        State of high resolution mode
 78  * @in_hrtirq:          hrtimer_interrupt() is currently executing
 79  * @hang_detected:      The last hrtimer interrupt detected a hang
 80  * @softirq_activated:  displays, if the softirq is raised - update of softirq
 81  *                      related settings is not required then.
 82  * @nr_events:          Total number of hrtimer interrupt events
 83  * @nr_retries:         Total number of hrtimer interrupt retries
 84  * @nr_hangs:           Total number of hrtimer interrupt hangs
 85  * @max_hang_time:      Maximum time spent in hrtimer_interrupt
 86  * @softirq_expiry_lock: Lock which is taken while softirq based hrtimer are
 87  *                       expired
 88  * @online:             CPU is online from an hrtimers point of view
 89  * @timer_waiters:      A hrtimer_cancel() invocation waits for the timer
 90  *                      callback to finish.
 91  * @expires_next:       absolute time of the next event, is required for remote
 92  *                      hrtimer enqueue; it is the total first expiry time (hard
 93  *                      and soft hrtimer are taken into account)
 94  * @next_timer:         Pointer to the first expiring timer
 95  * @softirq_expires_next: Time to check, if soft queues needs also to be expired
 96  * @softirq_next_timer: Pointer to the first expiring softirq based timer
 97  * @clock_base:         array of clock bases for this cpu
 98  *
 99  * Note: next_timer is just an optimization for __remove_hrtimer().
100  *       Do not dereference the pointer because it is not reliable on
101  *       cross cpu removals.
102  */
103 struct hrtimer_cpu_base {
104         raw_spinlock_t                  lock;
105         unsigned int                    cpu;
106         unsigned int                    active_bases;
107         unsigned int                    clock_was_set_seq;
108         unsigned int                    hres_active             : 1,
109                                         in_hrtirq               : 1,
110                                         hang_detected           : 1,
111                                         softirq_activated       : 1,
112                                         online                  : 1;
113 #ifdef CONFIG_HIGH_RES_TIMERS
114         unsigned int                    nr_events;
115         unsigned short                  nr_retries;
116         unsigned short                  nr_hangs;
117         unsigned int                    max_hang_time;
118 #endif
119 #ifdef CONFIG_PREEMPT_RT
120         spinlock_t                      softirq_expiry_lock;
121         atomic_t                        timer_waiters;
122 #endif
123         ktime_t                         expires_next;
124         struct hrtimer                  *next_timer;
125         ktime_t                         softirq_expires_next;
126         struct hrtimer                  *softirq_next_timer;
127         struct hrtimer_clock_base       clock_base[HRTIMER_MAX_CLOCK_BASES];
128 } ____cacheline_aligned;
129 
130 
131 #endif
132 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php