Description of Problem:
kernel-smp, kernel-enterprise, and any user-compiled Red Hat 2.4.9-e.* kernel
that includes SMP support are broken on hardware that lacks a local APIC.
The problem is that __run_timers never gets called, so any process that sleeps
on a timeout never wakes up, though you can interrupt it with a signal. When
SMP and X86 are defined in this kernel, __run_timers is driven from
run_local_timers, which is called only from smp_apic_timer_interrupt. But the
latter is (properly) called only if you have a real local APIC; it is not called
by the dummy APIC emulation.
A possible fix would be to call run_local_timers from smp_local_timer_interrupt
instead of smp_apic_timer_interrupt. I haven't tested this, but it looks good.
Red Hat introduced this bug by applying the patch linux-2.4.2-smptimers.patch.
This appears to be a backport (or early version) of a feature from the 2.5
kernel series. Looking at the current 2.5 kernel, the timer code has been
further reorganized and cleaned up, and the bug doesn't appear to exist there.
Version-Release number of selected component (if applicable):
At least 2.4.9-e.3 through 2.4.9-e.10.
Try to boot one of these kernels on hardware that lacks a local APIC. Probably
the easiest way to do this is to boot them in a VMware virtual machine. VMware
products earlier than the as-yet unreleased Workstation 4.0, ESX 2.0, and GSX
3.0 do not provide a virtual local APIC to the virtual machine; the virtual
hardware is strictly PIC-based.
Initialization hangs the first time something tries to wait on a timeout.
Timeouts should time out after the proper timeout. :-)
Several changes have been made to this area, please verify
that its still a problem with the latest AS2.1 kernel errata(e.24).
Also such virtual machines are UP, so you should run the UP kernel....
It's been a couple of months since verification was requested. As such, I am
closing this bug. If it is still a problem, please reopen.