28 Jan, 2014
3 commits
-
Signed-off-by: Andrey Ryabinin
Cc: Jason Baron
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
This fixes following scenario:
$ echo 'file dynamic_debug.c line 1-123 +p' > /sys/kernel/debug/dynamic_debug/control
-bash: echo: write error: Invalid argument
$ dmesg | grep dynamic_debug
dynamic_debug:ddebug_parse_query: last-line:123 < 1st-line:1
dynamic_debug:ddebug_parse_query: query parse failedSigned-off-by: Andrey Ryabinin
Cc: Jason Baron
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
parse_lineno() returns either negative error code or zero. We don't
need to print something here because if parse_lineno fails it will print
error message.Signed-off-by: Andrey Ryabinin
Cc: Jason Baron
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
24 Jan, 2014
1 commit
-
Add wildcard '*'(matches zero or more characters) and '?' (matches one
character) support when qurying debug flags.Now we can open debug messages using keywords. eg:
1. open debug logs in all usb drivers
echo "file drivers/usb/* +p" > /dynamic_debug/control
2. open debug logs for usb xhci code
echo "file *xhci* +p" > /dynamic_debug/controlSigned-off-by: Du, Changbin
Cc: Jason Baron
Cc: Joe Perches
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
29 Aug, 2013
1 commit
-
Settings of the form, 'line x module y +p', can fail arbitrarily due to an
uninitialized local variable. With this patch results are consistent, as
expected.Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman
01 May, 2013
1 commit
-
There is kernel function to do the job in generic way. Let's use it.
Signed-off-by: Andy Shevchenko
Cc: Jason Baron
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
30 Apr, 2013
1 commit
-
There are at least two users of isodigit(). Let's make it a public
function of ctype.h.Signed-off-by: Andy Shevchenko
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
18 Jan, 2013
2 commits
-
Ma noted that dynamic-debug is silent about many query errors, so add
pr_err()s to explain those errors, and tweak a few others. Also parse
flags 1st, so that match-spec errs are slightly clearer.CC: Jianpeng Ma
CC: Joe Perches
Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
vpr_info_dq should be a function and vpr_info should have
a do {} while (0)Add missing newlines to pr_s.
Miscellaneous neatening too.
braces, coalescing formats, alignments, etc...Signed-off-by: Joe Perches
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman
18 Dec, 2012
1 commit
-
Remove the custom implementation of the functionality similar to kbasename().
Signed-off-by: Andy Shevchenko
Cc: Jason Baron
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
17 Sep, 2012
4 commits
-
Convert direct calls of vprintk_emit and printk_emit to the
dev_ equivalents.Make create_syslog_header static.
Signed-off-by: Joe Perches
Acked-by: David S. Miller
Tested-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
netdev_printk originally called dev_printk with %pV.
This style emitted the complete dev_printk header with
a colon followed by the netdev_name prefix followed
by a colon.Now that netdev_printk does not call dev_printk, the
extra colon is superfluous. Remove it.Example:
old: sky2 0000:02:00.0: eth0: Link is up at 100 Mbps, full duplex, flow control both
new: sky2 0000:02:00.0 eth0: Link is up at 100 Mbps, full duplex, flow control bothSigned-off-by: Joe Perches
Acked-by: David S. Miller
Tested-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
A lot of stack is used in recursive printks with %pV.
Using multiple levels of %pV (a logging function with %pV
that calls another logging function with %pV) can consume
more stack than necessary.Avoid excessive stack use by not calling dev_printk from
netdev_printk and dynamic_netdev_dbg. Duplicate the logic
and form of dev_printk instead.Make __netdev_printk static.
Remove EXPORT_SYMBOL(__netdev_printk)
Whitespace and brace style neatening.Signed-off-by: Joe Perches
Acked-by: David S. Miller
Tested-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
commit c4e00daaa9
("driver-core: extend dev_printk() to pass structured data")
changed __dev_printk and broke dynamic-debug's ability to control the
dynamic prefix of dev_dbg(dev,..).commit af7f2158fd
("drivers-core: make structured logging play nice with dynamic-debug")
made a minimal correction.The current dynamic debug code uses up to 3 recursion levels via %pV.
This can consume quite a bit of stack. Directly call printk_emit to
reduce the recursion depth.These changes include:
dev_dbg:
o Create and use function create_syslog_header to format the syslog
header for printk_emit uses.
o Call create_syslog_header and neaten __dev_printk
o Make __dev_printk static not global
o Remove include header declaration of __dev_printk
o Remove now unused EXPORT_SYMBOL() of __dev_printk
o Whitespace neateningdynamic_dev_dbg:
o Remove KERN_DEBUG from dynamic_emit_prefix
o Call create_syslog_header and printk_emit
o Whitespace neateningSigned-off-by: Joe Perches
Acked-by: David S. Miller
Tested-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman
08 May, 2012
1 commit
-
This reverts commit 04db6e5fddca55186b6a74339a62c800150648bc.
Odds are, we really don't want to revert all of these, and need to be
more careful in the future to make sure we don't break the build of
other arches.Reported-by: Stephen Rothwell
Cc: Jim Cromie
Signed-off-by: Greg Kroah-Hartman
05 May, 2012
1 commit
-
These arent currently needed, so drop them. Some will probably get
re-added when static-branches are added, but include loops prevent
that at present.Signed-off-by: Jim Cromie
Signed-off-by: Greg Kroah-Hartman
01 May, 2012
8 commits
-
1- Call dynamic_debug_init() from early_initcall, not arch_initcall.
2- Call dynamic_debug_init_debugfs() from fs_initcall, not module_init.RFC: This works for me on a 64 bit desktop and a i586 SBC, but is
untested on other arches. I presume there is or was a reason
original code used arch_initcall, maybe the constraints have changed.This makes facility available as soon as possible.
2nd change has a downside when dynamic_debug.verbose=1; all the
vpr_info()s called in the proc-fs code are activated, causing
voluminous output from dmesg. TBD: Im unsure of this explanation, but
the output is there. This could be fixed by changing those callsites
to v2pr_info(if verbose > 1).1st change is still not early enough to enable pr_debugs in
kernel/params, so parsing of boot-args isnt logged. The reparse of
those args is however visible after params.dyndbg="+p" is processed.Signed-off-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Pass module name into ddebug_exec_queries(), ddebug_exec_query(), and
ddebug_parse_query() as separate parameter. In ddebug_parse_query(),
the module name is added into the query struct before the query-string
is parsed. This allows the query-string to be shorter:instead of:
$modname.dyndbg="module $modname +fp"
do this:
$modname.dyndbg="+fp"Omitting "module $modname" from the query string is actually required
for $modname.dyndbg rules; the set-only-once check added in a previous
patch will throw an error if its added again. ddebug_query="..." has
no $modname associated with it, so the query string may include it.This also fixes redundant "module $modname" otherwise needed to handle
multiple queries per string:$modname.dyndbg="func foo +fp; func bar +fp"
Signed-off-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Print ram usage of dynamic-debug tables and verbose section so user
knows cost of enabling CONFIG_DYNAMIC_DEBUG. This only counts the
size of the _ddebug tables for builtins and the __verbose section that
they refer to, not those used in loadable modules.Signed-off-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
We dont want errors while parsing ddebug_query to unload ddebug
tables, so set success after tables are loaded, and return 0 after
query parsing is done.Simplify error handling code since its no longer used for success,
and change goto label to out_err to clarify this.Signed-off-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Refactor ddebug_dyndbg_boot_param_cb and ddebug_dyndbg_module_param_cb
into a common helper function, and call it from both. The handling of
foo.dyndbg is unneeded by the latter, but harmless.The 2 callers differ only by pr_info and the return code they pass to
the helper for when an unknown param is handled. I could slightly
reduce dmesg clutter by putting the vpr_info in the common helper,
after the return on_err, but that loses __func__ context, is overly
silent on module_cb unknown param errors, and the clutter is only when
dynamic_debug.verbose=1 anyway.Signed-off-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
With ddebug_dyndbg_boot_params_cb() handling bare dyndbg params, we
dont need ddebug_query param anymore. Add a warning when processing
ddebug_query= param that it is deprecated, and to change it to dyndbg=Add a deprecation notice for v3.8 to feature-removal-schedule.txt, and
add a suggested deprecation period of 3 releases to the header.Signed-off-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
This introduces a fake module param $module.dyndbg. Its based upon
Thomas Renninger's $module.ddebug boot-time debugging patch from
https://lkml.org/lkml/2010/9/15/397The 'fake' module parameter is provided for all modules, whether or
not they need it. It is not explicitly added to each module, but is
implemented in callbacks invoked from parse_args.For builtin modules, dynamic_debug_init() now directly calls
parse_args(..., &ddebug_dyndbg_boot_params_cb), to process the params
undeclared in the modules, just after the ddebug tables are processed.While its slightly weird to reprocess the boot params, parse_args() is
already called repeatedly by do_initcall_levels(). More importantly,
the dyndbg queries (given in ddebug_query or dyndbg params) cannot be
activated until after the ddebug tables are ready, and reusing
parse_args is cleaner than doing an ad-hoc parse. This reparse would
break options like inc_verbosity, but they probably should be params,
like verbosity=3.ddebug_dyndbg_boot_params_cb() handles both bare dyndbg (aka:
ddebug_query) and module-prefixed dyndbg params, and ignores all other
parameters. For example, the following will enable pr_debug()s in 4
builtin modules, in the order given:dyndbg="module params +p; module aio +p" module.dyndbg=+p pci.dyndbg
For loadable modules, parse_args() in load_module() calls
ddebug_dyndbg_module_params_cb(). This handles bare dyndbg params as
passed from modprobe, and errors on other unknown params.Note that modprobe reads /proc/cmdline, so "modprobe foo" grabs all
foo.params, strips the "foo.", and passes these to the kernel.
ddebug_dyndbg_module_params_cb() is again called for the unknown
params; it handles dyndbg, and errors on others. The "doing" arg
added previously contains the module name.For non CONFIG_DYNAMIC_DEBUG builds, the stub function accepts
and ignores $module.dyndbg params, other unknowns get -ENOENT.If no param value is given (as in pci.dyndbg example above), "+p" is
assumed, which enables all pr_debug callsites in the module.The dyndbg fake parameter is not shown in /sys/module/*/parameters,
thus it does not use any resources. Changes to it are made via the
control file.Also change pr_info in ddebug_exec_queries to vpr_info,
no need to see it all the time.Signed-off-by: Jim Cromie
CC: Thomas Renninger
CC: Rusty Russell
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Use vpr_info to declutter code, reduce indenting, and change one
additional pr_info call in ddebug_exec_queries.Signed-off-by: Jim Cromie
Acked-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman
25 Jan, 2012
14 commits
-
Insert ddebug_exec_queries() in place of ddebug_exec_query(). It
splits the query string on [;\n], and calls ddebug_exec_query() on
each. All queries are processed independent of errors, allowing a
query to fail, for example when a module is not installed. Empty
lines and comments are skipped. Errors are counted, and the last
error seen (negative) or the number of callsites found (0 or positive)
is returned. Return code checks are altered accordingly.With this, multiple queries can be given in ddebug_query, allowing
more selective enabling of callsites. As a side effect, a set of
commands can be batched in:cat cmd-file > $DBGMT/dynamic_debug/control
We dont want a ddebug_query syntax error to kill the dynamic debug
facility, so dynamic_debug_init() zeros ddebug_exec_queries()'s return
code after logging the appropriate message, so that ddebug tables are
preserved and $DBGMT/dynamic_debug/control file is created. This
would be appropriate even without accepting multiple queries.This patch also alters ddebug_change() to return number of callsites
matched (which typically is the same as number of callsites changed).
ddebug_exec_query() also returns the number found, or a negative value
if theres a parse error on the query.Splitting on [;\n] prevents their use in format-specs, but selecting
callsites on punctuation is brittle anyway, meaningful and selective
substrings are more typical.Note: splitting queries on ';' before handling trailing #comments
means that a ';' also terminates a comment, and text after the ';' is
treated as another query. This trailing query will almost certainly
result in a parse error and thus have no effect other than the error
message. The double corner case with unexpected results is:ddebug_query="func foo +p # enable foo ; +p"
Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Factor pr_info(query) out of ddebug_parse_query, into vpr_info_dq(),
for reuse later. Also change the printed labels: file, func to agree
with the query-spec keywords accepted in the control file. Pass ""
when string is null, to avoid "(null)" output from sprintf. For
format print, use precision to skip last char, assuming its '\n', no
great harm if not, its a debug msg.Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
trim_prefix(path) skips past the absolute source path root, and
returns the pointer to the relative path from there. It is used to
shorten the displayed path in $DBGMT/dynamic_debug/control via
ddebug_proc_show(), and in ddebug_change() to allow relative filenames
to be used in applied queries. For example:~# echo file kernel/freezer.c +p > $DBGMT/dynamic_debug/control
kernel/freezer.c:128 [freezer]cancel_freezing p " clean up: %s\012"
trim_prefix(path) insures common prefix before trimming it, so
out-of-tree module paths are shown as full absolute paths.Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Current query write buffer is 256 bytes, on stack. In comparison, the
ddebug_query boot-arg is 1024. Allocate the buffer off heap, and
enlarge it to 4096 bytes, big enough for ~100 queries (at 40 bytes
each), and error out if not. This makes it play nicely with large
query sets (to be added later). The buffer should be enough for most
uses, and others should probably be split into subsets.[jbaron@redhat.com: changed USER_BUF_PAGE from 4095 -> 4096 ]
Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
If a token begins with #, the remainder of query string is a comment,
so drop it. Doing it here avoids '#' in quoted strings.Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
If _ddebug table is empty (in a CONFIG_DYNAMIC_DEBUG build this
shouldn't happen), then warn (error?) and return early. This skips
empty table scan and parsing of setup-string, including the pr_info
call noting the parse. By inspection, copy return-code handling from
1st ddebug_add_module() callsite to 2nd.Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Issue error when a match-spec is given multiple times in a rule.
Previous code kept last one, but was silent about it. Docs imply only
one is allowed by saying match-specs are ANDed together, given that
module M cannot match both A and B. Also error when last_line < 1st_line.Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Change describe_flags() to emit '=[pmflt_]+' for current callsite
flags, or just '=_' when they're disabled. Having '=' in output
allows a more selective grep expression; in contrast '-' may appear
in filenames, line-ranges, and format-strings. '=' also has better
mnemonics, saying; "the current setting is equal to ".This allows grep "=_" /dynamic_debug/control to see disabled
callsites while avoiding the many occurrences of " = " seen in format
strings.Enlarge flagsbufs to handle additional flag char, and alter
ddebug_parse_flags() to allow flags=0, so that user can turn off all
debug flags via:~# echo =_ > /dynamic_debug/control
Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Convert 'if (x !=NULL)' checks into 'if (x)'.
Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Issue keyword/parsing errors even w/o verbose set;
uncover otherwize mysterious non-functionality.Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Replace strcpy with strlcpy, and add define for the size constant.
[jbaron@redhat.com: Use DDEBUG_STRING_SIZE for overflow check]
Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Allow changing dynamic_debug verbosity at run-time, to ease debugging
of ddebug queries as you add them, improving usability.at boot time: dynamic_debug.verbose=1
at runtime:
root@voyage:~# echo 1 > /sys/module/dynamic_debug/parameters/verboseSigned-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Currently any enabled dynamic-debug flag on a pr_debug callsite will
enable printing, even if _DPRINTK_FLAGS_PRINT is off. Checking print
flag directly allows "-p" to disable callsites without fussing with
other flags, so the following disables everything, without altering
flags user may have set:echo -p > $DBGFS/dynamic_debug/control
Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman -
Style cleanups.
Signed-off-by: Jim Cromie
Signed-off-by: Jason Baron
Signed-off-by: Greg Kroah-Hartman
25 Oct, 2011
1 commit
-
* 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (38 commits)
mm: memory hotplug: Check if pages are correctly reserved on a per-section basis
Revert "memory hotplug: Correct page reservation checking"
Update email address for stable patch submission
dynamic_debug: fix undefined reference to `__netdev_printk'
dynamic_debug: use a single printk() to emit messages
dynamic_debug: remove num_enabled accounting
dynamic_debug: consolidate repetitive struct _ddebug descriptor definitions
uio: Support physical addresses >32 bits on 32-bit systems
sysfs: add unsigned long cast to prevent compile warning
drivers: base: print rejected matches with DEBUG_DRIVER
memory hotplug: Correct page reservation checking
memory hotplug: Refuse to add unaligned memory regions
remove the messy code file Documentation/zh_CN/SubmitChecklist
ARM: mxc: convert device creation to use platform_device_register_full
new helper to create platform devices with dma mask
docs/driver-model: Update device class docs
docs/driver-model: Document device.groups
kobj_uevent: Ignore if some listeners cannot handle message
dynamic_debug: make netif_dbg() call __netdev_printk()
dynamic_debug: make netdev_dbg() call __netdev_printk()
...
19 Oct, 2011
1 commit
-
Dynamic debug recently added support for netdev_printk. It uses
__netdev_printk() to support this functionality. However, when CONFIG_NET
is not set, we get the following error:lib/built-in.o: In function `__dynamic_netdev_dbg':
(.text+0x9fda): undefined reference to `__netdev_printk'Fix this by making the call to netdev_printk() contingent upon CONFIG_NET.
We could have fixed this by defining netdev_printk() to a 'no-op' in the
!CONFIG_NET case. However, this is not consistent with how the networking
layer uses netdev_printk. For example, CONFIG_NET is not set,
netdev_printk() does not have a 'no-op' definition defined.Signed-off-by: Jason Baron
Acked-by: Randy Dunlap
Acked-by: Arnd Bergmann
Signed-off-by: Andrew Morton
Signed-off-by: Greg Kroah-Hartman