kuznet@ms2.inr.ac.ru wrote:
Hello!
quoted
I understand the issue.
I do not.
+#define preempt_disable() \
+do { \
+ ++current->preempt_count; \
+ barrier(); \
+} while (0)
Why does this work?
Alexey
Preemption can only happen if the task is interrupted. The
interrupt exit code will not preempt if preempt_count is
more than zero. The barrier() forces the result to memory
so the interrupt code can find it.
--
George Anzinger george@mvista.com
High-res-timers:
http://sourceforge.net/projects/high-res-timers/
Real time sched: http://sourceforge.net/projects/rtsched/
Preemption patch:
http://www.kernel.org/pub/linux/kernel/people/rml