Bill Holler wrote: > Yes. The scenario you described is correct. > > Additionally the interrupt service routine interrupts all CPUs that > have expired at the time the ISR is running. It is possible for > multiple CPUs to expire at the same time, or at least by the time > the HPET's ISR runs. > > poke_cpu() is used to send the IPI because of its low overhead. >
Nice. It would be interesting to know the incremental cost of the I/O APIC programming to have the HPET re-target a different CPU. You could detect in the ISR whether or not the CPU upon which you are interrupting is already idle, and if so then do the extra I/O APIC work. If it's busy, you might not want to incur the extra cost of the re-programming....but then again, if it is busy...maybe you do so that you won't get bothered again a little while later by the next HPET interrupt. :) -Eric
