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

Reply via email to