• Ingo Molnar's avatar
    ratelimit: Fix/allow use in atomic contexts · edaac8e3
    Ingo Molnar authored
    I'd like to use printk_ratelimit() in NMI context, but it's not
    robust right now due to spinlock usage in lib/ratelimit.c. If an
    NMI is unlucky enough to hit just that spot we might lock up trying
    to take the spinlock again.
    
    Fix that by using a trylock variant. If we contend on that lock we
    can genuinely skip the message because the state is just being
    accessed by another CPU (or by this CPU).
    
    ( We could use atomics for the suppressed messages field, but
      i doubt it matters in practice and it makes the code heavier. )
    
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: David S. Miller <davem@davemloft.net>
    LKML-Reference: <new-submission>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    edaac8e3
ratelimit.c 1.4 KB