[PATCH 32/42] replace loop with nr_irqs with for_each_irq_icfg

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Yinghai Lu
Date: Friday, August 8, 2008 - 2:52 pm

so don't all irq_cfg at begining to allocate all.
and only call that when needed

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
---
 arch/x86/kernel/io_apic_64.c |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c
index 784a882..1d1a70d 100644
--- a/arch/x86/kernel/io_apic_64.c
+++ b/arch/x86/kernel/io_apic_64.c
@@ -129,6 +129,9 @@ static void __init init_work(void *data)
 		cfg[i-1].next = &cfg[i];
 }
 
+#define for_each_irq_cfg(cfg)		\
+	for(cfg = irq_cfgx; cfg && cfg->irq != -1U; cfg = cfg->next)
+
 static struct irq_cfg *irq_cfgx;
 DEFINE_DYN_ARRAY(irq_cfgx, sizeof(struct irq_cfg), nr_irq_cfg, PAGE_SIZE, init_work);
 
@@ -1063,20 +1066,18 @@ static void __setup_vector_irq(int cpu)
 	/* Initialize vector_irq on a new cpu */
 	/* This function must be called with vector_lock held */
 	int irq, vector;
+	struct irq_cfg *cfg;
 
 	/* Mark the inuse vectors */
-	for (irq = 0; irq < nr_irqs; ++irq) {
-		struct irq_cfg *cfg = irq_cfg(irq);
-
+	for_each_irq_cfg(cfg) {
 		if (!cpu_isset(cpu, cfg->domain))
 			continue;
 		vector = cfg->vector;
+		irq = cfg->irq;
 		per_cpu(vector_irq, cpu)[vector] = irq;
 	}
 	/* Mark the free vectors */
 	for (vector = 0; vector < NR_VECTORS; ++vector) {
-		struct irq_cfg *cfg;
-
 		irq = per_cpu(vector_irq, cpu)[vector];
 		if (irq < 0)
 			continue;
@@ -1312,6 +1313,7 @@ __apicdebuginit(void) print_IO_APIC(void)
 	union IO_APIC_reg_01 reg_01;
 	union IO_APIC_reg_02 reg_02;
 	unsigned long flags;
+	struct irq_cfg *cfg;
 
 	if (apic_verbosity == APIC_QUIET)
 		return;
@@ -1380,12 +1382,11 @@ __apicdebuginit(void) print_IO_APIC(void)
 	}
 	}
 	printk(KERN_DEBUG "IRQ to pin mappings:\n");
-	for (i = 0; i < nr_irqs; i++) {
-		struct irq_cfg *cfg = irq_cfg(i);
+	for_each_irq_cfg(cfg) {
 		struct irq_pin_list *entry = cfg->irq_2_pin;
 		if (!entry)
 			continue;
-		printk(KERN_DEBUG "IRQ%d ", i);
+		printk(KERN_DEBUG "IRQ%d ", cfg->irq);
 		for (;;) {
 			printk("-> %d:%d", entry->apic, entry->pin);
 			if (!entry->next)
@@ -2044,6 +2045,7 @@ static inline void init_IO_APIC_traps(void)
 {
 	int irq;
 	struct irq_desc *desc;
+	struct irq_cfg *cfg;
 
 	/*
 	 * NOTE! The local APIC isn't very good at handling
@@ -2056,10 +2058,8 @@ static inline void init_IO_APIC_traps(void)
 	 * Also, we've got to be careful not to trash gate
 	 * 0x80, because int 0x80 is hm, kind of importantish. ;)
 	 */
-	for (irq = 0; irq < nr_irqs ; irq++) {
-		struct irq_cfg *cfg;
-
-		cfg = irq_cfg(irq);
+	for_each_irq_cfg(cfg) {
+		irq = cfg->irq;
 		if (IO_APIC_IRQ(irq) && !cfg->vector) {
 			/*
 			 * Hmm.. We don't have an entry for this,
-- 
1.5.4.5

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 01/42] 8250: Remove NR_IRQ usage, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 02/42] x86: add after_bootmem for 32bit, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 03/42] x86: remove irq_vectors_limits, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 04/42] add dyn_array support, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 05/42] add per_cpu_dyn_array support, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 06/42] x86: alloc dyn_array all alltogether, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 07/42] x86: enable dyn_array support, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 08/42] introduce nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 09/42] x86: using nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 10/42] drivers/char to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 11/42] drivers/net to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 12/42] drivers intr remapping to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 13/42] drivers/pcmcia to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 14/42] drivers/rtc to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 15/42] drivers/scsi to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 16/42] drivers/serial to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 17/42] drivers proc to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 18/42] drivers xen events to use nr_irqs, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 19/42] make irq_timer_state to use dyn_array, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 20/42] make irq2_iommu to use dyn_array, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 21/42] make irq_desc to use dyn_array, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 23/42] x86: use dyn_array in io_apic_xx.c, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 24/42] x86: get mp_irqs from madt, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 25/42] x86: remove nr_irq_vectors, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 27/42] x86: add irq_cfg in io_apic_64.c, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 32/42] replace loop with nr_irqs with for_each_irq_icfg, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 36/42] x86_64: introduce irq_cfg_with_new, Yinghai Lu, (Fri Aug 8, 2:52 pm)
[PATCH 37/42] x86_64: introduce irq_desc_with_new, Yinghai Lu, (Fri Aug 8, 2:52 pm)
Re: [PATCH 00/42] dyn_array/nr_irqs/sparse_irq support v5, H. Peter Anvin, (Fri Aug 8, 3:01 pm)
Re: [PATCH 00/42] dyn_array/nr_irqs/sparse_irq support v5, H. Peter Anvin, (Fri Aug 8, 3:19 pm)
Re: [PATCH 00/42] dyn_array/nr_irqs/sparse_irq support v5, H. Peter Anvin, (Fri Aug 8, 3:25 pm)
Re: [PATCH 00/42] dyn_array/nr_irqs/sparse_irq support v5, H. Peter Anvin, (Fri Aug 8, 3:33 pm)
Re: [PATCH 01/42] 8250: Remove NR_IRQ usage, Eric W. Biederman, (Fri Aug 8, 3:38 pm)
Re: [PATCH 01/42] 8250: Remove NR_IRQ usage, Yinghai Lu, (Fri Aug 8, 4:07 pm)
Re: [PATCH 00/42] dyn_array/nr_irqs/sparse_irq support v5, Eric W. Biederman, (Fri Aug 8, 4:40 pm)
Re: [PATCH 08/42] introduce nr_irqs, Eric W. Biederman, (Fri Aug 8, 6:00 pm)
Re: [PATCH 08/42] introduce nr_irqs, Yinghai Lu, (Fri Aug 8, 6:38 pm)
Re: [PATCH 08/42] introduce nr_irqs, H. Peter Anvin, (Fri Aug 8, 6:59 pm)
Re: [PATCH 08/42] introduce nr_irqs, Eric W. Biederman, (Fri Aug 8, 11:07 pm)
Re: [PATCH 08/42] introduce nr_irqs, Yinghai Lu, (Sat Aug 9, 12:30 am)
Re: [PATCH 08/42] introduce nr_irqs, Yinghai Lu, (Sat Aug 9, 12:30 am)
Re: [PATCH 08/42] introduce nr_irqs, Eric W. Biederman, (Sat Aug 9, 8:46 am)
Re: [PATCH 08/42] introduce nr_irqs, Eric W. Biederman, (Sat Aug 9, 9:02 am)
Re: [PATCH 08/42] introduce nr_irqs, Yinghai Lu, (Sat Aug 9, 2:21 pm)
Re: [PATCH 08/42] introduce nr_irqs, Yinghai Lu, (Sat Aug 9, 2:37 pm)
Re: [PATCH 08/42] introduce nr_irqs, Eric W. Biederman, (Sat Aug 9, 2:38 pm)
Re: [PATCH 08/42] introduce nr_irqs, Yinghai Lu, (Sat Aug 9, 3:35 pm)