summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDietmar Eggemann <dietmar.eggemann@arm.com>2012-03-29 11:54:36 +0100
committerDietmar Eggemann <dietmar.eggemann@arm.com>2012-05-22 11:03:29 +0100
commit70cf0059ecead93195de2644c75df3c2bfa442ba (patch)
tree8ebb22fb34e97ceb2d7716eb456fea38891ea7aa
parentb6888a1881509cea539045f052f139a654d7820d (diff)
downloadswitcher-70cf0059ecead93195de2644c75df3c2bfa442ba.tar.gz
Virq mig: Clean desc field after enqueuing of virtual interrupt.
After the receiver of the IPI_MIGRATE_VIRQS finished the virq migration of a particular virtual irq, the appropriate desc field in the migrated_irqs array has to be cleaned, i.e. has to be set to zero. Otherwise, this irq will be considered the next time again when another irq is migrated which shares the same Interrupt Processor Targets Register GICD_ITARGETSRn with the original irq. Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
-rw-r--r--big-little/common/vgiclib.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/big-little/common/vgiclib.c b/big-little/common/vgiclib.c
index 9d510ea..d048e91 100644
--- a/big-little/common/vgiclib.c
+++ b/big-little/common/vgiclib.c
@@ -222,8 +222,10 @@ void complete_virq_migration(unsigned src_cpuid)
* a switch took place before the virq migration ipi was recieved.
*/
dest_cpuid = get_cpuinfo(migrated_irqs[src_cpuid][ctr].dest_cpuif) & 0xf;
- if (migrated_irqs[src_cpuid][ctr].desc && dest_cpuid == cpu_id)
+ if (migrated_irqs[src_cpuid][ctr].desc && dest_cpuid == cpu_id) {
enqueue_interrupt(migrated_irqs[src_cpuid][ctr].desc, cpu_id);
+ migrated_irqs[src_cpuid][ctr].desc = 0;
+ }
}
set_event(VIRQ_MIG_DONE, cpu_id);