[lkml]   [2005]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectPossible BUG in sys_nanosleep() ?
    I have searched archives of linux-kernel and not found any reference to 
    this behavior. This situation exists in both 2.4 and 2.6 kernels. I'm
    not quite prepared to call it a bug because I have not yet consulted
    with anyone closer to the code and that is the purpose of this message:

    From kernel/timer.c - sys_nanosleep():
    expire = timespec_to_jiffies(&t) + (t.tv_sec || t.tv_nsec);

    From include/linux/jiffies.h - timespec_to_jiffies():
    * The TICK_NSEC - 1 rounds up the value to the next resolution. Note
    * that a remainder subtract here would not do the right thing as the

    Observed problem:

    Processes seem to sleep for at least 2 timer ticks even when asked to
    sleep for less than 1. Specifically, on a 2.4 kernel with HZ=100, a
    sleep for 5ms becomes a sleep for 20ms when 10ms is the expected behavior.

    Source code inspection:

    sys_nanosleep() rounds up the value returned by timespec_to_jiffies() by
    adding 1 unless the requested sleep time is zero.

    timespec_to_jiffies() also rounds the returned number of jiffies, except
    in the case of an even number of jiffies being requested. Thus,
    nanoseconds returns zero jiffies, but 1 nanosecond returns 1 jiffy.

    The effect of both functions rounding up is that it is possible to sleep
    for zero nanoseconds (no sleep), but otherwise 1 is added to the number
    of jiffies to sleep. Thus, what should be a sleep for one jiffie (wake
    up on next timer tick) becomes two jiffies (and wakes up on the 2nd
    timer tick).


    sys_nanosleep() should never add 1 to the value of expire as
    timespec_to_jiffies() already rounds up.

    I post this as a question because I don't know that
    timespec_to_jiffies() isn't where the behavior should be changed or
    perhaps there is a good reason that I can't think of for the current

    I am not subscribed to linux-kernel. Please CC me on all replies.


    Tyson D Sawyer iRobot Corporation
    Lead Systems Engineer Government & Industrial Robotics Robots for the Real World
    781-345-0200 ext 3329
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-04-06 13:30    [W:0.022 / U:172.664 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site