Skip to contentSkip to conversation

mm: numa: Initialse numa balancing after jump label initialisation

PATCH In review Mel Gorman 3 participants 4 messages Jan 27, 2014 – Jan 28, 2014

Subsystems (2)
lore
Share & tools
lore

Mel Gorman

author
#0 lore raw

PATCH 1/1 mm: numa: Initialse numa balancing after jump label initialisation

The command line parsing takes place before jump labels are initialised which generates a warning if numa_balancing= is specified and CONFIG_JUMP_LABEL is set. On older kernls before commit c4b2c0c5 (static_key: WARN on usage before jump_label_init was called) the kernel would have crashed. This patch enables automatic numa balancing later in the initialisation process if numa_balancing= is specified.

---
 mm/mempolicy.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)
mm/mempolicy.c +10 -6
index 0cd2c4d..5223684 100644
@@ -2657,7 +2657,7 @@ void mpol_free_shared_policy(struct shared_policy *p)
 }
 
 #ifdef CONFIG_NUMA_BALANCING
-static bool __initdata numabalancing_override;
+static int __initdata numabalancing_override;
 
 static void __init check_numabalancing_enable(void)
 {
@@ -2666,9 +2666,14 @@ static void __init check_numabalancing_enable(void)
 	if (IS_ENABLED(CONFIG_NUMA_BALANCING_DEFAULT_ENABLED))
 		numabalancing_default = true;
 
+	/* Parsed by setup_numabalancing. override == 1 enables, -1 disables */
+	if (numabalancing_override)
+		set_numabalancing_state(numabalancing_override == 1);
+
 	if (nr_node_ids > 1 && !numabalancing_override) {
-		printk(KERN_INFO "Enabling automatic NUMA balancing. "
-			"Configure with numa_balancing= or sysctl");
+		printk(KERN_INFO "%s automatic NUMA balancing. "
+			"Configure with numa_balancing= or sysctl",
+			numabalancing_default ? "Enabling" : "Disabling");
 		set_numabalancing_state(numabalancing_default);
 	}
 }
@@ -2678,13 +2683,12 @@ static int __init setup_numabalancing(char *str)
 	int ret = 0;
 	if (!str)
 		goto out;
-	numabalancing_override = true;
 
 	if (!strcmp(str, "enable")) {
-		set_numabalancing_state(true);
+		numabalancing_override = 1;
 		ret = 1;
 	} else if (!strcmp(str, "disable")) {
-		set_numabalancing_state(false);
+		numabalancing_override = -1;
 		ret = 1;
 	}
 out:

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

Acked-by on v1 1/1
#1 lore raw
Quoted 9 lines · Mel Gorman

The command line parsing takes place before jump labels are initialised which generates a warning if numa_balancing= is specified and CONFIG_JUMP_LABEL is set. On older kernls before commit c4b2c0c5 (static_key: WARN on usage before jump_label_init was called) the kernel would have crashed. This patch enables automatic numa balancing later in the initialisation process if numa_balancing= is specified.

Signature · 7 lines
All rights reversed

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
maintainer
#2 lore raw
In reply to Mel Gorman
Quoted 16 lines · On Mon, 27 Jan 2014 15:51:27 +0000 Mel Gorman <[email protected]> wrote:

The command line parsing takes place before jump labels are initialised which generates a warning if numa_balancing= is specified and CONFIG_JUMP_LABEL is set. On older kernls before commit c4b2c0c5 (static_key: WARN on usage before jump_label_init was called) the kernel would have crashed. This patch enables automatic numa balancing later in the initialisation process if numa_balancing= is specified.

...

mm/mempolicy.c +3 -0
@@ -2666,9 +2666,14 @@ static void __init check_numabalancing_enable(void)
 	if (IS_ENABLED(CONFIG_NUMA_BALANCING_DEFAULT_ENABLED))
 		numabalancing_default = true;
 
+	/* Parsed by setup_numabalancing. override == 1 enables, -1 disables */
+	if (numabalancing_override)
+		set_numabalancing_state(numabalancing_override == 1);

mm/mempolicy.c static void __init check_numabalancing_enable(void) · line 2679

Quoted 10 lines
mm/mempolicy.c +4 -2
+
 	if (nr_node_ids > 1 && !numabalancing_override) {
-		printk(KERN_INFO "Enabling automatic NUMA balancing. "
-			"Configure with numa_balancing= or sysctl");
+		printk(KERN_INFO "%s automatic NUMA balancing. "
+			"Configure with numa_balancing= or sysctl",
+			numabalancing_default ? "Enabling" : "Disabling");
 		set_numabalancing_state(numabalancing_default);
 	}
 }

Current mainline is a bit different from this:

		printk(KERN_INFO "Enabling automatic NUMA balancing. "
			"Configure with numa_balancing= or the kernel.numa_balancing sysctl");

So this won't apply as-is to -stable.

I assume you suggested the -stable backport to fix the it-crashes-before-c4b2c0c5 thing, so it isn't really needed in 3.12.x.

Or something. Please sort all that out when Greg comes back with a hey-that-didnt-apply.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

author
#3 lore raw
Quoted 31 lines · Andrew Morton
Quoted 16 lines · On Mon, 27 Jan 2014 15:51:27 +0000 Mel Gorman <[email protected]> wrote:

The command line parsing takes place before jump labels are initialised which generates a warning if numa_balancing= is specified and CONFIG_JUMP_LABEL is set. On older kernls before commit c4b2c0c5 (static_key: WARN on usage before jump_label_init was called) the kernel would have crashed. This patch enables automatic numa balancing later in the initialisation process if numa_balancing= is specified.

...

mm/mempolicy.c +3 -0
@@ -2666,9 +2666,14 @@ static void __init check_numabalancing_enable(void)
 	if (IS_ENABLED(CONFIG_NUMA_BALANCING_DEFAULT_ENABLED))
 		numabalancing_default = true;
 
+	/* Parsed by setup_numabalancing. override == 1 enables, -1 disables */
+	if (numabalancing_override)
+		set_numabalancing_state(numabalancing_override == 1);

mm/mempolicy.c static void __init check_numabalancing_enable(void) · line 2679

Quoted 10 lines
mm/mempolicy.c +4 -2
+
 	if (nr_node_ids > 1 && !numabalancing_override) {
-		printk(KERN_INFO "Enabling automatic NUMA balancing. "
-			"Configure with numa_balancing= or sysctl");
+		printk(KERN_INFO "%s automatic NUMA balancing. "
+			"Configure with numa_balancing= or sysctl",
+			numabalancing_default ? "Enabling" : "Disabling");
 		set_numabalancing_state(numabalancing_default);
 	}
 }

Current mainline is a bit different from this:

Quoted 5 lines
		printk(KERN_INFO "Enabling automatic NUMA balancing. "
			"Configure with numa_balancing= or the kernel.numa_balancing sysctl");

So this won't apply as-is to -stable.

That's ok.

Quoted 3 lines

I assume you suggested the -stable backport to fix the it-crashes-before-c4b2c0c5 thing, so it isn't really needed in 3.12.x.

I am recommending this patch for -stable because 3.12.x crashes. c4b2c0c5 prevents a crash but it is still the case that the parameter is not handled properly so backporting c4b2c0c5 is not a suitable alternative.

Quoted 2 lines

Or something. Please sort all that out when Greg comes back with a hey-that-didnt-apply.

I will.

Signature · 8 lines
Mel Gorman
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>