From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751294AbbJCU0g (ORCPT ); Sat, 3 Oct 2015 16:26:36 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42634 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751123AbbJCU0f (ORCPT ); Sat, 3 Oct 2015 16:26:35 -0400 Message-ID: <561039F8.9000207@redhat.com> Date: Sat, 03 Oct 2015 22:26:32 +0200 From: Denys Vlasenko User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Ingo Molnar CC: Daniel J Blueman , Jiang Liu , Thomas Gleixner , Len Brown , x86@kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/3] x86/apic: Use smaller array for __apicid_to_node[] mapping References: <1443813145-29102-1-git-send-email-dvlasenk@redhat.com> <1443813145-29102-3-git-send-email-dvlasenk@redhat.com> <20151003074428.GA25143@gmail.com> In-Reply-To: <20151003074428.GA25143@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 On 10/03/2015 09:44 AM, Ingo Molnar wrote: > > * Denys Vlasenko wrote: > >> @@ -56,16 +56,34 @@ early_param("numa", numa_setup); >> /* >> * apicid, cpu, node mappings >> */ >> -s16 __apicid_to_node[MAX_LOCAL_APICID] = { >> - [0 ... MAX_LOCAL_APICID-1] = NUMA_NO_NODE >> + >> +struct apicid_to_node __apicid_to_node[NR_CPUS] = { >> + [0 ... NR_CPUS-1] = {-1, NUMA_NO_NODE} >> }; >> >> +void set_apicid_to_node(int apicid, s16 node) >> +{ >> + static int ent; > > having such statics inside functions is really obscure and makes review harder. > I had to look twice to see it. Please move it outside and also name it > appropriately. Just to confirm: you want it to be a static data, but not inside a function? >> + /* Protect against small kernel on large system */ >> + if (ent >= NR_CPUS) >> + return; >> + >> + __apicid_to_node[ent].apicid = apicid; >> + __apicid_to_node[ent].node = node; >> + ent++; >> +} > > So what happens if we run a small kernel and run out of entries? We just silently > seem to return, no warning, no nothing - the system will likely fail to boot in > myserious ways, right? Good question. I tested this. I built a NR_CPUS=8 kernel and booted it on 144 cpu and 240 cpu machines. Both booted fine: [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: NR_CPUS/possible_cpus limit of 8 reached. Processor 8/0x16 ignored. ... [ 0.000000] ACPI: NR_CPUS/possible_cpus limit of 8 reached. Processor 143/0xf7 ignored.