On Fri, Aug 27, 2021 at 4:53 PM John Garry <john.garry@xxxxxxxxxx> wrote: > > On 18/08/2021 13:06, Xie Yongji wrote: > > + > > +static dma_addr_t > > +vduse_domain_alloc_iova(struct iova_domain *iovad, > > + unsigned long size, unsigned long limit) > > +{ > > + unsigned long shift = iova_shift(iovad); > > + unsigned long iova_len = iova_align(iovad, size) >> shift; > > + unsigned long iova_pfn; > > + > > + /* > > + * Freeing non-power-of-two-sized allocations back into the IOVA caches > > + * will come back to bite us badly, so we have to waste a bit of space > > + * rounding up anything cacheable to make sure that can't happen. The > > + * order of the unadjusted size will still match upon freeing. > > + */ > > + if (iova_len < (1 << (IOVA_RANGE_CACHE_MAX_SIZE - 1))) > > + iova_len = roundup_pow_of_two(iova_len); > > Whether it's proper to use this "fast" API or not here, this seems to be > copied verbatim from dma-iommu.c, which tells me that something should > be factored out. > Agreed. > Indeed, this rounding up seems a requirement of the rcache, so not sure > why this is not done there. > Me too. I guess it is to let users know that space is wasted. Thanks, Yongji