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 - 2025 Red Hat, Inc.