From owner-freebsd-smp Fri Sep 20 18: 7:32 2002 Delivered-To: freebsd-smp@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AD03337B404; Fri, 20 Sep 2002 18:07:30 -0700 (PDT) Received: from pintail.mail.pas.earthlink.net (pintail.mail.pas.earthlink.net [207.217.120.122]) by mx1.FreeBSD.org (Postfix) with ESMTP id 07E3543E4A; Fri, 20 Sep 2002 18:07:30 -0700 (PDT) (envelope-from tlambert2@mindspring.com) Received: from pool0066.cvx40-bradley.dialup.earthlink.net ([216.244.42.66] helo=mindspring.com) by pintail.mail.pas.earthlink.net with esmtp (Exim 3.33 #1) id 17sYk4-0001d9-00; Fri, 20 Sep 2002 18:07:28 -0700 Message-ID: <3D8BC5F1.EF365A5@mindspring.com> Date: Fri, 20 Sep 2002 18:05:53 -0700 From: Terry Lambert X-Mailer: Mozilla 4.79 [en] (Win98; U) X-Accept-Language: en MIME-Version: 1.0 To: Jonathan R Feldkamp Cc: smp@freebsd.org, jhb@freebsd.org Subject: Re: For those with P4 SMP problems.. References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-freebsd-smp@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org Jonathan R Feldkamp wrote: > Ok, my start_ap(...) as it is right now is at the bottom of this file. > > I have added to what beemern's work. I set both the physical_cpu and the > logical_cpu from 1 to 8, if you think it is necessary i'll go clear up to > 15. I added a little debugging around the RESETs and STARTUPs just to > see it, and increased the timeout from 5 seconds to 10 seconds. All of > this had basically no effect. start_ap(...) is always returning 0 because > mp_ncpus is never being incremented. > > So, the CPU is never being started right? I take it an interrupt of some > kind is supposed increment mp_ncpus? I greped through all of the code in > /sys/ but couldn't find where it was supposed to happen at. > > What do you think is going on? He already said: the real CPU IDs don't match the APIC IDs from the BIOS. My guess as to why the other systems work is that they start the CPUs in parallel, which basically means that there are matching CPUs started at the time of the check, but that the ones which match are not the ones which were started. If the APIC ID isn't used again, you could make this "work" by changing the code that calls start_ap() seperate it into a "start_ap()" and a "check_ap()", and then: for( i = 0; i < NCPU; i++) { try |= 1<