1. 02 Aug, 2016 1 commit
    • Borislav Petkov's avatar
      ratelimit: extend to print suppressed messages on release · 6b1d174b
      Borislav Petkov authored
      Extend the ratelimiting facility to print the amount of suppressed lines
      when it is being released.
      
      This use case is aimed at short-termed, burst-like users for which we
      want to output the suppressed lines stats only once, after it has been
      disposed of.  For an example, see /dev/kmsg usage in a follow-on patch.
      
      Also, change the printk() line we issue on release to not use
      "callbacks" as it is misleading: we're not suppressing callbacks but
      printk() calls.
      
      This has been separated from a previous patch by Linus.
      
      Link: http://lkml.kernel.org/r/20160716061745.15795-2-bp@alien8.deSigned-off-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: Dave Young <dyoung@redhat.com>
      Cc: Franck Bui <fbui@suse.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6b1d174b
  2. 22 Jan, 2016 1 commit
    • Jaewon Kim's avatar
      ratelimit: fix bug in time interval by resetting right begin time · c2594bc3
      Jaewon Kim authored
      rs->begin in ratelimit is set in two cases.
       1) when rs->begin was not initialized
       2) when rs->interval was passed
      
      For case #2, current ratelimit sets the begin to 0.  This incurrs
      improper suppression.  The begin value will be set in the next ratelimit
      call by 1).  Then the time interval check will be always false, and
      rs->printed will not be initialized.  Although enough time passed,
      ratelimit may return 0 if rs->printed is not less than rs->burst.  To
      reset interval properly, begin should be jiffies rather than 0.
      
      For an example code below:
      
          static DEFINE_RATELIMIT_STATE(mylimit, 1, 1);
          for (i = 1; i <= 10; i++) {
              if (__ratelimit(&mylimit))
                  printk("ratelimit test count %d\n", i);
              msleep(3000);
          }
      
      test result in the current code shows suppression even there is 3 seconds sleep.
      
        [  78.391148] ratelimit test count 1
        [  81.295988] ratelimit test count 2
        [  87.315981] ratelimit test count 4
        [  93.336267] ratelimit test count 6
        [  99.356031] ratelimit test count 8
        [ 105.376367] ratelimit test count 10
      Signed-off-by: default avatarJaewon Kim <jaewon31.kim@samsung.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c2594bc3
  3. 07 Mar, 2012 1 commit
  4. 13 Sep, 2011 1 commit
  5. 07 Apr, 2010 2 commits
  6. 23 Oct, 2009 1 commit
    • Christian Borntraeger's avatar
      ratelimit: Make suppressed output messages more useful · 5c828713
      Christian Borntraeger authored
      Today I got:
      
        [39648.224782] Registered led device: iwl-phy0::TX
        [40676.545099] __ratelimit: 246 callbacks suppressed
        [40676.545103] abcdef[23675]: segfault at 0 ...
      
      as you can see the ratelimit message contains a function prefix.
      Since this is always __ratelimit, this wont help much.
      
      This patch changes __ratelimit and printk_ratelimit to print the
      function name that calls ratelimit.
      
      This will pinpoint the responsible function, as long as not several
      different places call ratelimit with the same ratelimit state at
      the same time. In that case we catch only one random function that
      calls ratelimit after the wait period.
      Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
      Cc: Dave Young <hidave.darkstar@gmail.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      CC: Andrew Morton <akpm@linux-foundation.org>
      LKML-Reference: <200910231458.11832.borntraeger@de.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      5c828713
  7. 22 Sep, 2009 3 commits
    • Ingo Molnar's avatar
      printk: Remove ratelimit.h from kernel.h · 3fff4c42
      Ingo Molnar authored
      Decouple kernel.h from ratelimit.h: the global declaration of
      printk's ratelimit_state is not needed, and it leads to messy
      circular dependencies due to ratelimit.h's (new) adding of a
      spinlock_types.h include.
      
      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>
      3fff4c42
    • 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
    • Ingo Molnar's avatar
      ratelimit: Use per ratelimit context locking · 979f693d
      Ingo Molnar authored
      I'd like to use printk_ratelimit() in atomic context, but that's
      not possible right now due to the spinlock usage this commit
      introduced more than a year ago:
      
        717115e1: printk ratelimiting rewrite
      
      As a first step push the lock into the ratelimit state structure.
      This allows us to deal with locking failures to be considered as an
      event related to that state being too busy.
      
      Also clean up the code a bit (without changing functionality):
      
       - tidy up the definitions
      
       - clean up the code flow
      
      This also shrinks the code a tiny bit:
      
         text	   data	    bss	    dec	    hex	filename
          264	      0	      4	    268	    10c	ratelimit.o.before
          255	      0	      0	    255	     ff	ratelimit.o.after
      
      ( Whole-kernel data size got a bit larger, because we have
        two ratelimit-state data structures right now. )
      
      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>
      979f693d
  8. 28 Jul, 2008 1 commit
  9. 25 Jul, 2008 1 commit
    • Dave Young's avatar
      printk ratelimiting rewrite · 717115e1
      Dave Young authored
      All ratelimit user use same jiffies and burst params, so some messages
      (callbacks) will be lost.
      
      For example:
      a call printk_ratelimit(5 * HZ, 1)
      b call printk_ratelimit(5 * HZ, 1) before the 5*HZ timeout of a, then b will
      will be supressed.
      
      - rewrite __ratelimit, and use a ratelimit_state as parameter.  Thanks for
        hints from andrew.
      
      - Add WARN_ON_RATELIMIT, update rcupreempt.h
      
      - remove __printk_ratelimit
      
      - use __ratelimit in net_ratelimit
      Signed-off-by: default avatarDave Young <hidave.darkstar@gmail.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
      Cc: Dave Young <hidave.darkstar@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      717115e1
  10. 29 Apr, 2008 1 commit