[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 1/4] xen/arm: observe itargets setting in vgic_enable_irqs and vgic_disable_irqs
On Sat, 7 Jun 2014, Julien Grall wrote: > Hi Stefano, > > On 06/06/14 18:48, Stefano Stabellini wrote: > > return 0; > > } > > > > @@ -369,6 +377,22 @@ read_as_zero: > > return 1; > > } > > > > +struct vcpu *vgic_get_target_vcpu(struct vcpu *v, unsigned int irq) > > +{ > > + int target; > > + struct vgic_irq_rank *rank; > > + struct vcpu *v_target; > > + > > + rank = vgic_irq_rank(v, 1, irq/32); > > + vgic_lock_rank(v, rank); > > + target = byte_read(rank->itargets[(irq%32)/4], 0, irq % 4); > > + /* just return the first vcpu in the mask */ > > + target = find_next_bit((const unsigned long *) &target, 8, 0); > > int* and unsigned long* doesn't have the same alignment on aarch64. This may > end up to a data abort for Xen side. > > IIRC, Ian has fixed a similar issue in commit 5224a733. > Well spotted! Thanks! > > > } > > if ( p->desc != NULL ) > > { > > @@ -502,6 +530,7 @@ static int vgic_distr_mmio_write(struct vcpu *v, > > mmio_info_t *info) > > int offset = (int)(info->gpa - v->domain->arch.vgic.dbase); > > int gicd_reg = REG(offset); > > uint32_t tr; > > + int i; > > > > switch ( gicd_reg ) > > { > > @@ -585,6 +614,21 @@ static int vgic_distr_mmio_write(struct vcpu *v, > > mmio_info_t *info) > > rank = vgic_irq_rank(v, 8, gicd_reg - GICD_ITARGETSR); > > if ( rank == NULL) goto write_ignore; > > vgic_lock_rank(v, rank); > > + tr = *r & ~(rank->itargets[REG_RANK_INDEX(8, gicd_reg - > > GICD_ITARGETSR)]); > > Write in GICD_ITARGETSR can be either half-word or word. If I'm not mistaken > you sanity check only handle word access. I realize that it is a bit tricky to read, but this works for both word and half-word accesses. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |