1. 14 3月, 2009 2 次提交
  2. 10 3月, 2009 1 次提交
    • F
      vsprintf: fix bug in negative value printing · 39e874f8
      Frederic Weisbecker 提交于
      Sitsofe Wheeler found and bisected that while unifying the
      vsprintf format decoding in:
      
        fef20d9c: vsprintf: unify the format decoding layer for its 3 users
      
      The sign flag has been dropped out in favour of
      precise types (ie: LONG/ULONG).
      
      But the format helper number() still needs this flag to keep track of
      the signedness unless it will consider all numbers as unsigned.
      
      Also add an explicit cast to int (for %d) while parsing with va_arg()
      to ensure the highest bit is well extended on the 64 bits number that
      hosts the value in case of negative values.
      Reported-Bisected-Tested-by: NSitsofe Wheeler <sitsofe@yahoo.com>
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      LKML-Reference: <20090309201503.GA5010@nowhere>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      39e874f8
  3. 07 3月, 2009 2 次提交
    • F
      vsprintf: unify the format decoding layer for its 3 users · fef20d9c
      Frederic Weisbecker 提交于
      An new optimization is making its way to ftrace. Its purpose is to
      make trace_printk() consuming less memory and be faster.
      
      Written by Lai Jiangshan, the approach is to delay the formatting
      job from tracing time to output time.
      
      Currently, a call to trace_printk() will format the whole string and
      insert it into the ring buffer. Then you can read it on /debug/tracing/trace
      file.
      
      The new implementation stores the address of the format string and
      the binary parameters into the ring buffer, making the packet more compact
      and faster to insert.
      Later, when the user exports the traces, the format string is retrieved
      with the binary parameters and the formatting job is eventually done.
      
      The new implementation rewrites a lot of format decoding bits from
      vsnprintf() function, making now 3 differents functions to maintain
      in their duplicated parts of printf format decoding bits.
      
      Suggested by Ingo Molnar, this patch tries to factorize the most
      possible common bits from these functions.
      The real common part between them is the format decoding. Although
      they do somewhat similar jobs, their way to export or import the parameters
      is very different. Thus, only the decoding layer is extracted, unless you see
      other parts that could be worth factorized.
      
      Changes in V2:
      
      - Address a suggestion from Linus to group the format_decode() parameters inside
        a structure.
      
      Changes in v3:
      
      - Address other cleanups suggested by Ingo and Linus such as passing the
        printf_spec struct to the format helpers: pointer()/number()/string()
        Note that this struct is passed by copy and not by address. This is to
        avoid side effects because these functions often change these values and the
        changes shoudn't be persistant when a callee helper returns.
        It would be too risky.
      
      - Various cleanups (code alignement, switch/case instead of if/else fountains).
      
      - Fix a bug that printed the first format specifier following a %p
      
      Changes in v4:
      
      - drop unapropriate const qualifier loss while casting fmt to a char *
        (thanks to Vegard Nossum for having pointed this out).
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Acked-by: NSteven Rostedt <rostedt@goodmis.org>
      LKML-Reference: <1236356510-8381-6-git-send-email-fweisbec@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      fef20d9c
    • L
      vsprintf: add binary printf · 4370aa4a
      Lai Jiangshan 提交于
      Impact: add new APIs for binary trace printk infrastructure
      
      vbin_printf(): write args to binary buffer, string is copied
      when "%s" is occurred.
      
      bstr_printf(): read from binary buffer for args and format a string
      
      [fweisbec@gmail.com: rebase]
      Signed-off-by: NLai Jiangshan <laijs@cn.fujitsu.com>
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      LKML-Reference: <1236356510-8381-2-git-send-email-fweisbec@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      4370aa4a
  4. 05 2月, 2009 1 次提交
    • I
      printk: introduce printk_once() · f036be96
      Ingo Molnar 提交于
      This pattern shows up frequently in the kernel:
      
        static int once = 1;
        ...
      
      		if (once) {
      			once = 0;
      			printk(KERN_ERR "message\n");
      		}
        ...
      
      So add a printk_once() helper macro that reduces this to a single line
      of:
      
      		printk_once(KERN_ERR "message\n");
      
      It works analogously to WARN_ONCE() & friends. (We use a macro not
      an inline because vararg expansion in inlines looks awkward and the
      macro is simple enough.)
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      f036be96
  5. 04 2月, 2009 34 次提交