• K
    MIPS: Fix CP0 COUNTER clockevent race · 5878fc93
    Kevin Cernekee 提交于
    Consider the following test case:
    
    write_c0_compare(read_c0_count());
    
    Even if the counter doesn't increment during execution, this might not
    generate an interrupt until the counter wraps around.  The CPU may
    perform the comparison each time CP0 COUNT increments, not when CP0
    COMPARE is written.
    
    If mips_next_event() is called with a very small delta, and CP0 COUNT
    increments during the calculation of "cnt += delta", it is possible
    that CP0 COMPARE will be written with the current value of CP0 COUNT.
    If this is detected, the function should return -ETIME, to indicate
    that the interrupt might not have actually gotten scheduled.
    Signed-off-by: NKevin Cernekee <cernekee@gmail.com>
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/1836/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
    5878fc93
cevt-r4k.c 5.0 KB