All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yinghai Lu <yhlu.kernel@gmail.com>
To: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Dhaval Giani <dhaval@linux.vnet.ibm.com>,
	Mike Travis <travis@sgi.com>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 7/7] x86: make 64bit support dyn_array
Date: Wed, 30 Jul 2008 12:18:35 -0700	[thread overview]
Message-ID: <200807301218.36230.yhlu.kernel@gmail.com> (raw)
In-Reply-To: <200807301210.31511.yhlu.kernel@gmail.com>


set nr_irqs according to nr_cpu_ids, so could get small footprint when use
big kernel.

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>

---
 arch/Kconfig                     |    2 ++
 arch/x86/Kconfig                 |    1 +
 arch/x86/kernel/io_apic_64.c     |   28 +++++++++++++++++++++-------
 arch/x86/kernel/setup.c          |    6 ++++++
 arch/x86/kernel/vmlinux_64.lds.S |    3 +++
 5 files changed, 33 insertions(+), 7 deletions(-)

Index: linux-2.6/arch/Kconfig
===================================================================
--- linux-2.6.orig/arch/Kconfig
+++ linux-2.6/arch/Kconfig
@@ -103,3 +103,5 @@ config HAVE_CLK
 	  The <linux/clk.h> calls support software clock gating and
 	  thus are a key power management tool on many systems.
 
+config HAVE_DYN_ARRAY
+	def_bool n
Index: linux-2.6/arch/x86/Kconfig
===================================================================
--- linux-2.6.orig/arch/x86/Kconfig
+++ linux-2.6/arch/x86/Kconfig
@@ -33,6 +33,7 @@ config X86
 	select HAVE_ARCH_TRACEHOOK
 	select HAVE_GENERIC_DMA_COHERENT if X86_32
 	select HAVE_EFFICIENT_UNALIGNED_ACCESS
+	select HAVE_DYN_ARRAY if X86_64
 
 config ARCH_DEFCONFIG
 	string
Index: linux-2.6/arch/x86/kernel/io_apic_64.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/io_apic_64.c
+++ linux-2.6/arch/x86/kernel/io_apic_64.c
@@ -66,7 +66,7 @@ struct irq_cfg {
 };
 
 /* irq_cfg is indexed by the sum of all RTEs in all I/O APICs. */
-static struct irq_cfg irq_cfg[NR_IRQS] __read_mostly = {
+static struct irq_cfg irq_cfg_legacy[] __initdata = {
 	[0]  = { .domain = CPU_MASK_ALL, .vector = IRQ0_VECTOR,  },
 	[1]  = { .domain = CPU_MASK_ALL, .vector = IRQ1_VECTOR,  },
 	[2]  = { .domain = CPU_MASK_ALL, .vector = IRQ2_VECTOR,  },
@@ -85,6 +85,17 @@ static struct irq_cfg irq_cfg[NR_IRQS] _
 	[15] = { .domain = CPU_MASK_ALL, .vector = IRQ15_VECTOR, },
 };
 
+static struct irq_cfg *irq_cfg;
+
+static void __init init_work(void *data)
+{
+	struct dyn_array *da = data;
+
+	memcpy(*da->name, irq_cfg_legacy, sizeof(irq_cfg_legacy));
+}
+
+DEFINE_DYN_ARRAY(irq_cfg, sizeof(struct irq_cfg), nr_irqs, PAGE_SIZE, init_work);
+
 static int assign_irq_vector(int irq, cpumask_t mask);
 
 int first_system_vector = 0xfe;
@@ -129,10 +140,9 @@ DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BU
  * Rough estimation of how many shared IRQs there are, can
  * be changed anytime.
  */
-#define MAX_PLUS_SHARED_IRQS NR_IRQS
-#define PIN_MAP_SIZE (MAX_PLUS_SHARED_IRQS + NR_IRQS)
 
-int pin_map_size = PIN_MAP_SIZE;
+int pin_map_size;
+
 /*
  * This is performance-critical, we want to do it O(1)
  *
@@ -141,8 +151,12 @@ int pin_map_size = PIN_MAP_SIZE;
  */
 
 static struct irq_pin_list {
-	short apic, pin, next;
-} irq_2_pin[PIN_MAP_SIZE];
+	short apic, pin;
+	int next;
+} *irq_2_pin;
+
+DEFINE_DYN_ARRAY(irq_2_pin, sizeof(struct irq_pin_list), pin_map_size, sizeof(struct irq_pin_list), NULL);
+
 
 struct io_apic {
 	unsigned int index;
@@ -359,7 +373,7 @@ static void set_ioapic_affinity_irq(unsi
  * shared ISA-space IRQs, so we have to support them. We are super
  * fast in the common case, and fast for shared ISA-space IRQs.
  */
-int first_free_entry = NR_IRQS;
+int first_free_entry;
 static void add_pin_to_irq(unsigned int irq, int apic, int pin)
 {
 	struct irq_pin_list *entry = irq_2_pin + irq;
Index: linux-2.6/arch/x86/kernel/setup.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/setup.c
+++ linux-2.6/arch/x86/kernel/setup.c
@@ -856,7 +856,13 @@ void __init setup_arch(char **cmdline_p)
 #endif
 
 	prefill_possible_map();
+
 #ifdef CONFIG_X86_64
+	/* need to wait for nr_cpu_ids settle down */
+	if (nr_irqs == NR_IRQS)
+		nr_irqs = 32 * nr_cpu_ids + 224;
+	pin_map_size = nr_irqs * 2;
+	first_free_entry = nr_irqs;
 	init_cpu_to_node();
 #endif
 
Index: linux-2.6/arch/x86/kernel/vmlinux_64.lds.S
===================================================================
--- linux-2.6.orig/arch/x86/kernel/vmlinux_64.lds.S
+++ linux-2.6/arch/x86/kernel/vmlinux_64.lds.S
@@ -174,6 +174,9 @@ SECTIONS
 	*(.x86cpuvendor.init)
   }
   __x86cpuvendor_end = .;
+
+  DYN_ARRAY_INIT(8)
+
   SECURITY_INIT
 
   . = ALIGN(8);




  parent reply	other threads:[~2008-07-30 21:11 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-29 21:14 [PATCH] x86: 64bit support more than 256 irq v2 Yinghai Lu
2008-07-29 22:16 ` Yinghai Lu
2008-07-29 23:22 ` Eric W. Biederman
2008-07-30  4:38 ` RFC [PATCH] x86: introduce nr_irqs for 64bit Yinghai Lu
2008-07-30 10:09   ` Ingo Molnar
2008-07-30 10:16     ` Yinghai Lu
2008-07-30 12:58     ` Mike Travis
2008-07-30 10:11   ` [PATCH] x86: introduce nr_irqs for 64bit v2 Yinghai Lu
2008-07-30 19:10     ` [PATCH 0/7] dyn_array support Yinghai Lu
2008-07-30 19:13       ` [PATCH 2/7] x86: introduce nr_irqs for 64bit v3 Yinghai Lu
2008-07-30 19:16       ` [PATCH 5/7] pci: make irq2_iommu to use dyn_array Yinghai Lu
2008-07-30 19:18       ` Yinghai Lu [this message]
2008-07-30 19:27       ` [PATCH 1/7] x86: 64bit support more than 256 irq v1 Yinghai Lu
2008-07-30 19:37       ` [PATCH 3/7] add dyn_array support Yinghai Lu
2008-07-30 19:40       ` [PATCH 6/7] irq: make irq_desc to use dyn_array Yinghai Lu
2008-07-30 19:40       ` [PATCH 4/7] random: make irq_timer_state " Yinghai Lu
2008-07-31  4:09       ` [PATCH 0/3] dyn_array support #2 Yinghai Lu
2008-07-31  4:10         ` [PATCH 1/3] serial: change irq_lists to use dyn_array Yinghai Lu
2008-07-31  5:58           ` Eric W. Biederman
2008-07-31  8:26           ` [PATCH] serial: change remove NR_IRQS in 8250.c Yinghai Lu
2008-07-31 11:50             ` Eric W. Biederman
2008-07-31 13:57               ` Alan Cox
2008-07-31 18:10                 ` Eric W. Biederman
2008-07-31 23:15                   ` Alan Cox
2008-08-01  3:20               ` Yinghai Lu
2008-07-31  4:11         ` [PATCH 2/3] add per_cpu_dyn_array support Yinghai Lu
2008-07-31  4:12         ` [PATCH 3/3] irq: make irqs in kernel stat use per_cpu_dyn_array Yinghai Lu
2008-07-31 10:14         ` [PATCH] x86 remove irq_vectors_limit.h Yinghai Lu
2008-07-31 16:32         ` [PATCH 0/3] dyn_array support #2 Mike Travis
2008-07-31 18:21           ` Yinghai Lu
2008-07-31 21:51         ` Peter Zijlstra
2008-07-31 22:07           ` Yinghai Lu
2008-07-31 22:25             ` Yinghai Lu
2008-08-01  3:52               ` Yinghai Lu
2008-07-31 22:14           ` Eric W. Biederman
2008-08-01 20:13       ` [PATCH 0/7] dyn_array support Eric W. Biederman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200807301218.36230.yhlu.kernel@gmail.com \
    --to=yhlu.kernel@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=dhaval@linux.vnet.ibm.com \
    --cc=ebiederm@xmission.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    --cc=travis@sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.