kuznet@ms2.inr.ac.ru wrote: > > Hello! > > > 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 - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html