Skip to contentSkip to conversation

padata: Fixes for 3.4

PATCH New Steffen Klassert 2 participants 5 messages Mar 28, 2012 – Mar 30, 2012

Subsystems (2)
lore
Share & tools
lore

Steffen Klassert

author maintainer
#0 lore raw

This patchset contains the following changes:

1) Add a reference to the padata api documentation to the code. Suggested by Peter Zijlstra.

2) We use the active cpumask to determine the superset of cpus to use for parallelization. The active cpumask is not the appropriate cpumask for these purposes. Replace the cpu active usage by cpu online. Reported by Peter Zijlstra.

3) On cpu hotplug, we don't remove the cpu that went offline from our cpumasks. Fix this by removing this cpu from the padata cpumasks.

Please pull or apply.

The patchset is based on the crypto-2.6 tree and is available via git:

The following changes since commit ff0a70fe053614e763eb3ac88bfea9c5615fce3b:
Jussi Kivilinna (1):
crypto: twofish-x86_64-3way - module init/exit functions should be static

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/klassert/linux-stk padata-fixes

Steffen Klassert (3):
padata: Add a reference to the api documentation
padata: Use the online cpumask as the default
padata: Fix cpu hotplug

 kernel/padata.c |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)
author maintainer
#1 lore raw

PATCH 1/3 padata: Add a reference to the api documentation

Add a reference to the padata api documentation at Documentation/padata.txt

---
 kernel/padata.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
kernel/padata.c +2 -0
index 6f10eb2..7875088 100644
@@ -1,6 +1,8 @@
 /*
  * padata.c - generic interface to process data streams in parallel
  *
+ * See Documentation/padata.txt for an api documentation.
+ *
  * Copyright (C) 2008, 2009 secunet Security Networks AG
  * Copyright (C) 2008, 2009 Steffen Klassert <[email protected]>
  *
Signature · 1 line
1.7.0.4
author maintainer
#2 lore raw

PATCH 2/3 padata: Use the online cpumask as the default

In reply to Steffen Klassert

We use the active cpumask to determine the superset of cpus to use for parallelization. However, the active cpumask is for internal usage of the scheduler and therefore not the appropriate cpumask for these purposes. So use the online cpumask instead.

---
 kernel/padata.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)
kernel/padata.c +4 -4
index 7875088..de3d0d9 100644
@@ -356,13 +356,13 @@ static int padata_setup_cpumasks(struct parallel_data *pd,
 	if (!alloc_cpumask_var(&pd->cpumask.pcpu, GFP_KERNEL))
 		return -ENOMEM;
 
-	cpumask_and(pd->cpumask.pcpu, pcpumask, cpu_active_mask);
+	cpumask_and(pd->cpumask.pcpu, pcpumask, cpu_online_mask);
 	if (!alloc_cpumask_var(&pd->cpumask.cbcpu, GFP_KERNEL)) {
 		free_cpumask_var(pd->cpumask.cbcpu);
 		return -ENOMEM;
 	}
 
-	cpumask_and(pd->cpumask.cbcpu, cbcpumask, cpu_active_mask);
+	cpumask_and(pd->cpumask.cbcpu, cbcpumask, cpu_online_mask);
 	return 0;
 }
 
@@ -566,7 +566,7 @@ EXPORT_SYMBOL(padata_unregister_cpumask_notifier);
 static bool padata_validate_cpumask(struct padata_instance *pinst,
 				    const struct cpumask *cpumask)
 {
-	if (!cpumask_intersects(cpumask, cpu_active_mask)) {
+	if (!cpumask_intersects(cpumask, cpu_online_mask)) {
 		pinst->flags |= PADATA_INVALID;
 		return false;
 	}
@@ -680,7 +680,7 @@ static int __padata_add_cpu(struct padata_instance *pinst, int cpu)
 {
 	struct parallel_data *pd;
 
-	if (cpumask_test_cpu(cpu, cpu_active_mask)) {
+	if (cpumask_test_cpu(cpu, cpu_online_mask)) {
 		pd = padata_alloc_pd(pinst, pinst->cpumask.pcpu,
 				     pinst->cpumask.cbcpu);
 		if (!pd)
Signature · 1 line
1.7.0.4
author maintainer
#3 lore raw

PATCH 3/3 padata: Fix cpu hotplug

In reply to Steffen Klassert

We don't remove the cpu that went offline from our cpumasks on cpu hotplug. This got lost somewhere along the line, so restore it. This fixes a hang of the padata instance on cpu hotplug.

---
 kernel/padata.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
kernel/padata.c +3 -0
index de3d0d9..89fe3d1 100644
@@ -748,6 +748,9 @@ static int __padata_remove_cpu(struct padata_instance *pinst, int cpu)
 			return -ENOMEM;
 
 		padata_replace(pinst, pd);
+
+		cpumask_clear_cpu(cpu, pd->cpumask.cbcpu);
+		cpumask_clear_cpu(cpu, pd->cpumask.pcpu);
 	}
 
 	return 0;
Signature · 1 line
1.7.0.4
#4 lore raw
In reply to Steffen Klassert
Quoted 1 line · Steffen Klassert

This patchset contains the following changes:

All applied to crypto.

Thanks,

Signature · 3 lines
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt