logo       

Re: System crash in tcp_fragment(): msg#00064

Subject: Re: System crash in tcp_fragment()
   From: kuznet@xxxxxxxxxxxxx
   Date: Tue, 21 May 2002 04:41:39 +0400 (MSD)

   +Two similar problems arise. An example code snippet:
   +
   +       struct this_needs_locking tux[NR_CPUS];
   +       tux[smp_processor_id()] = some_value;
   +       /* task is preempted here... */
   +       something = tux[smp_processor_id()];
   
   If you are not going to break all the kernel just make sure that
   tasks preempted in the kernel do not migrate. That's all, simple & stupid.
   
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.



<Prev in Thread] Current Thread [Next in Thread>