frame_info_init in 2.6 kernel

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

 



I suppose everybody running 2.6 mips kernel see this error message:

> Can't analyze prologue code at XXXXXXXX

XXXXXXXX is an address of schedule_timeout function.

This is because schedule_timeout was moved to timer.c from sched.c and
therefore compiled without -fno-omit-frame-pointer.

If the error is detected, get_wchan does not work so the "ps lw"
command can not print WCHAN field correctly.

How about this patch?

--- arch/mips/kernel/process.c.org	Thu Nov 20 16:34:45 2003
+++ arch/mips/kernel/process.c	Thu Nov 20 16:38:39 2003
@@ -251,12 +251,20 @@
 
 static int __init frame_info_init(void)
 {
-	mips_frame_info_initialized =
-		!get_frame_info(&schedule_frame, schedule) &&
-		!get_frame_info(&schedule_timeout_frame, schedule_timeout) &&
-		!get_frame_info(&sleep_on_frame, sleep_on) &&
-		!get_frame_info(&sleep_on_timeout_frame, sleep_on_timeout) &&
-		!get_frame_info(&wait_for_completion_frame, wait_for_completion);
+	/* in 2.6 kernel, schedule_timout is out of [first_sched,last_sched] */
+	if ((unsigned long)schedule_timeout < first_sched ||
+	    (unsigned long)schedule_timeout >= last_sched)
+		mips_frame_info_initialized =
+			!get_frame_info(&schedule_frame, schedule) &&
+			!get_frame_info(&sleep_on_frame, sleep_on) &&
+			!get_frame_info(&wait_for_completion_frame, wait_for_completion);
+	else
+		mips_frame_info_initialized =
+			!get_frame_info(&schedule_frame, schedule) &&
+			!get_frame_info(&schedule_timeout_frame, schedule_timeout) &&
+			!get_frame_info(&sleep_on_frame, sleep_on) &&
+			!get_frame_info(&sleep_on_timeout_frame, sleep_on_timeout) &&
+			!get_frame_info(&wait_for_completion_frame, wait_for_completion);
 
 	return 0;
 }
@@ -323,6 +331,9 @@
 	goto out;
 
 schedule_timeout_caller:
+	if ((unsigned long)schedule_timeout < first_sched ||
+	    (unsigned long)schedule_timeout >= last_sched)
+		return pc;	/* failsafe */
 	/*
 	 * The schedule_timeout frame
 	 */
---
Atsushi Nemoto


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux