• Huacai Chen's avatar
    MIPS: sync-r4k: reduce skew while synchronization · db0dbd57
    Huacai Chen authored
    While synchronization, count register will go backwards for the master.
    If synchronise_count_master() runs before synchronise_count_slave(),
    skew becomes even more. The skew is very harmful for CPU hotplug (CPU0
    do synchronization with CPU1, then CPU0 do synchronization with CPU2
    and CPU0's count goes backwards, so it will be out of sync with CPU1).
    
    After the commit cf9bfe55 (MIPS: Synchronize MIPS count one
    CPU at a time), we needn't evaluate count_reference at the beginning of
    synchronise_count_master() any more. Thus, we evaluate the initcount (It
    seems like count_reference is redundant) in the 2nd loop. Since we write
    the count register in the last loop, we don't need additional barriers
    (the existing memory barriers are enough).
    
    Moreover, I think we loop 3 times is enough to get a primed instruction
    cache, this can also get less skew than looping 5 times.
    
    Comments are also updated in this patch.
    Signed-off-by: default avatarHuacai Chen <chenhc@lemote.com>
    Cc: Aurelien Jarno <aurelien@aurel32.net>
    Cc: Steven J. Hill <Steven.Hill@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Cc: Fuxin Zhang <zhangfx@lemote.com>
    Cc: Zhangjin Wu <wuzhangjin@gmail.com>
    Patchwork: https://patchwork.linux-mips.org/patch/12163/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    db0dbd57
sync-r4k.c 2.87 KB