From owner-freebsd-smp Fri Nov 29 15:48:19 1996 Return-Path: owner-smp Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id PAA13771 for smp-outgoing; Fri, 29 Nov 1996 15:48:19 -0800 (PST) Received: from clem.systemsix.com (clem.systemsix.com [198.99.86.131]) by freefall.freebsd.org (8.7.5/8.7.3) with SMTP id PAA13766 for ; Fri, 29 Nov 1996 15:48:16 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by clem.systemsix.com (8.6.12/8.6.12) with SMTP id QAA00819 for ; Fri, 29 Nov 1996 16:48:13 -0700 Message-Id: <199611292348.QAA00819@clem.systemsix.com> X-Authentication-Warning: clem.systemsix.com: Host localhost didn't use HELO protocol X-Mailer: exmh version 1.6.5 12/11/95 From: Steve Passe To: freebsd-smp@freebsd.org Subject: Re: SMP-current hang problems. Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Fri, 29 Nov 1996 16:48:13 -0700 Sender: owner-smp@freebsd.org X-Loop: FreeBSD.org Precedence: bulk Hi, here's the patch I promised for i386/i386/mpboot.s. It doesn't break anything on my system, but since mine works already I can't promise it will help anything either. let me know what it does... -------------------------------------- cut ------------------------------------ *** mpboot.s~ Fri Nov 29 15:52:31 1996 --- mpboot.s Fri Nov 29 16:19:37 1996 *************** *** 63,68 **** --- 63,78 ---- * Wait for the booting CPU to signal startup */ mp_begin: /* now running relocated at KERNBASE */ + movl _apic_base, %esi + + movl APIC_SVR(%esi), %eax /* get spurious vector reg. */ + andl $~0x00000100, %eax /* disable the APIC */ + movl %eax, APIC_SVR(%esi) + + movl APIC_VER(%esi), %eax + movl %eax, _cpuApicVersions + incl _mp_ncpus + /* One at a time, we are running on the shared mp_stk */ /* This is the Intel reccomended semaphore method */ movb $0xff, %al *************** *** 82,93 **** movl APIC_TPR(%esi), %eax /* get current TPR */ orl $0x000000ff, %eax /* block all INTs */ movl %eax, APIC_TPR(%esi) /* put new TPR */ - /* :EMXIF **/ - movl _apic_base, %esi - movl APIC_SVR(%esi), %eax /* get spurious vector reg. */ - orl $0x00000100, %eax /* This bit enables the APIC */ - movl %eax, APIC_SVR(%esi) #if 0 /* the alternate CPU is not ready to receive interrupts yet */ movl APIC_LVT1(%esi), %eax /* Setup LVT1 as ExtINT */ andl $0xfffe58ff, %eax --- 92,98 ---- *************** *** 99,107 **** orl $0xffff0400, %eax movl %eax, APIC_LVT2(%esi) ! movl APIC_VER(%esi), %eax ! movl %eax, _cpuApicVersions ! incl _mp_ncpus #if 0 1: movl _smp_active, %eax --- 104,113 ---- orl $0xffff0400, %eax movl %eax, APIC_LVT2(%esi) ! movl APIC_SVR(%esi), %eax /* get spurious vector reg. */ ! orl $0x00000100, %eax /* This bit enables the APIC */ ! movl %eax, APIC_SVR(%esi) ! /* :EMXIF **/ #if 0 1: movl _smp_active, %eax -------------------------------------- cut ------------------------------------ -- Steve Passe | powered by smp@csn.net | FreeBSD