From: Li Zhe <lizhe.67@bytedance.com>
This patch is based on patch 'vfio/type1: optimize
vfio_pin_pages_remote() for large folios'[1].
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().
[1]: https://lore.kernel.org/all/20250529064947.38433-1-lizhe.67@bytedance.com/
Signed-off-by: Li Zhe <lizhe.67@bytedance.com>
---
drivers/vfio/vfio_iommu_type1.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
index 28ee4b8d39ae..e952bf8bdfab 100644
--- a/drivers/vfio/vfio_iommu_type1.c
+++ b/drivers/vfio/vfio_iommu_type1.c
@@ -805,16 +805,12 @@ static long vfio_unpin_pages_remote(struct vfio_dma *dma, dma_addr_t iova,
unsigned long pfn, unsigned long npage,
bool do_accounting)
{
- long unlocked = 0, locked = 0;
+ long unlocked = 0, locked = vpfn_pages(dma, iova, npage);
long i;
- for (i = 0; i < npage; i++, iova += PAGE_SIZE) {
- if (put_pfn(pfn++, dma->prot)) {
+ for (i = 0; i < npage; i++)
+ if (put_pfn(pfn++, dma->prot))
unlocked++;
- if (vfio_find_vpfn(dma, iova))
- locked++;
- }
- }
if (do_accounting)
vfio_lock_acct(dma, locked - unlocked, true);
--
2.20.1
On Fri, 20 Jun 2025 11:23:42 +0800
lizhe.67@bytedance.com wrote:
> From: Li Zhe <lizhe.67@bytedance.com>
>
> This patch is based on patch 'vfio/type1: optimize
> vfio_pin_pages_remote() for large folios'[1].
The above and the below link are only necessary in the cover letter, or
below the --- marker below, they don't really make sense in the
committed log.
Anyway, aside from that and one nit on 2/ (sent separately), the series
looks ok to me and I hope David and Jason will chime in with A-b/R-b
give the previous discussions.
Given the build bot error[1] I'd suggest resending all your work in a
single series, the previous map optimization and the unmap optimization
here. That way the dependency is already included, and it's a good
nudge for acks. Thanks,
Alex
[1]https://lore.kernel.org/all/202506250037.VfdBAPP3-lkp@intel.com/
>
> 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().
>
> [1]: https://lore.kernel.org/all/20250529064947.38433-1-lizhe.67@bytedance.com/
>
> Signed-off-by: Li Zhe <lizhe.67@bytedance.com>
> ---
> drivers/vfio/vfio_iommu_type1.c | 10 +++-------
> 1 file changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
> index 28ee4b8d39ae..e952bf8bdfab 100644
> --- a/drivers/vfio/vfio_iommu_type1.c
> +++ b/drivers/vfio/vfio_iommu_type1.c
> @@ -805,16 +805,12 @@ static long vfio_unpin_pages_remote(struct vfio_dma *dma, dma_addr_t iova,
> unsigned long pfn, unsigned long npage,
> bool do_accounting)
> {
> - long unlocked = 0, locked = 0;
> + long unlocked = 0, locked = vpfn_pages(dma, iova, npage);
> long i;
>
> - for (i = 0; i < npage; i++, iova += PAGE_SIZE) {
> - if (put_pfn(pfn++, dma->prot)) {
> + for (i = 0; i < npage; i++)
> + if (put_pfn(pfn++, dma->prot))
> unlocked++;
> - if (vfio_find_vpfn(dma, iova))
> - locked++;
> - }
> - }
>
> if (do_accounting)
> vfio_lock_acct(dma, locked - unlocked, true);
On Fri, 27 Jun 2025 15:40:59 -0600, alex.williamson@redhat.com wrote: > On Fri, 20 Jun 2025 11:23:42 +0800 > lizhe.67@bytedance.com wrote: > > > From: Li Zhe <lizhe.67@bytedance.com> > > > > This patch is based on patch 'vfio/type1: optimize > > vfio_pin_pages_remote() for large folios'[1]. > > The above and the below link are only necessary in the cover letter, or > below the --- marker below, they don't really make sense in the > committed log. > > Anyway, aside from that and one nit on 2/ (sent separately), the series > looks ok to me and I hope David and Jason will chime in with A-b/R-b > give the previous discussions. > > Given the build bot error[1] I'd suggest resending all your work in a > single series, the previous map optimization and the unmap optimization > here. That way the dependency is already included, and it's a good > nudge for acks. Thanks, Thank you for your review. I will send a new patchset that includes the latest optimizations for both map and unmap. Thanks, Zhe
Hi,
kernel test robot noticed the following build errors:
[auto build test ERROR on awilliam-vfio/next]
[also build test ERROR on awilliam-vfio/for-linus linus/master v6.16-rc3 next-20250624]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/lizhe-67-bytedance-com/vfio-type1-batch-vfio_find_vpfn-in-function-vfio_unpin_pages_remote/20250620-112605
base: https://github.com/awilliam/linux-vfio.git next
patch link: https://lore.kernel.org/r/20250620032344.13382-2-lizhe.67%40bytedance.com
patch subject: [PATCH v5 1/3] vfio/type1: batch vfio_find_vpfn() in function vfio_unpin_pages_remote()
config: x86_64-rhel-9.4 (https://download.01.org/0day-ci/archive/20250625/202506250037.VfdBAPP3-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250625/202506250037.VfdBAPP3-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506250037.VfdBAPP3-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/vfio/vfio_iommu_type1.c: In function 'vfio_unpin_pages_remote':
>> drivers/vfio/vfio_iommu_type1.c:738:37: error: implicit declaration of function 'vpfn_pages'; did you mean 'vma_pages'? [-Werror=implicit-function-declaration]
738 | long unlocked = 0, locked = vpfn_pages(dma, iova, npage);
| ^~~~~~~~~~
| vma_pages
cc1: some warnings being treated as errors
vim +738 drivers/vfio/vfio_iommu_type1.c
733
734 static long vfio_unpin_pages_remote(struct vfio_dma *dma, dma_addr_t iova,
735 unsigned long pfn, unsigned long npage,
736 bool do_accounting)
737 {
> 738 long unlocked = 0, locked = vpfn_pages(dma, iova, npage);
739 long i;
740
741 for (i = 0; i < npage; i++)
742 if (put_pfn(pfn++, dma->prot))
743 unlocked++;
744
745 if (do_accounting)
746 vfio_lock_acct(dma, locked - unlocked, true);
747
748 return unlocked;
749 }
750
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
On Wed, 25 Jun 2025 00:23:03 +0800, kernel test robot <lkp@intel.com> wrote: > kernel test robot noticed the following build errors: > > [auto build test ERROR on awilliam-vfio/next] > [also build test ERROR on awilliam-vfio/for-linus linus/master v6.16-rc3 next-20250624] > [If your patch is applied to the wrong git tree, kindly drop us a note. > And when submitting patch, we suggest to use '--base' as documented in > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > url: https://github.com/intel-lab-lkp/linux/commits/lizhe-67-bytedance-com/vfio-type1-batch-vfio_find_vpfn-in-function-vfio_unpin_pages_remote/20250620-112605 > base: https://github.com/awilliam/linux-vfio.git next > patch link: https://lore.kernel.org/r/20250620032344.13382-2-lizhe.67%40bytedance.com > patch subject: [PATCH v5 1/3] vfio/type1: batch vfio_find_vpfn() in function vfio_unpin_pages_remote() > config: x86_64-rhel-9.4 (https://download.01.org/0day-ci/archive/20250625/202506250037.VfdBAPP3-lkp@intel.com/config) > compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250625/202506250037.VfdBAPP3-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202506250037.VfdBAPP3-lkp@intel.com/ > > All errors (new ones prefixed by >>): > > drivers/vfio/vfio_iommu_type1.c: In function 'vfio_unpin_pages_remote': > >> drivers/vfio/vfio_iommu_type1.c:738:37: error: implicit declaration of function 'vpfn_pages'; did you mean 'vma_pages'? [-Werror=implicit-function-declaration] > 738 | long unlocked = 0, locked = vpfn_pages(dma, iova, npage); > | ^~~~~~~~~~ > | vma_pages > cc1: some warnings being treated as errors Perhaps we need to compile with this patch[1] included to avoid build errors. Thanks, Zhe [1]: https://lore.kernel.org/all/20250529064947.38433-1-lizhe.67@bytedance.com/
© 2016 - 2026 Red Hat, Inc.