* [PATCH 1/3] add DEFINE_LOGLEVEL_SETUP
@ 2008-09-16 1:28 Yinghai Lu
2008-09-16 1:28 ` [PATCH 2/3] pci: add pci_printk Yinghai Lu
2008-09-16 1:28 ` [PATCH 3/3] pci: using pci_printk Yinghai Lu
0 siblings, 2 replies; 3+ messages in thread
From: Yinghai Lu @ 2008-09-16 1:28 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
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 | 17 +++++++++++++++++
include/linux/kernel.h | 9 +++++++++
init/main.c | 27 ++++++++++++++++++++++++++-
6 files changed, 63 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,23 @@ struct obs_kernel_param {
/* Relies on boot_command_line being set */
void __init parse_early_param(void);
+struct loglevel_setup {
+ char *name;
+ void (*setup)(char *);
+};
+
+extern struct loglevel_setup *__loglevel_setup_start[], *__loglevel_setup_end[];
+
+#define DEFINE_LOGLEVEL_SETUP(nameX, nameStr, setupX) \
+ int loglevel_##nameX; \
+ static struct loglevel_setup __loglevel_setup_##nameX __initdata = \
+ { .name = nameStr,\
+ .setup = setupX,\
+ }; \
+ 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,34 @@ 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)) {
+ l->setup(str + len);
+ 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] 3+ messages in thread
* [PATCH 2/3] pci: add pci_printk
2008-09-16 1:28 [PATCH 1/3] add DEFINE_LOGLEVEL_SETUP Yinghai Lu
@ 2008-09-16 1:28 ` Yinghai Lu
2008-09-16 1:28 ` [PATCH 3/3] pci: using pci_printk Yinghai Lu
1 sibling, 0 replies; 3+ messages in thread
From: Yinghai Lu @ 2008-09-16 1:28 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
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
---
drivers/pci/pci.c | 7 +++++++
include/linux/pci.h | 6 ++++++
2 files changed, 13 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,13 @@ static int __devinit pci_setup(char *str
}
early_param("pci", pci_setup);
+static void __init setup_loglevel_pci(char *str)
+{
+ get_option(&str, &loglevel_pci);
+}
+
+DEFINE_LOGLEVEL_SETUP(pci, "pci:", setup_loglevel_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,12 @@
/* Include the ID list */
#include <linux/pci_ids.h>
+extern int loglevel_pci;
+#define pci_printk(v, s, a...) do { \
+ if ((v) <= loglevel_pci) \
+ printk(s, ##a); \
+ } while (0)
+
/* pci_slot represents a physical slot */
struct pci_slot {
struct pci_bus *bus; /* The bus this slot is on */
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 3/3] pci: using pci_printk
2008-09-16 1:28 [PATCH 1/3] add DEFINE_LOGLEVEL_SETUP Yinghai Lu
2008-09-16 1:28 ` [PATCH 2/3] pci: add pci_printk Yinghai Lu
@ 2008-09-16 1:28 ` Yinghai Lu
1 sibling, 0 replies; 3+ messages in thread
From: Yinghai Lu @ 2008-09-16 1:28 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, "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, "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, "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, "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, "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] 3+ messages in thread
end of thread, other threads:[~2008-09-16 1:29 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-16 1:28 [PATCH 1/3] add DEFINE_LOGLEVEL_SETUP Yinghai Lu
2008-09-16 1:28 ` [PATCH 2/3] pci: add pci_printk Yinghai Lu
2008-09-16 1:28 ` [PATCH 3/3] pci: using pci_printk Yinghai Lu
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 read-only IMAP folder(s) and NNTP newsgroup(s).