Messages in this thread Patch in this message | | | Date | Sat, 02 May 2009 15:27:49 -0700 | From | Yinghai Lu <> | Subject | [PATCH] x86: change apic_version array to bsp apic ver only |
| |
only need to record boot cpu apic version
[ Impact: save some bytes ]
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
--- arch/x86/include/asm/mpspec.h | 2 +- arch/x86/kernel/acpi/boot.c | 7 +++---- arch/x86/kernel/apic/apic.c | 16 ++++++++-------- arch/x86/kernel/apic/es7000_32.c | 4 +--- arch/x86/kernel/apic/io_apic.c | 2 +- arch/x86/kernel/smpboot.c | 10 +++++----- arch/x86/kernel/visws_quirks.c | 3 ++- 7 files changed, 21 insertions(+), 23 deletions(-)
Index: linux-2.6/arch/x86/include/asm/mpspec.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/mpspec.h +++ linux-2.6/arch/x86/include/asm/mpspec.h @@ -5,7 +5,7 @@ #include <asm/mpspec_def.h> -extern int apic_version[MAX_APICS]; +extern int apic_version; extern int pic_mode; #ifdef CONFIG_X86_32 Index: linux-2.6/arch/x86/kernel/acpi/boot.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c +++ linux-2.6/arch/x86/kernel/acpi/boot.c @@ -225,7 +225,7 @@ static void __cpuinit acpi_register_lapi } if (boot_cpu_physical_apicid != -1U) - ver = apic_version[boot_cpu_physical_apicid]; + ver = apic_version; generic_processor_info(id, ver); } @@ -808,8 +808,7 @@ static void __init acpi_register_lapic_a set_fixmap_nocache(FIX_APIC_BASE, address); if (boot_cpu_physical_apicid == -1U) { boot_cpu_physical_apicid = read_apic_id(); - apic_version[boot_cpu_physical_apicid] = - GET_APIC_VERSION(apic_read(APIC_LVR)); + apic_version = GET_APIC_VERSION(apic_read(APIC_LVR)); } } @@ -937,7 +936,7 @@ static u8 __init uniq_ioapic_id(u8 id) { #ifdef CONFIG_X86_32 if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && - !APIC_XAPIC(apic_version[boot_cpu_physical_apicid])) + !APIC_XAPIC(apic_version)) return io_apic_get_unique_id(nr_ioapics, id); else return id; Index: linux-2.6/arch/x86/kernel/apic/apic.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/apic/apic.c +++ linux-2.6/arch/x86/kernel/apic/apic.c @@ -1615,8 +1615,7 @@ void __init init_apic_mappings(void) new_apicid = read_apic_id(); if (boot_cpu_physical_apicid != new_apicid) { boot_cpu_physical_apicid = new_apicid; - apic_version[new_apicid] = - GET_APIC_VERSION(apic_read(APIC_LVR)); + apic_version = GET_APIC_VERSION(apic_read(APIC_LVR)); } } @@ -1624,7 +1623,7 @@ void __init init_apic_mappings(void) * This initializes the IO-APIC and APIC hardware if this is * a UP kernel. */ -int apic_version[MAX_APICS]; +int apic_version; int __init APIC_init_uniprocessor(void) { @@ -1645,8 +1644,7 @@ int __init APIC_init_uniprocessor(void) /* * Complain if the BIOS pretends there is one. */ - if (!cpu_has_apic && - APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) { + if (!cpu_has_apic && APIC_INTEGRATED(apic_version)) { pr_err("BIOS bug, local APIC 0x%x not detected!...\n", boot_cpu_physical_apicid); clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC); @@ -1871,7 +1869,9 @@ void __cpuinit generic_processor_info(in version); version = 0x10; } - apic_version[apicid] = version; + + if (apicid == boot_cpu_physical_apicid) + apic_version = version; if (num_processors >= nr_cpu_ids) { int max = nr_cpu_ids; @@ -1888,10 +1888,10 @@ void __cpuinit generic_processor_info(in num_processors++; cpu = cpumask_next_zero(-1, cpu_present_mask); - if (version != apic_version[boot_cpu_physical_apicid]) + if (version != apic_version) WARN_ONCE(1, "ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n", - apic_version[boot_cpu_physical_apicid], cpu, version); + apic_version, cpu, version); physid_set(apicid, phys_cpu_present_map); if (apicid == boot_cpu_physical_apicid) { Index: linux-2.6/arch/x86/kernel/apic/es7000_32.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/apic/es7000_32.c +++ linux-2.6/arch/x86/kernel/apic/es7000_32.c @@ -512,11 +512,9 @@ static void es7000_init_apic_ldr(void) static void es7000_setup_apic_routing(void) { - int apic = per_cpu(x86_bios_cpu_apicid, smp_processor_id()); - printk(KERN_INFO "Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n", - (apic_version[apic] == 0x14) ? + (apic_version == 0x14) ? "Physical Cluster" : "Logical Cluster", nr_ioapics, cpumask_bits(es7000_target_cpus())[0]); } Index: linux-2.6/arch/x86/kernel/apic/io_apic.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c +++ linux-2.6/arch/x86/kernel/apic/io_apic.c @@ -2010,7 +2010,7 @@ static void __init setup_ioapic_ids_from * no meaning without the serial APIC bus. */ if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) - || APIC_XAPIC(apic_version[boot_cpu_physical_apicid])) + || APIC_XAPIC(apic_version)) return; /* * This is broken; anything with a real cpu count has to Index: linux-2.6/arch/x86/kernel/smpboot.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/smpboot.c +++ linux-2.6/arch/x86/kernel/smpboot.c @@ -522,7 +522,7 @@ wakeup_secondary_cpu_via_nmi(int logical * Give the other CPU some time to accept the IPI. */ udelay(200); - if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) { + if (APIC_INTEGRATED(apic_version)) { maxlvt = lapic_get_maxlvt(); if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */ apic_write(APIC_ESR, 0); @@ -549,7 +549,7 @@ wakeup_secondary_cpu_via_init(int phys_a /* * Be paranoid about clearing APIC errors. */ - if (APIC_INTEGRATED(apic_version[phys_apicid])) { + if (APIC_INTEGRATED(apic_version)) { if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */ apic_write(APIC_ESR, 0); apic_read(APIC_ESR); @@ -589,7 +589,7 @@ wakeup_secondary_cpu_via_init(int phys_a * Determine this based on the APIC version. * If we don't have an integrated APIC, don't send the STARTUP IPIs. */ - if (APIC_INTEGRATED(apic_version[phys_apicid])) + if (APIC_INTEGRATED(apic_version)) num_starts = 2; else num_starts = 0; @@ -753,7 +753,7 @@ do_rest: /* * Be paranoid about clearing APIC errors. */ - if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) { + if (APIC_INTEGRATED(apic_version)) { apic_write(APIC_ESR, 0); apic_read(APIC_ESR); } @@ -990,7 +990,7 @@ static int __init smp_sanity_check(unsig /* * If we couldn't find a local APIC, then get out of here now! */ - if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid]) && + if (APIC_INTEGRATED(apic_version) && !cpu_has_apic) { printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n", boot_cpu_physical_apicid); Index: linux-2.6/arch/x86/kernel/visws_quirks.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/visws_quirks.c +++ linux-2.6/arch/x86/kernel/visws_quirks.c @@ -205,7 +205,8 @@ static void __init MP_processor_info(str m->apicid); ver = 0x10; } - apic_version[m->apicid] = ver; + if (m->cpuflag & CPU_BOOTPROCESSOR) + apic_version = ver; } static int __init visws_find_smp_config(unsigned int reserve)
| |