[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <2d807de3-e245-c2fb-ae5d-7cacbe35dfcb@huawei.com>
Date: Fri, 27 Aug 2021 09:57:42 +0100
From: John Garry <john.garry@...wei.com>
To: Xie Yongji <xieyongji@...edance.com>, <mst@...hat.com>,
<jasowang@...hat.com>, <stefanha@...hat.com>,
<sgarzare@...hat.com>, <parav@...dia.com>, <hch@...radead.org>,
<christian.brauner@...onical.com>, <rdunlap@...radead.org>,
<willy@...radead.org>, <viro@...iv.linux.org.uk>,
<axboe@...nel.dk>, <bcrl@...ck.org>, <corbet@....net>,
<mika.penttila@...tfour.com>, <dan.carpenter@...cle.com>,
<joro@...tes.org>, <gregkh@...uxfoundation.org>,
<zhe.he@...driver.com>, <xiaodong.liu@...el.com>,
<joe@...ches.com>, <robin.murphy@....com>
CC: <kvm@...r.kernel.org>, <netdev@...r.kernel.org>,
<linux-kernel@...r.kernel.org>,
<virtualization@...ts.linux-foundation.org>,
<iommu@...ts.linux-foundation.org>, <songmuchun@...edance.com>,
<linux-fsdevel@...r.kernel.org>
Subject: Re: [PATCH v11 10/12] vduse: Implement an MMU-based software IOTLB
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.
Indeed, this rounding up seems a requirement of the rcache, so not sure
why this is not done there.
> + iova_pfn = alloc_iova_fast(iovad, iova_len, limit >> shift, true);
Powered by blists - more mailing lists