From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753250AbcIIIcT (ORCPT ); Fri, 9 Sep 2016 04:32:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56154 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752684AbcIIIcO (ORCPT ); Fri, 9 Sep 2016 04:32:14 -0400 From: Denys Vlasenko To: Ingo Molnar Cc: Denys Vlasenko , Andy Lutomirski , "H. Peter Anvin" , Borislav Petkov , Brian Gerst , x86@kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] x86/apic: Use byte array apic_version[], not int array. Saves up to 96k Date: Fri, 9 Sep 2016 10:32:04 +0200 Message-Id: <20160909083204.781-1-dvlasenk@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Fri, 09 Sep 2016 08:32:08 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This array is [MAX_LOCAL_APIC], and MAX_LOCAL_APIC can easily be up to 32k. This patch changes apic_version[] array elements from int to u8 - APIC version values as of year 2016 are no larger than 0x1f on all known CPUs. Version field in the APIC register is 8 bit wide - not likely to overflow byte range in foreseeable future. The "ver" argument of generic_processor_info(id,ver), which goes into apic_version[id], is also changed from int to u8: make it obvious that assignment can't overflow. generic_processor_info() has four callsites, none of them can put an out-of-range value into this argument. Signed-off-by: Denys Vlasenko CC: Ingo Molnar CC: Andy Lutomirski CC: "H. Peter Anvin" CC: Borislav Petkov CC: Brian Gerst CC: x86@kernel.org CC: linux-kernel@vger.kernel.org --- arch/x86/include/asm/mpspec.h | 4 ++-- arch/x86/kernel/acpi/boot.c | 2 +- arch/x86/kernel/apic/apic.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/mpspec.h b/arch/x86/include/asm/mpspec.h index b07233b..a0bc349 100644 --- a/arch/x86/include/asm/mpspec.h +++ b/arch/x86/include/asm/mpspec.h @@ -6,7 +6,7 @@ #include #include -extern int apic_version[]; +extern u8 apic_version[]; extern int pic_mode; #ifdef CONFIG_X86_32 @@ -85,7 +85,7 @@ static inline void early_reserve_e820_mpc_new(void) { } #define default_get_smp_config x86_init_uint_noop #endif -int generic_processor_info(int apicid, int version); +int generic_processor_info(int apicid, u8 version); #define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_LOCAL_APIC) diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 90d84c3..fde236f 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -168,7 +168,7 @@ static int __init acpi_parse_madt(struct acpi_table_header *table) */ static int acpi_register_lapic(int id, u32 acpiid, u8 enabled) { - unsigned int ver = 0; + u8 ver = 0; int cpu; if (id >= MAX_LOCAL_APIC) { diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 50c95af..d5cc7c6 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -1837,7 +1837,7 @@ void __init register_lapic_address(unsigned long address) } } -int apic_version[MAX_LOCAL_APIC]; +u8 apic_version[MAX_LOCAL_APIC]; /* * Local APIC interrupts @@ -2027,7 +2027,7 @@ void disconnect_bsp_APIC(int virt_wire_setup) apic_write(APIC_LVT1, value); } -int generic_processor_info(int apicid, int version) +int generic_processor_info(int apicid, u8 version) { int cpu, max = nr_cpu_ids; bool boot_cpu_detected = physid_isset(boot_cpu_physical_apicid, -- 2.9.2