From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753919AbZAKRlQ (ORCPT ); Sun, 11 Jan 2009 12:41:16 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751746AbZAKRk7 (ORCPT ); Sun, 11 Jan 2009 12:40:59 -0500 Received: from relay1.sgi.com ([192.48.179.29]:40925 "EHLO relay.sgi.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751695AbZAKRk7 (ORCPT ); Sun, 11 Jan 2009 12:40:59 -0500 Message-ID: <496A2F21.8020808@sgi.com> Date: Sun, 11 Jan 2009 09:40:49 -0800 From: Mike Travis User-Agent: Thunderbird 2.0.0.6 (X11/20070801) MIME-Version: 1.0 To: Yinghai Lu CC: Ingo Molnar , Rusty Russell , Jack Steiner , linux-kernel@vger.kernel.org Subject: Re: [PATCH 4/4] kstat: modify kstat_irqs_legacy to be variable sized References: <20090110223818.459493000@polaris-admin.engr.sgi.com> <20090110223819.033438000@polaris-admin.engr.sgi.com> <86802c440901102301n5a7bb98ajd44a31ab32ddb726@mail.gmail.com> In-Reply-To: <86802c440901102301n5a7bb98ajd44a31ab32ddb726@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Yinghai Lu wrote: > On Sat, Jan 10, 2009 at 2:38 PM, Mike Travis 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 >> --- >> 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; > > here should be > > + desc[i].kstat_irqs = kstat_irqs_legacy + i * nr_cpu_ids; > > YH Hmm, thanks! (I wonder why I wanted it the other way? Oh well.) I'll make an append patch to fix it. Thanks, Mike