@@ -100,35 +100,35 @@ static void pds_vfio_dirty_free_bitmaps(struct pds_vfio_dirty *dirty)
100100}
101101
102102static void __pds_vfio_dirty_free_sgl (struct pds_vfio_pci_device * pds_vfio ,
103- struct pds_vfio_bmp_info * bmp_info )
103+ struct pds_vfio_dirty * dirty )
104104{
105105 struct pci_dev * pdev = pds_vfio -> vfio_coredev .pdev ;
106106 struct device * pdsc_dev = & pci_physfn (pdev )-> dev ;
107107
108- dma_unmap_single (pdsc_dev , bmp_info -> sgl_addr ,
109- bmp_info -> num_sge * sizeof (struct pds_lm_sg_elem ),
108+ dma_unmap_single (pdsc_dev , dirty -> sgl_addr ,
109+ dirty -> num_sge * sizeof (struct pds_lm_sg_elem ),
110110 DMA_BIDIRECTIONAL );
111- kfree (bmp_info -> sgl );
111+ kfree (dirty -> sgl );
112112
113- bmp_info -> num_sge = 0 ;
114- bmp_info -> sgl = NULL ;
115- bmp_info -> sgl_addr = 0 ;
113+ dirty -> num_sge = 0 ;
114+ dirty -> sgl = NULL ;
115+ dirty -> sgl_addr = 0 ;
116116}
117117
118118static void pds_vfio_dirty_free_sgl (struct pds_vfio_pci_device * pds_vfio )
119119{
120- if ( pds_vfio -> dirty . host_seq . sgl )
121- __pds_vfio_dirty_free_sgl ( pds_vfio , & pds_vfio -> dirty . host_seq );
122- if (pds_vfio -> dirty . host_ack . sgl )
123- __pds_vfio_dirty_free_sgl (pds_vfio , & pds_vfio -> dirty . host_ack );
120+ struct pds_vfio_dirty * dirty = & pds_vfio -> dirty ;
121+
122+ if (dirty -> sgl )
123+ __pds_vfio_dirty_free_sgl (pds_vfio , dirty );
124124}
125125
126- static int __pds_vfio_dirty_alloc_sgl (struct pds_vfio_pci_device * pds_vfio ,
127- struct pds_vfio_bmp_info * bmp_info ,
128- u32 page_count )
126+ static int pds_vfio_dirty_alloc_sgl (struct pds_vfio_pci_device * pds_vfio ,
127+ u32 page_count )
129128{
130129 struct pci_dev * pdev = pds_vfio -> vfio_coredev .pdev ;
131130 struct device * pdsc_dev = & pci_physfn (pdev )-> dev ;
131+ struct pds_vfio_dirty * dirty = & pds_vfio -> dirty ;
132132 struct pds_lm_sg_elem * sgl ;
133133 dma_addr_t sgl_addr ;
134134 size_t sgl_size ;
@@ -147,30 +147,9 @@ static int __pds_vfio_dirty_alloc_sgl(struct pds_vfio_pci_device *pds_vfio,
147147 return - EIO ;
148148 }
149149
150- bmp_info -> sgl = sgl ;
151- bmp_info -> num_sge = max_sge ;
152- bmp_info -> sgl_addr = sgl_addr ;
153-
154- return 0 ;
155- }
156-
157- static int pds_vfio_dirty_alloc_sgl (struct pds_vfio_pci_device * pds_vfio ,
158- u32 page_count )
159- {
160- struct pds_vfio_dirty * dirty = & pds_vfio -> dirty ;
161- int err ;
162-
163- err = __pds_vfio_dirty_alloc_sgl (pds_vfio , & dirty -> host_seq ,
164- page_count );
165- if (err )
166- return err ;
167-
168- err = __pds_vfio_dirty_alloc_sgl (pds_vfio , & dirty -> host_ack ,
169- page_count );
170- if (err ) {
171- __pds_vfio_dirty_free_sgl (pds_vfio , & dirty -> host_seq );
172- return err ;
173- }
150+ dirty -> sgl = sgl ;
151+ dirty -> num_sge = max_sge ;
152+ dirty -> sgl_addr = sgl_addr ;
174153
175154 return 0 ;
176155}
@@ -328,6 +307,8 @@ static int pds_vfio_dirty_seq_ack(struct pds_vfio_pci_device *pds_vfio,
328307 u8 dma_dir = read_seq ? DMA_FROM_DEVICE : DMA_TO_DEVICE ;
329308 struct pci_dev * pdev = pds_vfio -> vfio_coredev .pdev ;
330309 struct device * pdsc_dev = & pci_physfn (pdev )-> dev ;
310+ struct pds_vfio_dirty * dirty = & pds_vfio -> dirty ;
311+ struct pds_lm_sg_elem * sgl ;
331312 unsigned long long npages ;
332313 struct sg_table sg_table ;
333314 struct scatterlist * sg ;
@@ -374,24 +355,25 @@ static int pds_vfio_dirty_seq_ack(struct pds_vfio_pci_device *pds_vfio,
374355 if (err )
375356 goto out_free_sg_table ;
376357
358+ sgl = pds_vfio -> dirty .sgl ;
377359 for_each_sgtable_dma_sg (& sg_table , sg , i ) {
378- struct pds_lm_sg_elem * sg_elem = & bmp_info -> sgl [i ];
360+ struct pds_lm_sg_elem * sg_elem = & sgl [i ];
379361
380362 sg_elem -> addr = cpu_to_le64 (sg_dma_address (sg ));
381363 sg_elem -> len = cpu_to_le32 (sg_dma_len (sg ));
382364 }
383365
384366 num_sge = sg_table .nents ;
385367 size = num_sge * sizeof (struct pds_lm_sg_elem );
386- dma_sync_single_for_device (pdsc_dev , bmp_info -> sgl_addr , size , dma_dir );
387- err = pds_vfio_dirty_seq_ack_cmd (pds_vfio , bmp_info -> sgl_addr , num_sge ,
368+ dma_sync_single_for_device (pdsc_dev , dirty -> sgl_addr , size , dma_dir );
369+ err = pds_vfio_dirty_seq_ack_cmd (pds_vfio , dirty -> sgl_addr , num_sge ,
388370 offset , bmp_bytes , read_seq );
389371 if (err )
390372 dev_err (& pdev -> dev ,
391373 "Dirty bitmap %s failed offset %u bmp_bytes %u num_sge %u DMA 0x%llx: %pe\n" ,
392374 bmp_type_str , offset , bmp_bytes ,
393- num_sge , bmp_info -> sgl_addr , ERR_PTR (err ));
394- dma_sync_single_for_cpu (pdsc_dev , bmp_info -> sgl_addr , size , dma_dir );
375+ num_sge , dirty -> sgl_addr , ERR_PTR (err ));
376+ dma_sync_single_for_cpu (pdsc_dev , dirty -> sgl_addr , size , dma_dir );
395377
396378 dma_unmap_sgtable (pdsc_dev , & sg_table , dma_dir , 0 );
397379out_free_sg_table :
0 commit comments