lkml.org 
[lkml]   [2012]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[20/27] [S390] fix cputime overflow in uptime_proc_show
    2.6.32-longterm review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Martin Schwidefsky <schwidefsky@de.ibm.com>

    commit c3e0ef9a298e028a82ada28101ccd5cf64d209ee upstream.

    For 32-bit architectures using standard jiffies the idletime calculation
    in uptime_proc_show will quickly overflow. It takes (2^32 / HZ) seconds
    of idle-time, or e.g. 12.45 days with no load on a quad-core with HZ=1000.
    Switch to 64-bit calculations.

    Cc: Michael Abbott <michael.abbott@diamond.ac.uk>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/proc/uptime.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    --- a/fs/proc/uptime.c
    +++ b/fs/proc/uptime.c
    @@ -11,15 +11,20 @@ static int uptime_proc_show(struct seq_f
    {
    struct timespec uptime;
    struct timespec idle;
    + cputime64_t idletime;
    + u64 nsec;
    + u32 rem;
    int i;
    - cputime_t idletime = cputime_zero;

    + idletime = 0;
    for_each_possible_cpu(i)
    idletime = cputime64_add(idletime, kstat_cpu(i).cpustat.idle);

    do_posix_clock_monotonic_gettime(&uptime);
    monotonic_to_bootbased(&uptime);
    - cputime_to_timespec(idletime, &idle);
    + nsec = cputime64_to_jiffies64(idletime) * TICK_NSEC;
    + idle.tv_sec = div_u64_rem(nsec, NSEC_PER_SEC, &rem);
    + idle.tv_nsec = rem;
    seq_printf(m, "%lu.%02lu %lu.%02lu\n",
    (unsigned long) uptime.tv_sec,
    (uptime.tv_nsec / (NSEC_PER_SEC / 100)),



    \
     
     \ /
      Last update: 2012-01-24 00:49    [W:4.185 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site