On Tue, Mar 22, 2005 at 10:32:01AM +0100, Ingo Molnar wrote: > > * Ingo Molnar <[EMAIL PROTECTED]> wrote: > > > seems to be a true SMP race: when i boot with 1 CPU it doesnt trigger, > > the same kernel image and 2 CPUs triggers it on CPU#1. (CPU#0 is the > > boot CPU) Note that the timing of the crash is not deterministic > > (sometimes i get it during net startup, sometimes during ACPI > > startup), but it always crashes within rcu_advance_callbacks(). > > > > one difference between your tests and mine is that your kernel is > > doing _synchronize_kernel() from preempt-off sections (correct?), > > while my kernel with PREEMPT_RT does it on preemptable sections. > > hm, another thing: i think call_rcu() needs to take the read-lock. Right > now it assumes that it has the data structure private, but that's only > statistically true on PREEMPT_RT: another CPU may have this CPU's RCU > control structure in use. So IRQs-off (or preempt-off) is not a > guarantee to have the data structure, the read lock has to be taken.
!!! The difference is that in the stock kernel, rcu_check_callbacks() is invoked from irq. In PREEMPT_RT, it is invoked from process context and appears to be preemptible. This means that rcu_advance_callbacks() can be preempted, resulting in all sorts of problems. Need to disable preemption over this. There are probably other bugs of this sort, I will track them down. But, just to make sure I understand -- if I have preempt disabled over all accesses to a per-CPU variable, and that variable is -not- accessed from a real interrupt handler, then I am safe without a lock, right? Thanx, Paul PS. Fixing my stupid bugs that you pointed out in earlier email, as well. :-/ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/