From: Charlie Paul <cpaul.windri...@gmail.com> Signed-off-by: Charlie Paul <cpaul.windri...@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 -- _______________________________________________ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto