Re: 2.6.23-rc9-rt1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



--

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

[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux