From owner-svn-src-head@FreeBSD.ORG Mon Apr 9 16:58:10 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A39C8106564A; Mon, 9 Apr 2012 16:58:10 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from mail-lpp01m010-f54.google.com (mail-lpp01m010-f54.google.com [209.85.215.54]) by mx1.freebsd.org (Postfix) with ESMTP id 1B98B8FC16; Mon, 9 Apr 2012 16:58:08 +0000 (UTC) Received: by lagv3 with SMTP id v3so5015599lag.13 for ; Mon, 09 Apr 2012 09:58:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=se4t0bo0YAfoBu09BD4v5i4G0VcZ7zI1QvQOYzL4HDk=; b=XGABcc2PvA8HmGTzMOi7GPep78eCDmirQtGbQf40L8K1OZxzdsF1qWEf+ZcO6TgckS VDmE/NsNQJ8pQQxuZvEUPw3Rx4Qid8n1rLCngJ1QNh1RIHE+Gd5lJGq/TQXcUdQKQuQQ qHcAf/GOJo20E8hK+7gu1XJWVeST27bSI+I6pHiR7aGQXGkP82PF+qd8PO6falhPx8n0 0lQIzkpxJ6WG/uJ8FtrPSol1oKVkja5eE2qgjNEOUjM6QeZrDas1ERqlmgYN2zE2a7OR Nz679wvB4nYRNM6uLfhlms7J7cHC7Fn8Fw6iPGEubA03wu36ZDr7lOceeVNCTCbU3pOg 125w== MIME-Version: 1.0 Received: by 10.152.132.166 with SMTP id ov6mr12769446lab.35.1333990688033; Mon, 09 Apr 2012 09:58:08 -0700 (PDT) Sender: asmrookie@gmail.com Received: by 10.112.93.138 with HTTP; Mon, 9 Apr 2012 09:58:07 -0700 (PDT) In-Reply-To: <201204091234.43106.jhb@freebsd.org> References: <201204062119.q36LJTKR026564@svn.freebsd.org> <20120409154510.GA2253@a91-153-116-96.elisa-laajakaista.fi> <201204091234.43106.jhb@freebsd.org> Date: Mon, 9 Apr 2012 17:58:07 +0100 X-Google-Sender-Auth: bxpHncSu7eL2mF13d2_QRMcFbuU Message-ID: From: Attilio Rao To: John Baldwin Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: svn-src-head@freebsd.org, Jaakko Heinonen , svn-src-all@freebsd.org, "Justin T. Gibbs" , src-committers@freebsd.org Subject: Re: svn commit: r233961 - head/sys/x86/x86 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Apr 2012 16:58:10 -0000 Il 09 aprile 2012 17:34, John Baldwin ha scritto: > On Monday, April 09, 2012 11:45:11 am Jaakko Heinonen wrote: >> >> Hi, >> >> On 2012-04-06, Justin T. Gibbs wrote: >> > =C2=A0 Fix interrupt load balancing regression, introduced in revision >> > =C2=A0 222813, that left all un-pinned interrupts assigned to CPU 0. >> > >> > =C2=A0 sys/x86/x86/intr_machdep.c: >> > =C2=A0 =C2=A0 In intr_shuffle_irqs(), remove CPU_SETOF() call that ini= tialized >> > =C2=A0 =C2=A0 the "intr_cpus" cpuset to only contain CPU0. >> > >> > =C2=A0 =C2=A0 This initialization is too late and nullifies the result= s of calls >> > =C2=A0 =C2=A0 the intr_add_cpu() that occur much earlier in the boot p= rocess. >> > =C2=A0 =C2=A0 Since "intr_cpus" is statically initialized to the empty= set, and >> > =C2=A0 =C2=A0 all processors, including the BSP, already add themselve= s to >> > =C2=A0 =C2=A0 "intr_cpus" no special initialization for the BSP is nec= essary. >> >> My Pentium 4 system hangs on boot after this commit. These are the last >> lines from a verbose boot: >> >> SMP: AP CPU #1 Launched! >> cpu1 AP: >> =C2=A0 =C2=A0 =C2=A0ID: 0x01000000 =C2=A0 VER: 0x00050014 LDR: 0x0000000= 0 DFR: 0xffffffff >> =C2=A0 lint0: 0x00010700 lint1: 0x00000400 TPR: 0x00000000 SVR: 0x000001= ff >> =C2=A0 timer: 0x000100ef therm: 0x00010000 err: 0x000000f0 pmc: 0x000104= 00 >> >> The system boots with r233960. >> >> Some information: >> >> CPU: Intel(R) Pentium(R) 4 CPU 2.60GHz (2605.96-MHz 686-class CPU) >> =C2=A0 Origin =3D "GenuineIntel" =C2=A0Id =3D 0xf29 =C2=A0Family =3D f = =C2=A0Model =3D 2 =C2=A0Stepping =3D >> 9 >> > Features=3D0xbfebfbff >> =C2=A0 Features2=3D0x4400 >> real memory =C2=A0=3D 2147483648 (2048 MB) >> avail memory =3D 2085228544 (1988 MB) >> Event timer "LAPIC" quality 400 >> ACPI APIC Table: >> FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs >> FreeBSD/SMP: 1 package(s) x 1 core(s) x 2 HTT threads >> =C2=A0cpu0 (BSP): APIC ID: =C2=A00 >> =C2=A0cpu1 (AP/HT): APIC ID: =C2=A01 > > I suspect in your case intr_add_cpu() is never called. =C2=A0I think Atti= lio is not > correct in that it is not called for the BSP. > > Yes, it is not called for the BSP in set_interrupt_apic_ids(). =C2=A0This= used to > work because bit 0 was assigned statically. =C2=A0Also, in a UP machine > set_interrupt_apic_ids() is not called at all. But why there is a front-end check for the BSP in set_interrupt_apic_ids()? Anyway, I think a better fix would be like the attached patch. Thanks, Attilio Index: sys/i386/i386/mp_machdep.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sys/i386/i386/mp_machdep.c (revisione 234046) +++ sys/i386/i386/mp_machdep.c (copia locale) @@ -831,6 +831,8 @@ set_interrupt_apic_ids(void) apic_id =3D cpu_apic_ids[i]; if (apic_id =3D=3D -1) continue; + + /* BSP should be already added by cpu_startup(). */ if (cpu_info[apic_id].cpu_bsp) continue; if (cpu_info[apic_id].cpu_disabled) Index: sys/i386/i386/machdep.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sys/i386/i386/machdep.c (revisione 234046) +++ sys/i386/i386/machdep.c (copia locale) @@ -336,6 +336,11 @@ cpu_startup(dummy) #ifndef XEN cpu_setregs(); #endif + + /* + * Add BSP interrupt bitmask. + */ + intr_add_cpu(0); } /* Index: sys/amd64/amd64/mp_machdep.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sys/amd64/amd64/mp_machdep.c (revisione 234046) +++ sys/amd64/amd64/mp_machdep.c (copia locale) @@ -797,6 +797,8 @@ set_interrupt_apic_ids(void) apic_id =3D cpu_apic_ids[i]; if (apic_id =3D=3D -1) continue; + + /* BSP should be already added by cpu_startup(). */ if (cpu_info[apic_id].cpu_bsp) continue; if (cpu_info[apic_id].cpu_disabled) Index: sys/amd64/amd64/machdep.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sys/amd64/amd64/machdep.c (revisione 234046) +++ sys/amd64/amd64/machdep.c (copia locale) @@ -295,6 +295,11 @@ cpu_startup(dummy) vm_pager_bufferinit(); cpu_setregs(); + + /* + * Add BSP interrupt bitmask. + */ + intr_add_cpu(0); } /*