mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
@ 2008-12-25 10:46 KOSAKI Motohiro
  2008-12-25 10:59 ` Ingo Molnar
  0 siblings, 1 reply; 14+ messages in thread
From: KOSAKI Motohiro @ 2008-12-25 10:46 UTC (permalink / raw)
  To: Yinghai Lu, Ingo Molnar, LKML; +Cc: kosaki.motohiro


I confirmed by alpha cross compiler.

==
Subject: [PATCH] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
Impact: cleanup

commit 240d367b4e6c6e3c5075e034db14dba60a6f5fa7 has a bit strange analysis.
The fact is, irq_desc() can be used old architecuture too. 
but old code don't include <linux/irq.h>.

right fixing is here.



Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
CC: Yinghai Lu <yinghai@kernel.org>
CC: Ingo Molnar <mingo@elte.hu>
---
 fs/proc/stat.c |   11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

Index: b/fs/proc/stat.c
===================================================================
--- a/fs/proc/stat.c
+++ b/fs/proc/stat.c
@@ -9,6 +9,7 @@
 #include <linux/seq_file.h>
 #include <linux/slab.h>
 #include <linux/time.h>
+#include <linux/irq.h>
 #include <asm/cputime.h>
 
 #ifndef arch_irq_stat_cpu
@@ -27,6 +28,7 @@ static int show_stat(struct seq_file *p,
 	u64 sum = 0;
 	struct timespec boottime;
 	unsigned int per_irq_sum;
+	struct irq_desc *desc;
 
 	user = nice = system = idle = iowait =
 		irq = softirq = steal = cputime64_zero;
@@ -44,11 +46,10 @@ static int show_stat(struct seq_file *p,
 		softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq);
 		steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal);
 		guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest);
-		for_each_irq_nr(j) {
-#ifdef CONFIG_SPARSE_IRQ
-			if (!irq_to_desc(j))
+		for_each_irq_desc(j, desc) {
+			if (!desc)
 				continue;
-#endif
+
 			sum += kstat_irqs_cpu(j, i);
 		}
 		sum += arch_irq_stat_cpu(i);
@@ -95,12 +96,10 @@ static int show_stat(struct seq_file *p,
 	/* sum again ? it could be updated? */
 	for_each_irq_nr(j) {
 		per_irq_sum = 0;
-#ifdef CONFIG_SPARSE_IRQ
 		if (!irq_to_desc(j)) {
 			seq_printf(p, " %u", per_irq_sum);
 			continue;
 		}
-#endif
 		for_each_possible_cpu(i)
 			per_irq_sum += kstat_irqs_cpu(j, i);
 



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

* Re: [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
  2008-12-25 10:46 [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c KOSAKI Motohiro
@ 2008-12-25 10:59 ` Ingo Molnar
  2008-12-25 11:00   ` KOSAKI Motohiro
  0 siblings, 1 reply; 14+ messages in thread
From: Ingo Molnar @ 2008-12-25 10:59 UTC (permalink / raw)
  To: KOSAKI Motohiro; +Cc: Yinghai Lu, LKML


* KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> wrote:

> 
> I confirmed by alpha cross compiler.
> 
> ==
> Subject: [PATCH] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
> Impact: cleanup
> 
> commit 240d367b4e6c6e3c5075e034db14dba60a6f5fa7 has a bit strange analysis.
> The fact is, irq_desc() can be used old architecuture too. 
> but old code don't include <linux/irq.h>.
> 
> right fixing is here.

> +#include <linux/irq.h>

looks good, but linux/irq.h cannot be included on all architectures. (for 
example s390 has no notion of 'hardirqs'). But we created linux/irqnr.h 
for this purpose - so including that should work better.

	Ingo

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

* Re: [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
  2008-12-25 10:59 ` Ingo Molnar
@ 2008-12-25 11:00   ` KOSAKI Motohiro
  2008-12-25 12:40     ` KOSAKI Motohiro
  0 siblings, 1 reply; 14+ messages in thread
From: KOSAKI Motohiro @ 2008-12-25 11:00 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: kosaki.motohiro, Yinghai Lu, LKML

> 
> * KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> wrote:
> 
> > 
> > I confirmed by alpha cross compiler.
> > 
> > ==
> > Subject: [PATCH] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
> > Impact: cleanup
> > 
> > commit 240d367b4e6c6e3c5075e034db14dba60a6f5fa7 has a bit strange analysis.
> > The fact is, irq_desc() can be used old architecuture too. 
> > but old code don't include <linux/irq.h>.
> > 
> > right fixing is here.
> 
> > +#include <linux/irq.h>
> 
> looks good, but linux/irq.h cannot be included on all architectures. (for 
> example s390 has no notion of 'hardirqs'). But we created linux/irqnr.h 
> for this purpose - so including that should work better.

Oh, thanks good explain.
I'll fix soon.




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

* Re: [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
  2008-12-25 11:00   ` KOSAKI Motohiro
@ 2008-12-25 12:40     ` KOSAKI Motohiro
  2008-12-25 12:41       ` [PATCH for -tip] irq: for_each_irq_desc() makes simplify KOSAKI Motohiro
  2008-12-25 14:46       ` [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c KOSAKI Motohiro
  0 siblings, 2 replies; 14+ messages in thread
From: KOSAKI Motohiro @ 2008-12-25 12:40 UTC (permalink / raw)
  To: Ingo Molnar, Yinghai Lu, LKML; +Cc: kosaki.motohiro

> > > +#include <linux/irq.h>
> > 
> > looks good, but linux/irq.h cannot be included on all architectures. (for 
> > example s390 has no notion of 'hardirqs'). But we created linux/irqnr.h 
> > for this purpose - so including that should work better.
> 
> Oh, thanks good explain.
> I'll fix soon.

next spin is here.
I confirmed three architecture.

 1. alpha (without SPARSE_IRQ, build test by cross compiler only)
 2. ia64 (without SPARSE_IRQ)
 3. x86_64 (with SPARSE_IRQ)


==
Subject: [PATCH] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
Impact: cleanup

commit 240d367b4e6c6e3c5075e034db14dba60a6f5fa7 has a bit strange analysis.
irq_desc() can be used old architecuture.

but in old code, for_each_irq_desc() sit in <linux/irq.h> and its header
can't be included from architecture independend code.

Right solusion is 

 - move for_each_irq_desc() to <linux/irqnr.h>
 - stat.c include <linux/irqnr.h>


Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
CC: Yinghai Lu <yinghai@kernel.org>
CC: Ingo Molnar <mingo@elte.hu>
---
 fs/proc/stat.c        |   11 +++++------
 include/linux/irq.h   |   14 ++------------
 include/linux/irqnr.h |   26 ++++++++++++++------------
 kernel/irq/handle.c   |    9 +++++++--
 4 files changed, 28 insertions(+), 32 deletions(-)

Index: b/fs/proc/stat.c
===================================================================
--- a/fs/proc/stat.c
+++ b/fs/proc/stat.c
@@ -9,6 +9,7 @@
 #include <linux/seq_file.h>
 #include <linux/slab.h>
 #include <linux/time.h>
+#include <linux/irqnr.h>
 #include <asm/cputime.h>
 
 #ifndef arch_irq_stat_cpu
@@ -27,6 +28,7 @@ static int show_stat(struct seq_file *p,
 	u64 sum = 0;
 	struct timespec boottime;
 	unsigned int per_irq_sum;
+	struct irq_desc *desc;
 
 	user = nice = system = idle = iowait =
 		irq = softirq = steal = cputime64_zero;
@@ -44,11 +46,10 @@ static int show_stat(struct seq_file *p,
 		softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq);
 		steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal);
 		guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest);
-		for_each_irq_nr(j) {
-#ifdef CONFIG_SPARSE_IRQ
-			if (!irq_to_desc(j))
+		for_each_irq_desc(j, desc) {
+			if (!desc)
 				continue;
-#endif
+
 			sum += kstat_irqs_cpu(j, i);
 		}
 		sum += arch_irq_stat_cpu(i);
@@ -95,12 +96,10 @@ static int show_stat(struct seq_file *p,
 	/* sum again ? it could be updated? */
 	for_each_irq_nr(j) {
 		per_irq_sum = 0;
-#ifdef CONFIG_SPARSE_IRQ
 		if (!irq_to_desc(j)) {
 			seq_printf(p, " %u", per_irq_sum);
 			continue;
 		}
-#endif
 		for_each_possible_cpu(i)
 			per_irq_sum += kstat_irqs_cpu(j, i);
 
Index: b/include/linux/irq.h
===================================================================
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -204,32 +204,22 @@ extern void arch_free_chip_data(struct i
 #ifndef CONFIG_SPARSE_IRQ
 extern struct irq_desc irq_desc[NR_IRQS];
 
-static inline struct irq_desc *irq_to_desc(unsigned int irq)
-{
-	return (irq < NR_IRQS) ? irq_desc + irq : NULL;
-}
 static inline struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu)
 {
 	return irq_to_desc(irq);
 }
 
-#else
+#else /* CONFIG_SPARSE_IRQ */
 
-extern struct irq_desc *irq_to_desc(unsigned int irq);
 extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu);
 extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu);
 
-# define for_each_irq_desc(irq, desc)		\
-	for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; irq++, desc = irq_to_desc(irq))
-# define for_each_irq_desc_reverse(irq, desc)                          \
-	for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0; irq--, desc = irq_to_desc(irq))
-
 #define kstat_irqs_this_cpu(DESC) \
 	((DESC)->kstat_irqs[smp_processor_id()])
 #define kstat_incr_irqs_this_cpu(irqno, DESC) \
 	((DESC)->kstat_irqs[smp_processor_id()]++)
 
-#endif
+#endif /* CONFIG_SPARSE_IRQ */
 
 static inline struct irq_desc *
 irq_remap_to_desc(unsigned int irq, struct irq_desc *desc)
Index: b/include/linux/irqnr.h
===================================================================
--- a/include/linux/irqnr.h
+++ b/include/linux/irqnr.h
@@ -11,24 +11,26 @@
 # define nr_irqs		NR_IRQS
 
 # define for_each_irq_desc(irq, desc)		\
-	for (irq = 0; irq < nr_irqs; irq++)
+	for (irq = 0, desc = NULL; irq < nr_irqs; irq++)
 
 # define for_each_irq_desc_reverse(irq, desc)                          \
-	for (irq = nr_irqs - 1; irq >= 0; irq--)
-#else
+	for (irq = nr_irqs - 1, desc = NULL; irq >= 0; irq--)
+#else /* CONFIG_GENERIC_HARDIRQS */
 
 extern int nr_irqs;
+struct irq_desc;
 
-#ifndef CONFIG_SPARSE_IRQ
+# define for_each_irq_desc(irq, desc)					\
+	for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; 		\
+	     irq++, desc = irq_to_desc(irq))
 
-struct irq_desc;
-# define for_each_irq_desc(irq, desc)		\
-	for (irq = 0, desc = irq_desc; irq < nr_irqs; irq++, desc++)
-# define for_each_irq_desc_reverse(irq, desc)                          \
-	for (irq = nr_irqs - 1, desc = irq_desc + (nr_irqs - 1);        \
-	    irq >= 0; irq--, desc--)
-#endif
-#endif
+# define for_each_irq_desc_reverse(irq, desc)				\
+	for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0;	\
+	     irq--, desc = irq_to_desc(irq))
+
+extern struct irq_desc *irq_to_desc(unsigned int irq);
+
+#endif /* CONFIG_GENERIC_HARDIRQS */
 
 #define for_each_irq_nr(irq)                   \
        for (irq = 0; irq < nr_irqs; irq++)
Index: b/kernel/irq/handle.c
===================================================================
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -203,7 +203,7 @@ out_unlock:
 	return desc;
 }
 
-#else
+#else /* !CONFIG_SPARSE_IRQ */
 
 struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {
 	[0 ... NR_IRQS-1] = {
@@ -218,7 +218,12 @@ struct irq_desc irq_desc[NR_IRQS] __cach
 	}
 };
 
-#endif
+struct irq_desc *irq_to_desc(unsigned int irq)
+{
+	return (irq < nr_irqs) ? irq_desc + irq : NULL;
+}
+
+#endif /* !CONFIG_SPARSE_IRQ */
 
 /*
  * What should we do if we get a hw irq event on an illegal vector?




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

* [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-25 12:40     ` KOSAKI Motohiro
@ 2008-12-25 12:41       ` KOSAKI Motohiro
  2008-12-25 13:10         ` Cyrill Gorcunov
  2008-12-25 16:49         ` Ingo Molnar
  2008-12-25 14:46       ` [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c KOSAKI Motohiro
  1 sibling, 2 replies; 14+ messages in thread
From: KOSAKI Motohiro @ 2008-12-25 12:41 UTC (permalink / raw)
  To: Ingo Molnar, Yinghai Lu, LKML; +Cc: kosaki.motohiro

> > > > +#include <linux/irq.h>
> > > 
> > > looks good, but linux/irq.h cannot be included on all architectures. (for 
> > > example s390 has no notion of 'hardirqs'). But we created linux/irqnr.h 
> > > for this purpose - so including that should work better.
> > 
> > Oh, thanks good explain.
> > I'll fix soon.
> 
> next spin is here.
> I confirmed three architecture.
> 
>  1. alpha (without SPARSE_IRQ, build test by cross compiler only)
>  2. ia64 (without SPARSE_IRQ)
>  3. x86_64 (with SPARSE_IRQ)


Is this good idea?
this patch also tested on above three architecture.


===
Subject: [PATCH] irq: for_each_irq_desc() makes simplify
Impact: cleanup

all for_each_irq_desc() usage point have !desc check.
then its check can move into for_each_irq_desc() macro.


Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
CC: Yinghai Lu <yinghai@kernel.org>
CC: Ingo Molnar <mingo@elte.hu>
---
 arch/x86/kernel/io_apic.c |   10 ----------
 drivers/xen/events.c      |    3 ---
 fs/proc/stat.c            |    3 ---
 include/linux/irqnr.h     |    6 ++++--
 kernel/irq/autoprobe.c    |   15 ---------------
 kernel/irq/handle.c       |    3 ---
 kernel/irq/spurious.c     |    5 -----
 7 files changed, 4 insertions(+), 41 deletions(-)

Index: b/arch/x86/kernel/io_apic.c
===================================================================
--- a/arch/x86/kernel/io_apic.c
+++ b/arch/x86/kernel/io_apic.c
@@ -1400,8 +1400,6 @@ void __setup_vector_irq(int cpu)
 
 	/* Mark the inuse vectors */
 	for_each_irq_desc(irq, desc) {
-		if (!desc)
-			continue;
 		cfg = desc->chip_data;
 		if (!cpumask_test_cpu(cpu, cfg->domain))
 			continue;
@@ -1783,8 +1781,6 @@ __apicdebuginit(void) print_IO_APIC(void
 	for_each_irq_desc(irq, desc) {
 		struct irq_pin_list *entry;
 
-		if (!desc)
-			continue;
 		cfg = desc->chip_data;
 		entry = cfg->irq_2_pin;
 		if (!entry)
@@ -2425,9 +2421,6 @@ static void ir_irq_migration(struct work
 	struct irq_desc *desc;
 
 	for_each_irq_desc(irq, desc) {
-		if (!desc)
-			continue;
-
 		if (desc->status & IRQ_MOVE_PENDING) {
 			unsigned long flags;
 
@@ -2713,9 +2706,6 @@ static inline void init_IO_APIC_traps(vo
 	 * 0x80, because int 0x80 is hm, kind of importantish. ;)
 	 */
 	for_each_irq_desc(irq, desc) {
-		if (!desc)
-			continue;
-
 		cfg = desc->chip_data;
 		if (IO_APIC_IRQ(irq) && cfg && !cfg->vector) {
 			/*
Index: b/drivers/xen/events.c
===================================================================
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -142,9 +142,6 @@ static void init_evtchn_cpu_bindings(voi
 
 	/* By default all event channels notify CPU#0. */
 	for_each_irq_desc(i, desc) {
-		if (!desc)
-			continue;
-
 		desc->affinity = cpumask_of_cpu(0);
 	}
 #endif
Index: b/fs/proc/stat.c
===================================================================
--- a/fs/proc/stat.c
+++ b/fs/proc/stat.c
@@ -47,9 +47,6 @@ static int show_stat(struct seq_file *p,
 		steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal);
 		guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest);
 		for_each_irq_desc(j, desc) {
-			if (!desc)
-				continue;
-
 			sum += kstat_irqs_cpu(j, i);
 		}
 		sum += arch_irq_stat_cpu(i);
Index: b/kernel/irq/autoprobe.c
===================================================================
--- a/kernel/irq/autoprobe.c
+++ b/kernel/irq/autoprobe.c
@@ -40,9 +40,6 @@ unsigned long probe_irq_on(void)
 	 * flush such a longstanding irq before considering it as spurious.
 	 */
 	for_each_irq_desc_reverse(i, desc) {
-		if (!desc)
-			continue;
-
 		spin_lock_irq(&desc->lock);
 		if (!desc->action && !(desc->status & IRQ_NOPROBE)) {
 			/*
@@ -71,9 +68,6 @@ unsigned long probe_irq_on(void)
 	 * happened in the previous stage, it may have masked itself)
 	 */
 	for_each_irq_desc_reverse(i, desc) {
-		if (!desc)
-			continue;
-
 		spin_lock_irq(&desc->lock);
 		if (!desc->action && !(desc->status & IRQ_NOPROBE)) {
 			desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
@@ -92,9 +86,6 @@ unsigned long probe_irq_on(void)
 	 * Now filter out any obviously spurious interrupts
 	 */
 	for_each_irq_desc(i, desc) {
-		if (!desc)
-			continue;
-
 		spin_lock_irq(&desc->lock);
 		status = desc->status;
 
@@ -133,9 +124,6 @@ unsigned int probe_irq_mask(unsigned lon
 	int i;
 
 	for_each_irq_desc(i, desc) {
-		if (!desc)
-			continue;
-
 		spin_lock_irq(&desc->lock);
 		status = desc->status;
 
@@ -178,9 +166,6 @@ int probe_irq_off(unsigned long val)
 	unsigned int status;
 
 	for_each_irq_desc(i, desc) {
-		if (!desc)
-			continue;
-
 		spin_lock_irq(&desc->lock);
 		status = desc->status;
 
Index: b/kernel/irq/handle.c
===================================================================
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -433,9 +433,6 @@ void early_init_irq_lock_class(void)
 	int i;
 
 	for_each_irq_desc(i, desc) {
-		if (!desc)
-			continue;
-
 		lockdep_set_class(&desc->lock, &irq_desc_lock_class);
 	}
 }
Index: b/kernel/irq/spurious.c
===================================================================
--- a/kernel/irq/spurious.c
+++ b/kernel/irq/spurious.c
@@ -91,9 +91,6 @@ static int misrouted_irq(int irq)
 	int i, ok = 0;
 
 	for_each_irq_desc(i, desc) {
-		if (!desc)
-			continue;
-
 		if (!i)
 			 continue;
 
@@ -115,8 +112,6 @@ static void poll_spurious_irqs(unsigned 
 	for_each_irq_desc(i, desc) {
 		unsigned int status;
 
-		if (!desc)
-			continue;
 		if (!i)
 			 continue;
 
Index: b/include/linux/irqnr.h
===================================================================
--- a/include/linux/irqnr.h
+++ b/include/linux/irqnr.h
@@ -22,11 +22,13 @@ struct irq_desc;
 
 # define for_each_irq_desc(irq, desc)					\
 	for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; 		\
-	     irq++, desc = irq_to_desc(irq))
+	     irq++, desc = irq_to_desc(irq))				\
+		if (desc)
 
 # define for_each_irq_desc_reverse(irq, desc)				\
 	for (irq = nr_irqs - 1, desc = irq_to_desc(irq); irq >= 0;	\
-	     irq--, desc = irq_to_desc(irq))
+	     irq--, desc = irq_to_desc(irq))				\
+		if (desc)
 
 extern struct irq_desc *irq_to_desc(unsigned int irq);
 



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

* Re: [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-25 12:41       ` [PATCH for -tip] irq: for_each_irq_desc() makes simplify KOSAKI Motohiro
@ 2008-12-25 13:10         ` Cyrill Gorcunov
  2008-12-25 13:45           ` KOSAKI Motohiro
  2008-12-25 16:49         ` Ingo Molnar
  1 sibling, 1 reply; 14+ messages in thread
From: Cyrill Gorcunov @ 2008-12-25 13:10 UTC (permalink / raw)
  To: KOSAKI Motohiro; +Cc: Ingo Molnar, Yinghai Lu, LKML

[KOSAKI Motohiro - Thu, Dec 25, 2008 at 09:41:54PM +0900]
... 
| Is this good idea?
| this patch also tested on above three architecture.
| 
| 
| ===
| Subject: [PATCH] irq: for_each_irq_desc() makes simplify
| Impact: cleanup
| 
| all for_each_irq_desc() usage point have !desc check.
| then its check can move into for_each_irq_desc() macro.
| 
| 
| Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
| CC: Yinghai Lu <yinghai@kernel.org>
| CC: Ingo Molnar <mingo@elte.hu>
| ---
|  arch/x86/kernel/io_apic.c |   10 ----------
|  drivers/xen/events.c      |    3 ---
|  fs/proc/stat.c            |    3 ---
|  include/linux/irqnr.h     |    6 ++++--
|  kernel/irq/autoprobe.c    |   15 ---------------
|  kernel/irq/handle.c       |    3 ---
|  kernel/irq/spurious.c     |    5 -----
|  7 files changed, 4 insertions(+), 41 deletions(-)
...

Hi Kosaki,

the idea is that good indeed but I wonder if it possible
to explain that we skip empty 'desk' in for_each_... name
itself. Maybe for_each_irq_desc_defined :) Or something
more convenient word instead of "defined"?

		- Cyrill -

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

* Re: [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-25 13:10         ` Cyrill Gorcunov
@ 2008-12-25 13:45           ` KOSAKI Motohiro
  2008-12-25 14:31             ` Cyrill Gorcunov
  0 siblings, 1 reply; 14+ messages in thread
From: KOSAKI Motohiro @ 2008-12-25 13:45 UTC (permalink / raw)
  To: Cyrill Gorcunov; +Cc: Ingo Molnar, Yinghai Lu, LKML

> [KOSAKI Motohiro - Thu, Dec 25, 2008 at 09:41:54PM +0900]
> ...
> | Is this good idea?
> | this patch also tested on above three architecture.
> |
> |
> | ===
> | Subject: [PATCH] irq: for_each_irq_desc() makes simplify
> | Impact: cleanup
> |
> | all for_each_irq_desc() usage point have !desc check.
> | then its check can move into for_each_irq_desc() macro.
> |
> |
> | Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> | CC: Yinghai Lu <yinghai@kernel.org>
> | CC: Ingo Molnar <mingo@elte.hu>
> | ---
> |  arch/x86/kernel/io_apic.c |   10 ----------
> |  drivers/xen/events.c      |    3 ---
> |  fs/proc/stat.c            |    3 ---
> |  include/linux/irqnr.h     |    6 ++++--
> |  kernel/irq/autoprobe.c    |   15 ---------------
> |  kernel/irq/handle.c       |    3 ---
> |  kernel/irq/spurious.c     |    5 -----
> |  7 files changed, 4 insertions(+), 41 deletions(-)
> ...
>
> Hi Kosaki,
>
> the idea is that good indeed but I wonder if it possible
> to explain that we skip empty 'desk' in for_each_... name
> itself. Maybe for_each_irq_desc_defined :) Or something
> more convenient word instead of "defined"?

"if (!desc) " mean this irqno don't have irq description.
so I think this name imply mean skipping no irq desctiption element.

Actually, on CONFIG_SPARSEIRQ, desc is filled in dynamically after booting.
then "defined" is a bit misleading word.

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

* Re: [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-25 13:45           ` KOSAKI Motohiro
@ 2008-12-25 14:31             ` Cyrill Gorcunov
  2008-12-25 14:43               ` KOSAKI Motohiro
  0 siblings, 1 reply; 14+ messages in thread
From: Cyrill Gorcunov @ 2008-12-25 14:31 UTC (permalink / raw)
  To: KOSAKI Motohiro; +Cc: Ingo Molnar, Yinghai Lu, LKML

[KOSAKI Motohiro - Thu, Dec 25, 2008 at 10:45:20PM +0900]
| > [KOSAKI Motohiro - Thu, Dec 25, 2008 at 09:41:54PM +0900]
| > ...
| > | Is this good idea?
| > | this patch also tested on above three architecture.
| > |
| > |
| > | ===
| > | Subject: [PATCH] irq: for_each_irq_desc() makes simplify
| > | Impact: cleanup
| > |
| > | all for_each_irq_desc() usage point have !desc check.
| > | then its check can move into for_each_irq_desc() macro.
| > |
| > |
| > | Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
| > | CC: Yinghai Lu <yinghai@kernel.org>
| > | CC: Ingo Molnar <mingo@elte.hu>
| > | ---
| > |  arch/x86/kernel/io_apic.c |   10 ----------
| > |  drivers/xen/events.c      |    3 ---
| > |  fs/proc/stat.c            |    3 ---
| > |  include/linux/irqnr.h     |    6 ++++--
| > |  kernel/irq/autoprobe.c    |   15 ---------------
| > |  kernel/irq/handle.c       |    3 ---
| > |  kernel/irq/spurious.c     |    5 -----
| > |  7 files changed, 4 insertions(+), 41 deletions(-)
| > ...
| >
| > Hi Kosaki,
| >
| > the idea is that good indeed but I wonder if it possible
| > to explain that we skip empty 'desk' in for_each_... name
| > itself. Maybe for_each_irq_desc_defined :) Or something
| > more convenient word instead of "defined"?
| 
| "if (!desc) " mean this irqno don't have irq description.
| so I think this name imply mean skipping no irq desctiption element.
| 
| Actually, on CONFIG_SPARSEIRQ, desc is filled in dynamically after booting.
| then "defined" is a bit misleading word.
| 

So if I would need to iterate over all descriptors including empty
I need to type all this long for(;;) form again? For me for_each_irq_desc
implies to iterate over each irq_desc allocated regardles of internal
descriptor data. For example in list_struct we have a special test if
entry is empty or not. So I think hiding details is not that good (and
that is why I was asking for more descriptive macro name). BUT if it
really supposed to behave like that then I don't object :)

		- Cyrill -

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

* Re: [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-25 14:31             ` Cyrill Gorcunov
@ 2008-12-25 14:43               ` KOSAKI Motohiro
  2008-12-25 16:01                 ` Cyrill Gorcunov
  0 siblings, 1 reply; 14+ messages in thread
From: KOSAKI Motohiro @ 2008-12-25 14:43 UTC (permalink / raw)
  To: Cyrill Gorcunov; +Cc: Ingo Molnar, Yinghai Lu, LKML

> | "if (!desc) " mean this irqno don't have irq description.
> | so I think this name imply mean skipping no irq desctiption element.
> |
> | Actually, on CONFIG_SPARSEIRQ, desc is filled in dynamically after booting.
> | then "defined" is a bit misleading word.
> |
>
> So if I would need to iterate over all descriptors including empty
> I need to type all this long for(;;) form again?

We already have for_each_irq_nr() for this purpose ;-)

> For me for_each_irq_desc
> implies to iterate over each irq_desc allocated regardles of internal
> descriptor data. For example in list_struct we have a special test if
> entry is empty or not. So I think hiding details is not that good (and
> that is why I was asking for more descriptive macro name). BUT if it
> really supposed to behave like that then I don't object :)

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

* Re: [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c
  2008-12-25 12:40     ` KOSAKI Motohiro
  2008-12-25 12:41       ` [PATCH for -tip] irq: for_each_irq_desc() makes simplify KOSAKI Motohiro
@ 2008-12-25 14:46       ` KOSAKI Motohiro
  1 sibling, 0 replies; 14+ messages in thread
From: KOSAKI Motohiro @ 2008-12-25 14:46 UTC (permalink / raw)
  To: Ingo Molnar, Yinghai Lu, LKML; +Cc: kosaki.motohiro

2008/12/25 KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>:
>> > > +#include <linux/irq.h>
>> >
>> > looks good, but linux/irq.h cannot be included on all architectures. (for
>> > example s390 has no notion of 'hardirqs'). But we created linux/irqnr.h
>> > for this purpose - so including that should work better.
>>
>> Oh, thanks good explain.
>> I'll fix soon.
>
> next spin is here.
> I confirmed three architecture.
>
>  1. alpha (without SPARSE_IRQ, build test by cross compiler only)
>  2. ia64 (without SPARSE_IRQ)
>  3. x86_64 (with SPARSE_IRQ)

sorry.
this patch still don't work on !CONFIG_GENERIC_HARDIRQS arch. maybe.

I'll fix again.

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

* Re: [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-25 14:43               ` KOSAKI Motohiro
@ 2008-12-25 16:01                 ` Cyrill Gorcunov
  2008-12-26  1:22                   ` KOSAKI Motohiro
  0 siblings, 1 reply; 14+ messages in thread
From: Cyrill Gorcunov @ 2008-12-25 16:01 UTC (permalink / raw)
  To: KOSAKI Motohiro; +Cc: Ingo Molnar, Yinghai Lu, LKML

[KOSAKI Motohiro - Thu, Dec 25, 2008 at 11:43:45PM +0900]
| > | "if (!desc) " mean this irqno don't have irq description.
| > | so I think this name imply mean skipping no irq desctiption element.
| > |
| > | Actually, on CONFIG_SPARSEIRQ, desc is filled in dynamically after booting.
| > | then "defined" is a bit misleading word.
| > |
| >
| > So if I would need to iterate over all descriptors including empty
| > I need to type all this long for(;;) form again?
| 
| We already have for_each_irq_nr() for this purpose ;-)

Which is not shorter form of desc iterator in turn :-)

Since the original for_each_irq_desc didn't check for NULL
desc's I think the better would to name it like for_each_irq_desc_safe
or for_each_irq_desc_inuse then.

Nevermind, Kosaki, since it's only me who is confused I should
just shut up :-)

| 
| > For me for_each_irq_desc
| > implies to iterate over each irq_desc allocated regardles of internal
| > descriptor data. For example in list_struct we have a special test if
| > entry is empty or not. So I think hiding details is not that good (and
| > that is why I was asking for more descriptive macro name). BUT if it
| > really supposed to behave like that then I don't object :)
| 
		- Cyrill -

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

* Re: [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-25 12:41       ` [PATCH for -tip] irq: for_each_irq_desc() makes simplify KOSAKI Motohiro
  2008-12-25 13:10         ` Cyrill Gorcunov
@ 2008-12-25 16:49         ` Ingo Molnar
  1 sibling, 0 replies; 14+ messages in thread
From: Ingo Molnar @ 2008-12-25 16:49 UTC (permalink / raw)
  To: KOSAKI Motohiro; +Cc: Yinghai Lu, LKML


* KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> wrote:

> > > > > +#include <linux/irq.h>
> > > > 
> > > > looks good, but linux/irq.h cannot be included on all architectures. (for 
> > > > example s390 has no notion of 'hardirqs'). But we created linux/irqnr.h 
> > > > for this purpose - so including that should work better.
> > > 
> > > Oh, thanks good explain.
> > > I'll fix soon.
> > 
> > next spin is here.
> > I confirmed three architecture.
> > 
> >  1. alpha (without SPARSE_IRQ, build test by cross compiler only)
> >  2. ia64 (without SPARSE_IRQ)
> >  3. x86_64 (with SPARSE_IRQ)
> 
> 
> Is this good idea?
> this patch also tested on above three architecture.

yes, this is a nice cleanup too!

	Ingo

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

* Re: [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-25 16:01                 ` Cyrill Gorcunov
@ 2008-12-26  1:22                   ` KOSAKI Motohiro
  2008-12-26  9:37                     ` Cyrill Gorcunov
  0 siblings, 1 reply; 14+ messages in thread
From: KOSAKI Motohiro @ 2008-12-26  1:22 UTC (permalink / raw)
  To: Cyrill Gorcunov; +Cc: kosaki.motohiro, Ingo Molnar, Yinghai Lu, LKML

> [KOSAKI Motohiro - Thu, Dec 25, 2008 at 11:43:45PM +0900]
> | > | "if (!desc) " mean this irqno don't have irq description.
> | > | so I think this name imply mean skipping no irq desctiption element.
> | > |
> | > | Actually, on CONFIG_SPARSEIRQ, desc is filled in dynamically after booting.
> | > | then "defined" is a bit misleading word.
> | > |
> | >
> | > So if I would need to iterate over all descriptors including empty
> | > I need to type all this long for(;;) form again?
> | 
> | We already have for_each_irq_nr() for this purpose ;-)
> 
> Which is not shorter form of desc iterator in turn :-)
> 
> Since the original for_each_irq_desc didn't check for NULL
> desc's I think the better would to name it like for_each_irq_desc_safe
> or for_each_irq_desc_inuse then.

but before CONFIG_SPARSEIRQ feature age, for_each_irq_desc() guaranteed
to return !NULL value.
recently CONFIG_SPARSEIRQ break this assumption. I hope to restore it.

In addition, if we make both for_each_irq_desc() and for_each_irq_desc().
for_each_irq_desc() become unused macro.
from cleanup view, unused function/macro is not preferred.

> 
> Nevermind, Kosaki, since it's only me who is confused I should
> just shut up :-)





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

* Re: [PATCH for -tip] irq: for_each_irq_desc() makes simplify
  2008-12-26  1:22                   ` KOSAKI Motohiro
@ 2008-12-26  9:37                     ` Cyrill Gorcunov
  0 siblings, 0 replies; 14+ messages in thread
From: Cyrill Gorcunov @ 2008-12-26  9:37 UTC (permalink / raw)
  To: KOSAKI Motohiro; +Cc: Ingo Molnar, Yinghai Lu, LKML

On Fri, Dec 26, 2008 at 4:22 AM, KOSAKI Motohiro
<kosaki.motohiro@jp.fujitsu.com> wrote:
>> [KOSAKI Motohiro - Thu, Dec 25, 2008 at 11:43:45PM +0900]
>> | > | "if (!desc) " mean this irqno don't have irq description.
>> | > | so I think this name imply mean skipping no irq desctiption element.
>> | > |
>> | > | Actually, on CONFIG_SPARSEIRQ, desc is filled in dynamically after booting.
>> | > | then "defined" is a bit misleading word.
>> | > |
>> | >
>> | > So if I would need to iterate over all descriptors including empty
>> | > I need to type all this long for(;;) form again?
>> |
>> | We already have for_each_irq_nr() for this purpose ;-)
>>
>> Which is not shorter form of desc iterator in turn :-)
>>
>> Since the original for_each_irq_desc didn't check for NULL
>> desc's I think the better would to name it like for_each_irq_desc_safe
>> or for_each_irq_desc_inuse then.
>
> but before CONFIG_SPARSEIRQ feature age, for_each_irq_desc() guaranteed
> to return !NULL value.
> recently CONFIG_SPARSEIRQ break this assumption. I hope to restore it.

indeed

>
> In addition, if we make both for_each_irq_desc() and for_each_irq_desc().
> for_each_irq_desc() become unused macro.
> from cleanup view, unused function/macro is not preferred.
>

yeah!

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

end of thread, other threads:[~2008-12-26  9:38 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-12-25 10:46 [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c KOSAKI Motohiro
2008-12-25 10:59 ` Ingo Molnar
2008-12-25 11:00   ` KOSAKI Motohiro
2008-12-25 12:40     ` KOSAKI Motohiro
2008-12-25 12:41       ` [PATCH for -tip] irq: for_each_irq_desc() makes simplify KOSAKI Motohiro
2008-12-25 13:10         ` Cyrill Gorcunov
2008-12-25 13:45           ` KOSAKI Motohiro
2008-12-25 14:31             ` Cyrill Gorcunov
2008-12-25 14:43               ` KOSAKI Motohiro
2008-12-25 16:01                 ` Cyrill Gorcunov
2008-12-26  1:22                   ` KOSAKI Motohiro
2008-12-26  9:37                     ` Cyrill Gorcunov
2008-12-25 16:49         ` Ingo Molnar
2008-12-25 14:46       ` [PATCH for -tip] proc: remove ifdef CONFIG_SPARSE_IRQ from stat.c KOSAKI Motohiro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome