LKML Archive mirror
 help / color / mirror / Atom feed
* [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).