Messages in this thread | | | Date | Sun, 23 Aug 2009 17:18:02 -0500 | Subject | kernel/posix-timer.c: Forgot to disable interrupts in sys_timer_settime()? | From | Lin Tan <> |
| |
Hi,
Did we forget to disable interrupts before calling posix_cpu_timer_set() in the system call function sys_timer_settime() (in code literally as SYSCALL_DEFINE4(timer_settime, ...) as shown below)? The CLOCK_DISPATCH macro invokes posix_cpu_timer_set(), which requires interrupts to be disabled upon entry of calling. When posix_cpu_timer_set() was called from other functions such as do_cpu_nanosleep(), interrupts are disabled.
SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags, 769 const struct itimerspec __user *, new_setting, 770 struct itimerspec __user *, old_setting) 771{ ... 792 error = CLOCK_DISPATCH(timr->it_clock, timer_set, 793 (timr, flags, &new_spec, rtn)); // this MACRO invokes posix_cpu_timer_set() ... }
In addition, its block comments also state that we must disable interrupts before calling it (in posix-cpu-timers.c):
/* 712 * ... 713 * This is called with the timer locked and interrupts disabled. 714 * ... 716 */ 717int posix_cpu_timer_set(struct k_itimer *timer, int flags, 718 struct itimerspec *new, struct itimerspec *old) 719{ ... }
Thanks, Lin
| |