Re: System crash in tcp_fragment()
From: Nivedita Singhvi <hidden>
Date: 2002-05-21 01:49:27
On Mon, 20 May 2002, David S. Miller wrote:
Such rule does not even make this piece of code legal. Consider:
task1:cpu0: x = counters[smp_processor_id()];
cpu0: PREEMPT
task2:cpu0: x = counters[smp_processor_id()];
task2:cpu0: counters[smp_processor_id()] = x + 1;
cpu0: PREEMPT
task1:cpu0: counters[smp_processor_id()] = x + 1;
full garbage
But it does bring up important point, preemption people need to
fully audit entire networking.
It is totally broken by preemption the more I think about it.
At the very beginning, all the SNMP counter bumping tricks will
totally fail with preemption enabled.A lot of the synchronization between process context and interrupt context is based on per-cpu data structures or simple locks (without disabling irq's globally) eg: softnet_data queue (we only disable local interrupts), and synchronization between tcp_readmsg() and tcp_rcv() over the receive queue would get confused (lock.users flag would be different on another CPU).. Wonder how any of it could possibly work.. thanks, Nivedita