X-Git-Url: http://rtime.felk.cvut.cz/gitweb/jailhouse.git/blobdiff_plain/9fc9f67f05c9fbe872f647a0d47f54e7dbb9b90f..8b121b498b:/hypervisor/arch/arm/include/asm/percpu.h diff --git a/hypervisor/arch/arm/include/asm/percpu.h b/hypervisor/arch/arm/include/asm/percpu.h index e6562da..ae026c4 100644 --- a/hypervisor/arch/arm/include/asm/percpu.h +++ b/hypervisor/arch/arm/include/asm/percpu.h @@ -21,6 +21,7 @@ #ifndef __ASSEMBLY__ #include +#include #include #include #include @@ -29,8 +30,6 @@ #define PERCPU_SIZE_SHIFT \ (BITS_PER_LONG - __builtin_clzl(sizeof(struct per_cpu) - 1)) -struct pending_irq; - struct per_cpu { u8 stack[PAGE_SIZE]; unsigned long linux_sp; @@ -41,10 +40,12 @@ struct per_cpu { unsigned int cpu_id; unsigned int virt_id; - /* Other CPUs can insert sgis into the pending array */ - spinlock_t gic_lock; - struct pending_irq *pending_irqs; - struct pending_irq *first_pending; + /* synchronizes parallel insertions of SGIs into the pending ring */ + spinlock_t pending_irqs_lock; + u16 pending_irqs[MAX_PENDING_IRQS]; + unsigned int pending_irqs_head; + /* removal from the ring happens lockless, thus tail is volatile */ + volatile unsigned int pending_irqs_tail; /* Only GICv3: redistributor base */ void *gicr_base;