- /* 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;