Re: 2.6.12-rc4-mm1

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

 



On Thu, May 12, 2005 at 03:31:00AM -0700, Andrew Morton wrote:
> +uml-remove-elfh.patch
> +uml-critical-change-memcpy-to-memmove.patch
>  UML important updates

uml-remove-elfh looks empty.

Anyway, the real patch, of minor importance, follows in an attachment.
This is a pure bugfix, as the intention was apparent, but not carried
out, but the bug never caused exceptions or corruption. The check for
a comma following "profile=schedule" on the command line had an off by
one that caused it never to trigger. The option checking also
accidentally clobbered prof_on = SCHED_PROFILING, granted that it was
reached (which prior to dealing with that off by one, it never was).

I took the liberty of translating all of the hardcoded string length
constants to strlen(schedstr) plus the appropriate offsets for the sake
of clarity and side benefit of putting a string used only in __init in
__initdata, but left others not multiply referenced in .rodata.


-- wli
profile=schedule parsing is not quite what it should be.
First, str[7] is 'e', not ',', but then even if it did fall through,
prof_on = SCHED_PROFILING would be clobbered inside if (get_option(...))
So a small amount of rearrangement is done in this patch to correct it.

Index: mm1-2.6.12-rc4/kernel/profile.c
===================================================================
--- mm1-2.6.12-rc4.orig/kernel/profile.c	2005-05-14 17:09:17.000000000 -0700
+++ mm1-2.6.12-rc4/kernel/profile.c	2005-05-14 17:45:05.000000000 -0700
@@ -49,15 +49,19 @@
 
 static int __init profile_setup(char * str)
 {
+	static char __initdata schedstr[] = "schedule";
 	int par;
 
-	if (!strncmp(str, "schedule", 8)) {
+	if (!strncmp(str, schedstr, strlen(schedstr))) {
 		prof_on = SCHED_PROFILING;
-		printk(KERN_INFO "kernel schedule profiling enabled\n");
-		if (str[7] == ',')
-			str += 8;
-	}
-	if (get_option(&str,&par)) {
+		if (str[strlen(schedstr)] == ',')
+			str += strlen(schedstr) + 1;
+		if (get_option(&str, &par))
+			prof_shift = par;
+		printk(KERN_INFO
+			"kernel schedule profiling enabled (shift: %ld)\n",
+			prof_shift);
+	} else if (get_option(&str, &par)) {
 		prof_shift = par;
 		prof_on = CPU_PROFILING;
 		printk(KERN_INFO "kernel profiling enabled (shift: %ld)\n",

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux