• [
    [PATCH] Fix BCM1480 doubled process accounting times. · e1701fb2
    [MIPS] James E Wilson 提交于
    Running a UP kernel on a bcm1480 board, I get nonsensical timing
    results, like this:
    release@unknown:~/tmp$ time ./a.out
    real    0m22.906s
    user    0m45.792s
    sys     0m0.010s
    According to my watch, this program took 23 seconds to run, so the real
    time clock is OK.  It is process accounting that is broken.
    
    I tracked this down to a problem with the function
    bcm1480_timer_interrupt in the file sibyte/bcm1480/time.c.  This
    function calls ll_timer_interrupt for cpu0, and ll_local_timer_interrupt
    for all cpus.  However, both of these functions do process accounting.
    Thus processes running on cpu0 end up with doubled times.  This is very
    obvious in a UP kernel where all processes run on cpu0.
    
    The correct way to do this is to only call ll_local_timer interrupt if
    this is not cpu0.  This can be seen in the mips-board/generic/time.c
    file, and also in the sibyte/sb1250/time.c file, both of which handle
    this correctly.  I fixed the bcm1480/time.c file by copying over the
    correct code from the sb1250/time.c file.
    
    With this fix, I now get sensible results.
    release@unknown:~/tmp$ time ./a.out
    real    0m22.903s
    user    0m22.894s
    sys     0m0.006s
    Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
    e1701fb2
time.c 4.0 KB