X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fposix-timers.h;h=ec4910e37c65c5a396057bd62841c64d8ee13698;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=637d2fb19012a9e385c2620027d743de8d5ab1e4;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h index 637d2fb19..ec4910e37 100644 --- a/include/linux/posix-timers.h +++ b/include/linux/posix-timers.h @@ -1,8 +1,16 @@ #ifndef _linux_POSIX_TIMERS_H #define _linux_POSIX_TIMERS_H +#include +#include + +struct k_clock_abs { + struct list_head list; + spinlock_t lock; +}; struct k_clock { int res; /* in nano seconds */ + struct k_clock_abs *abs_struct; int (*clock_set) (struct timespec * tp); int (*clock_get) (struct timespec * tp); int (*nsleep) (int flags, @@ -23,8 +31,14 @@ struct now_struct { #define posix_time_before(timer, now) \ time_before((timer)->expires, (now)->jiffies) -#define posix_bump_timer(timr) do { \ - (timr)->it_timer.expires += (timr)->it_incr; \ - (timr)->it_overrun++; \ - }while (0) +#define posix_bump_timer(timr, now) \ + do { \ + long delta, orun; \ + delta = now.jiffies - (timr)->it_timer.expires; \ + if (delta >= 0) { \ + orun = 1 + (delta / (timr)->it_incr); \ + (timr)->it_timer.expires += orun * (timr)->it_incr; \ + (timr)->it_overrun += orun; \ + } \ + }while (0) #endif