* [PATCH 1/5] add DEFINE_LOGLEVEL_SETUP v2
@ 2008-09-16 8:52 Yinghai Lu
2008-09-16 8:52 ` [PATCH 2/5] pci: add pci_printk v2 Yinghai Lu
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Yinghai Lu @ 2008-09-16 8:52 UTC (permalink / raw)
To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton
Cc: linux-kernel, Yinghai Lu
so could make subsys easy to add loglevel and xxx_printk
v2: make it more genric, so subsys user only need to two line macro
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
---
arch/x86/kernel/vmlinux_32.lds.S | 1 +
arch/x86/kernel/vmlinux_64.lds.S | 2 ++
include/asm-generic/vmlinux.lds.h | 8 ++++++++
include/linux/init.h | 36 ++++++++++++++++++++++++++++++++++++
include/linux/kernel.h | 9 +++++++++
init/main.c | 28 +++++++++++++++++++++++++++-
6 files changed, 83 insertions(+), 1 deletion(-)
Index: linux-2.6/arch/x86/kernel/vmlinux_32.lds.S
===================================================================
--- linux-2.6.orig/arch/x86/kernel/vmlinux_32.lds.S
+++ linux-2.6/arch/x86/kernel/vmlinux_32.lds.S
@@ -145,6 +145,7 @@ SECTIONS
*(.x86_cpu_dev.init)
__x86_cpu_dev_end = .;
}
+ LOGLEVEL_SETUP_INIT(8)
DYN_ARRAY_INIT(8)
SECURITY_INIT
. = ALIGN(4);
Index: linux-2.6/arch/x86/kernel/vmlinux_64.lds.S
===================================================================
--- linux-2.6.orig/arch/x86/kernel/vmlinux_64.lds.S
+++ linux-2.6/arch/x86/kernel/vmlinux_64.lds.S
@@ -174,6 +174,8 @@ SECTIONS
}
__x86_cpu_dev_end = .;
+ LOGLEVEL_SETUP_INIT(8)
+
DYN_ARRAY_INIT(8)
SECURITY_INIT
Index: linux-2.6/include/asm-generic/vmlinux.lds.h
===================================================================
--- linux-2.6.orig/include/asm-generic/vmlinux.lds.h
+++ linux-2.6/include/asm-generic/vmlinux.lds.h
@@ -222,6 +222,14 @@
* All archs are supposed to use RO_DATA() */
#define RODATA RO_DATA(4096)
+#define LOGLEVEL_SETUP_INIT(align) \
+ . = ALIGN((align)); \
+ .loglevel_setup.init : AT(ADDR(.loglevel_setup.init) - LOAD_OFFSET) { \
+ VMLINUX_SYMBOL(__loglevel_setup_start) = .; \
+ *(.loglevel_setup.init) \
+ VMLINUX_SYMBOL(__loglevel_setup_end) = .; \
+ }
+
#define DYN_ARRAY_INIT(align) \
. = ALIGN((align)); \
.dyn_array.init : AT(ADDR(.dyn_array.init) - LOAD_OFFSET) { \
Index: linux-2.6/include/linux/init.h
===================================================================
--- linux-2.6.orig/include/linux/init.h
+++ linux-2.6/include/linux/init.h
@@ -251,6 +251,42 @@ struct obs_kernel_param {
/* Relies on boot_command_line being set */
void __init parse_early_param(void);
+#define DECLARE_LOGLEVEL(nameX) \
+ extern int loglevel_##nameX; \
+ extern int nameX##_printk(int v, const char *fmt, ...)
+
+struct loglevel_setup {
+ char *name;
+ void (*setup)(char *);
+};
+
+extern struct loglevel_setup *__loglevel_setup_start[], *__loglevel_setup_end[];
+
+#define DEFINE_LOGLEVEL_SETUP(nameX) \
+ int loglevel_##nameX; \
+ int nameX##_printk(int v, const char *fmt, ...) \
+ { \
+ va_list args; \
+ int r; \
+ if (v > loglevel_##nameX) \
+ return 0; \
+ va_start(args, fmt); \
+ r = vprintk(fmt, args); \
+ va_end(args); \
+ return r; \
+ } \
+ static void __init setup_loglevel_##nameX(char *str) \
+ { \
+ get_option(&str, &loglevel_##nameX); \
+ } \
+ static struct loglevel_setup __loglevel_setup_##nameX __initdata = \
+ { .name = #nameX, \
+ .setup = setup_loglevel_##nameX, \
+ }; \
+ static struct loglevel_setup *__loglevel_setup_ptr_##nameX __used \
+ __attribute__((__section__(".loglevel_setup.init"))) = \
+ &__loglevel_setup_##nameX
+
struct dyn_array {
void **name;
unsigned long size;
Index: linux-2.6/include/linux/kernel.h
===================================================================
--- linux-2.6.orig/include/linux/kernel.h
+++ linux-2.6/include/linux/kernel.h
@@ -104,6 +104,15 @@ extern int console_printk[];
#define minimum_console_loglevel (console_printk[2])
#define default_console_loglevel (console_printk[3])
+#define KERN_LOG_EMERG 0 /* system is unusable */
+#define KERN_LOG_ALERT 1 /* action must be taken immediately */
+#define KERN_LOG_CRIT 2 /* critical conditions */
+#define KERN_LOG_ERR 3 /* error conditions */
+#define KERN_LOG_WARNING 4 /* warning conditions */
+#define KERN_LOG_NOTICE 5 /* normal but significant condition */
+#define KERN_LOG_INFO 6 /* informational */
+#define KERN_LOG_DEBUG 7 /* debug-level messages */
+
struct completion;
struct pt_regs;
struct user;
Index: linux-2.6/init/main.c
===================================================================
--- linux-2.6.orig/init/main.c
+++ linux-2.6/init/main.c
@@ -248,9 +248,35 @@ static int __init quiet_kernel(char *str
early_param("debug", debug_kernel);
early_param("quiet", quiet_kernel);
+static char __init *real_loglevel_setup(char *str)
+{
+ struct loglevel_setup **la;
+
+ for (la = __loglevel_setup_start ; la < __loglevel_setup_end; la++) {
+ struct loglevel_setup *l = *la;
+ int len = strlen(l->name);
+
+ if (!strncmp(str, l->name, len)) {
+ /* skip one : */
+ l->setup(str + len + 1);
+ str = NULL;
+ break;
+ }
+ }
+
+ return str;
+}
static int __init loglevel(char *str)
{
- get_option(&str, &console_loglevel);
+ while (str) {
+ char *k = strchr(str, ',');
+ if (k)
+ *k++ = 0;
+ if (*str && (str = real_loglevel_setup(str)) && *str) {
+ get_option(&str, &console_loglevel);
+ }
+ str = k;
+ }
return 0;
}
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 2/5] pci: add pci_printk v2 2008-09-16 8:52 [PATCH 1/5] add DEFINE_LOGLEVEL_SETUP v2 Yinghai Lu @ 2008-09-16 8:52 ` Yinghai Lu 2008-09-16 8:52 ` [PATCH 3/5] pci: using pci_printk Yinghai Lu ` (2 subsequent siblings) 3 siblings, 0 replies; 9+ messages in thread From: Yinghai Lu @ 2008-09-16 8:52 UTC (permalink / raw) To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton Cc: linux-kernel, Yinghai Lu use DEFINE_LOGLEVEL_SETUP to set loglevel for pci v2: two lines only Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com> --- drivers/pci/pci.c | 2 ++ include/linux/pci.h | 2 ++ 2 files changed, 4 insertions(+) Index: linux-2.6/drivers/pci/pci.c =================================================================== --- linux-2.6.orig/drivers/pci/pci.c +++ linux-2.6/drivers/pci/pci.c @@ -1953,6 +1953,8 @@ static int __devinit pci_setup(char *str } early_param("pci", pci_setup); +DEFINE_LOGLEVEL_SETUP(pci); + device_initcall_sync(pci_init); EXPORT_SYMBOL(pci_reenable_device); Index: linux-2.6/include/linux/pci.h =================================================================== --- linux-2.6.orig/include/linux/pci.h +++ linux-2.6/include/linux/pci.h @@ -55,6 +55,8 @@ /* Include the ID list */ #include <linux/pci_ids.h> +DECLARE_LOGLEVEL(pci); + /* pci_slot represents a physical slot */ struct pci_slot { struct pci_bus *bus; /* The bus this slot is on */ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/5] pci: using pci_printk 2008-09-16 8:52 [PATCH 1/5] add DEFINE_LOGLEVEL_SETUP v2 Yinghai Lu 2008-09-16 8:52 ` [PATCH 2/5] pci: add pci_printk v2 Yinghai Lu @ 2008-09-16 8:52 ` Yinghai Lu 2008-09-16 10:20 ` Alexey Dobriyan 2008-09-16 8:52 ` [PATCH 4/5] acpi: add acpi_printk Yinghai Lu 2008-09-16 8:52 ` [PATCH 5/5] apci: dump slit v3 Yinghai Lu 3 siblings, 1 reply; 9+ messages in thread From: Yinghai Lu @ 2008-09-16 8:52 UTC (permalink / raw) To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton Cc: linux-kernel, Yinghai Lu Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com> --- drivers/pci/probe.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) Index: linux-2.6/drivers/pci/probe.c =================================================================== --- linux-2.6.orig/drivers/pci/probe.c +++ linux-2.6/drivers/pci/probe.c @@ -304,7 +304,7 @@ static int __pci_read_base(struct pci_de } else { res->start = l64; res->end = l64 + sz64; - printk(KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", + pci_printk(KERN_LOG_DEBUG, KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", pci_name(dev), pos, res->start, res->end); } } else { @@ -315,7 +315,7 @@ static int __pci_read_base(struct pci_de res->start = l; res->end = l + sz; - printk(KERN_DEBUG "PCI: %s reg %x %s: [%llx, %llx]\n", pci_name(dev), + pci_printk(KERN_LOG_DEBUG, KERN_DEBUG "PCI: %s reg %x %s: [%llx, %llx]\n", pci_name(dev), pos, (res->flags & IORESOURCE_IO) ? "io port":"32bit mmio", res->start, res->end); } @@ -388,7 +388,7 @@ void __devinit pci_read_bridge_bases(str res->start = base; if (!res->end) res->end = limit + 0xfff; - printk(KERN_DEBUG "PCI: bridge %s io port: [%llx, %llx]\n", + pci_printk(KERN_LOG_DEBUG, KERN_DEBUG "PCI: bridge %s io port: [%llx, %llx]\n", pci_name(dev), res->start, res->end); } @@ -401,7 +401,7 @@ void __devinit pci_read_bridge_bases(str res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM; res->start = base; res->end = limit + 0xfffff; - printk(KERN_DEBUG "PCI: bridge %s 32bit mmio: [%llx, %llx]\n", + pci_printk(KERN_LOG_DEBUG, KERN_DEBUG "PCI: bridge %s 32bit mmio: [%llx, %llx]\n", pci_name(dev), res->start, res->end); } @@ -438,7 +438,7 @@ void __devinit pci_read_bridge_bases(str res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH; res->start = base; res->end = limit + 0xfffff; - printk(KERN_DEBUG "PCI: bridge %s %sbit mmio pref: [%llx, %llx]\n", + pci_printk(KERN_LOG_DEBUG, KERN_DEBUG "PCI: bridge %s %sbit mmio pref: [%llx, %llx]\n", pci_name(dev), (res->flags & PCI_PREF_RANGE_TYPE_64)?"64":"32", res->start, res->end); } ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/5] pci: using pci_printk 2008-09-16 8:52 ` [PATCH 3/5] pci: using pci_printk Yinghai Lu @ 2008-09-16 10:20 ` Alexey Dobriyan 2008-09-16 17:18 ` Robert Richter 2008-09-17 21:43 ` Alex Chiang 0 siblings, 2 replies; 9+ messages in thread From: Alexey Dobriyan @ 2008-09-16 10:20 UTC (permalink / raw) To: Yinghai Lu Cc: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton, linux-kernel On Tue, Sep 16, 2008 at 01:52:52AM -0700, Yinghai Lu wrote: > --- linux-2.6.orig/drivers/pci/probe.c > +++ linux-2.6/drivers/pci/probe.c > @@ -304,7 +304,7 @@ static int __pci_read_base(struct pci_de > - printk(KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", > + pci_printk(KERN_LOG_DEBUG, KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", ^^^^^^^^^^^^^^^^^^^^^^^^^^ Brilliant, simply brilliant! Printk haters club is definitely creative, no questions. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/5] pci: using pci_printk 2008-09-16 10:20 ` Alexey Dobriyan @ 2008-09-16 17:18 ` Robert Richter 2008-09-17 21:43 ` Alex Chiang 1 sibling, 0 replies; 9+ messages in thread From: Robert Richter @ 2008-09-16 17:18 UTC (permalink / raw) To: Alexey Dobriyan Cc: Yinghai Lu, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton, linux-kernel On 16.09.08 14:20:52, Alexey Dobriyan wrote: > On Tue, Sep 16, 2008 at 01:52:52AM -0700, Yinghai Lu wrote: > > --- linux-2.6.orig/drivers/pci/probe.c > > +++ linux-2.6/drivers/pci/probe.c > > @@ -304,7 +304,7 @@ static int __pci_read_base(struct pci_de > > > - printk(KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", > > + pci_printk(KERN_LOG_DEBUG, KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", > ^^^^^^^^^^^^^^^^^^^^^^^^^^ > > Brilliant, simply brilliant! Wouldn't it be much simpler to have an i/f as for dev_dbg() and also run the log level check only for debug messages? And, the dev_dbg() macro seems to have code that can be binary pached (?) to enable it if the compile option is not set. -Robert #define dev_dbg(dev, format, arg...) \ ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; }) -- Advanced Micro Devices, Inc. Operating System Research Center email: robert.richter@amd.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/5] pci: using pci_printk 2008-09-16 10:20 ` Alexey Dobriyan 2008-09-16 17:18 ` Robert Richter @ 2008-09-17 21:43 ` Alex Chiang 1 sibling, 0 replies; 9+ messages in thread From: Alex Chiang @ 2008-09-17 21:43 UTC (permalink / raw) To: Alexey Dobriyan Cc: Yinghai Lu, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton, linux-kernel, bjorn.helgaas * Alexey Dobriyan <adobriyan@gmail.com>: > On Tue, Sep 16, 2008 at 01:52:52AM -0700, Yinghai Lu wrote: > > --- linux-2.6.orig/drivers/pci/probe.c > > +++ linux-2.6/drivers/pci/probe.c > > @@ -304,7 +304,7 @@ static int __pci_read_base(struct pci_de > > > - printk(KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", > > + pci_printk(KERN_LOG_DEBUG, KERN_DEBUG "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", > ^^^^^^^^^^^^^^^^^^^^^^^^^^ > Brilliant, simply brilliant! Yeah, that's ugly. > Printk haters club is definitely creative, no questions. Bjorn might have some useful advice here. Also, didn't we recently get all the PCI printk output to resemble what lspci shows us? /ac ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/5] acpi: add acpi_printk 2008-09-16 8:52 [PATCH 1/5] add DEFINE_LOGLEVEL_SETUP v2 Yinghai Lu 2008-09-16 8:52 ` [PATCH 2/5] pci: add pci_printk v2 Yinghai Lu 2008-09-16 8:52 ` [PATCH 3/5] pci: using pci_printk Yinghai Lu @ 2008-09-16 8:52 ` Yinghai Lu 2008-09-16 8:52 ` [PATCH 5/5] apci: dump slit v3 Yinghai Lu 3 siblings, 0 replies; 9+ messages in thread From: Yinghai Lu @ 2008-09-16 8:52 UTC (permalink / raw) To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton Cc: linux-kernel, Yinghai Lu use DEFINE_LOGLEVEL_SETUP to set loglevel for acpi --- drivers/acpi/osl.c | 2 ++ include/linux/acpi.h | 1 + 2 files changed, 3 insertions(+) Index: linux-2.6/drivers/acpi/osl.c =================================================================== --- linux-2.6.orig/drivers/acpi/osl.c +++ linux-2.6/drivers/acpi/osl.c @@ -75,6 +75,8 @@ EXPORT_SYMBOL(acpi_in_debugger); extern char line_buf[80]; #endif /*ENABLE_DEBUGGER */ +DEFINE_LOGLEVEL_SETUP(acpi); + static unsigned int acpi_irq_irq; static acpi_osd_handler acpi_irq_handler; static void *acpi_irq_context; Index: linux-2.6/include/linux/acpi.h =================================================================== --- linux-2.6.orig/include/linux/acpi.h +++ linux-2.6/include/linux/acpi.h @@ -43,6 +43,7 @@ #include <asm/acpi.h> #include <linux/dmi.h> +DECLARE_LOGLEVEL(acpi); enum acpi_irq_model_id { ACPI_IRQ_MODEL_PIC = 0, ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 5/5] apci: dump slit v3 2008-09-16 8:52 [PATCH 1/5] add DEFINE_LOGLEVEL_SETUP v2 Yinghai Lu ` (2 preceding siblings ...) 2008-09-16 8:52 ` [PATCH 4/5] acpi: add acpi_printk Yinghai Lu @ 2008-09-16 8:52 ` Yinghai Lu 2008-09-16 10:13 ` Cyrill Gorcunov 3 siblings, 1 reply; 9+ messages in thread From: Yinghai Lu @ 2008-09-16 8:52 UTC (permalink / raw) To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton Cc: linux-kernel, Yinghai Lu v2: using boot_printk v3: using acpi_printk Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com> --- drivers/acpi/numa.c | 8 ++++++++ 1 file changed, 8 insertions(+) Index: linux-2.6/drivers/acpi/numa.c =================================================================== --- linux-2.6.orig/drivers/acpi/numa.c +++ linux-2.6/drivers/acpi/numa.c @@ -150,6 +150,14 @@ static __init int slit_valid(struct acpi { int i, j; int d = slit->locality_count; + acpi_printk(KERN_LOG_DEBUG, KERN_DEBUG "ACPI: SLIT: nodes = %d\n", d); + for (i = 0; i < d; i++) { + for (j = 0; j < d; j++) { + u8 val = slit->entry[d*i + j]; + acpi_printk(KERN_LOG_DEBUG, " %d", val); + } + acpi_printk(KERN_LOG_DEBUG, "\n"); + } for (i = 0; i < d; i++) { for (j = 0; j < d; j++) { u8 val = slit->entry[d*i + j]; ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 5/5] apci: dump slit v3 2008-09-16 8:52 ` [PATCH 5/5] apci: dump slit v3 Yinghai Lu @ 2008-09-16 10:13 ` Cyrill Gorcunov 0 siblings, 0 replies; 9+ messages in thread From: Cyrill Gorcunov @ 2008-09-16 10:13 UTC (permalink / raw) To: Yinghai Lu Cc: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton, linux-kernel [Yinghai Lu - Tue, Sep 16, 2008 at 01:52:54AM -0700] | v2: using boot_printk | v3: using acpi_printk | | Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com> | | --- | drivers/acpi/numa.c | 8 ++++++++ | 1 file changed, 8 insertions(+) | | Index: linux-2.6/drivers/acpi/numa.c | =================================================================== | --- linux-2.6.orig/drivers/acpi/numa.c | +++ linux-2.6/drivers/acpi/numa.c | @@ -150,6 +150,14 @@ static __init int slit_valid(struct acpi | { | int i, j; | int d = slit->locality_count; | + acpi_printk(KERN_LOG_DEBUG, KERN_DEBUG "ACPI: SLIT: nodes = %d\n", d); | + for (i = 0; i < d; i++) { | + for (j = 0; j < d; j++) { | + u8 val = slit->entry[d*i + j]; | + acpi_printk(KERN_LOG_DEBUG, " %d", val); | + } | + acpi_printk(KERN_LOG_DEBUG, "\n"); | + } | for (i = 0; i < d; i++) { | for (j = 0; j < d; j++) { | u8 val = slit->entry[d*i + j]; | I suppose there will be some apic_pr_... macro since typing ~40 symbols to print a message a bit annoying. Yinghai? - Cyrill - ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-09-17 21:43 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-09-16 8:52 [PATCH 1/5] add DEFINE_LOGLEVEL_SETUP v2 Yinghai Lu 2008-09-16 8:52 ` [PATCH 2/5] pci: add pci_printk v2 Yinghai Lu 2008-09-16 8:52 ` [PATCH 3/5] pci: using pci_printk Yinghai Lu 2008-09-16 10:20 ` Alexey Dobriyan 2008-09-16 17:18 ` Robert Richter 2008-09-17 21:43 ` Alex Chiang 2008-09-16 8:52 ` [PATCH 4/5] acpi: add acpi_printk Yinghai Lu 2008-09-16 8:52 ` [PATCH 5/5] apci: dump slit v3 Yinghai Lu 2008-09-16 10:13 ` Cyrill Gorcunov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox