]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
arm: Remove try_inject parameter from irqchip_set_pending
authorJan Kiszka <jan.kiszka@siemens.com>
Thu, 16 Jun 2016 14:22:49 +0000 (16:22 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Thu, 16 Jun 2016 16:41:13 +0000 (18:41 +0200)
We can only perform injection (and we also always want to) if target
CPU equals caller CPU, and this is better checked inside the function.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
hypervisor/arch/arm/control.c
hypervisor/arch/arm/gic-common.c
hypervisor/arch/arm/include/asm/irqchip.h
hypervisor/arch/arm/irqchip.c

index 1c17c3132666129784e54a57d6a0826ce1dc2b24..918704ca512deb5179e0465e80b73bbe778899dd 100644 (file)
@@ -329,7 +329,7 @@ bool arch_handle_phys_irq(struct per_cpu *cpu_data, u32 irqn)
 
        cpu_data->stats[JAILHOUSE_CPU_STAT_VMEXITS_VIRQ]++;
 
-       irqchip_set_pending(cpu_data, irqn, true);
+       irqchip_set_pending(cpu_data, irqn);
 
        return false;
 }
index 7bb6cd336c01cc16673869267cccac8eab1556af..958102c3719e713051a794024a0ea1066f748924 100644 (file)
@@ -293,7 +293,7 @@ void gic_handle_sgir_write(struct sgi *sgi, bool virt_input)
                if (sgi->routing_mode == 0 && !is_target)
                        continue;
 
-               irqchip_set_pending(per_cpu(cpu), sgi->id, false);
+               irqchip_set_pending(per_cpu(cpu), sgi->id);
                sgi->targets |= (1 << cpu);
        }
 
index f0f0e7a5dcf5acce16c989a164514771bea1d49b..bfee6241f2859df8851cf2c1b5413b7d33ae3e83 100644 (file)
@@ -79,7 +79,7 @@ void irqchip_handle_irq(struct per_cpu *cpu_data);
 void irqchip_eoi_irq(u32 irqn, bool deactivate);
 
 void irqchip_inject_pending(struct per_cpu *cpu_data);
-void irqchip_set_pending(struct per_cpu *cpu_data, u16 irq_id, bool try_inject);
+void irqchip_set_pending(struct per_cpu *cpu_data, u16 irq_id);
 
 bool spi_in_cell(struct cell *cell, unsigned int spi);
 
index 538bbc01f4f265f6d2a8c672e83ec1ddb0915e42..bec3d956937eaef47a3294eb0ce448c7995655a0 100644 (file)
@@ -49,11 +49,12 @@ bool spi_in_cell(struct cell *cell, unsigned int spi)
        return spi_mask & (1 << (spi & 31));
 }
 
-void irqchip_set_pending(struct per_cpu *cpu_data, u16 irq_id, bool try_inject)
+void irqchip_set_pending(struct per_cpu *cpu_data, u16 irq_id)
 {
+       bool local_injection = (this_cpu_data() == cpu_data);
        unsigned int new_tail;
 
-       if (try_inject && irqchip.inject_irq(cpu_data, irq_id) != -EBUSY)
+       if (local_injection && irqchip.inject_irq(cpu_data, irq_id) != -EBUSY)
                return;
 
        spin_lock(&cpu_data->pending_irqs_lock);