[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 03/10] ARM: vGIC: introduce and initialize pending_irq lock
Currently we protect the pending_irq structure with the corresponding VGIC VCPU lock. For future extensions this leads to problems (for instance if an IRQ is migrating), so let's introduce a per-IRQ lock, which protects the consistency of this structure independent from any VCPU. This patch just introduces and intializes the lock, it is not used anywhere right now. Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> --- xen/arch/arm/vgic.c | 1 + xen/include/asm-arm/vgic.h | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index f359ecb..f4ae454 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -64,6 +64,7 @@ static void vgic_init_pending_irq(struct pending_irq *p, unsigned int virq) { INIT_LIST_HEAD(&p->inflight); INIT_LIST_HEAD(&p->lr_queue); + spin_lock_init(&p->lock); p->irq = virq; } diff --git a/xen/include/asm-arm/vgic.h b/xen/include/asm-arm/vgic.h index 544867a..e7322fc 100644 --- a/xen/include/asm-arm/vgic.h +++ b/xen/include/asm-arm/vgic.h @@ -81,6 +81,14 @@ struct pending_irq * TODO: when implementing irq migration, taking only the current * vgic lock is not going to be enough. */ struct list_head lr_queue; + /* The lock protects the consistency of this structure. A single status bit + * can be read and/or set without holding the lock using the atomic + * set_bit/clear_bit/test_bit functions, however accessing multiple bits or + * relating to other members in this struct requires the lock. + * The list_head members are protected by their corresponding VCPU lock, + * it is not sufficient to hold this pending_irq lock here to query or + * change list order or affiliation. */ + spinlock_t lock; }; #define NR_INTERRUPT_PER_RANK 32 -- 2.9.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |