[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 1/5] xen/arm: observe itargets setting in vgic_enable_irqs and vgic_disable_irqs
On Mon, 23 Jun 2014, Julien Grall wrote: > Hi Stefano, > > On 06/23/2014 05:37 PM, Stefano Stabellini wrote: > > +/* the rank lock is already taken */ > > +static struct vcpu *_vgic_get_target_vcpu(struct vcpu *v, unsigned int irq) > > +{ > > + unsigned long target; > > + struct vcpu *v_target; > > + struct vgic_irq_rank *rank = vgic_rank_irq(v, irq); > > + ASSERT(spin_is_locked(&rank->lock)); > > + > > + target = byte_read(rank->itargets[(irq%32)/4], 0, irq % 4); > > + /* 1-N SPI should be delivered as pending to all the vcpus in the > > + * mask, but here we just return the first vcpu for simplicity and > > + * because it would be too slow to do otherwise. */ > > + target = find_first_bit(&target, 8); > > I'm tempted to ask you adding an ASSERT here. Just for catching coding > error. > OK > > > @@ -536,8 +575,8 @@ static int vgic_distr_mmio_write(struct vcpu *v, > > mmio_info_t *info) > > vgic_lock_rank(v, rank); > > tr = rank->ienable; > > rank->ienable |= *r; > > - vgic_unlock_rank(v, rank); > > vgic_enable_irqs(v, (*r) & (~tr), gicd_reg - GICD_ISENABLER); > > + vgic_unlock_rank(v, rank); > > return 1; > > > > case GICD_ICENABLER ... GICD_ICENABLERN: > > @@ -547,8 +586,8 @@ static int vgic_distr_mmio_write(struct vcpu *v, > > mmio_info_t *info) > > vgic_lock_rank(v, rank); > > tr = rank->ienable; > > rank->ienable &= ~*r; > > - vgic_unlock_rank(v, rank); > > vgic_disable_irqs(v, (*r) & tr, gicd_reg - GICD_ICENABLER); > > + vgic_unlock_rank(v, rank); > > return 1; > > Sorry for not having catch this earlier. I don't really like the idea to > extend the rank lock to vgic_{enable/disable}_irqs. The 2 functions > can be long to execute as it may touch the GIC distributor. > > In another way, the rank lock is only taken in the distributor emulation. > > Assuming we consider that distributor access may be slow: We could end up enabling or disabling the wrong set of interrupts without this change. I think it is necessary. > Acked-by: Julien Grall <julien.grall@xxxxxxxxxx> Thanks > Aside that, that made me think about two possible issue (not related to > this patch series) in vgic_inject_irq: > - We don't take the rank lock to read the priority, even tho it's only > a byte access. That's a good point > - If the an interrupt is injected while it's already active, we don't > update the priority of this interrupt. Yeah, I noticed this before. I'll write a comment to make sure we keep in mind that we have this limitation. > Regards, > > -- > Julien Grall > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |