diff options
Diffstat (limited to 'include/linux/posix-timers.h')
| -rw-r--r-- | include/linux/posix-timers.h | 44 | 
1 files changed, 24 insertions, 20 deletions
diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h index 3e23844a6990..d51243ae0726 100644 --- a/include/linux/posix-timers.h +++ b/include/linux/posix-timers.h @@ -4,6 +4,7 @@  #include <linux/spinlock.h>  #include <linux/list.h>  #include <linux/sched.h> +#include <linux/timex.h>  union cpu_time_count {  	cputime_t cpu; @@ -17,10 +18,21 @@ struct cpu_timer_list {  	int firing;  }; +/* + * Bit fields within a clockid: + * + * The most significant 29 bits hold either a pid or a file descriptor. + * + * Bit 2 indicates whether a cpu clock refers to a thread or a process. + * + * Bits 1 and 0 give the type: PROF=0, VIRT=1, SCHED=2, or FD=3. + * + * A clockid is invalid if bits 2, 1, and 0 are all set. + */  #define CPUCLOCK_PID(clock)		((pid_t) ~((clock) >> 3))  #define CPUCLOCK_PERTHREAD(clock) \  	(((clock) & (clockid_t) CPUCLOCK_PERTHREAD_MASK) != 0) -#define CPUCLOCK_PID_MASK	7 +  #define CPUCLOCK_PERTHREAD_MASK	4  #define CPUCLOCK_WHICH(clock)	((clock) & (clockid_t) CPUCLOCK_CLOCK_MASK)  #define CPUCLOCK_CLOCK_MASK	3 @@ -28,12 +40,17 @@ struct cpu_timer_list {  #define CPUCLOCK_VIRT		1  #define CPUCLOCK_SCHED		2  #define CPUCLOCK_MAX		3 +#define CLOCKFD			CPUCLOCK_MAX +#define CLOCKFD_MASK		(CPUCLOCK_PERTHREAD_MASK|CPUCLOCK_CLOCK_MASK)  #define MAKE_PROCESS_CPUCLOCK(pid, clock) \  	((~(clockid_t) (pid) << 3) | (clockid_t) (clock))  #define MAKE_THREAD_CPUCLOCK(tid, clock) \  	MAKE_PROCESS_CPUCLOCK((tid), (clock) | CPUCLOCK_PERTHREAD_MASK) +#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 */ @@ -67,10 +84,11 @@ struct k_itimer {  };  struct k_clock { -	int res;		/* in nanoseconds */  	int (*clock_getres) (const clockid_t which_clock, struct timespec *tp); -	int (*clock_set) (const clockid_t which_clock, struct timespec * tp); +	int (*clock_set) (const clockid_t which_clock, +			  const struct timespec *tp);  	int (*clock_get) (const clockid_t which_clock, struct timespec * 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 timespec *, struct timespec __user *); @@ -84,28 +102,14 @@ struct k_clock {  			   struct itimerspec * cur_setting);  }; -void register_posix_clock(const clockid_t clock_id, struct k_clock *new_clock); +extern struct k_clock clock_posix_cpu; +extern struct k_clock clock_posix_dynamic; -/* error handlers for timer_create, nanosleep and settime */ -int do_posix_clock_nonanosleep(const clockid_t, int flags, struct timespec *, -			       struct timespec __user *); -int do_posix_clock_nosettime(const clockid_t, struct timespec *tp); +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); -int posix_cpu_clock_getres(const clockid_t which_clock, struct timespec *ts); -int posix_cpu_clock_get(const clockid_t which_clock, struct timespec *ts); -int posix_cpu_clock_set(const clockid_t which_clock, const struct timespec *ts); -int posix_cpu_timer_create(struct k_itimer *timer); -int posix_cpu_nsleep(const clockid_t which_clock, int flags, -		     struct timespec *rqtp, struct timespec __user *rmtp); -long posix_cpu_nsleep_restart(struct restart_block *restart_block); -int posix_cpu_timer_set(struct k_itimer *timer, int flags, -			struct itimerspec *new, struct itimerspec *old); -int posix_cpu_timer_del(struct k_itimer *timer); -void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp); -  void posix_cpu_timer_schedule(struct k_itimer *timer);  void run_posix_cpu_timers(struct task_struct *task);  | 
