There are bugs in 2.4.x kernel ACPI
support that may affect install and/or OS boot. If you are having
problems,
one of the first trouble shooting tactics should be to disable ACPI.
This can be done from the bootline using
"acpi=off" boot line option or by modifying the BIOS settings.
If disabling ACPI fixes the boot but you wish to run with ACPI enabled,
consult other problems in this list that
document known problems and workarounds for ACPI-related issues.
If prior to the hang the kernel console
boot trace indicates that device interrupts are being steered to IRQ0,
then the
hang may be due to a bug in the x86_64 kernel's handling of ACPI
interrupt steering. A kernel patch has been accepted
to fix this bug, but it has not yet been picked up by all
distributions. In this case you can work around the problem by
disabling ACPI (in the BIOS, or by using the 'acpi=off' boot line
option), or you can manually patch the kernel.
The patch modifies the function mp_parse_prt() in
arch/x86_64/kernel/mpparse.c. You can patch this file by hand by
commenting out line:
irq = entry->link.index;
that immediately precedes the comment
/* Dont set up the ACPI SCI because
it's already up */
This problem may be caused by an
incorrect ACPI table entry that causes the timer interrupt to be
incorrectly configured.
If the kernel console boot trace (viewable using dmesg) contains
messages such as these:
..MP-BIOS bug: 8254 timer not connected to IOAPIC
...trying to set up timer (IRQ0) through the 8259A . failed.
...trying to set up timer as Virtual Wire IRQ... failed.
...trying to set up timer as ExtINT IRQ... works.
then the incorrect ACPI table entry is present. On 2.6 kernels, this
can be worked around by specifying the 'acpi_skip_timer_override'
boot line option. An alternative workaround is to disable ACPI in the
BIOS or by using the 'acpi=off' boot line option.
There is a bug in the 2.6.x kernel MP
table handling that prevents install and OS boot on some systems¹.
This bug causes memory corruption upon detection of any PCI bus
numbered higher than 32, and consequently
renders the system unusable very early in the install or boot process.
On some systems leaving ACPI on during
boot fixes this problem.
There are currently no known workarounds for this problem, but a kernel
patch for it has been accepted and
is expected to be included in future distribution releases.
¹At the time of writing, the
only nForce systems known to trigger this kernel bug are CK804 MP
systems.
Some older distributions will not have
nForce 3 IDE/SATA device IDs. This will have the following consequences:
1) IDE class driver will not be able to use DMA. This will adversely
affect IDE performance. This can be worked around by
patching the driver with appropriate device IDs.
2) SATA controllers will not be available for OS installation. This can
be worked around by using a driver disk during installation.
Note that the driver disk currently supports RedHat Enterprise Linux 3
update 2 and 3, 64-bit only. The driver disk image and
instructions for using it are available for download via anonymous FTP
at:
ftp://download.nvidia.com/linux/nforce/installdriverdisk/nvdriverdisk.tar.gz
To patch the driver two tables in the drivers/ide/pci/amd74xx.c driver
need modification:
The first table is an array of struct amd_ide_chip called
amd_ide_chips. Each entry is of the
following form:
{ PCI_DEVICE_ID_XXXXXXXXXXX, 0xXX, AMD_UDMA_100 },
If any of the following device IDs are missing from that table:
PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE
PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2
then the amd74xx.c driver does not support the nForce 3 IDE and SATA
controllers. To add support:
Step 1: Define PCI device ID macros.
Immediately before the amd_ide_chips table, add the following lines:
#define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee
Step 2: Add entries to the end of the amd_ide_chips table (but before
the
terminating entry "{ 0 },").
{
PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, 0x50, AMD_UDMA_133 },
{
PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, 0x50, AMD_UDMA_133
},
{
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, 0x50, AMD_UDMA_133
},
{
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, 0x50,
AMD_UDMA_133 },
Step 3: Add entries to the amd74xx_pci_tbl (but before the terminating
entry
"{ 0, },").
There is an array of struct pci_device_id called amd74xx_pci_tbl.
Entries
need to be added here for CK804/MCP04 support.
{ PCI_VENDOR_ID_NVIDIA,
PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9
},
{ PCI_VENDOR_ID_NVIDIA,
PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
{ PCI_VENDOR_ID_NVIDIA,
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
{ PCI_VENDOR_ID_NVIDIA,
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
12 },
The number at the end of each entry (9 through 12) refers to the the
corresponding entries (numbering starts with 0) in the
amd_ide_chips table. For example, counting down in the
amd_ide_chips table, the 9th entry (starting the count
with 0) should correspond with the PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE
entry. If it doesn't correspond,
the numbers in the entries of amd74xx_pci_tbl will need to be adjusted
accordingly.
Step 4: Rebuild the kernel.