@@ -471,12 +471,12 @@ static int put_pfn(unsigned long pfn, int prot)
471
471
472
472
#define VFIO_BATCH_MAX_CAPACITY (PAGE_SIZE / sizeof(struct page *))
473
473
474
- static void vfio_batch_init (struct vfio_batch * batch )
474
+ static void __vfio_batch_init (struct vfio_batch * batch , bool single )
475
475
{
476
476
batch -> size = 0 ;
477
477
batch -> offset = 0 ;
478
478
479
- if (unlikely (disable_hugepages ))
479
+ if (single || unlikely (disable_hugepages ))
480
480
goto fallback ;
481
481
482
482
batch -> pages = (struct page * * ) __get_free_page (GFP_KERNEL );
@@ -491,6 +491,16 @@ static void vfio_batch_init(struct vfio_batch *batch)
491
491
batch -> capacity = 1 ;
492
492
}
493
493
494
+ static void vfio_batch_init (struct vfio_batch * batch )
495
+ {
496
+ __vfio_batch_init (batch , false);
497
+ }
498
+
499
+ static void vfio_batch_init_single (struct vfio_batch * batch )
500
+ {
501
+ __vfio_batch_init (batch , true);
502
+ }
503
+
494
504
static void vfio_batch_unpin (struct vfio_batch * batch , struct vfio_dma * dma )
495
505
{
496
506
while (batch -> size ) {
@@ -730,15 +740,17 @@ static long vfio_unpin_pages_remote(struct vfio_dma *dma, dma_addr_t iova,
730
740
static int vfio_pin_page_external (struct vfio_dma * dma , unsigned long vaddr ,
731
741
unsigned long * pfn_base , bool do_accounting )
732
742
{
733
- struct page * pages [ 1 ] ;
743
+ struct vfio_batch batch ;
734
744
struct mm_struct * mm ;
735
745
int ret ;
736
746
737
747
mm = dma -> mm ;
738
748
if (!mmget_not_zero (mm ))
739
749
return - ENODEV ;
740
750
741
- ret = vaddr_get_pfns (mm , vaddr , 1 , dma -> prot , pfn_base , pages );
751
+ vfio_batch_init_single (& batch );
752
+
753
+ ret = vaddr_get_pfns (mm , vaddr , 1 , dma -> prot , pfn_base , batch .pages );
742
754
if (ret != 1 )
743
755
goto out ;
744
756
@@ -757,6 +769,7 @@ static int vfio_pin_page_external(struct vfio_dma *dma, unsigned long vaddr,
757
769
}
758
770
759
771
out :
772
+ vfio_batch_fini (& batch );
760
773
mmput (mm );
761
774
return ret ;
762
775
}
0 commit comments