Commit e147ec8f authored by will schmidt's avatar will schmidt Committed by Paul Mackerras

[POWERPC] Simplify smp_space_timers

Greatly simplify the function smp_space_timers.

The stolen time calculation (per comment within the code) doesn't need the
half-jiffy stagger any more.  There isn't an issue with bouncing off global
locks, so we really shouldn't need any sort of staggering at all.

However, the last_jiffy value still needs to be set.   This removes the
extra stagger logic, and just sets the values.

This change should benefit applications that rely on barrier
synchronization, and will help cut down OS jitter.

Boot tested across the board (G5,power3,power4,power5,970mp blade).
Signed-off-by: default avatarWill Schmidt <will_schmidt@vnet.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 435e0b2b
...@@ -711,30 +711,15 @@ void wakeup_decrementer(void) ...@@ -711,30 +711,15 @@ void wakeup_decrementer(void)
void __init smp_space_timers(unsigned int max_cpus) void __init smp_space_timers(unsigned int max_cpus)
{ {
int i; int i;
unsigned long half = tb_ticks_per_jiffy / 2;
unsigned long offset = tb_ticks_per_jiffy / max_cpus;
u64 previous_tb = per_cpu(last_jiffy, boot_cpuid); u64 previous_tb = per_cpu(last_jiffy, boot_cpuid);
/* make sure tb > per_cpu(last_jiffy, cpu) for all cpus always */ /* make sure tb > per_cpu(last_jiffy, cpu) for all cpus always */
previous_tb -= tb_ticks_per_jiffy; previous_tb -= tb_ticks_per_jiffy;
/*
* The stolen time calculation for POWER5 shared-processor LPAR
* systems works better if the two threads' timebase interrupts
* are staggered by half a jiffy with respect to each other.
*/
for_each_possible_cpu(i) { for_each_possible_cpu(i) {
if (i == boot_cpuid) if (i == boot_cpuid)
continue; continue;
if (i == (boot_cpuid ^ 1)) per_cpu(last_jiffy, i) = previous_tb;
per_cpu(last_jiffy, i) =
per_cpu(last_jiffy, boot_cpuid) - half;
else if (i & 1)
per_cpu(last_jiffy, i) =
per_cpu(last_jiffy, i ^ 1) + half;
else {
previous_tb += offset;
per_cpu(last_jiffy, i) = previous_tb;
}
} }
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment