Messages in this thread | | | Date | Thu, 21 Aug 2003 19:01:39 +0200 | From | Manfred Spraul <> | Subject | Re: Possible race condition in i386 global_irq_lock handling. |
| |
TeJun wrote: > static inline void irq_enter(int cpu, int irq) > { > ++local_irq_count(cpu); > > while (test_bit(0,&global_irq_lock)) { > cpu_relax(); > } > } > > Is it a race condition or am I getting it horribly wrong? Thx in > advance.
Yes, it's a race. Actually a variant of the race that lead to the introduction of set_current_state():
test_bit is a simple read instruction. i386 cpus are free to execute it early, i.e. they can execute it before the write part of "++local_irq_count(cpu)".
I think smp_rmb() is the right barrier - could you write a patch and send it to Marcelo?
-- Manfred
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |