Populate affinity values in GICD_IROUTER.

Signed-off-by: Lokesh Vutla <[email protected]>
---
 hypervisor/arch/arm/gic-v3.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/hypervisor/arch/arm/gic-v3.c b/hypervisor/arch/arm/gic-v3.c
index cfa641f..75e337e 100644
--- a/hypervisor/arch/arm/gic-v3.c
+++ b/hypervisor/arch/arm/gic-v3.c
@@ -212,10 +212,12 @@ static void gic_cpu_shutdown(struct per_cpu *cpu_data)
 static void gic_adjust_irq_target(struct cell *cell, u16 irq_id)
 {
        void *irouter = gicd_base + GICD_IROUTER + 8 * irq_id;
-       u32 route = mmio_read32(irouter);
+       u64 mpidr = per_cpu(first_cpu(cell->cpu_set))->mpidr;
+       u32 route = arm_cpu_by_mpidr(cell,
+                                    mmio_read64(irouter) & MPIDR_CPUID_MASK);
 
        if (!cell_owns_cpu(cell, route))
-               mmio_write32(irouter, first_cpu(cell->cpu_set));
+               mmio_write64(irouter, mpidr);
 }
 
 static enum mmio_result gic_handle_redist_access(void *arg,
@@ -336,7 +338,7 @@ enum mmio_result gic_handle_irq_route(struct mmio_access 
*mmio,
                printk("Attempt to route IRQ%d outside of cell\n", irq);
                return MMIO_ERROR;
        } else {
-               mmio->value = mmio_read32(gicd_base + GICD_IROUTER + 8 * irq);
+               mmio->value = mmio_read64(gicd_base + GICD_IROUTER + 8 * irq);
                return MMIO_HANDLED;
        }
 }
-- 
2.13.0

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to