1. 29 Apr, 2009 2 commits
  2. 24 Apr, 2009 4 commits
  3. 23 Apr, 2009 3 commits
    • Lai Jiangshan's avatar
      ring_buffer: compressed event header · 334d4169
      Lai Jiangshan authored
      RB_MAX_SMALL_DATA = 28bytes is too small for most tracers, it wastes
      an 'u32' to save the actually length for events which data size > 28.
      This fix uses compressed event header and enlarges RB_MAX_SMALL_DATA.
      [ Impact: saves about 0%-12.5%(depends on tracer) memory in ring_buffer ]
      Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
      LKML-Reference: <49F13189.3090000@cn.fujitsu.com>
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing: fix cut and paste macro error · c2518c43
      Steven Rostedt authored
      In case a module uses the TRACE_EVENT macro for creating automated
      events in ftrace, it may choose to use a different file name
      than the defined system name, or choose to use a different path than
      the default "include/trace/events" include path.
      If this is done, then before including trace/define_trace.h the
      header would define either "TRACE_INCLUDE_FILE" for the file
      name or "TRACE_INCLUDE_PATH" for the include path.
      If it does not define these, then the define_trace.h defines them
      instead. If define trace defines them, then define_trace.h should
      also undefine them before exiting. To do this a macro is used
      to note this:
       #ifndef TRACE_INCLUDE_FILE
       # undef TRACE_INCLUDE_FILE
      The UNDEF_TRACE_INCLUDE_FILE acts as a CPP variable to know to undef
      the TRACE_INCLUDE_FILE before leaving define_trace.h.
      Unfortunately, due to cut and paste errors, the macros between
      FILE and PATH got mixed up.
      [ Impact: undef TRACE_INCLUDE_FILE and/or TRACE_INCLUDE_PATH when needed ]
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing: increase size of number of possible events · 89ec0dee
      Steven Rostedt authored
      With the new event tracing registration, we must increase the number
      of events that can be registered. Currently the type field is only
      one byte, which leaves us only 256 possible events.
      Since we do not save the CPU number in the tracer anymore (it is determined
      by the per cpu ring buffer that is used) we have an extra byte to use.
      This patch increases the size of type from 1 byte (256 events) to
      2 bytes (65,536 events).
      It also adds a WARN_ON_ONCE if we exceed that limit.
      [ Impact: allow more than 255 events ]
      Signed-off-by: default avatarSteven Rostedt <srostedt@redhat.com>
  4. 22 Apr, 2009 4 commits
    • Frederic Weisbecker's avatar
      tracing/events: protect __get_str() · 6a74aa40
      Frederic Weisbecker authored
      The __get_str() macro is used in a code part then its content should be
      protected with parenthesis.
      [ Impact: make macro definition more robust ]
      Reported-by: default avatarSteven Rostedt <rostedt@goodmis.org>
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    • Frederic Weisbecker's avatar
      tracing/lock: provide lock_acquired event support for dynamic size string · 7e7ca9a2
      Frederic Weisbecker authored
      Now that we can support the dynamic sized string, make the lock tracing
      able to use it, making it safe against modules removal and consuming
      the right amount of memory needed for each lock name
      Changes in v2:
      adapt to the __ending_string() updates and the opening_string() removal.
      [ Impact: protect lock tracer against module removal ]
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Steven Rostedt <rostedt@goodmis.org>
    • Frederic Weisbecker's avatar
      tracing/events: provide string with undefined size support · 9cbf1176
      Frederic Weisbecker authored
      This patch provides the support for dynamic size strings on
      event tracing.
      The key concept is to use a structure with an ending char array field of
      undefined size and use such ability to allocate the minimal size on the
      ring buffer to make one or more string entries fit inside, as opposite
      to a fixed length strings with upper bound.
      The strings themselves are represented using fields which have an offset
      value from the beginning of the entry.
      This patch provides three new macros:
      __string(item, src)
      This one declares a string to the structure inside TP_STRUCT__entry.
      You need to provide the name of the string field and the source that will
      be copied inside.
      This will also add the dynamic size of the string needed for the ring
      buffer entry allocation.
      A stack allocated structure is used to temporarily store the offset
      of each strings, avoiding double calls to strlen() on each event
      This one will give you a pointer to the string you have created. This
      is an abstract helper to resolve the absolute address given the field
      name which is a relative address from the beginning of the trace_structure.
      __assign_str(dst, src)
      Use this macro to automatically perform the string copy from src to
      dst. src must be a variable to assign and dst is the name of a __string
      Example on how to use it:
      	TP_PROTO(char *src1, char *src2),
      	TP_ARGS(src1, src2),
      		__string(str1, src1)
      		__string(str2, src2)
      		__assign_str(str1, src1);
      		__assign_str(str2, src2);
      	TP_printk("%s %s", __get_str(src1), __get_str(src2))
      Of course you can mix-up any __field or __array inside this
      TRACE_EVENT. The position of the __string or __assign_str
      doesn't matter.
      Changes in v2:
      Address the suggestion of Steven Rostedt: drop the opening_string() macro
      and redefine __ending_string() to get the size of the string to be copied
      instead of overwritting the whole ring buffer allocation.
      Changes in v3:
      Address other suggestions of Steven Rostedt and Peter Zijlstra with
      some changes: drop the __ending_string and the need to have only one
      string field.
      Use offsets instead of absolute addresses.
      [ Impact: allow more compact memory usage for string tracing ]
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Li Zefan <lizf@cn.fujitsu.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    • Li Zefan's avatar
      tracing/events: make struct trace_entry->type to be int type · 7a4f453b
      Li Zefan authored
      struct trace_entry->type is unsigned char, while trace event's id is
      int type, thus for a event with id >= 256, it's entry->type is cast
      to (id % 256), and then we can't see the trace output of this event.
       # insmod trace-events-sample.ko
       # echo foo_bar > /mnt/tracing/set_event
       # cat /debug/tracing/events/trace-events-sample/foo_bar/id
       # cat /mnt/tracing/trace_pipe
                 <...>-3548  [001]   215.091142: Unknown type 0
                 <...>-3548  [001]   216.089207: Unknown type 0
                 <...>-3548  [001]   217.087271: Unknown type 0
                 <...>-3548  [001]   218.085332: Unknown type 0
      [ Impact: fix output for trace events with id >= 256 ]
      Signed-off-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
      Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      LKML-Reference: <49EEDB0E.5070207@cn.fujitsu.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
  5. 20 Apr, 2009 1 commit
  6. 18 Apr, 2009 1 commit
  7. 17 Apr, 2009 6 commits
    • Steven Rostedt's avatar
      tracing: add same level recursion detection · 261842b7
      Steven Rostedt authored
      The tracing infrastructure allows for recursion. That is, an interrupt
      may interrupt the act of tracing an event, and that interrupt may very well
      perform its own trace. This is a recursive trace, and is fine to do.
      The problem arises when there is a bug, and the utility doing the trace
      calls something that recurses back into the tracer. This recursion is not
      caused by an external event like an interrupt, but by code that is not
      expected to recurse. The result could be a lockup.
      This patch adds a bitmask to the task structure that keeps track
      of the trace recursion. To find the interrupt depth, the following
      algorithm is used:
        level = hardirq_count() + softirq_count() + in_nmi;
      Here, level will be the depth of interrutps and softirqs, and even handles
      the nmi. Then the corresponding bit is set in the recursion bitmask.
      If the bit was already set, we know we had a recursion at the same level
      and we warn about it and fail the writing to the buffer.
      After the data has been committed to the buffer, we clear the bit.
      No atomics are needed. The only races are with interrupts and they reset
      the bitmask before returning anywy.
      [ Impact: detect same irq level trace recursion ]
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing/events: enable code with EVENT_TRACING not EVENT_TRACER · b0afdc12
      Steven Rostedt authored
      The CONFIG_EVENT_TRACER is the way to turn on event tracing when no
      other tracing has been configured. All code to get enabled should
      depend on CONFIG_EVENT_TRACING. That is what is enabled when TRACING
      (or CONFIG_EVENT_TRACER) is selected.
      This patch enables the include/trace/ftrace.h file when
      CONFIG_EVENT_TRACING is enabled.
      [ Impact: fix warning in event tracer selftest ]
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Zhaolei's avatar
      tracing: Remove include/trace/kmem_event_types.h · 46de405f
      Zhaolei authored
      kmem_event_types.h is no longer necessary since tracepoint definitions
      are put into include/trace/events/kmem.h
      [ Impact: remove now-unused file. ]
      Signed-off-by: default avatarZhao Lei <zhaolei@cn.fujitsu.com>
      Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      LKML-Reference: <49E7EF37.20802057
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    • Jeremy Fitzhardinge's avatar
      tracing: avoid warnings from zero-arg tracepoints · 76aa8111
      Jeremy Fitzhardinge authored
      Tracepoints with no arguments can issue two warnings:
      	"field" defined by not used
      	"ret" is uninitialized in this function
      Mark field as being OK to leave unused, and initialize ret.
      [ Impact: fix false positive compiler warnings. ]
      Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
      Acked-by: default avatarSteven Rostedt <rostedt@goodmis.org>
      Cc: mathieu.desnoyers@polymtl.ca
      LKML-Reference: <1239950139-1119-5-git-send-email-jeremy@goop.org>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    • Steven Rostedt's avatar
      tracing/events/ring-buffer: expose format of ring buffer headers to users · d1b182a8
      Steven Rostedt authored
      Currently, every thing needed to read the binary output from the
      ring buffers is available, with the exception of the way the ring
      buffers handles itself internally.
      This patch creates two special files in the debugfs/tracing/events
       # cat /debug/tracing/events/header_page
              field: u64 timestamp;   offset:0;       size:8;
              field: local_t commit;  offset:8;       size:8;
              field: char data;       offset:16;      size:4080;
       # cat /debug/tracing/events/header_event
              type        :    2 bits
              len         :    3 bits
              time_delta  :   27 bits
              array       :   32 bits
              padding     : type == 0
              time_extend : type == 1
              data        : type == 3
      This is to allow a userspace app to see if the ring buffer format changes
      or not.
      [ Impact: allow userspace apps to know of ringbuffer format changes ]
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      ftrace: use module notifier for function tracer · 93eb677d
      Steven Rostedt authored
      The hooks in the module code for the function tracer must be called
      before any of that module code runs. The function tracer hooks
      modify the module (replacing calls to mcount to nops). If the code
      is executed while the change occurs, then the CPU can take a GPF.
      To handle the above with a bit of paranoia, I originally implemented
      the hooks as calls directly from the module code.
      After examining the notifier calls, it looks as though the start up
      notify is called before any of the module's code is executed. This makes
      the use of the notify safe with ftrace.
      Only the startup notify is required to be "safe". The shutdown simply
      removes the entries from the ftrace function list, and does not modify
      any code.
      This change has another benefit. It removes a issue with a reverse dependency
      in the mutexes of ftrace_lock and module_mutex.
      [ Impact: fix lock dependency bug, cleanup ]
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
  8. 16 Apr, 2009 2 commits
  9. 14 Apr, 2009 9 commits
    • Steven Rostedt's avatar
      tracing/events: move trace point headers into include/trace/events · ad8d75ff
      Steven Rostedt authored
      Impact: clean up
      Create a sub directory in include/trace called events to keep the
      trace point headers in their own separate directory. Only headers that
      declare trace points should be defined in this directory.
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Neil Horman <nhorman@tuxdriver.com>
      Cc: Zhao Lei <zhaolei@cn.fujitsu.com>
      Cc: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
      Cc: Pekka Enberg <penberg@cs.helsinki.fi>
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing/events: fix lockdep system name · ecda8ae0
      Steven Rostedt authored
      Impact: fix compile error of lockdep event tracer
      Ingo Molnar pointed out that the system name for the lockdep tracer was "lock"
      which is used to include the event trace file name. It should be "lockdep"
      Reported-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing/events: add support for modules to TRACE_EVENT · 6d723736
      Steven Rostedt authored
      Impact: allow modules to add TRACE_EVENTS on load
      This patch adds the final hooks to allow modules to use the TRACE_EVENT
      macro. A notifier and a data structure are used to link the TRACE_EVENTs
      defined in the module to connect them with the ftrace event tracing system.
      It also adds the necessary automated clean ups to the trace events when a
      module is removed.
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing/events: convert event call sites to use a link list · a59fd602
      Steven Rostedt authored
      Impact: makes it possible to define events in modules
      The events are created by reading down the section that they are linked
      in by the macros. But this is not scalable to modules. This patch converts
      the manipulations to use a global link list, and on boot up it adds
      the items in the section to the list.
      This change will allow modules to add their tracing events to the list as
      Note, this change alone does not permit modules to use the TRACE_EVENT macros,
      but the change is needed for them to eventually do so.
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing/events: move the ftrace event tracing code to core · f42c85e7
      Steven Rostedt authored
      This patch moves the ftrace creation into include/trace/ftrace.h and
      simplifies the work of developers in adding new tracepoints.
      Just the act of creating the trace points in include/trace and including
      define_trace.h will create the events in the debugfs/tracing/events
      This patch removes the need of include/trace/trace_events.h
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing/events: move declarations from trace directory to core include · 97f20251
      Steven Rostedt authored
      In preparation to allowing trace events to happen in modules, we need
      to move some of the local declarations in the kernel/trace directory
      into include/linux.
      This patch simply moves the declarations and performs no context changes.
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing: make trace_seq operations available for core kernel · 9504504c
      Steven Rostedt authored
      In the process to make TRACE_EVENT macro work for modules, the trace_seq
      operations must be available for core kernel code.
      These operations are quite useful and can be used for other implementations.
      The main idea is that we create a trace_seq handle that acts very much
      like the seq_file handle.
      	struct trace_seq *s = kmalloc(sizeof(*s, GFP_KERNEL);
      	trace_seq_printf(s, "some data %d\n", variable);
      	printk("%s", s->buffer);
      The main use is to allow a top level function call several other functions
      that may store printf like data into the buffer. Then at the end, the top
      level function can process all the data with any method it would like to.
      It could be passed to userspace, output via printk or even use seq_file:
      	trace_seq_to_user(s, ubuf, cnt);
      	seq_puts(m, s->buffer);
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing: create automated trace defines · a8d154b0
      Steven Rostedt authored
      This patch lowers the number of places a developer must modify to add
      new tracepoints. The current method to add a new tracepoint
      into an existing system is to write the trace point macro in the
      trace header with one of the macros TRACE_EVENT, TRACE_FORMAT or
      DECLARE_TRACE, then they must add the same named item into the C file
      with the macro DEFINE_TRACE(name) and then add the trace point.
      This change cuts out the needing to add the DEFINE_TRACE(name).
      Every file that uses the tracepoint must still include the trace/<type>.h
      file, but the one C file must also add a define before the including
      of that file.
       #define CREATE_TRACE_POINTS
       #include <trace/mytrace.h>
      This will cause the trace/mytrace.h file to also produce the C code
      necessary to implement the trace point.
      Note, if more than one trace/<type>.h is used to create the C code
      it is best to list them all together.
       #define CREATE_TRACE_POINTS
       #include <trace/foo.h>
       #include <trace/bar.h>
       #include <trace/fido.h>
      Thanks to Mathieu Desnoyers and Christoph Hellwig for coming up with
      the cleaner solution of the define above the includes over my first
      design to have the C code include a "special" header.
      This patch converts sched, irq and lockdep and skb to use this new
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Neil Horman <nhorman@tuxdriver.com>
      Cc: Zhao Lei <zhaolei@cn.fujitsu.com>
      Cc: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
      Cc: Pekka Enberg <penberg@cs.helsinki.fi>
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    • Steven Rostedt's avatar
      tracing: consolidate trace and trace_event headers · ea20d929
      Steven Rostedt authored
      Impact: clean up
      Neil Horman (et. al.) criticized the way the trace events were broken up
      into two files. The reason for that was that ftrace needed to separate out
      the declarations from where the #include <linux/tracepoint.h> was used.
      It then dawned on me that the tracepoint.h header only needs to define the
      TRACE_EVENT macro if it is not already defined.
      The solution is simply to test if TRACE_EVENT is defined, and if it is not
      then the linux/tracepoint.h header can define it. This change consolidates
      all the <traces>.h and <traces>_event_types.h into the <traces>.h file.
      Reported-by: default avatarNeil Horman <nhorman@tuxdriver.com>
      Reported-by: default avatarTheodore Tso <tytso@mit.edu>
      Reported-by: default avatarJiaying Zhang <jiayingz@google.com>
      Cc: Zhaolei <zhaolei@cn.fujitsu.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Jason Baron <jbaron@redhat.com>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
      Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
  10. 13 Apr, 2009 5 commits
    • Tom Zanussi's avatar
      tracing/infrastructure: separate event tracer from event support · 5f77a88b
      Tom Zanussi authored
      Add a new config option, CONFIG_EVENT_TRACING that gets selected
      when CONFIG_TRACING is selected and adds everything needed by the stuff
      in trace_export - basically all the event tracing support needed by e.g.
      bprint, minus the actual events, which are only included if
      CONFIG_EVENT_TRACER is selected.
      So CONFIG_EVENT_TRACER can be used to turn on or off the generated events
      (what I think of as the 'event tracer'), while CONFIG_EVENT_TRACING turns
      on or off the base event tracing support used by both the event tracer and
      the other things such as bprint that can't be configured out.
      Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: fweisbec@gmail.com
      LKML-Reference: <1239178441.10295.34.camel@tropicana>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    • Steven Rostedt's avatar
      ring-buffer: add ring_buffer_discard_commit · fa1b47dd
      Steven Rostedt authored
      The ring_buffer_discard_commit is similar to ring_buffer_event_discard
      but it can only be done on an event that has yet to be commited.
      Unpredictable results can happen otherwise.
      The main difference between ring_buffer_discard_commit and
      ring_buffer_event_discard is that ring_buffer_discard_commit will try
      to free the data in the ring buffer if nothing has addded data
      after the reserved event. If something did, then it acts almost the
      same as ring_buffer_event_discard followed by a
      Note, either ring_buffer_commit_discard and ring_buffer_unlock_commit
      can be called on an event, not both.
      This commit also exports both discard functions to be usable by
      GPL modules.
      Signed-off-by: default avatarSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    • Rafael J. Wysocki's avatar
      PM/Hibernate: Wait for SCSI devices scan to complete during resume · c7510859
      Rafael J. Wysocki authored
      There is a race between resume from hibernation and the asynchronous
      scanning of SCSI devices and to prevent it from happening we need to
      call scsi_complete_async_scans() during resume from hibernation.
      In addition, if the resume from hibernation is userland-driven, it's
      better to wait for all device probes in the kernel to complete before
      attempting to open the resume device.
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: default avatarArjan van de Ven <arjan@linux.intel.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    • Serge E. Hallyn's avatar
      add some long-missing capabilities to fs_mask · 0ad30b8f
      Serge E. Hallyn authored
      When POSIX capabilities were introduced during the 2.1 Linux
      cycle, the fs mask, which represents the capabilities which having
      fsuid==0 is supposed to grant, did not include CAP_MKNOD and
      CAP_LINUX_IMMUTABLE.  However, before capabilities the privilege
      to call these did in fact depend upon fsuid==0.
      This patch introduces those capabilities into the fsmask,
      restoring the old behavior.
      See the thread starting at http://lkml.org/lkml/2009/3/11/157
      Note that if this fix is deemed valid, then earlier kernel versions (2.4
      and 2.2) ought to be fixed too.
      	[Mar 23] Actually delete old CAP_FS_SET definition...
      	[Mar 20] Updated against J. Bruce Fields's patch
      Reported-by: default avatarIgor Zhbanov <izh1979@gmail.com>
      Signed-off-by: default avatarSerge E. Hallyn <serue@us.ibm.com>
      Cc: stable@kernel.org
      Cc: J. Bruce Fields <bfields@citi.umich.edu>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    • Ben Hutchings's avatar
      i2c: Fix sparse warnings for I2C_BOARD_INFO() · c758e8cf
      Ben Hutchings authored
      Since the first argument to I2C_BOARD_INFO() must be a string constant,
      there is no need to parenthesise it, and adding parentheses results in
      an invalid initialiser for char[].  gcc obviously accepts this syntax as
      an extension, but sparse complains, e.g.:
      drivers/net/sfc/boards.c:173:2: warning: array initialized from parenthesized string constant
      Therefore, remove the parentheses.
      Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
      Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
  11. 12 Apr, 2009 3 commits