linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Add virq mapping debugfs for PowerPC
@ 2007-07-23 11:13 Chen Gong
  2007-07-23 11:13 ` [PATCH 1/3] Add a new member name to structure irq_host Chen Gong
  2007-07-23 11:55 ` [PATCH 0/3] Add virq mapping debugfs for PowerPC Stephen Rothwell
  0 siblings, 2 replies; 18+ messages in thread
From: Chen Gong @ 2007-07-23 11:13 UTC (permalink / raw)
  To: paulus, galak; +Cc: linuxppc-dev, g.chen

Cc: g.chen@freescale.com

Hi

These patches are the update as follows:
http://ozlabs.org/pipermail/linuxppc-dev/2007-March/033091.html
http://ozlabs.org/pipermail/linuxppc-dev/2007-March/033093.html
http://ozlabs.org/pipermail/linuxppc-dev/2007-March/033092.html
http://ozlabs.org/pipermail/linuxppc-dev/2007-March/033094.html

These patches are used for supplying virq mapping debugfs function.
It can be used for displaying irq-virq mapping relationship under debugfs.
Meanwhile, to express these information more clearly, we also add a new member
named "name" for struct irq_host.

[PATCH 1/3] Add a new member name to structure irq_host
[PATCH 2/3] Add irq host name for interrupt controllors
[PATCH 3/3] Add irq debugfs and virq mapping for getting the virq

Any feedback is welcome!

Best Regards,
Chen Gong

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-23 11:13 [PATCH 0/3] Add virq mapping debugfs for PowerPC Chen Gong
@ 2007-07-23 11:13 ` Chen Gong
  2007-07-23 11:13   ` [PATCH 2/3] Add irq host name for all powerpc interrupt controllors Chen Gong
  2007-07-23 22:04   ` [PATCH 1/3] Add a new member name to structure irq_host Benjamin Herrenschmidt
  2007-07-23 11:55 ` [PATCH 0/3] Add virq mapping debugfs for PowerPC Stephen Rothwell
  1 sibling, 2 replies; 18+ messages in thread
From: Chen Gong @ 2007-07-23 11:13 UTC (permalink / raw)
  To: paulus, galak; +Cc: linuxppc-dev, Chen Gong, Chen Gong

This patch adds a new member 'name' for irq host's name to
structure irq_host and modifies the definition of the
function irq_alloc_host(). The assignment to the
irq host's name is also added to irq_alloc_host().

Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
Signed-off-by: Chen Gong <G.Chen@freescale.com>
---
 arch/powerpc/kernel/irq.c |    4 +++-
 include/asm-powerpc/irq.h |    4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 2fc8786..2c46c6d 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -421,7 +421,8 @@ EXPORT_SYMBOL_GPL(virq_to_hw);
 struct irq_host *irq_alloc_host(unsigned int revmap_type,
 				unsigned int revmap_arg,
 				struct irq_host_ops *ops,
-				irq_hw_number_t inval_irq)
+				irq_hw_number_t inval_irq,
+				const char *name)
 {
 	struct irq_host *host;
 	unsigned int size = sizeof(struct irq_host);
@@ -446,6 +447,7 @@ struct irq_host *irq_alloc_host(unsigned int revmap_type,
 	host->revmap_type = revmap_type;
 	host->inval_irq = inval_irq;
 	host->ops = ops;
+	host->name = name;
 
 	spin_lock_irqsave(&irq_big_lock, flags);
 
diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h
index 0485c53..cd0ba2d 100644
--- a/include/asm-powerpc/irq.h
+++ b/include/asm-powerpc/irq.h
@@ -124,6 +124,7 @@ struct irq_host {
 	struct irq_host_ops	*ops;
 	void			*host_data;
 	irq_hw_number_t		inval_irq;
+	const char		*name;
 };
 
 /* The main irq map itself is an array of NR_IRQ entries containing the
@@ -159,7 +160,8 @@ extern irq_hw_number_t virq_to_hw(unsigned int virq);
 extern struct irq_host *irq_alloc_host(unsigned int revmap_type,
 				       unsigned int revmap_arg,
 				       struct irq_host_ops *ops,
-				       irq_hw_number_t inval_irq);
+				       irq_hw_number_t inval_irq,
+				       const char *name);
 
 
 /**
-- 
1.5.1

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 2/3] Add irq host name for all powerpc interrupt controllors.
  2007-07-23 11:13 ` [PATCH 1/3] Add a new member name to structure irq_host Chen Gong
@ 2007-07-23 11:13   ` Chen Gong
  2007-07-23 11:13     ` [PATCH 3/3] Add irq debugfs and virq_mapping for getting the virq Chen Gong
  2007-07-23 22:04   ` [PATCH 1/3] Add a new member name to structure irq_host Benjamin Herrenschmidt
  1 sibling, 1 reply; 18+ messages in thread
From: Chen Gong @ 2007-07-23 11:13 UTC (permalink / raw)
  To: paulus, galak; +Cc: linuxppc-dev, Chen Gong, Chen Gong

If there is an OF-tree node for the interrupt controller, we will
use ofnode->full_name as the INT controller's name.
NULL is a proper choice if there is not binding OF-tree node
for the INT controller.

Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
Signed-off-by: Chen Gong <G.Chen@freescale.com>
---
 arch/powerpc/platforms/52xx/mpc52xx_pic.c |    2 +-
 arch/powerpc/platforms/82xx/mpc82xx_ads.c |    2 +-
 arch/powerpc/platforms/cell/interrupt.c   |    2 +-
 arch/powerpc/platforms/cell/spider-pic.c  |    2 +-
 arch/powerpc/platforms/celleb/interrupt.c |    2 +-
 arch/powerpc/platforms/iseries/irq.c      |    2 +-
 arch/powerpc/platforms/powermac/pic.c     |    2 +-
 arch/powerpc/platforms/ps3/interrupt.c    |    2 +-
 arch/powerpc/platforms/pseries/xics.c     |    2 +-
 arch/powerpc/sysdev/commproc.c            |    3 ++-
 arch/powerpc/sysdev/cpm2_pic.c            |    2 +-
 arch/powerpc/sysdev/i8259.c               |    3 ++-
 arch/powerpc/sysdev/ipic.c                |    3 ++-
 arch/powerpc/sysdev/mpc8xx_pic.c          |    2 +-
 arch/powerpc/sysdev/mpic.c                |    3 ++-
 arch/powerpc/sysdev/mv64x60_pic.c         |    3 ++-
 arch/powerpc/sysdev/qe_lib/qe_ic.c        |    3 ++-
 arch/powerpc/sysdev/tsi108_pci.c          |    2 +-
 arch/powerpc/sysdev/uic.c                 |    2 +-
 19 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pic.c b/arch/powerpc/platforms/52xx/mpc52xx_pic.c
index fbfff95..d5efdbc 100644
--- a/arch/powerpc/platforms/52xx/mpc52xx_pic.c
+++ b/arch/powerpc/platforms/52xx/mpc52xx_pic.c
@@ -422,7 +422,7 @@ void __init mpc52xx_init_irq(void)
 
 	mpc52xx_irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR,
 	                                 MPC52xx_IRQ_HIGHTESTHWIRQ,
-	                                 &mpc52xx_irqhost_ops, -1);
+	                                 &mpc52xx_irqhost_ops, -1, picnode->full_name);
 
 	if (!mpc52xx_irqhost)
 		panic(__FILE__ ": Cannot allocate the IRQ host\n");
diff --git a/arch/powerpc/platforms/82xx/mpc82xx_ads.c b/arch/powerpc/platforms/82xx/mpc82xx_ads.c
index da20832..3e27d3d 100644
--- a/arch/powerpc/platforms/82xx/mpc82xx_ads.c
+++ b/arch/powerpc/platforms/82xx/mpc82xx_ads.c
@@ -503,7 +503,7 @@ void m82xx_pci_init_irq(void)
 	iounmap(immap);
 	pci_pic_host =
 	    irq_alloc_host(IRQ_HOST_MAP_LINEAR, irq_max - irq_min + 1,
-			   &pci_pic_host_ops, irq_max + 1);
+			   &pci_pic_host_ops, irq_max + 1, NULL);
 	return;
 }
 
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
index 47264e7..9768ba2 100644
--- a/arch/powerpc/platforms/cell/interrupt.c
+++ b/arch/powerpc/platforms/cell/interrupt.c
@@ -382,7 +382,7 @@ void __init iic_init_IRQ(void)
 {
 	/* Setup an irq host data structure */
 	iic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, IIC_SOURCE_COUNT,
-				  &iic_host_ops, IIC_IRQ_INVALID);
+				  &iic_host_ops, IIC_IRQ_INVALID, NULL);
 	BUG_ON(iic_host == NULL);
 	irq_set_default_host(iic_host);
 
diff --git a/arch/powerpc/platforms/cell/spider-pic.c b/arch/powerpc/platforms/cell/spider-pic.c
index 05f4b3d..79c8d4f 100644
--- a/arch/powerpc/platforms/cell/spider-pic.c
+++ b/arch/powerpc/platforms/cell/spider-pic.c
@@ -309,7 +309,7 @@ static void __init spider_init_one(struct device_node *of_node, int chip,
 
 	/* Allocate a host */
 	pic->host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, SPIDER_SRC_COUNT,
-				   &spider_host_ops, SPIDER_IRQ_INVALID);
+				   &spider_host_ops, SPIDER_IRQ_INVALID, of_node->full_name);
 	if (pic->host == NULL)
 		panic("spider_pic: can't allocate irq host !");
 	pic->host->host_data = pic;
diff --git a/arch/powerpc/platforms/celleb/interrupt.c b/arch/powerpc/platforms/celleb/interrupt.c
index 98e6665..0a08a99 100644
--- a/arch/powerpc/platforms/celleb/interrupt.c
+++ b/arch/powerpc/platforms/celleb/interrupt.c
@@ -244,7 +244,7 @@ void __init beatic_init_IRQ(void)
 	/* Allocate an irq host */
 	beatic_host = irq_alloc_host(IRQ_HOST_MAP_NOMAP, 0,
 					 &beatic_pic_host_ops,
-					 0);
+					 0, NULL);
 	BUG_ON(beatic_host == NULL);
 	irq_set_default_host(beatic_host);
 }
diff --git a/arch/powerpc/platforms/iseries/irq.c b/arch/powerpc/platforms/iseries/irq.c
index 63b3367..766f5d3 100644
--- a/arch/powerpc/platforms/iseries/irq.c
+++ b/arch/powerpc/platforms/iseries/irq.c
@@ -369,7 +369,7 @@ void __init iSeries_init_IRQ(void)
 	/* Create irq host. No need for a revmap since HV will give us
 	 * back our virtual irq number
 	 */
-	host = irq_alloc_host(IRQ_HOST_MAP_NOMAP, 0, &iseries_irq_host_ops, 0);
+	host = irq_alloc_host(IRQ_HOST_MAP_NOMAP, 0, &iseries_irq_host_ops, 0, NULL);
 	BUG_ON(host == NULL);
 	irq_set_default_host(host);
 
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index 87cd680..9d4b3e1 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -386,7 +386,7 @@ static void __init pmac_pic_probe_oldstyle(void)
 	 */
 	pmac_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, max_irqs,
 				       &pmac_pic_host_ops,
-				       max_irqs);
+				       max_irqs, NULL);
 	BUG_ON(pmac_pic_host == NULL);
 	irq_set_default_host(pmac_pic_host);
 
diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c
index 67e32ec..2b56b81 100644
--- a/arch/powerpc/platforms/ps3/interrupt.c
+++ b/arch/powerpc/platforms/ps3/interrupt.c
@@ -727,7 +727,7 @@ void __init ps3_init_IRQ(void)
 	struct irq_host *host;
 
 	host = irq_alloc_host(IRQ_HOST_MAP_NOMAP, 0, &ps3_host_ops,
-		PS3_INVALID_OUTLET);
+		PS3_INVALID_OUTLET, NULL);
 	irq_set_default_host(host);
 	irq_set_virq_count(PS3_PLUG_MAX + 1);
 
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 5bd90a7..7f8a5c7 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -541,7 +541,7 @@ static void __init xics_init_host(void)
 	else
 		ops = &xics_host_direct_ops;
 	xics_host = irq_alloc_host(IRQ_HOST_MAP_TREE, 0, ops,
-				   XICS_IRQ_SPURIOUS);
+				   XICS_IRQ_SPURIOUS, NULL);
 	BUG_ON(xics_host == NULL);
 	irq_set_default_host(xics_host);
 }
diff --git a/arch/powerpc/sysdev/commproc.c b/arch/powerpc/sysdev/commproc.c
index 4f67b89..91dc738 100644
--- a/arch/powerpc/sysdev/commproc.c
+++ b/arch/powerpc/sysdev/commproc.c
@@ -167,7 +167,8 @@ unsigned int cpm_pic_init(void)
 
 	cpm_pic_node = of_node_get(np);
 
-	cpm_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &cpm_pic_host_ops, 64);
+	cpm_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &cpm_pic_host_ops, 64,
+			cpm_pic_node->full_name);
 	if (cpm_pic_host == NULL) {
 		printk(KERN_ERR "CPM2 PIC: failed to allocate irq host!\n");
 		sirq = NO_IRQ;
diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c
index eabfe06..1aaebf8 100644
--- a/arch/powerpc/sysdev/cpm2_pic.c
+++ b/arch/powerpc/sysdev/cpm2_pic.c
@@ -274,7 +274,7 @@ void cpm2_pic_init(struct device_node *node)
 
 	/* create a legacy host */
 	cpm2_pic_node = of_node_get(node);
-	cpm2_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &cpm2_pic_host_ops, 64);
+	cpm2_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &cpm2_pic_host_ops, 64, cpm2_pic_node->full_name);
 	if (cpm2_pic_host == NULL) {
 		printk(KERN_ERR "CPM2 PIC: failed to allocate irq host!\n");
 		return;
diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c
index ad87adc..e80c127 100644
--- a/arch/powerpc/sysdev/i8259.c
+++ b/arch/powerpc/sysdev/i8259.c
@@ -278,7 +278,8 @@ void i8259_init(struct device_node *node, unsigned long intack_addr)
 	/* create a legacy host */
 	if (node)
 		i8259_node = of_node_get(node);
-	i8259_host = irq_alloc_host(IRQ_HOST_MAP_LEGACY, 0, &i8259_host_ops, 0);
+	i8259_host = irq_alloc_host(IRQ_HOST_MAP_LEGACY, 0, &i8259_host_ops, 0,
+			(node) ? i8259_node->full_name : NULL);
 	if (i8259_host == NULL) {
 		printk(KERN_ERR "i8259: failed to allocate irq host !\n");
 		return;
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
index 473c415..4fe6770 100644
--- a/arch/powerpc/sysdev/ipic.c
+++ b/arch/powerpc/sysdev/ipic.c
@@ -572,7 +572,8 @@ struct ipic * __init ipic_init(struct device_node *node, unsigned int flags)
 
 	ipic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR,
 				       NR_IPIC_INTS,
-				       &ipic_host_ops, 0);
+				       &ipic_host_ops, 0,
+				       ipic->of_node->full_name);
 	if (ipic->irqhost == NULL) {
 		of_node_put(node);
 		return NULL;
diff --git a/arch/powerpc/sysdev/mpc8xx_pic.c b/arch/powerpc/sysdev/mpc8xx_pic.c
index 2fc2bcd..c3eb805 100644
--- a/arch/powerpc/sysdev/mpc8xx_pic.c
+++ b/arch/powerpc/sysdev/mpc8xx_pic.c
@@ -187,7 +187,7 @@ int mpc8xx_pic_init(void)
 	if (siu_reg == NULL)
 		return -EINVAL;
 
-	mpc8xx_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &mpc8xx_pic_host_ops, 64);
+	mpc8xx_pic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, 64, &mpc8xx_pic_host_ops, 64, np->full_name);
 	if (mpc8xx_pic_host == NULL) {
 		printk(KERN_ERR "MPC8xx PIC: failed to allocate irq host!\n");
 		ret = -ENOMEM;
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 74c64c0..d71441e 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -989,7 +989,8 @@ struct mpic * __init mpic_alloc(struct device_node *node,
 
 	mpic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR, isu_size,
 				       &mpic_host_ops,
-				       flags & MPIC_LARGE_VECTORS ? 2048 : 256);
+				       flags & MPIC_LARGE_VECTORS ? 2048 : 256,
+				       mpic->of_node->full_name);
 	if (mpic->irqhost == NULL) {
 		of_node_put(node);
 		return NULL;
diff --git a/arch/powerpc/sysdev/mv64x60_pic.c b/arch/powerpc/sysdev/mv64x60_pic.c
index 01d3162..2bb5b12 100644
--- a/arch/powerpc/sysdev/mv64x60_pic.c
+++ b/arch/powerpc/sysdev/mv64x60_pic.c
@@ -257,7 +257,8 @@ void __init mv64x60_init_irq(void)
 	mv64x60_irq_reg_base = ioremap(paddr, reg[1]);
 
 	mv64x60_irq_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, MV64x60_NUM_IRQS,
-					  &mv64x60_host_ops, MV64x60_NUM_IRQS);
+					  &mv64x60_host_ops, MV64x60_NUM_IRQS,
+					  np->full_name);
 
 	mv64x60_irq_host->host_data = np;
 
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c
index 4d1dcb4..1e78a02 100644
--- a/arch/powerpc/sysdev/qe_lib/qe_ic.c
+++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c
@@ -355,7 +355,8 @@ void __init qe_ic_init(struct device_node *node, unsigned int flags)
 	qe_ic->of_node = of_node_get(node);
 
 	qe_ic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR,
-					NR_QE_IC_INTS, &qe_ic_host_ops, 0);
+					NR_QE_IC_INTS, &qe_ic_host_ops, 0,
+					qe_ic->of_node->full_name);
 	if (qe_ic->irqhost == NULL) {
 		of_node_put(node);
 		return;
diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c
index 90db8a7..84dc543 100644
--- a/arch/powerpc/sysdev/tsi108_pci.c
+++ b/arch/powerpc/sysdev/tsi108_pci.c
@@ -434,7 +434,7 @@ void __init tsi108_pci_int_init(struct device_node *node)
 	DBG("Tsi108_pci_int_init: initializing PCI interrupts\n");
 
 	pci_irq_node = of_node_get(node);
-	pci_irq_host = irq_alloc_host(IRQ_HOST_MAP_LEGACY, 0, &pci_irq_host_ops, 0);
+	pci_irq_host = irq_alloc_host(IRQ_HOST_MAP_LEGACY, 0, &pci_irq_host_ops, 0, pci_irq_node->full_name);
 	if (pci_irq_host == NULL) {
 		printk(KERN_ERR "pci_irq_host: failed to allocate irq host !\n");
 		return;
diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
index 8905989..7705676 100644
--- a/arch/powerpc/sysdev/uic.c
+++ b/arch/powerpc/sysdev/uic.c
@@ -247,7 +247,7 @@ static struct uic * __init uic_init_one(struct device_node *node)
 	uic->dcrbase = *dcrreg;
 
 	uic->irqhost = irq_alloc_host(IRQ_HOST_MAP_LINEAR, NR_UIC_INTS,
-				      &uic_host_ops, -1);
+				      &uic_host_ops, -1, node->full_name);
 	if (! uic->irqhost) {
 		of_node_put(node);
 		return NULL; /* FIXME: panic? */
-- 
1.5.1

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 3/3] Add irq debugfs and virq_mapping for getting the virq
  2007-07-23 11:13   ` [PATCH 2/3] Add irq host name for all powerpc interrupt controllors Chen Gong
@ 2007-07-23 11:13     ` Chen Gong
  0 siblings, 0 replies; 18+ messages in thread
From: Chen Gong @ 2007-07-23 11:13 UTC (permalink / raw)
  To: paulus, galak; +Cc: linuxppc-dev, Chen Gong, Chen Gong

This patch adds irq debugfs and virq_mapping for getting the virq.
The virq_mapping node is in powerpc/irq directory of the root debugfs.

Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
Signed-off-by: Chen Gong <G.Chen@freescale.com>
---
 arch/powerpc/Kconfig.debug        |    7 ++
 arch/powerpc/kernel/Makefile      |    1 +
 arch/powerpc/kernel/irq_debugfs.c |  140 +++++++++++++++++++++++++++++++++++++
 3 files changed, 148 insertions(+), 0 deletions(-)
 create mode 100644 arch/powerpc/kernel/irq_debugfs.c

diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug
index 346cd3b..7ae8df1 100644
--- a/arch/powerpc/Kconfig.debug
+++ b/arch/powerpc/Kconfig.debug
@@ -2,6 +2,13 @@ menu "Kernel hacking"
 
 source "lib/Kconfig.debug"
 
+config PPC_VIRQ_DEBUGFS
+	bool "Check virqs mapping"
+	depends on DEBUG_FS
+	help
+	  This option will show the mapping relationship between hardware irq
+	  and virtual irq based on debugfs
+
 config DEBUG_STACKOVERFLOW
 	bool "Check for stack overflows"
 	depends on DEBUG_KERNEL
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 42c42ec..cc3e1e5 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -15,6 +15,7 @@ obj-y				:= semaphore.o cputable.o ptrace.o syscalls.o \
 				   init_task.o process.o systbl.o idle.o \
 				   signal.o
 obj-y				+= vdso32/
+obj-$(CONFIG_PPC_VIRQ_DEBUGFS)	+= irq_debugfs.o
 obj-$(CONFIG_PPC64)		+= setup_64.o binfmt_elf32.o sys_ppc32.o \
 				   signal_64.o ptrace32.o \
 				   paca.o cpu_setup_ppc970.o \
diff --git a/arch/powerpc/kernel/irq_debugfs.c b/arch/powerpc/kernel/irq_debugfs.c
new file mode 100644
index 0000000..53ac12e
--- /dev/null
+++ b/arch/powerpc/kernel/irq_debugfs.c
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved.
+ *
+ * Auther: Zhang Wei <wei.zhang@freescale.com>
+ *
+ * Description:
+ * This file is used for debug the irq. It will create 'irq' directory
+ * in the powerpc directory of debugfs.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <linux/module.h>
+#include <linux/threads.h>
+#include <linux/kernel_stat.h>
+#include <linux/signal.h>
+#include <linux/sched.h>
+#include <linux/ptrace.h>
+#include <linux/ioport.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/seq_file.h>
+#include <linux/mutex.h>
+#include <linux/list.h>
+
+#include <asm/uaccess.h>
+#include <asm/system.h>
+#include <asm/irq.h>
+#include <asm/pgtable.h>
+#include <asm/prom.h>
+
+extern struct dentry *powerpc_debugfs_root;
+
+static void *irq_dbg_start(struct seq_file *m, loff_t *pos)
+{
+	return (*pos <= NR_IRQS) ? pos : NULL;
+}
+
+static void *irq_dbg_next(struct seq_file *m, void *p, loff_t * pos)
+{
+	(*pos)++;
+
+	return (*pos <= NR_IRQS) ? pos : NULL;
+}
+
+static void irq_dbg_stop(struct seq_file *m, void *p)
+{
+	/* Nothing to do */
+}
+
+static int irq_dbg_show(struct seq_file *m, void *p)
+{
+	int i = *(loff_t *)p;
+	struct irqaction *action;
+	irq_desc_t *desc;
+	unsigned long flags;
+
+	if (i == 0)
+		seq_puts(m, "VIRQ  HWIRQ  Chip Name   Host Name\n");
+
+	if (i < NR_IRQS) {
+		desc = get_irq_desc(i);
+		spin_lock_irqsave(&desc->lock, flags);
+		action = desc->action;
+		if (!action || !action->handler)
+			goto skip;
+		seq_printf(m, "%3d: ", i);
+
+		seq_printf(m, "  %3d ", (irq_map[i].host->revmap_type == IRQ_HOST_MAP_LEGACY) ? i : virq_to_hw(i));
+
+		if (desc->chip)
+			seq_printf(m, "  %s ", desc->chip->typename);
+		else
+			seq_puts(m, "  None      ");
+
+		seq_printf(m, " %s ", (irq_map[i].host->name) ? irq_map[i].host->name : "  None  ");
+		seq_putc(m, '\n');
+skip:
+		spin_unlock_irqrestore(&desc->lock, flags);
+	} else if (i == NR_IRQS) {
+#ifdef CONFIG_PPC32
+#ifdef CONFIG_TAU_INT
+		if (tau_initialized)
+			seq_puts(m, "TAU:   PowerPC             Thermal Assist (cpu temp)\n");
+#endif
+#endif /* CONFIG_PPC32 */
+	}
+
+	return 0;
+}
+
+static struct seq_operations irq_dbg_seq_ops = {
+	.start = irq_dbg_start,
+	.next  = irq_dbg_next,
+	.stop  = irq_dbg_stop,
+	.show  = irq_dbg_show
+};
+
+static int irq_dbg_seq_open(struct inode *inode, struct file *file)
+{
+	int rc;
+	struct seq_file *seq;
+
+	rc = seq_open(file, &irq_dbg_seq_ops);
+	seq = file->private_data;
+	seq->private = file->f_path.dentry->d_inode->i_private;
+
+	return rc;
+}
+
+static const struct file_operations irq_dbg_seq_fops = {
+	.open = irq_dbg_seq_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = seq_release,
+};
+
+static int __init irq_debugfs_init(void)
+{
+	struct dentry *irq_root;
+	struct dentry *irq_file;
+
+	if (!powerpc_debugfs_root)
+		return 1;
+
+	irq_root = debugfs_create_dir("irq", powerpc_debugfs_root);
+	if (!irq_root)
+		return -ENOMEM;
+
+	irq_file = debugfs_create_file("virq_mapping", S_IRUGO,
+			irq_root, NULL, &irq_dbg_seq_fops);
+	if (!irq_file)
+		return -ENOMEM;
+
+	return 0;
+}
+__initcall(irq_debugfs_init);
-- 
1.5.1

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH 0/3] Add virq mapping debugfs for PowerPC
  2007-07-23 11:13 [PATCH 0/3] Add virq mapping debugfs for PowerPC Chen Gong
  2007-07-23 11:13 ` [PATCH 1/3] Add a new member name to structure irq_host Chen Gong
@ 2007-07-23 11:55 ` Stephen Rothwell
  1 sibling, 0 replies; 18+ messages in thread
From: Stephen Rothwell @ 2007-07-23 11:55 UTC (permalink / raw)
  To: Chen Gong; +Cc: linuxppc-dev, paulus

[-- Attachment #1: Type: text/plain, Size: 454 bytes --]

On Mon, 23 Jul 2007 19:13:47 +0800 Chen Gong <g.chen@freescale.com> wrote:
>
> [PATCH 1/3] Add a new member name to structure irq_host
> [PATCH 2/3] Add irq host name for interrupt controllors

You should really combine patches 1 and 2 so that the tree will build and
run after each final commit in the git tree (so bisect works better).

-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-23 11:13 ` [PATCH 1/3] Add a new member name to structure irq_host Chen Gong
  2007-07-23 11:13   ` [PATCH 2/3] Add irq host name for all powerpc interrupt controllors Chen Gong
@ 2007-07-23 22:04   ` Benjamin Herrenschmidt
  2007-07-23 23:22     ` Michael Ellerman
  1 sibling, 1 reply; 18+ messages in thread
From: Benjamin Herrenschmidt @ 2007-07-23 22:04 UTC (permalink / raw)
  To: Chen Gong; +Cc: linuxppc-dev, paulus

On Mon, 2007-07-23 at 19:13 +0800, Chen Gong wrote:
> This patch adds a new member 'name' for irq host's name to
> structure irq_host and modifies the definition of the
> function irq_alloc_host(). The assignment to the
> irq host's name is also added to irq_alloc_host().

I would instead prefer adding a irq_name callback to host, which would
return a per-irq name. In some cases, they could return the OF path to
the host for example.

Ben.

> Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
> Signed-off-by: Chen Gong <G.Chen@freescale.com>
> ---
>  arch/powerpc/kernel/irq.c |    4 +++-
>  include/asm-powerpc/irq.h |    4 +++-
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
> index 2fc8786..2c46c6d 100644
> --- a/arch/powerpc/kernel/irq.c
> +++ b/arch/powerpc/kernel/irq.c
> @@ -421,7 +421,8 @@ EXPORT_SYMBOL_GPL(virq_to_hw);
>  struct irq_host *irq_alloc_host(unsigned int revmap_type,
>  				unsigned int revmap_arg,
>  				struct irq_host_ops *ops,
> -				irq_hw_number_t inval_irq)
> +				irq_hw_number_t inval_irq,
> +				const char *name)
>  {
>  	struct irq_host *host;
>  	unsigned int size = sizeof(struct irq_host);
> @@ -446,6 +447,7 @@ struct irq_host *irq_alloc_host(unsigned int revmap_type,
>  	host->revmap_type = revmap_type;
>  	host->inval_irq = inval_irq;
>  	host->ops = ops;
> +	host->name = name;
>  
>  	spin_lock_irqsave(&irq_big_lock, flags);
>  
> diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h
> index 0485c53..cd0ba2d 100644
> --- a/include/asm-powerpc/irq.h
> +++ b/include/asm-powerpc/irq.h
> @@ -124,6 +124,7 @@ struct irq_host {
>  	struct irq_host_ops	*ops;
>  	void			*host_data;
>  	irq_hw_number_t		inval_irq;
> +	const char		*name;
>  };
>  
>  /* The main irq map itself is an array of NR_IRQ entries containing the
> @@ -159,7 +160,8 @@ extern irq_hw_number_t virq_to_hw(unsigned int virq);
>  extern struct irq_host *irq_alloc_host(unsigned int revmap_type,
>  				       unsigned int revmap_arg,
>  				       struct irq_host_ops *ops,
> -				       irq_hw_number_t inval_irq);
> +				       irq_hw_number_t inval_irq,
> +				       const char *name);
>  
> 
>  /**

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-23 22:04   ` [PATCH 1/3] Add a new member name to structure irq_host Benjamin Herrenschmidt
@ 2007-07-23 23:22     ` Michael Ellerman
  2007-07-23 23:36       ` Benjamin Herrenschmidt
  2007-07-31 19:42       ` Segher Boessenkool
  0 siblings, 2 replies; 18+ messages in thread
From: Michael Ellerman @ 2007-07-23 23:22 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Chen Gong, paulus

[-- Attachment #1: Type: text/plain, Size: 1323 bytes --]

On Tue, 2007-07-24 at 08:04 +1000, Benjamin Herrenschmidt wrote:
> On Mon, 2007-07-23 at 19:13 +0800, Chen Gong wrote:
> > This patch adds a new member 'name' for irq host's name to
> > structure irq_host and modifies the definition of the
> > function irq_alloc_host(). The assignment to the
> > irq host's name is also added to irq_alloc_host().
> 
> I would instead prefer adding a irq_name callback to host, which would
> return a per-irq name. In some cases, they could return the OF path to
> the host for example.

The pity is, for the 75% [1] of irq_hosts that have a device_node, they
will all have to implement the name callback, because they all store the
of node differently.

Which makes me think (again) that we should have an optional device_node
pointer in irq_host. I know you said you wanted the irq stuff to be OF
agnostic, but the reality is most of the implementations do have an OF
node. And all of the newer irq_host implementations do, with the
exception of PS3 and celleb - which are special.

cheers

[1] Yes I counted :)

-- 
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-23 23:22     ` Michael Ellerman
@ 2007-07-23 23:36       ` Benjamin Herrenschmidt
  2007-07-24  4:06         ` Chen Gong-B11801
  2007-07-31 19:42       ` Segher Boessenkool
  1 sibling, 1 reply; 18+ messages in thread
From: Benjamin Herrenschmidt @ 2007-07-23 23:36 UTC (permalink / raw)
  To: michael; +Cc: linuxppc-dev, Chen Gong, paulus

On Tue, 2007-07-24 at 09:22 +1000, Michael Ellerman wrote:
> On Tue, 2007-07-24 at 08:04 +1000, Benjamin Herrenschmidt wrote:
> > On Mon, 2007-07-23 at 19:13 +0800, Chen Gong wrote:
> > > This patch adds a new member 'name' for irq host's name to
> > > structure irq_host and modifies the definition of the
> > > function irq_alloc_host(). The assignment to the
> > > irq host's name is also added to irq_alloc_host().
> > 
> > I would instead prefer adding a irq_name callback to host, which would
> > return a per-irq name. In some cases, they could return the OF path to
> > the host for example.
> 
> The pity is, for the 75% [1] of irq_hosts that have a device_node, they
> will all have to implement the name callback, because they all store the
> of node differently.
> 
> Which makes me think (again) that we should have an optional device_node
> pointer in irq_host. I know you said you wanted the irq stuff to be OF
> agnostic, but the reality is most of the implementations do have an OF
> node. And all of the newer irq_host implementations do, with the
> exception of PS3 and celleb - which are special.

Won't work well in practice due to things like:

 - Cell iic -> one node per core, but one global host
 - xics -> one node per source controller (lots of them in the tree) but
one global host

Ben.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-23 23:36       ` Benjamin Herrenschmidt
@ 2007-07-24  4:06         ` Chen Gong-B11801
  2007-07-24  4:33           ` Benjamin Herrenschmidt
  0 siblings, 1 reply; 18+ messages in thread
From: Chen Gong-B11801 @ 2007-07-24  4:06 UTC (permalink / raw)
  To: Benjamin Herrenschmidt, michael; +Cc: linuxppc-dev, paulus

Can you give me a DTS example or code segment? I'm ambiguous about
what you said.

> -----Original Message-----
> From: Benjamin Herrenschmidt [mailto:benh@kernel.crashing.org]=20
> Sent: Tuesday, July 24, 2007 7:36 AM
> To: michael@ellerman.id.au
> Cc: Chen Gong-B11801; linuxppc-dev@ozlabs.org; paulus@samba.org
> Subject: Re: [PATCH 1/3] Add a new member name to structure irq_host
>=20
> On Tue, 2007-07-24 at 09:22 +1000, Michael Ellerman wrote:
> > On Tue, 2007-07-24 at 08:04 +1000, Benjamin Herrenschmidt wrote:
> > > On Mon, 2007-07-23 at 19:13 +0800, Chen Gong wrote:
> > > > This patch adds a new member 'name' for irq host's name to=20
> > > > structure irq_host and modifies the definition of the function=20
> > > > irq_alloc_host(). The assignment to the irq host's name is also=20
> > > > added to irq_alloc_host().
> > >=20
> > > I would instead prefer adding a irq_name callback to host, which=20
> > > would return a per-irq name. In some cases, they could=20
> return the OF=20
> > > path to the host for example.
> >=20
> > The pity is, for the 75% [1] of irq_hosts that have a device_node,=20
> > they will all have to implement the name callback, because they all=20
> > store the of node differently.
> >=20
> > Which makes me think (again) that we should have an optional=20
> > device_node pointer in irq_host. I know you said you wanted the irq=20
> > stuff to be OF agnostic, but the reality is most of the=20
> > implementations do have an OF node. And all of the newer irq_host=20
> > implementations do, with the exception of PS3 and celleb -=20
> which are special.
>=20
> Won't work well in practice due to things like:
>=20
>  - Cell iic -> one node per core, but one global host
>  - xics -> one node per source controller (lots of them in=20
> the tree) but one global host
>=20
> Ben.
>=20
>=20
>=20

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-24  4:06         ` Chen Gong-B11801
@ 2007-07-24  4:33           ` Benjamin Herrenschmidt
  2007-07-24  9:25             ` Zhang Wei-r63237
  0 siblings, 1 reply; 18+ messages in thread
From: Benjamin Herrenschmidt @ 2007-07-24  4:33 UTC (permalink / raw)
  To: Chen Gong-B11801; +Cc: linuxppc-dev, paulus

On Tue, 2007-07-24 at 12:06 +0800, Chen Gong-B11801 wrote:
> Can you give me a DTS example or code segment? I'm ambiguous about
> what you said. 

Well, you would have to look at a cell blade or pSeries machine
device-tree, I don't have one at hand in DTS form... but basically,
those don't have a 1:1 relationship between hosts and nodes.

Anyway, I discussed with Michael today and it might be a good idea to
provide an optional device node field in the host struct that can be
used by the majority of the PICs that have one host == one node, that
would provide a good default for the name() function.

Ben.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-24  4:33           ` Benjamin Herrenschmidt
@ 2007-07-24  9:25             ` Zhang Wei-r63237
  2007-07-24  9:36               ` Benjamin Herrenschmidt
  0 siblings, 1 reply; 18+ messages in thread
From: Zhang Wei-r63237 @ 2007-07-24  9:25 UTC (permalink / raw)
  To: Benjamin Herrenschmidt, Chen Gong-B11801; +Cc: linuxppc-dev, paulus

Hi, Ben,=20

Thanks! Please see my inline comments.

>=20
> Well, you would have to look at a cell blade or pSeries machine
> device-tree, I don't have one at hand in DTS form... but basically,
> those don't have a 1:1 relationship between hosts and nodes.

Is there any problem when the relationship between hosts and nodes is
not 1:1?

The mapping method is defined in irq_alloc_host(). If there is only one
host for many nodes,
then these nodes will use the same mapping. Such as iic_host, the
IRQ_HOST_MAP_LINEAR
is used for its all nodes. We do _not_ care which node, we just care
which virq is mapped from which host's hw irq.

>=20
> Anyway, I discussed with Michael today and it might be a good idea to
> provide an optional device node field in the host struct that can be
> used by the majority of the PICs that have one host =3D=3D one node, =
that
> would provide a good default for the name() function.
>=20

But we have some irq host which has not OF-node bound.

Cheers!
Wei.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-24  9:25             ` Zhang Wei-r63237
@ 2007-07-24  9:36               ` Benjamin Herrenschmidt
  2007-07-25  7:03                 ` Zhang Wei-r63237
  0 siblings, 1 reply; 18+ messages in thread
From: Benjamin Herrenschmidt @ 2007-07-24  9:36 UTC (permalink / raw)
  To: Zhang Wei-r63237; +Cc: linuxppc-dev, Chen Gong-B11801, paulus

On Tue, 2007-07-24 at 17:25 +0800, Zhang Wei-r63237 wrote:
> Hi, Ben, 
> 
> Thanks! Please see my inline comments.
> 
> > 
> > Well, you would have to look at a cell blade or pSeries machine
> > device-tree, I don't have one at hand in DTS form... but basically,
> > those don't have a 1:1 relationship between hosts and nodes.
> 
> Is there any problem when the relationship between hosts and nodes is
> not 1:1?
> 
> The mapping method is defined in irq_alloc_host(). If there is only one
> host for many nodes,
> then these nodes will use the same mapping. Such as iic_host, the
> IRQ_HOST_MAP_LINEAR
> is used for its all nodes. We do _not_ care which node, we just care
> which virq is mapped from which host's hw irq.

Sure and it all works fine, I was replying to the suggestion of adding a
device_node pointer in there.

> > 
> > Anyway, I discussed with Michael today and it might be a good idea to
> > provide an optional device node field in the host struct that can be
> > used by the majority of the PICs that have one host == one node, that
> > would provide a good default for the name() function.
> > 
> 
> But we have some irq host which has not OF-node bound.

Sure, hence the word 'optional' which would provide a default name.

Ben.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-24  9:36               ` Benjamin Herrenschmidt
@ 2007-07-25  7:03                 ` Zhang Wei-r63237
  0 siblings, 0 replies; 18+ messages in thread
From: Zhang Wei-r63237 @ 2007-07-25  7:03 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Chen Gong-B11801, paulus

Hi, Ben,

Thanks!=20

> Sure, hence the word 'optional' which would provide a default name.
>=20

About the default name, since platforms we touched are very limited, we
do not know which name should be proper default name. We just assign
those default name to 'NULL'  for passing the compiling process. And the
platform maintain can correct it.

Cheers!
Wei.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-23 23:22     ` Michael Ellerman
  2007-07-23 23:36       ` Benjamin Herrenschmidt
@ 2007-07-31 19:42       ` Segher Boessenkool
  2007-07-31 21:44         ` Benjamin Herrenschmidt
  1 sibling, 1 reply; 18+ messages in thread
From: Segher Boessenkool @ 2007-07-31 19:42 UTC (permalink / raw)
  To: michael; +Cc: linuxppc-dev, Chen Gong, paulus

> Which makes me think (again) that we should have an optional 
> device_node
> pointer in irq_host. I know you said you wanted the irq stuff to be OF
> agnostic, but the reality is most of the implementations do have an OF
> node. And all of the newer irq_host implementations do, with the
> exception of PS3 and celleb - which are special.

How do you suggest to get a reasonable display name out of
the device tree?  The recommended human-readable name for
interrupt controller nodes is "interrupt-controller"...
You cannot use "device_type" either, and using "compatible"
requires selecting one of its string entries, and likely
using a lookup table after that, too.


Segher

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-31 19:42       ` Segher Boessenkool
@ 2007-07-31 21:44         ` Benjamin Herrenschmidt
  2007-07-31 22:13           ` Segher Boessenkool
  0 siblings, 1 reply; 18+ messages in thread
From: Benjamin Herrenschmidt @ 2007-07-31 21:44 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: linuxppc-dev, Chen Gong, paulus

On Tue, 2007-07-31 at 21:42 +0200, Segher Boessenkool wrote:
> > Which makes me think (again) that we should have an optional 
> > device_node
> > pointer in irq_host. I know you said you wanted the irq stuff to be OF
> > agnostic, but the reality is most of the implementations do have an OF
> > node. And all of the newer irq_host implementations do, with the
> > exception of PS3 and celleb - which are special.
> 
> How do you suggest to get a reasonable display name out of
> the device tree?  The recommended human-readable name for
> interrupt controller nodes is "interrupt-controller"...
> You cannot use "device_type" either, and using "compatible"
> requires selecting one of its string entries, and likely
> using a lookup table after that, too.

In that case, I would display the node full path.

Ben.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-31 21:44         ` Benjamin Herrenschmidt
@ 2007-07-31 22:13           ` Segher Boessenkool
  2007-07-31 23:06             ` Michael Ellerman
  0 siblings, 1 reply; 18+ messages in thread
From: Segher Boessenkool @ 2007-07-31 22:13 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Chen Gong, paulus

>>> Which makes me think (again) that we should have an optional
>>> device_node
>>> pointer in irq_host. I know you said you wanted the irq stuff to be 
>>> OF
>>> agnostic, but the reality is most of the implementations do have an 
>>> OF
>>> node. And all of the newer irq_host implementations do, with the
>>> exception of PS3 and celleb - which are special.
>>
>> How do you suggest to get a reasonable display name out of
>> the device tree?  The recommended human-readable name for
>> interrupt controller nodes is "interrupt-controller"...
>> You cannot use "device_type" either, and using "compatible"
>> requires selecting one of its string entries, and likely
>> using a lookup table after that, too.
>
> In that case, I would display the node full path.

Those tend to be quite long, in the cases where there are
multiple interrupt controllers in the system; and really
useless otherwise.  I think the interrupt controllers should
still just fill in the names "manually".

It's a good thing to have an of_node in the irq_host struct
anyway, though :-)


Segher

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-31 22:13           ` Segher Boessenkool
@ 2007-07-31 23:06             ` Michael Ellerman
  2007-07-31 23:42               ` Segher Boessenkool
  0 siblings, 1 reply; 18+ messages in thread
From: Michael Ellerman @ 2007-07-31 23:06 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: Chen Gong, paulus, linuxppc-dev

[-- Attachment #1: Type: text/plain, Size: 1609 bytes --]

On Wed, 2007-08-01 at 00:13 +0200, Segher Boessenkool wrote:
> >>> Which makes me think (again) that we should have an optional
> >>> device_node
> >>> pointer in irq_host. I know you said you wanted the irq stuff to be 
> >>> OF
> >>> agnostic, but the reality is most of the implementations do have an 
> >>> OF
> >>> node. And all of the newer irq_host implementations do, with the
> >>> exception of PS3 and celleb - which are special.
> >>
> >> How do you suggest to get a reasonable display name out of
> >> the device tree?  The recommended human-readable name for
> >> interrupt controller nodes is "interrupt-controller"...
> >> You cannot use "device_type" either, and using "compatible"
> >> requires selecting one of its string entries, and likely
> >> using a lookup table after that, too.
> >
> > In that case, I would display the node full path.
> 
> Those tend to be quite long, in the cases where there are
> multiple interrupt controllers in the system; and really
> useless otherwise.  I think the interrupt controllers should
> still just fill in the names "manually".

They tend to be long, but they're unique, which is what you want, and
they're only for debugging anyway.

> It's a good thing to have an of_node in the irq_host struct
> anyway, though :-)

I posted patches for that last week.

cheers

-- 
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/3] Add a new member name to structure irq_host
  2007-07-31 23:06             ` Michael Ellerman
@ 2007-07-31 23:42               ` Segher Boessenkool
  0 siblings, 0 replies; 18+ messages in thread
From: Segher Boessenkool @ 2007-07-31 23:42 UTC (permalink / raw)
  To: michael; +Cc: linuxppc-dev, Chen Gong, paulus

>>> In that case, I would display the node full path.
>>
>> Those tend to be quite long, in the cases where there are
>> multiple interrupt controllers in the system; and really
>> useless otherwise.  I think the interrupt controllers should
>> still just fill in the names "manually".
>
> They tend to be long, but they're unique, which is what you want,

Yeah -- easy enough to add a sequence number to just about
anything though.

> and they're only for debugging anyway.

Oh, I thought it would be used wherever the user gets told something
about the interrupt controller -- like when the interrupt tree would
be shown in sysfs (yes that's hypothetical still ;-) )

>> It's a good thing to have an of_node in the irq_host struct
>> anyway, though :-)
>
> I posted patches for that last week.

I know, and thank you :-)


Segher

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2007-07-31 23:43 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-23 11:13 [PATCH 0/3] Add virq mapping debugfs for PowerPC Chen Gong
2007-07-23 11:13 ` [PATCH 1/3] Add a new member name to structure irq_host Chen Gong
2007-07-23 11:13   ` [PATCH 2/3] Add irq host name for all powerpc interrupt controllors Chen Gong
2007-07-23 11:13     ` [PATCH 3/3] Add irq debugfs and virq_mapping for getting the virq Chen Gong
2007-07-23 22:04   ` [PATCH 1/3] Add a new member name to structure irq_host Benjamin Herrenschmidt
2007-07-23 23:22     ` Michael Ellerman
2007-07-23 23:36       ` Benjamin Herrenschmidt
2007-07-24  4:06         ` Chen Gong-B11801
2007-07-24  4:33           ` Benjamin Herrenschmidt
2007-07-24  9:25             ` Zhang Wei-r63237
2007-07-24  9:36               ` Benjamin Herrenschmidt
2007-07-25  7:03                 ` Zhang Wei-r63237
2007-07-31 19:42       ` Segher Boessenkool
2007-07-31 21:44         ` Benjamin Herrenschmidt
2007-07-31 22:13           ` Segher Boessenkool
2007-07-31 23:06             ` Michael Ellerman
2007-07-31 23:42               ` Segher Boessenkool
2007-07-23 11:55 ` [PATCH 0/3] Add virq mapping debugfs for PowerPC Stephen Rothwell

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).