[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
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. [..] } 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. 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 |