* [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] 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 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
* 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] 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
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