kuznet@xxxxxxxxxxxxx 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@xxxxxxxxxx
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
|