mirror of https://github.com/torvalds/linux.git
vfio/type1: batch vfio_find_vpfn() in function vfio_unpin_pages_remote()
The function vpfn_pages() can help us determine the number of vpfn nodes on the vpfn rb tree within a specified range. This allows us to avoid searching for each vpfn individually in the function vfio_unpin_pages_remote(). This patch batches the vfio_find_vpfn() calls in function vfio_unpin_pages_remote(). Signed-off-by: Li Zhe <lizhe.67@bytedance.com> Link: https://lore.kernel.org/r/20250814064714.56485-4-lizhe.67@bytedance.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
f6c84a52cc
commit
d10872050f
|
|
@ -802,16 +802,12 @@ static long vfio_unpin_pages_remote(struct vfio_dma *dma, dma_addr_t iova,
|
||||||
unsigned long pfn, unsigned long npage,
|
unsigned long pfn, unsigned long npage,
|
||||||
bool do_accounting)
|
bool do_accounting)
|
||||||
{
|
{
|
||||||
long unlocked = 0, locked = 0;
|
long unlocked = 0, locked = vpfn_pages(dma, iova, npage);
|
||||||
long i;
|
long i;
|
||||||
|
|
||||||
for (i = 0; i < npage; i++, iova += PAGE_SIZE) {
|
for (i = 0; i < npage; i++)
|
||||||
if (put_pfn(pfn++, dma->prot)) {
|
if (put_pfn(pfn++, dma->prot))
|
||||||
unlocked++;
|
unlocked++;
|
||||||
if (vfio_find_vpfn(dma, iova))
|
|
||||||
locked++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (do_accounting)
|
if (do_accounting)
|
||||||
vfio_lock_acct(dma, locked - unlocked, true);
|
vfio_lock_acct(dma, locked - unlocked, true);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue