i386/64626: AP initialization problem on GIGABYTE GA-7DPXDW+ Athlon
MP board
Coleman Kane
cokane at FreeBSD.org
Tue Mar 23 10:40:16 PST 2004
>Number: 64626
>Category: i386
>Synopsis: AP initialization problem on GIGABYTE GA-7DPXDW+ Athlon MP board
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-i386
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Tue Mar 23 10:40:14 PST 2004
>Closed-Date:
>Last-Modified:
>Originator: Coleman Kane
>Release: 5.2.1-Release
>Organization:
DomainIt, Inc.
>Environment:
FreeBSD sparky.domainit.int 5.2.1-RELEASE FreeBSD 5.2.1-RELEASE #0: Tue Jan 8 23:15:10 GMT 2002
root at sparky.domainit.int:/usr/obj/usr/src/sys/SPARKY i386
>Description:
System randomly fails to initialize the second CPU. Comes up with AP #1 (PHY #1) initialization failed
panic?(y/n)
And halts. I have installed 5.2-RELEASE and 5.2.1-RELEASE on three of these systems over the past couple months and they all exhibit the same behavior. The error is intermittent, and typically when the machine is restarted it comes up fine.
>How-To-Repeat:
Reboot the offending system repeatedly until the error occurs.
>Fix:
The machine always halts at the panic? (y/n) prompt, even if DDB_UNATTENDED is set. As a temporary solution (until the reason why CPU 1 doesn't start is ascertained), I suggest modifying sys/i386/i386/mp_machdep.c around line 635 from:
if (!start_ap(apic_id)) {
printf("AP #%d (PHY# %d) failed!\n", cpu, apic_id);
CHECK_PRINT("trace"); /* show checkpoints */
/* better panic as the AP may be running loose */
printf("panic y/n? [y] ");
if (cngetc() != 'n')
panic("bye-bye");
}
CHECK_PRINT("trace"); /* show checkpoints */
To:
if (!start_ap(apic_id)) {
printf("AP #%d (PHY# %d) failed!\n", cpu, apic_id);
CHECK_PRINT("trace"); /* show checkpoints */
/* better panic as the AP may be running loose */
#ifndef DDB_UNATTENDED
printf("panic y/n? [y] ");
if (cngetc() != 'n')
panic("bye-bye");
#else
panic("Unable to init CPU");
#endif
}
CHECK_PRINT("trace"); /* show checkpoints */
The system will simply restart when the condition occurs in the unattended state, until it comes up clean.
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-i386
mailing list