Messages in this thread | | | Date | Sat, 10 Jan 2009 23:52:29 +0100 | From | Ingo Molnar <> | Subject | Re: [PATCH 4/4] kstat: modify kstat_irqs_legacy to be variable sized |
| |
* Mike Travis <travis@sgi.com> wrote:
> Impact: reduce memory usage. > > Allocate kstat_irqs_legacy based on nr_cpu_ids to deal with this > memory usage bump when NR_CPUS bumped from 128 to 4096: > > 8192 +253952 262144 +3100% kstat_irqs_legacy(.bss) > > This is only when CONFIG_SPARSE_IRQS=y. > > Signed-off-by: Mike Travis <travis@sgi.com> > --- > kernel/irq/handle.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > --- linux-2.6-for-ingo.orig/kernel/irq/handle.c > +++ linux-2.6-for-ingo/kernel/irq/handle.c > @@ -124,8 +124,7 @@ static struct irq_desc irq_desc_legacy[N > } > }; > > -/* FIXME: use bootmem alloc ...*/ > -static unsigned int kstat_irqs_legacy[NR_IRQS_LEGACY][NR_CPUS]; > +static unsigned int *kstat_irqs_legacy; > > int __init early_irq_init(void) > { > @@ -146,9 +145,13 @@ int __init early_irq_init(void) > /* allocate irq_desc_ptrs array based on nr_irqs */ > irq_desc_ptrs = alloc_bootmem(nr_irqs * sizeof(void *)); > > + /* allocate based on nr_cpu_ids */ > + kstat_irqs_legacy = alloc_bootmem(NR_IRQS_LEGACY * nr_cpu_ids * > + sizeof(int)); > + > for (i = 0; i < legacy_count; i++) { > desc[i].irq = i; > - desc[i].kstat_irqs = kstat_irqs_legacy[i]; > + desc[i].kstat_irqs = kstat_irqs_legacy + i * NR_IRQS_LEGACY; > lockdep_set_class(&desc[i].lock, &irq_desc_lock_class); > init_alloc_desc_masks(&desc[i], 0, true); > irq_desc_ptrs[i] = desc + i;
btw., while at it - dont we want to upgrade this to a 'long' (in a separate commit)? Having more than 4 billion irqs after bootup is easily possible.
Ingo
| |