From: "Luis R. Rodriguez" <mcgrof@kernel.org>
To: hpa@zytor.com, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, linux@arm.linux.org.uk, mhiramat@kernel.org,
masami.hiramatsu.pt@hitachi.com, jbaron@akamai.com,
heiko.carstens@de.ibm.com, ananth@linux.vnet.ibm.com,
anil.s.keshavamurthy@intel.com, davem@davemloft.net,
realmz6@gmail.com
Cc: x86@kernel.org, luto@amacapital.net, keescook@chromium.org,
torvalds@linux-foundation.org, gregkh@linuxfoundation.org,
rusty@rustcorp.com.au, gnomes@lxorguk.ukuu.org.uk,
alan@linux.intel.com, dwmw2@infradead.org, arnd@arndb.de,
ming.lei@canonical.com, linux-arch@vger.kernel.org,
benh@kernel.crashing.org, ananth@in.ibm.com, pebolle@tiscali.nl,
fontana@sharpeleven.org, ciaran.farrell@suse.com,
christopher.denicolo@suse.com, david.vrabel@citrix.com,
konrad.wilk@oracle.com, mcb30@ipxe.org, jgross@suse.com,
andrew.cooper3@citrix.com, andriy.shevchenko@linux.intel.com,
paul.gortmaker@windriver.com, xen-devel@lists.xensource.com,
ak@linux.intel.com, pali.rohar@gmail.com, dvhart@infradead.org,
platform-driver-x86@vger.kernel.org, mmarek@suse.com,
linux@rasmusvillemoes.dk, jkosina@suse.cz, korea.drzix@gmail.com,
linux-kbuild@vger.kernel.org, tony.luck@intel.com,
akpm@linux-foun
Subject: [RFC v3 11/13] dynamic_debug: port to use linker tables
Date: Fri, 22 Jul 2016 21:24:45 +0000 [thread overview]
Message-ID: <1469222687-1600-12-git-send-email-mcgrof@kernel.org> (raw)
In-Reply-To: <1469222687-1600-1-git-send-email-mcgrof@kernel.org>
This removes the custom vmlinux.lds.h hacks and uses
the generalized solution for .data (SECTION_DATA)
entries.
This is much more potential for further fine tuning here
though in the future. For instance, linker tables enable
an extra postfix for order level annotations, this could
easily be used as the KBUILD_MODNAME and with a bit of
linker table changes we may be able to get a direct O(1)
count of the entries for that KBUILD_MODNAME: it would
just be a count on the number of entries for the given
order level. This should help make dynamic_debug_init()
cleaner and also reduce the amount of time it takes at
boot time. Instead of iterating over each print until we
have all for a KBUILD_MODNAME, we'd instead directly
operate on each KBUILD_MODNAME directly.
Tested dynamic debug with dyndbg query ana debugfs control
and it works as expected, for both built-in code and modules.
v3: added modular support
v2: introduced this patch into the series
Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>
---
include/asm-generic/vmlinux.lds.h | 5 -----
include/linux/dynamic_debug.h | 5 +++--
lib/dynamic_debug.c | 13 ++++++-------
scripts/module-common.lds.S | 1 +
4 files changed, 10 insertions(+), 14 deletions(-)
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index e186432a82e6..8048242b6a76 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -209,11 +209,6 @@
*(.data.unlikely) \
STRUCT_ALIGN(); \
*(__tracepoints) \
- /* implement dynamic printk debug */ \
- . = ALIGN(8); \
- VMLINUX_SYMBOL(__start___verbose) = .; \
- *(__verbose) \
- VMLINUX_SYMBOL(__stop___verbose) = .; \
LIKELY_PROFILE() \
BRANCH_PROFILE() \
TRACE_PRINTKS() \
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 546d68057e3b..a52618a77b09 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -4,6 +4,7 @@
#if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL)
#include <linux/jump_label.h>
#endif
+#include <linux/tables.h>
/*
* An instance of this structure is created in a special
@@ -50,6 +51,7 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
const char *modname);
#if defined(CONFIG_DYNAMIC_DEBUG)
+DECLARE_LINKTABLE(struct _ddebug, __verbose);
extern int ddebug_remove_module(const char *mod_name);
extern __printf(2, 3)
void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...);
@@ -71,8 +73,7 @@ void __dynamic_netdev_dbg(struct _ddebug *descriptor,
const char *fmt, ...);
#define DEFINE_DYNAMIC_DEBUG_METADATA_KEY(name, fmt, key, init) \
- static struct _ddebug __aligned(8) \
- __attribute__((section("__verbose"))) name = { \
+ static LINKTABLE(__verbose, SECTION_ORDER_ANY) name = { \
.modname = KBUILD_MODNAME, \
.function = __func__, \
.filename = __FILE__, \
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index da796e2dc4f5..f0060c84c654 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -37,8 +37,7 @@
#include <linux/device.h>
#include <linux/netdevice.h>
-extern struct _ddebug __start___verbose[];
-extern struct _ddebug __stop___verbose[];
+DEFINE_LINKTABLE(struct _ddebug, __verbose);
struct ddebug_table {
struct list_head link;
@@ -978,14 +977,14 @@ static int __init dynamic_debug_init(void)
int n = 0, entries = 0, modct = 0;
int verbose_bytes = 0;
- if (__start___verbose = __stop___verbose) {
- pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
+ if (LINUX_SECTION_EMPTY(__verbose)) {
+ pr_warn("dynamic debug linker table empty on CONFIG_DYNAMIC_DEBUG build\n");
return 1;
}
- iter = __start___verbose;
+ iter = LINUX_SECTION_START(__verbose);
modname = iter->modname;
iter_start = iter;
- for (; iter < __stop___verbose; iter++) {
+ LINKTABLE_FOR_EACH(iter, __verbose) {
entries++;
verbose_bytes += strlen(iter->modname) + strlen(iter->function)
+ strlen(iter->filename) + strlen(iter->format);
@@ -1008,7 +1007,7 @@ static int __init dynamic_debug_init(void)
ddebug_init_success = 1;
vpr_info("%d modules, %d entries and %d bytes in ddebug tables, %d bytes in (readonly) verbose section\n",
modct, entries, (int)(modct * sizeof(struct ddebug_table)),
- verbose_bytes + (int)(__stop___verbose - __start___verbose));
+ verbose_bytes + (int)(LINUX_SECTION_SIZE(__verbose)));
/* apply ddebug_query boot param, dont unload tables on err */
if (ddebug_setup_string[0] != '\0') {
diff --git a/scripts/module-common.lds.S b/scripts/module-common.lds.S
index d51140103ece..fec57aa5f4f1 100644
--- a/scripts/module-common.lds.S
+++ b/scripts/module-common.lds.S
@@ -21,6 +21,7 @@ SECTIONS {
__kcrctab_unused_gpl 0 : { *(SORT(___kcrctab_unused_gpl+*)) }
__kcrctab_gpl_future 0 : { *(SORT(___kcrctab_gpl_future+*)) }
__jump_table 0 : { *(SORT(SECTION_TBL(SECTION_DATA, __jump_table, *))) }
+ __verbose 0 : { *(SORT(SECTION_TBL(SECTION_DATA, __verbose, *))) }
. = ALIGN(8);
.init_array 0 : { *(SORT(.init_array.*)) *(.init_array) }
--
2.8.4
next prev parent reply other threads:[~2016-07-22 21:24 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-22 21:24 [RFC v3 00/13] linux: generalize sections, ranges and linker tables Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 01/13] x86: remove LTO_REFERENCE_INITCALL() Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 02/13] dell-smo8800: include uaccess.h Luis R. Rodriguez
2016-07-22 21:31 ` Pali Rohár
2016-07-22 21:24 ` [RFC v3 03/13] scripts/module-common.lds: enable generation Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 04/13] sections.h: guard against asm and linker script Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 05/13] sections.h: add sections header to collect all section info Luis R. Rodriguez
2016-07-22 21:37 ` James Hogan
2016-07-22 21:41 ` Luis R. Rodriguez
2016-07-29 17:28 ` Steven Rostedt
2016-07-22 21:24 ` [RFC v3 06/13] ranges.h: add helpers to build and identify Linux section ranges Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 07/13] tables.h: add linker table support Luis R. Rodriguez
2016-07-25 15:30 ` Masami Hiramatsu
2016-07-27 23:02 ` Luis R. Rodriguez
2016-07-28 17:08 ` H. Peter Anvin
2016-07-29 10:06 ` Borislav Petkov
2016-08-08 15:05 ` Luis R. Rodriguez
2016-08-09 3:55 ` Borislav Petkov
2016-08-12 3:51 ` Luis R. Rodriguez
2016-08-12 5:23 ` Borislav Petkov
2016-08-12 6:50 ` Luis R. Rodriguez
2016-08-12 7:25 ` Borislav Petkov
2016-08-12 15:28 ` Luis R. Rodriguez
2016-08-12 15:51 ` Borislav Petkov
2016-08-12 17:04 ` Luis R. Rodriguez
2016-08-12 17:35 ` Borislav Petkov
2016-08-12 20:23 ` Greg KH
2016-08-12 20:46 ` Jiri Kosina
2016-08-12 22:00 ` Luis R. Rodriguez
2016-08-13 10:46 ` Greg KH
2016-08-13 17:54 ` Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 08/13] firmware/Makefile: force recompilation if makefile changes Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 09/13] firmware: port built-in section to linker table Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 10/13] jump_label: port __jump_table to linker tables Luis R. Rodriguez
2016-07-22 21:49 ` Josh Poimboeuf
2016-07-22 22:26 ` Luis R. Rodriguez
2016-07-22 22:55 ` Josh Poimboeuf
2016-07-27 22:55 ` Luis R. Rodriguez
2016-07-22 21:24 ` Luis R. Rodriguez [this message]
2016-07-22 21:24 ` [RFC v3 12/13] kprobes: port .kprobes.text to section range Luis R. Rodriguez
2016-07-25 15:19 ` Masami Hiramatsu
2016-07-27 22:40 ` Luis R. Rodriguez
2016-07-22 21:24 ` [RFC v3 13/13] kprobes: port blacklist kprobes to linker table Luis R. Rodriguez
2016-07-25 15:27 ` Masami Hiramatsu
2016-07-27 23:00 ` Luis R. Rodriguez
2016-07-25 13:32 ` [RFC v3 00/13] linux: generalize sections, ranges and linker tables Masami Hiramatsu
2016-07-25 13:55 ` Richard Fontana
2016-07-27 22:46 ` Luis R. Rodriguez
2016-08-09 14:24 ` One Thousand Gnomes
2016-08-09 16:09 ` James Bottomley
2016-08-10 17:03 ` Luis R. Rodriguez
[not found] ` <CALCETrVmDhPC6BMu4_xTanSFZBKeW9V6A4SeQ4qxnpVod-eLbQ@mail.gmail.com>
[not found] ` <1471292106.5944.3.camel@linux.intel.com>
2016-08-15 21:00 ` Steven Rostedt
2016-08-15 22:40 ` James Bottomley
2016-08-15 22:44 ` James Bottomley
2016-08-09 16:48 ` Richard Fontana
2016-08-09 16:52 ` Richard Fontana
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1469222687-1600-12-git-send-email-mcgrof@kernel.org \
--to=mcgrof@kernel.org \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foun \
--cc=alan@linux.intel.com \
--cc=ananth@in.ibm.com \
--cc=ananth@linux.vnet.ibm.com \
--cc=andrew.cooper3@citrix.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=anil.s.keshavamurthy@intel.com \
--cc=arnd@arndb.de \
--cc=benh@kernel.crashing.org \
--cc=bp@alien8.de \
--cc=christopher.denicolo@suse.com \
--cc=ciaran.farrell@suse.com \
--cc=davem@davemloft.net \
--cc=david.vrabel@citrix.com \
--cc=dvhart@infradead.org \
--cc=dwmw2@infradead.org \
--cc=fontana@sharpeleven.org \
--cc=gnomes@lxorguk.ukuu.org.uk \
--cc=gregkh@linuxfoundation.org \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@zytor.com \
--cc=jbaron@akamai.com \
--cc=jgross@suse.com \
--cc=jkosina@suse.cz \
--cc=keescook@chromium.org \
--cc=konrad.wilk@oracle.com \
--cc=korea.drzix@gmail.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=linux@rasmusvillemoes.dk \
--cc=luto@amacapital.net \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mcb30@ipxe.org \
--cc=mhiramat@kernel.org \
--cc=ming.lei@canonical.com \
--cc=mingo@redhat.com \
--cc=mmarek@suse.com \
--cc=pali.rohar@gmail.com \
--cc=paul.gortmaker@windriver.com \
--cc=pebolle@tiscali.nl \
--cc=platform-driver-x86@vger.kernel.org \
--cc=realmz6@gmail.com \
--cc=rusty@rustcorp.com.au \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).