• Cliff Wickman's avatar
    x86/UV2: Work around BAU bug · ebd11e15
    Cliff Wickman authored
    commit c5d35d39 upstream.
    
    This patch implements a workaround for a UV2 hardware bug.
    The bug is a non-atomic update of a memory-mapped register. When
    hardware message delivery and software message acknowledge occur
    simultaneously the pending message acknowledge for the arriving
    message may be lost.  This causes the sender's message status to
    stay busy.
    
    Part of the workaround is to not acknowledge a completed message
    until it is verified that no other message is actually using the
    resource that is mistakenly recorded in the completed message.
    
    Part of the workaround is to test for long elapsed time in such
    a busy condition, then handle it by using a spare sending
    descriptor. The stay-busy condition is eventually timed out by
    hardware, and then the original sending descriptor can be
    re-used. Most of that logic change is in keeping track of the
    current descriptor and the state of the spares.
    
    The occurrences of the workaround are added to the BAU
    statistics.
    Signed-off-by: default avatarCliff Wickman <cpw@sgi.com>
    Link: http://lkml.kernel.org/r/20120116211947.GC5767@sgi.comSigned-off-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    ebd11e15
tlb_uv.c 55.8 KB