Messages in this thread | | | Date | Wed, 28 May 2008 09:01:06 -0400 (EDT) | From | Steven Rostedt <> | Subject | Re: [PATCH] x86: enable preemption in delay |
| |
On Sun, 25 May 2008, Pavel Machek wrote: > > + if (unlikely(cpu != smp_processor_id())) { > > + if (loops <= TSC_MIGRATE_COUNT) > > + break; > > + cpu = smp_processor_id(); > > + rdtscl(bclock); > > + loops -= TSC_MIGRATE_COUNT; > > + } else { > > + rdtscl(now); > > + if ((now - bclock) >= loops) > > + break; > > + loops -= (now - bclock); > > + bclock = now; > > What happens with different cpus running on different frequencies...? > Cpufreq?
It's not even protected with the old code.
inline void __const_udelay(unsigned long xloops) { __delay(((xloops * HZ * cpu_data(raw_smp_processor_id()).loops_per_jiffy) >> 32) + 1); }
Here it calculates the loops_per_jiffy for the CPU and calls into __delay. But it can easily be preempted here and the delay could run on another CPU.
-- Steve
| |