[linux-yocto] [PATCH 33/38] arch/arm/mach-axxia: changed affinity parameter to cpu

Cristian Bercaru cristian.bercaru at windriver.com
Wed May 20 12:24:16 PDT 2015


From: Charlie Paul <cpaul.windriver at gmail.com>

Signed-off-by: Charlie Paul <cpaul.windriver at gmail.com>
---
 arch/arm/mach-axxia/axxia-gic.c |   27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/arch/arm/mach-axxia/axxia-gic.c b/arch/arm/mach-axxia/axxia-gic.c
index cdfc8fa..ecee2d9 100644
--- a/arch/arm/mach-axxia/axxia-gic.c
+++ b/arch/arm/mach-axxia/axxia-gic.c
@@ -447,13 +447,12 @@ static int gic_retrigger(struct irq_data *d)
 }
 
 static int _gic_set_affinity(struct irq_data *d,
-			     const struct cpumask *mask_val,
-			     bool do_clear)
+		unsigned int cpu,
+		bool do_clear)
 {
 	void __iomem *reg  = gic_dist_base(d) + GIC_DIST_TARGET +
 			     (gic_irq(d) & ~3);
 	unsigned int shift = (gic_irq(d) % 4) * 8;
-	unsigned int cpu = cpumask_any_and(mask_val, cpu_online_mask);
 	u32 val, mask, bit;
 	u32 enable_mask, enable_offset;
 
@@ -495,14 +494,14 @@ static void gic_set_affinity_remote(void *info)
 {
 	struct gic_rpc_data *rpc = (struct gic_rpc_data *)info;
 
-	_gic_set_affinity(rpc->d, rpc->mask_val, false);
+	_gic_set_affinity(rpc->d, rpc->cpu, false);
 
 }
 static void gic_clr_affinity_remote(void *info)
 {
 	struct gic_rpc_data *rpc = (struct gic_rpc_data *)info;
 
-	_gic_set_affinity(rpc->d, rpc->mask_val, true);
+	_gic_set_affinity(rpc->d, rpc->oldcpu, true);
 
 }
 
@@ -570,11 +569,12 @@ static int gic_set_affinity(struct irq_data *d,
 	 * cluster as the cpu we're currently running on, set the IRQ
 	 * affinity directly. Otherwise, use the RPC mechanism.
 	 */
-	if (on_same_cluster(cpu_logical_map(cpu), pcpu))
-		_gic_set_affinity(d, mask_val, false);
+	if (on_same_cluster(cpu_logical_map(cpu), pcpu)) {
+		_gic_set_affinity(d, cpu_logical_map(cpu), false);
+	}
 
 	else{
-		ret = exec_remote_set_affinity(false, cpu, d, mask_val, force);
+		ret = exec_remote_set_affinity(false, cpu_logical_map(cpu), d, mask_val, force);
 
 		if (ret != IRQ_SET_MASK_OK)
 			return ret;
@@ -591,15 +591,17 @@ static int gic_set_affinity(struct irq_data *d,
 		 * the cpu we're currently running on, clear the IRQ affinity
 		 * directly. Otherwise, use RPC mechanism.
 		 */
-		if (on_same_cluster(irq_cpuid[irqid], pcpu))
-			_gic_set_affinity(d, mask_val, true);
-		else
+		if (on_same_cluster(irq_cpuid[irqid], pcpu)) {
+			_gic_set_affinity(d, irq_cpuid[irqid], true);
+		}
+		else {
 			ret = exec_remote_set_affinity(true,
 					get_logical_index(irq_cpuid[irqid]), d, mask_val, force);
+		}
 		if (ret != IRQ_SET_MASK_OK) {
 			/* Need to back out the set operation */
 			if (on_same_cluster(cpu_logical_map(cpu), pcpu))
-				_gic_set_affinity(d, mask_val, true);
+				_gic_set_affinity(d, irq_cpuid[irqid], true);
 			else
 				exec_remote_set_affinity(true, cpu, d, mask_val, force);
 
@@ -607,7 +609,6 @@ static int gic_set_affinity(struct irq_data *d,
 		}
 	}
 
-
 	/* Update Axxia IRQ affinity table with the new physical CPU number. */
 	irq_cpuid[irqid] = cpu_logical_map(cpu);
 
-- 
1.7.9.5



More information about the linux-yocto mailing list