Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Wed, 26 Feb 2003 20:10:53 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Wed, 26 Feb 2003 20:10:53 -0500 Received: from ool-4351594a.dyn.optonline.net ([67.81.89.74]:54536 "EHLO badula.org") by vger.kernel.org with ESMTP id ; Wed, 26 Feb 2003 20:10:51 -0500 Date: Wed, 26 Feb 2003 20:20:57 -0500 (EST) From: Ion Badulescu To: "Martin J. Bligh" cc: Linus Torvalds , Mikael Pettersson , Rusty Russell , , Subject: Re: [BUG] 2.5.63: ESR killed my box! In-Reply-To: <10510000.1046306748@[10.10.2.4]> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2005 Lines: 61 On Wed, 26 Feb 2003, Martin J. Bligh wrote: > > > > connect_bsp_APIC(); > > > > - phys_cpu_present_map = 1; > > - apic_write_around(APIC_ID, boot_cpu_physical_apicid); > > + phys_cpu_present_map = 1 << boot_cpu_physical_apicid; > > > > apic_pm_init2(); > > If I'm reading this correctly, this is called out of APIC_init_uniprocessor > from smp_init ... isn't that after people have finished using > phys_cpu_present_map (eg setup_ioapic_ids_from_mpc)? No, look further down in apic.c: APIC_init_uniprocessor() calls setup_IO_APIC() which then calls setup_ioapic_ids_from_mpc(). This happens after the code quoted above runs. Additionally, in 2.4.x setup_local_APIC() also uses boot_cpu_physical_apicid, although only as a sanity check. That code is gone from (or never made it into) 2.5. > maybe change this bit in trap_init: > > @@ -665,7 +665,6 @@ > } > set_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability); > mp_lapic_addr = APIC_DEFAULT_PHYS_BASE; > - boot_cpu_physical_apicid = 0; > if (nmi_watchdog != NMI_NONE) > nmi_watchdog = NMI_LOCAL_APIC; > > to do: > > boot_cpu_physical_apicid = hard_smp_processor_id(); > phys_cpu_present_map = 1 << boot_cpu_physical_apicid; But is it necessarily true that hard_smp_processor_id() equals the APIC id? Anyway, after applying Linus' patch, the first thing that touches boot_cpu_physical_apicid becomes init_apic_mappings() which does: if (boot_cpu_physical_apicid == -1U) boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID)); and that's just about as good as it gets, certainly the CPU knows best what its APIC id is. Ion -- It is better to keep your mouth shut and be thought a fool, than to open it and remove all doubt. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/