-- On Wed, 3 Oct 2007, Clark Williams wrote: > > > > I could put a hack in that fixes the issue when detected, and still prints > > out a warning. I'll do that for now, until we find the problem area. I > > think the first warning probably had the want that corrupted us, and then > > we got flooded with warnings because we never fixed the situation. > > > > Patch coming soon. > > > > -- Steve > >> Ad infinitum. Not sure what you're looking for to be cleared in the enter and exit > >> functions, but it doesn't look like it's happening after a resume. Didn't seem to > >> affect the behavior of the kernel, since the network came up and I was able to > >> function normally (or as normally as I can function). > > > > I'd reboot if I were you ;-) > > Oh, I did :) > > I've since suspended and resumed a couple of more times and have not seen your RCU > warnings, so it's not completely reproduceable. > > Got any debugging code you want me to add, in case it pops up again? > OK here's the patch to give a warning and temporarily fix the issue. -- Steve Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx> Index: linux-2.6.23-rc9-rt1/include/linux/rcupreempt.h =================================================================== --- linux-2.6.23-rc9-rt1.orig/include/linux/rcupreempt.h +++ linux-2.6.23-rc9-rt1/include/linux/rcupreempt.h @@ -108,7 +108,13 @@ DECLARE_PER_CPU(long, dynticks_progress_ static inline void rcu_enter_nohz(void) { __get_cpu_var(dynticks_progress_counter)++; - WARN_ON(__get_cpu_var(dynticks_progress_counter) & 0x1); + if (unlikely(__get_cpu_var(dynticks_progress_counter) & 0x1)) { + printk("BUG: bad accounting of dynamic ticks\n"); + printk(" will try to fix, but it is best to reboot\n"); + WARN_ON(1); + /* try to fix it */ + __get_cpu_var(dynticks_progress_counter)++; + } mb(); } @@ -116,7 +122,13 @@ static inline void rcu_exit_nohz(void) { mb(); __get_cpu_var(dynticks_progress_counter)++; - WARN_ON(!(__get_cpu_var(dynticks_progress_counter) & 0x1)); + if (unlikely(!(__get_cpu_var(dynticks_progress_counter) & 0x1))) { + printk("BUG: bad accounting of dynamic ticks\n"); + printk(" will try to fix, but it is best to reboot\n"); + WARN_ON(1); + /* try to fix it */ + __get_cpu_var(dynticks_progress_counter)++; + } } #else /* CONFIG_NO_HZ */ - To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html