]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/linux/posix-timers.h
Merge tag 'docs-4.13' of git://git.lwn.net/linux
[karo-tx-linux.git] / include / linux / posix-timers.h
index 8c1e43ab14a97e8645b7f981730938cb4e257b70..29f1b7f09ced6bf51385a02a9601fe25f671ea86 100644 (file)
@@ -7,6 +7,7 @@
 #include <linux/timex.h>
 #include <linux/alarmtimer.h>
 
+struct siginfo;
 
 struct cpu_timer_list {
        struct list_head entry;
@@ -48,81 +49,69 @@ struct cpu_timer_list {
 #define FD_TO_CLOCKID(fd)      ((~(clockid_t) (fd) << 3) | CLOCKFD)
 #define CLOCKID_TO_FD(clk)     ((unsigned int) ~((clk) >> 3))
 
-/* POSIX.1b interval timer structure. */
-struct k_itimer {
-       struct list_head list;          /* free/ allocate list */
-       struct hlist_node t_hash;
-       spinlock_t it_lock;
-       clockid_t it_clock;             /* which timer type */
-       timer_t it_id;                  /* timer id */
-       int it_overrun;                 /* overrun on pending signal  */
-       int it_overrun_last;            /* overrun on last delivered signal */
-       int it_requeue_pending;         /* waiting to requeue this timer */
 #define REQUEUE_PENDING 1
-       int it_sigev_notify;            /* notify word of sigevent struct */
-       struct signal_struct *it_signal;
+
+/**
+ * struct k_itimer - POSIX.1b interval timer structure.
+ * @list:              List head for binding the timer to signals->posix_timers
+ * @t_hash:            Entry in the posix timer hash table
+ * @it_lock:           Lock protecting the timer
+ * @kclock:            Pointer to the k_clock struct handling this timer
+ * @it_clock:          The posix timer clock id
+ * @it_id:             The posix timer id for identifying the timer
+ * @it_active:         Marker that timer is active
+ * @it_overrun:                The overrun counter for pending signals
+ * @it_overrun_last:   The overrun at the time of the last delivered signal
+ * @it_requeue_pending:        Indicator that timer waits for being requeued on
+ *                     signal delivery
+ * @it_sigev_notify:   The notify word of sigevent struct for signal delivery
+ * @it_interval:       The interval for periodic timers
+ * @it_signal:         Pointer to the creators signal struct
+ * @it_pid:            The pid of the process/task targeted by the signal
+ * @it_process:                The task to wakeup on clock_nanosleep (CPU timers)
+ * @sigq:              Pointer to preallocated sigqueue
+ * @it:                        Union representing the various posix timer type
+ *                     internals. Also used for rcu freeing the timer.
+ */
+struct k_itimer {
+       struct list_head        list;
+       struct hlist_node       t_hash;
+       spinlock_t              it_lock;
+       const struct k_clock    *kclock;
+       clockid_t               it_clock;
+       timer_t                 it_id;
+       int                     it_active;
+       int                     it_overrun;
+       int                     it_overrun_last;
+       int                     it_requeue_pending;
+       int                     it_sigev_notify;
+       ktime_t                 it_interval;
+       struct signal_struct    *it_signal;
        union {
-               struct pid *it_pid;     /* pid of process to send signal to */
-               struct task_struct *it_process; /* for clock_nanosleep */
+               struct pid              *it_pid;
+               struct task_struct      *it_process;
        };
-       struct sigqueue *sigq;          /* signal queue entry. */
+       struct sigqueue         *sigq;
        union {
                struct {
-                       struct hrtimer timer;
-                       ktime_t interval;
+                       struct hrtimer  timer;
                } real;
-               struct cpu_timer_list cpu;
+               struct cpu_timer_list   cpu;
                struct {
-                       unsigned int clock;
-                       unsigned int node;
-                       unsigned long incr;
-                       unsigned long expires;
-               } mmtimer;
-               struct {
-                       struct alarm alarmtimer;
-                       ktime_t interval;
+                       struct alarm    alarmtimer;
                } alarm;
-               struct rcu_head rcu;
+               struct rcu_head         rcu;
        } it;
 };
 
-struct k_clock {
-       int (*clock_getres) (const clockid_t which_clock, struct timespec64 *tp);
-       int (*clock_set) (const clockid_t which_clock,
-                         const struct timespec64 *tp);
-       int (*clock_get) (const clockid_t which_clock, struct timespec64 *tp);
-       int (*clock_adj) (const clockid_t which_clock, struct timex *tx);
-       int (*timer_create) (struct k_itimer *timer);
-       int (*nsleep) (const clockid_t which_clock, int flags,
-                      struct timespec64 *, struct timespec __user *);
-       long (*nsleep_restart) (struct restart_block *restart_block);
-       int (*timer_set) (struct k_itimer *timr, int flags,
-                         struct itimerspec64 *new_setting,
-                         struct itimerspec64 *old_setting);
-       int (*timer_del) (struct k_itimer *timr);
-#define TIMER_RETRY 1
-       void (*timer_get) (struct k_itimer *timr,
-                          struct itimerspec64 *cur_setting);
-};
-
-extern struct k_clock clock_posix_cpu;
-extern struct k_clock clock_posix_dynamic;
-
-void posix_timers_register_clock(const clockid_t clock_id, struct k_clock *new_clock);
-
-/* function to call to trigger timer event */
-int posix_timer_event(struct k_itimer *timr, int si_private);
-
-void posix_cpu_timer_schedule(struct k_itimer *timer);
-
 void run_posix_cpu_timers(struct task_struct *task);
 void posix_cpu_timers_exit(struct task_struct *task);
 void posix_cpu_timers_exit_group(struct task_struct *task);
 void set_process_cpu_timer(struct task_struct *task, unsigned int clock_idx,
                           u64 *newval, u64 *oldval);
 
-long clock_nanosleep_restart(struct restart_block *restart_block);
-
 void update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new);
 
+void posixtimer_rearm(struct siginfo *info);
+
 #endif