|
@@ -55,8 +55,10 @@ static void delay_tsc(unsigned long loops)
|
|
|
|
|
|
preempt_disable();
|
|
preempt_disable();
|
|
cpu = smp_processor_id();
|
|
cpu = smp_processor_id();
|
|
|
|
+ rdtsc_barrier();
|
|
rdtscl(bclock);
|
|
rdtscl(bclock);
|
|
for (;;) {
|
|
for (;;) {
|
|
|
|
+ rdtsc_barrier();
|
|
rdtscl(now);
|
|
rdtscl(now);
|
|
if ((now - bclock) >= loops)
|
|
if ((now - bclock) >= loops)
|
|
break;
|
|
break;
|
|
@@ -78,6 +80,7 @@ static void delay_tsc(unsigned long loops)
|
|
if (unlikely(cpu != smp_processor_id())) {
|
|
if (unlikely(cpu != smp_processor_id())) {
|
|
loops -= (now - bclock);
|
|
loops -= (now - bclock);
|
|
cpu = smp_processor_id();
|
|
cpu = smp_processor_id();
|
|
|
|
+ rdtsc_barrier();
|
|
rdtscl(bclock);
|
|
rdtscl(bclock);
|
|
}
|
|
}
|
|
}
|
|
}
|