Index: linux-2.6.7/include/linux/timex.h =================================================================== --- linux-2.6.7.orig/include/linux/timex.h +++ linux-2.6.7/include/linux/timex.h @@ -409,6 +409,8 @@ time_interpolator_last_counter = counter; } +/* User level access to interpolator information */ +extern int get_interpolator_info(struct time_interpolator *); #else /* !CONFIG_TIME_INTERPOLATION */ static inline void Index: linux-2.6.7/arch/ia64/kernel/entry.S =================================================================== --- linux-2.6.7.orig/arch/ia64/kernel/entry.S +++ linux-2.6.7/arch/ia64/kernel/entry.S @@ -1514,7 +1514,7 @@ data8 sys_mq_getsetattr data8 sys_ni_syscall // reserved for kexec_load data8 sys_ni_syscall - data8 sys_ni_syscall // 1270 + data8 sys_get_interpolator_info // 1270 data8 sys_ni_syscall data8 sys_ni_syscall data8 sys_ni_syscall Index: linux-2.6.7/include/asm-ia64/unistd.h =================================================================== --- linux-2.6.7.orig/include/asm-ia64/unistd.h +++ linux-2.6.7/include/asm-ia64/unistd.h @@ -259,7 +259,7 @@ #define __NR_mq_getsetattr 1267 #define __NR_kexec_load 1268 #define __NR_vserver 1269 - +#define __NR_get_interpolator_info 1270 #ifdef __KERNEL__ #include Index: linux-2.6.7/include/linux/syscalls.h =================================================================== --- linux-2.6.7.orig/include/linux/syscalls.h +++ linux-2.6.7/include/linux/syscalls.h @@ -50,6 +50,7 @@ struct tms; struct utimbuf; struct mq_attr; +struct time_interpolator; #include #include @@ -484,5 +485,5 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len); asmlinkage long sys_uselib(const char __user *library); asmlinkage long sys_ni_syscall(void); - +asmlinkage long sys_get_interpolator_info(struct time_interpolator *); #endif Index: linux-2.6.7/kernel/timer.c =================================================================== --- linux-2.6.7.orig/kernel/timer.c +++ linux-2.6.7/kernel/timer.c @@ -1490,6 +1490,29 @@ write_sequnlock_irq(&xtime_lock); spin_unlock(&time_interpolator_lock); } +asmlinkage long sys_get_interpolator_info(struct time_interpolator *user_ti) +{ + int i; + + i = 0; + if (time_interpolator) { + if (copy_to_user(user_ti,time_interpolator,sizeof(struct time_interpolator))) + i = -EFAULT; + } + else + i = -ENOENT; + return i; +} + +EXPORT_SYMBOL(sys_get_interpolator_info); + +#else + +asmlinkage long sys_get_interpolator_info(struct time_interpolator *user_ti) +{ + return -ENOENT; +} + #endif /* CONFIG_TIME_INTERPOLATION */ /**