[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v10 18/32] ARM: vITS: introduce translation table walks
Hi, On 08/06/17 10:35, Julien Grall wrote: > Hi Andre, > > On 26/05/17 18:35, Andre Przywara wrote: >> +/* >> + * Queries the collection and device tables to translate the device >> ID and >> + * event ID and find the appropriate ITTE. The given collection ID >> and the >> + * virtual LPI number are then stored into that entry. >> + * If vcpu_ptr is provided, returns the VCPU belonging to that >> collection. >> + * Must be called with the ITS lock held. >> + */ >> +bool write_itte_locked(struct virt_its *its, uint32_t devid, >> + uint32_t evid, uint32_t collid, uint32_t vlpi, >> + struct vcpu **vcpu_ptr) >> +{ >> + paddr_t addr; >> + struct vits_itte itte; >> + >> + ASSERT(spin_is_locked(&its->its_lock)); >> + >> + if ( collid >= its->max_collections ) >> + return false; > > This check will always fail with the command DISCARD because collid == > UNMAPPED_COLLECTION (~0). Good point, thanks for catching this. > Looking at the code, I am not sure why you need to validate collid and > nr_lpis in write_itte_locked. This should have been made by the caller. Indeed, I just fixed that. >> + >> + if ( vlpi >= its->d->arch.vgic.nr_lpis ) >> + return false; >> + >> + addr = its_get_itte_address(its, devid, evid); >> + if ( addr == INVALID_PADDR ) >> + return false; >> + >> + itte.collection = collid; >> + itte.vlpi = vlpi; >> + >> + if ( vgic_access_guest_memory(its->d, addr, &itte, sizeof(itte), >> true) ) >> + return false; >> + >> + if ( vcpu_ptr ) >> + *vcpu_ptr = get_vcpu_from_collection(its, collid); > > I guess this is why you check the collection in this function. However, > I am not sure how this is related to write_itte_locked. Looks like some artefact from some previous revisions of the code (possibly due to some locking, where someone was calling write_itte(), which would drop the lock before returning). But indeed this is independent and actually there is only one user of this, so I removed the vcpu_ptr parameter and do the lookup outside of this function. On the way I removed this whole {read,write}_itte_locked naming, just providing functions which assume we hold the lock. There is only one caller which didn't hold the lock, so I can just do the locking there. Thanks for pointing this out! Cheers, Andre. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |