From: Julien Grall <julien.grall@gmail.com>
To: Andre Przywara <andre.przywara@linaro.org>
Cc: xen-devel@lists.xenproject.org,
Julien Grall <julien.grall@arm.com>,
Stefano Stabellini <sstabellini@kernel.org>
Subject: Re: [PATCH 37/57] ARM: new VGIC: Add ENABLE registers handlers
Date: Wed, 07 Mar 2018 18:33:36 +0000 [thread overview]
Message-ID: <CAF3u54CCSAvxSzbLkA8ARF0evLBA9db6-nPqY2BRYE6ab3g9Lg@mail.gmail.com> (raw)
In-Reply-To: <8fad70c0-af95-1e5e-efdf-27e6446fcf77@linaro.org>
[-- Attachment #1.1: Type: text/plain, Size: 11926 bytes --]
(sorry for the formatting)
On Wed, 7 Mar 2018, 18:23 Andre Przywara, <andre.przywara@linaro.org> wrote:
> Hi,
>
> On 07/03/18 17:01, Julien Grall wrote:
> > Hi Andre,
> >
> > On 03/05/2018 04:03 PM, Andre Przywara wrote:
> >> As the enable register handlers are shared between the v2 and v3
> >> emulation, their implementation goes into vgic-mmio.c, to be easily
> >> referenced from the v3 emulation as well later.
> >> This introduces a vgic_sync_hardware_irq() function, which updates the
> >> physical side of a hardware mapped virtual IRQ.
> >> Because the existing locking order between vgic_irq->irq_lock and
> >> irq_desc->lock dictates so, we dropu the irq_lock and retake them in the
> >> proper order.
> >>
> >> Signed-off-by: Andre Przywara <andre.przywara@linaro.org>
> >> ---
> >> Changelog RFC ... v1:
> >> - extend and move vgic_sync_hardware_irq()
> >> - do proper locking sequence
> >> - skip already disabled/enabled IRQs
> >>
> >> xen/arch/arm/vgic/vgic-mmio-v2.c | 4 +-
> >> xen/arch/arm/vgic/vgic-mmio.c | 117
> >> +++++++++++++++++++++++++++++++++++++++
> >> xen/arch/arm/vgic/vgic-mmio.h | 11 ++++
> >> xen/arch/arm/vgic/vgic.c | 38 +++++++++++++
> >> xen/arch/arm/vgic/vgic.h | 3 +
> >> 5 files changed, 171 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/xen/arch/arm/vgic/vgic-mmio-v2.c
> >> b/xen/arch/arm/vgic/vgic-mmio-v2.c
> >> index 2e015ed0b1..3dd983f885 100644
> >> --- a/xen/arch/arm/vgic/vgic-mmio-v2.c
> >> +++ b/xen/arch/arm/vgic/vgic-mmio-v2.c
> >> @@ -80,10 +80,10 @@ static const struct vgic_register_region
> >> vgic_v2_dist_registers[] = {
> >> vgic_mmio_read_rao, vgic_mmio_write_wi, 1,
> >> VGIC_ACCESS_32bit),
> >> REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ISENABLER,
> >> - vgic_mmio_read_raz, vgic_mmio_write_wi, 1,
> >> + vgic_mmio_read_enable, vgic_mmio_write_senable, 1,
> >> VGIC_ACCESS_32bit),
> >> REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ICENABLER,
> >> - vgic_mmio_read_raz, vgic_mmio_write_wi, 1,
> >> + vgic_mmio_read_enable, vgic_mmio_write_cenable, 1,
> >> VGIC_ACCESS_32bit),
> >> REGISTER_DESC_WITH_BITS_PER_IRQ(GICD_ISPENDR,
> >> vgic_mmio_read_raz, vgic_mmio_write_wi, 1,
> >> diff --git a/xen/arch/arm/vgic/vgic-mmio.c
> >> b/xen/arch/arm/vgic/vgic-mmio.c
> >> index 284a92d288..f8f0252eff 100644
> >> --- a/xen/arch/arm/vgic/vgic-mmio.c
> >> +++ b/xen/arch/arm/vgic/vgic-mmio.c
> >> @@ -39,6 +39,123 @@ void vgic_mmio_write_wi(struct vcpu *vcpu, paddr_t
> >> addr,
> >> /* Ignore */
> >> }
> >> +/*
> >> + * Read accesses to both GICD_ICENABLER and GICD_ISENABLER return the
> >> value
> >> + * of the enabled bit, so there is only one function for both here.
> >> + */
> >> +unsigned long vgic_mmio_read_enable(struct vcpu *vcpu,
> >> + paddr_t addr, unsigned int len)
> >> +{
> >> + uint32_t intid = VGIC_ADDR_TO_INTID(addr, 1);
> >> + uint32_t value = 0;
> >> + unsigned int i;
> >> +
> >> + /* Loop over all IRQs affected by this read */
> >> + for ( i = 0; i < len * 8; i++ )
> >> + {
> >> + struct vgic_irq *irq = vgic_get_irq(vcpu->domain, vcpu, intid
> >> + i);
> >> +
> >> + if ( irq->enabled )
> >> + value |= (1U << i);
> >> +
> >> + vgic_put_irq(vcpu->domain, irq);
> >> + }
> >> +
> >> + return value;
> >> +}
> >> +
> >> +void vgic_mmio_write_senable(struct vcpu *vcpu,
> >> + paddr_t addr, unsigned int len,
> >> + unsigned long val)
> >> +{
> >> + uint32_t intid = VGIC_ADDR_TO_INTID(addr, 1);
> >> + unsigned int i;
> >> +
> >> + for_each_set_bit( i, &val, len * 8 )
> >> + {
> >> + struct vgic_irq *irq = vgic_get_irq(vcpu->domain, vcpu, intid
> >> + i);
> >> + unsigned long flags;
> >> + irq_desc_t *desc;
> >> +
> >> + spin_lock_irqsave(&irq->irq_lock, flags);
> >> +
> >> + if ( irq->enabled ) /* skip already enabled IRQs */
> >> + {
> >> + spin_unlock_irqrestore(&irq->irq_lock, flags);
> >> + vgic_put_irq(vcpu->domain, irq);
> >> + continue;
> >> + }
> >> +
> >> + irq->enabled = true;
> >> + if ( irq->hw )
> >> + {
> >> + /*
> >> + * The irq cannot be a PPI, we only support delivery
> >> + * of SPIs to guests.
> >> + */
> >> + ASSERT(irq->hwintid >= VGIC_NR_PRIVATE_IRQS);
> >> +
> >> + desc = irq_to_desc(irq->hwintid);
> >> + }
> >> + else
> >> + desc = NULL;
> >
> > You could just initialize desc to NULL at the declaration time and drop
> > the else part.
>
> Can we rely on the initializer to be called on every loop iteration? I
> wasn't sure about this and what the standard has to say about this.
>
Every loop is a new scope. So everything declared within that scope is
initialized again. We do use that extensively in Xen.
> >> +
> >> + vgic_queue_irq_unlock(vcpu->domain, irq, flags);
> >> +
> >> + if ( desc )
> >> + vgic_sync_hardware_irq(vcpu->domain, desc, irq);
> >
> > A comment explaining why desc is done outside the locking would be
> > useful. This would avoid to loose time using git blame.
> >
> >> +
> >> + vgic_put_irq(vcpu->domain, irq);
> >> + }
> >> +}
> >> +
> >> +void vgic_mmio_write_cenable(struct vcpu *vcpu,
> >> + paddr_t addr, unsigned int len,
> >> + unsigned long val)
> >> +{
> >> + uint32_t intid = VGIC_ADDR_TO_INTID(addr, 1);
> >> + unsigned int i;
> >> +
> >> + for_each_set_bit( i, &val, len * 8 )
> >> + {
> >> + struct vgic_irq *irq;
> >> + unsigned long flags;
> >> + irq_desc_t *desc;
> >> +
> >> + irq = vgic_get_irq(vcpu->domain, vcpu, intid + i);
> >> + spin_lock_irqsave(&irq->irq_lock, flags);
> >> +
> >> + if ( !irq->enabled ) /* skip already disabled IRQs
> */
> >> + {
> >> + spin_unlock_irqrestore(&irq->irq_lock, flags);
> >> + vgic_put_irq(vcpu->domain, irq);
> >> + continue;
> >> + }
> >> +
> >> + irq->enabled = false;
> >> +
> >> + if ( irq->hw )
> >> + {
> >> + /*
> >> + * The irq cannot be a PPI, we only support delivery
> >> + * of SPIs to guests.
> >> + */
> >> + ASSERT(irq->hwintid >= VGIC_NR_PRIVATE_IRQS);
> >> +
> >> + desc = irq_to_desc(irq->hwintid);
> >> + }
> >> + else
> >> + desc = NULL;
> >> +
> >> + spin_unlock_irqrestore(&irq->irq_lock, flags);
> >> +
> >> + if ( desc )
> >> + vgic_sync_hardware_irq(vcpu->domain, desc, irq);
> >
> > Ditto.
> >
> >> +
> >> + vgic_put_irq(vcpu->domain, irq);
> >> + }
> >> +}
> >> +
> >> static int match_region(const void *key, const void *elt)
> >> {
> >> const unsigned int offset = (unsigned long)key;
> >> diff --git a/xen/arch/arm/vgic/vgic-mmio.h
> >> b/xen/arch/arm/vgic/vgic-mmio.h
> >> index 621b9a281c..2ddcbbf58d 100644
> >> --- a/xen/arch/arm/vgic/vgic-mmio.h
> >> +++ b/xen/arch/arm/vgic/vgic-mmio.h
> >> @@ -96,6 +96,17 @@ unsigned long vgic_mmio_read_rao(struct vcpu *vcpu,
> >> void vgic_mmio_write_wi(struct vcpu *vcpu, paddr_t addr,
> >> unsigned int len, unsigned long val);
> >> +unsigned long vgic_mmio_read_enable(struct vcpu *vcpu,
> >> + paddr_t addr, unsigned int len);
> >> +
> >> +void vgic_mmio_write_senable(struct vcpu *vcpu,
> >> + paddr_t addr, unsigned int len,
> >> + unsigned long val);
> >> +
> >> +void vgic_mmio_write_cenable(struct vcpu *vcpu,
> >> + paddr_t addr, unsigned int len,
> >> + unsigned long val);
> >> +
> >> unsigned int vgic_v2_init_dist_iodev(struct vgic_io_device *dev);
> >> #endif
> >> diff --git a/xen/arch/arm/vgic/vgic.c b/xen/arch/arm/vgic/vgic.c
> >> index 465a95f415..5246d7c2e7 100644
> >> --- a/xen/arch/arm/vgic/vgic.c
> >> +++ b/xen/arch/arm/vgic/vgic.c
> >> @@ -698,6 +698,44 @@ void vgic_kick_vcpus(struct domain *d)
> >> }
> >> }
> >> +static unsigned int translate_irq_type(bool is_level)
> >> +{
> >> + return is_level ? IRQ_TYPE_LEVEL_HIGH : IRQ_TYPE_EDGE_RISING;
> >> +}
> >> +
> >> +void vgic_sync_hardware_irq(struct domain *d,
> >> + irq_desc_t *desc, struct vgic_irq *irq)
> >> +{
> >> + unsigned long flags;
> >> +
> >> + spin_lock_irqsave(&desc->lock, flags);
> >> + spin_lock(&irq->irq_lock);
> >> +
> >> + /* Is that association actually still valid? (we entered with no
> >> locks) */
> >
> > If the association is not valid, then you need to fetch the new desc.
> > Right?
>
> I am not so sure it's that easy. If the association changed, then the
> whole reason of this call might have become invalid. So I rather bail
> out here and do nothing. The check is just to prevent doing the wrong
> thing, not necessarily to always do the right thing.
> To be honest this whole "lock drop dance" is just to cope with the
> locking order, which I consider wrong, according to my gut feeling.
>
If you don't do the dance here, you would have to do in other place. I
still think taking the desc->lock first is the right thing to do as Xen
deal with physical first then it might be a virtual (so second) or handled
by a driver.
> This function here is called from several places, so it seems a bit
> fragile to assume a way how to fix a broken association here. I can go
> back and check every existing caller in this respect, but to be honest
> I'd rather change the locking order, so we don't need to worry about
> this. But I feel like we should do this as a fixup on top later.
>
See some thought in the next patch. We might be able to simplify the whole
logic by forbidding the interrupt to be removed.
> Cheers,
> Andre.
>
>
> >
> >> + if ( desc->irq == irq->hwintid )
> >> + {
> >> + if ( irq->enabled )
> >> + {
> >> + /*
> >> + * We might end up from various callers, so check that the
> >> + * interrrupt is disabled before trying to change the
> >> config.
> >> + */
> >> + if ( irq_type_set_by_domain(d) &&
> >> + test_bit(_IRQ_DISABLED, &desc->status) )
> >> + gic_set_irq_type(desc,
> translate_irq_type(irq->config));
> >> +
> >> + if ( irq->target_vcpu )
> >> + irq_set_affinity(desc,
> >> cpumask_of(irq->target_vcpu->processor));
> >> + desc->handler->enable(desc);
> >> + }
> >> + else
> >> + desc->handler->disable(desc);
> >> + }
> >> +
> >> + spin_unlock(&irq->irq_lock);
> >> + spin_unlock_irqrestore(&desc->lock, flags);
> >> +}
> >> +
> >> /*
> >> * Local variables:
> >> * mode: C
> >> diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h
> >> index 588bd067b7..68e205d10a 100644
> >> --- a/xen/arch/arm/vgic/vgic.h
> >> +++ b/xen/arch/arm/vgic/vgic.h
> >> @@ -50,6 +50,9 @@ static inline void vgic_get_irq_kref(struct vgic_irq
> >> *irq)
> >> atomic_inc(&irq->refcount);
> >> }
> >> +void vgic_sync_hardware_irq(struct domain *d,
> >> + irq_desc_t *desc, struct vgic_irq *irq);
> >> +
> >> void vgic_v2_fold_lr_state(struct vcpu *vcpu);
> >> void vgic_v2_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq,
> >> int lr);
> >> void vgic_v2_set_underflow(struct vcpu *vcpu);
> >>
> >
> > Cheers,
> >
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xenproject.org
> https://lists.xenproject.org/mailman/listinfo/xen-devel
[-- Attachment #1.2: Type: text/html, Size: 17102 bytes --]
[-- Attachment #2: Type: text/plain, Size: 157 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2018-03-07 18:33 UTC|newest]
Thread overview: 146+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-05 16:03 [PATCH 00/57] New VGIC(-v2) implementation Andre Przywara
2018-03-05 16:03 ` [PATCH 01/57] tools: ARM: vGICv3: Avoid inserting optional DT properties Andre Przywara
2018-03-05 16:39 ` Julien Grall
2018-03-05 17:18 ` Wei Liu
2018-03-06 11:16 ` Julien Grall
2018-03-05 16:03 ` [PATCH 02/57] ARM: vGICv3: clarify on GUEST_GICV3_RDIST_REGIONS symbol Andre Przywara
2018-03-05 16:40 ` Julien Grall
2018-03-05 16:03 ` [PATCH 03/57] ARM: GICv3: use hardware GICv3 redistributor values for Dom0 Andre Przywara
2018-03-05 16:44 ` Julien Grall
2018-03-05 16:03 ` [PATCH 04/57] ARM: GICv3: simplify GICv3 redistributor stride handling Andre Przywara
2018-03-05 17:08 ` Julien Grall
2018-03-06 13:49 ` Julien Grall
2018-03-08 12:40 ` Andre Przywara
2018-03-08 15:29 ` Julien Grall
2018-03-05 16:03 ` [PATCH 05/57] ARM: vGICv3: always use architected redist stride Andre Przywara
2018-03-05 16:03 ` [PATCH 06/57] ARM: vGICv3: remove rdist_stride from VGIC structure Andre Przywara
2018-03-05 16:03 ` [PATCH 07/57] ARM: VGIC: rename gic_inject() and gic_clear_lrs() Andre Przywara
2018-03-05 17:09 ` Julien Grall
2018-03-05 16:03 ` [PATCH 08/57] ARM: VGIC: Move gic_remove_from_lr_pending() prototype Andre Przywara
2018-03-05 16:03 ` [PATCH 09/57] ARM: VGIC: Move domain_max_vcpus() to be VGIC specific Andre Przywara
2018-03-05 17:14 ` Julien Grall
2018-03-05 16:03 ` [PATCH 10/57] ARM: VGIC: rename gic_event_needs_delivery() Andre Przywara
2018-03-06 11:46 ` Julien Grall
2018-03-05 16:03 ` [PATCH 11/57] ARM: VGIC: change to level-IRQ compatible IRQ injection interface Andre Przywara
2018-03-06 11:53 ` Julien Grall
2018-03-05 16:03 ` [PATCH 12/57] ARM: VGIC: carve out struct vgic_cpu and struct vgic_dist Andre Przywara
2018-03-06 11:56 ` Julien Grall
2018-03-05 16:03 ` [PATCH 13/57] ARM: VGIC: reorder prototypes in vgic.h Andre Przywara
2018-03-05 16:03 ` [PATCH 14/57] ARM: VGIC: Introduce gic_get_nr_lrs() Andre Przywara
2018-03-06 14:02 ` Julien Grall
2018-03-05 16:03 ` [PATCH 15/57] ARM: GICv2: Extend and adjust register definitions Andre Przywara
2018-03-06 14:12 ` Julien Grall
2018-03-05 16:03 ` [PATCH 16/57] ARM: GICv3: rename HYP interface definitions to use ICH_ prefix Andre Przywara
2018-03-06 15:12 ` Julien Grall
2018-03-05 16:03 ` [PATCH 17/57] ARM: Introduce kick_vcpu() Andre Przywara
2018-03-06 15:21 ` Julien Grall
2018-03-05 16:03 ` [PATCH 18/57] ARM: GICv2: introduce gicv2_poke_irq() Andre Przywara
2018-03-06 15:23 ` Julien Grall
2018-03-06 15:25 ` Julien Grall
2018-03-05 16:03 ` [PATCH 19/57] ARM: GICv3: poke_irq: make RWP optional Andre Przywara
2018-03-06 15:37 ` Julien Grall
2018-03-05 16:03 ` [PATCH 20/57] ARM: GICv2: fix GICH_V2_LR definitions Andre Przywara
2018-03-06 15:46 ` Julien Grall
2018-03-06 15:58 ` Andre Przywara
2018-03-06 16:18 ` Julien Grall
2018-03-05 16:03 ` [PATCH 21/57] ARM: GICv2: extend LR read/write functions to cover EOI and source Andre Przywara
2018-03-06 16:06 ` Julien Grall
2018-03-08 16:25 ` Andre Przywara
2018-03-08 16:41 ` Julien Grall
2018-03-08 16:59 ` Julien Grall
2018-03-05 16:03 ` [PATCH 22/57] ARM: GIC: Allow tweaking the active and pending state of an IRQ Andre Przywara
2018-03-06 16:38 ` Julien Grall
2018-03-05 16:03 ` [PATCH 23/57] ARM: GIC: allow reading pending state of a hardware IRQ Andre Przywara
2018-03-06 16:57 ` Julien Grall
2018-03-05 16:03 ` [PATCH 24/57] ARM: timer: Handle level triggered IRQs correctly Andre Przywara
2018-03-06 17:15 ` Julien Grall
2018-03-06 17:20 ` Julien Grall
2018-03-05 16:03 ` [PATCH 25/57] ARM: evtchn: " Andre Przywara
2018-03-05 16:03 ` [PATCH 26/57] ARM: vPL011: Use the VGIC's level triggered IRQs handling if available Andre Przywara
2018-03-06 17:23 ` Julien Grall
2018-03-05 16:03 ` [PATCH 27/57] ARM: new VGIC: Add data structure definitions Andre Przywara
2018-03-06 17:46 ` Julien Grall
2018-03-06 18:01 ` Andre Przywara
2018-03-07 10:45 ` Julien Grall
2018-03-05 16:03 ` [PATCH 28/57] ARM: new VGIC: Add acccessor to new struct vgic_irq instance Andre Przywara
2018-03-06 18:13 ` Julien Grall
2018-03-19 17:32 ` Andre Przywara
2018-03-19 21:53 ` Julien Grall
2018-03-20 10:58 ` Andre Przywara
2018-03-20 11:07 ` Julien Grall
2018-03-05 16:03 ` [PATCH 29/57] ARM: new VGIC: Implement virtual IRQ injection Andre Przywara
2018-03-07 11:02 ` Julien Grall
2018-03-07 11:22 ` Andre Przywara
2018-03-07 11:41 ` Julien Grall
2018-03-05 16:03 ` [PATCH 30/57] ARM: new VGIC: Add IRQ sorting Andre Przywara
2018-03-07 11:06 ` Julien Grall
2018-03-05 16:03 ` [PATCH 31/57] ARM: new VGIC: Add IRQ sync/flush framework Andre Przywara
2018-03-07 11:47 ` Julien Grall
2018-03-07 12:20 ` Andre Przywara
2018-03-05 16:03 ` [PATCH 32/57] ARM: new VGIC: Add GICv2 world switch backend Andre Przywara
2018-03-07 12:10 ` Julien Grall
2018-03-07 12:31 ` Andre Przywara
2018-03-05 16:03 ` [PATCH 33/57] ARM: new VGIC: Implement vgic_vcpu_pending_irq Andre Przywara
2018-03-05 16:03 ` [PATCH 34/57] ARM: new VGIC: Add MMIO handling framework Andre Przywara
2018-03-05 16:56 ` [FIXUP] replace LOG_2 with ilog2 Andre Przywara
2018-03-07 14:54 ` [PATCH 34/57] ARM: new VGIC: Add MMIO handling framework Julien Grall
2018-03-05 16:03 ` [PATCH 35/57] ARM: new VGIC: Add GICv2 " Andre Przywara
2018-03-07 15:00 ` Julien Grall
2018-03-05 16:03 ` [PATCH 36/57] ARM: new VGIC: Add CTLR, TYPER and IIDR handlers Andre Przywara
2018-03-07 16:48 ` Julien Grall
2018-03-05 16:03 ` [PATCH 37/57] ARM: new VGIC: Add ENABLE registers handlers Andre Przywara
2018-03-07 17:01 ` Julien Grall
2018-03-07 18:20 ` Andre Przywara
2018-03-07 18:33 ` Julien Grall [this message]
2018-03-05 16:03 ` [PATCH 38/57] ARM: new VGIC: Add PENDING " Andre Przywara
2018-03-07 17:21 ` Julien Grall
2018-03-05 16:03 ` [PATCH 39/57] ARM: new VGIC: Add ACTIVE " Andre Przywara
2018-03-08 15:39 ` Julien Grall
2018-03-13 17:02 ` Andre Przywara
2018-03-13 17:14 ` Julien Grall
2018-03-13 17:16 ` Julien Grall
2018-03-13 17:34 ` Andre Przywara
2018-03-13 17:42 ` Julien Grall
2018-03-14 14:30 ` Andre Przywara
2018-03-14 14:40 ` Julien Grall
2018-03-05 16:03 ` [PATCH 40/57] ARM: new VGIC: Add PRIORITY " Andre Przywara
2018-03-08 15:48 ` Julien Grall
2018-03-08 16:21 ` Andre Przywara
2018-03-08 16:25 ` Julien Grall
2018-03-05 16:03 ` [PATCH 41/57] ARM: new VGIC: Add CONFIG " Andre Przywara
2018-03-08 16:12 ` Julien Grall
2018-03-05 16:04 ` [PATCH 42/57] ARM: new VGIC: Add TARGET " Andre Przywara
2018-03-08 16:18 ` Julien Grall
2018-03-08 16:30 ` Andre Przywara
2018-03-05 16:04 ` [PATCH 43/57] ARM: new VGIC: Add SGIR register handler Andre Przywara
2018-03-08 16:30 ` Julien Grall
2018-03-05 16:04 ` [PATCH 44/57] ARM: new VGIC: Add SGIPENDR register handlers Andre Przywara
2018-03-08 16:36 ` Julien Grall
2018-03-05 16:04 ` [PATCH 45/57] ARM: new VGIC: Handle hardware mapped IRQs Andre Przywara
2018-03-09 17:27 ` Julien Grall
2018-03-05 16:04 ` [PATCH 46/57] ARM: new VGIC: Add event channel IRQ handling Andre Przywara
2018-03-09 17:40 ` Julien Grall
2018-03-05 16:04 ` [PATCH 47/57] ARM: new VGIC: Handle virtual IRQ allocation/reservation Andre Przywara
2018-03-09 17:52 ` Julien Grall
2018-03-05 16:04 ` [PATCH 48/57] ARM: new VGIC: Dump virtual IRQ info Andre Przywara
2018-03-09 17:53 ` Julien Grall
2018-03-05 16:04 ` [PATCH 49/57] ARM: new VGIC: provide system register emulation stub Andre Przywara
2018-03-09 17:53 ` Julien Grall
2018-03-05 16:04 ` [PATCH 50/57] ARM: new VGIC: Implement arch_move_irqs() Andre Przywara
2018-03-09 17:55 ` Julien Grall
2018-03-05 16:04 ` [PATCH 51/57] ARM: new VGIC: Add preliminary stub implementation Andre Przywara
2018-03-09 18:18 ` Julien Grall
2018-03-13 15:55 ` Andre Przywara
2018-03-14 13:29 ` Julien Grall
2018-03-05 16:04 ` [PATCH 52/57] ARM: new VGIC: vgic-init: register VGIC Andre Przywara
2018-03-05 16:04 ` [PATCH 53/57] ARM: new VGIC: vgic-init: implement vgic_init Andre Przywara
2018-03-09 18:24 ` Julien Grall
2018-03-05 16:04 ` [PATCH 54/57] ARM: new VGIC: vgic-init: implement map_resources Andre Przywara
2018-03-09 18:27 ` Julien Grall
2018-03-05 16:04 ` [PATCH 55/57] ARM: new VGIC: Add vgic_v2_enable Andre Przywara
2018-03-09 18:29 ` Julien Grall
2018-03-05 16:04 ` [PATCH 56/57] ARM: allocate two pages for struct vcpu Andre Przywara
2018-03-09 18:30 ` Julien Grall
2018-03-05 16:04 ` [PATCH 57/57] ARM: VGIC: wire new VGIC(-v2) files into Xen build system Andre Przywara
2018-03-09 18:34 ` Julien Grall
2018-03-05 17:34 ` [PATCH 00/57] New VGIC(-v2) implementation Andre Przywara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAF3u54CCSAvxSzbLkA8ARF0evLBA9db6-nPqY2BRYE6ab3g9Lg@mail.gmail.com \
--to=julien.grall@gmail.com \
--cc=andre.przywara@linaro.org \
--cc=julien.grall@arm.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).