@@ -85,18 +85,18 @@ static int pds_vfio_dirty_alloc_bitmaps(struct pds_vfio_dirty *dirty,
8585 return - ENOMEM ;
8686 }
8787
88- dirty -> host_seq .bmp = host_seq_bmp ;
89- dirty -> host_ack .bmp = host_ack_bmp ;
88+ dirty -> region . host_seq .bmp = host_seq_bmp ;
89+ dirty -> region . host_ack .bmp = host_ack_bmp ;
9090
9191 return 0 ;
9292}
9393
9494static void pds_vfio_dirty_free_bitmaps (struct pds_vfio_dirty * dirty )
9595{
96- vfree (dirty -> host_seq .bmp );
97- vfree (dirty -> host_ack .bmp );
98- dirty -> host_seq .bmp = NULL ;
99- dirty -> host_ack .bmp = NULL ;
96+ vfree (dirty -> region . host_seq .bmp );
97+ vfree (dirty -> region . host_ack .bmp );
98+ dirty -> region . host_seq .bmp = NULL ;
99+ dirty -> region . host_ack .bmp = NULL ;
100100}
101101
102102static void __pds_vfio_dirty_free_sgl (struct pds_vfio_pci_device * pds_vfio ,
@@ -105,21 +105,21 @@ static void __pds_vfio_dirty_free_sgl(struct pds_vfio_pci_device *pds_vfio,
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 , dirty -> sgl_addr ,
109- dirty -> num_sge * sizeof (struct pds_lm_sg_elem ),
108+ dma_unmap_single (pdsc_dev , dirty -> region . sgl_addr ,
109+ dirty -> region . num_sge * sizeof (struct pds_lm_sg_elem ),
110110 DMA_BIDIRECTIONAL );
111- kfree (dirty -> sgl );
111+ kfree (dirty -> region . sgl );
112112
113- dirty -> num_sge = 0 ;
114- dirty -> sgl = NULL ;
115- dirty -> sgl_addr = 0 ;
113+ dirty -> region . num_sge = 0 ;
114+ dirty -> region . sgl = NULL ;
115+ dirty -> region . sgl_addr = 0 ;
116116}
117117
118118static void pds_vfio_dirty_free_sgl (struct pds_vfio_pci_device * pds_vfio )
119119{
120120 struct pds_vfio_dirty * dirty = & pds_vfio -> dirty ;
121121
122- if (dirty -> sgl )
122+ if (dirty -> region . sgl )
123123 __pds_vfio_dirty_free_sgl (pds_vfio , dirty );
124124}
125125
@@ -147,9 +147,9 @@ static int pds_vfio_dirty_alloc_sgl(struct pds_vfio_pci_device *pds_vfio,
147147 return - EIO ;
148148 }
149149
150- dirty -> sgl = sgl ;
151- dirty -> num_sge = max_sge ;
152- dirty -> sgl_addr = sgl_addr ;
150+ dirty -> region . sgl = sgl ;
151+ dirty -> region . num_sge = max_sge ;
152+ dirty -> region . sgl_addr = sgl_addr ;
153153
154154 return 0 ;
155155}
@@ -267,9 +267,9 @@ static int pds_vfio_dirty_enable(struct pds_vfio_pci_device *pds_vfio,
267267 goto out_free_bitmaps ;
268268 }
269269
270- dirty -> region_start = region_start ;
271- dirty -> region_size = region_size ;
272- dirty -> region_page_size = region_page_size ;
270+ dirty -> region . start = region_start ;
271+ dirty -> region . size = region_size ;
272+ dirty -> region . page_size = region_page_size ;
273273 pds_vfio_dirty_set_enabled (pds_vfio );
274274
275275 pds_vfio_print_guest_region_info (pds_vfio , max_regions );
@@ -304,11 +304,10 @@ static int pds_vfio_dirty_seq_ack(struct pds_vfio_pci_device *pds_vfio,
304304 u32 offset , u32 bmp_bytes , bool read_seq )
305305{
306306 const char * bmp_type_str = read_seq ? "read_seq" : "write_ack" ;
307+ struct pds_vfio_region * region = & pds_vfio -> dirty .region ;
307308 u8 dma_dir = read_seq ? DMA_FROM_DEVICE : DMA_TO_DEVICE ;
308309 struct pci_dev * pdev = pds_vfio -> vfio_coredev .pdev ;
309310 struct device * pdsc_dev = & pci_physfn (pdev )-> dev ;
310- struct pds_vfio_dirty * dirty = & pds_vfio -> dirty ;
311- struct pds_lm_sg_elem * sgl ;
312311 unsigned long long npages ;
313312 struct sg_table sg_table ;
314313 struct scatterlist * sg ;
@@ -355,25 +354,24 @@ static int pds_vfio_dirty_seq_ack(struct pds_vfio_pci_device *pds_vfio,
355354 if (err )
356355 goto out_free_sg_table ;
357356
358- sgl = pds_vfio -> dirty .sgl ;
359357 for_each_sgtable_dma_sg (& sg_table , sg , i ) {
360- struct pds_lm_sg_elem * sg_elem = & sgl [i ];
358+ struct pds_lm_sg_elem * sg_elem = & region -> sgl [i ];
361359
362360 sg_elem -> addr = cpu_to_le64 (sg_dma_address (sg ));
363361 sg_elem -> len = cpu_to_le32 (sg_dma_len (sg ));
364362 }
365363
366364 num_sge = sg_table .nents ;
367365 size = num_sge * sizeof (struct pds_lm_sg_elem );
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 ,
366+ dma_sync_single_for_device (pdsc_dev , region -> sgl_addr , size , dma_dir );
367+ err = pds_vfio_dirty_seq_ack_cmd (pds_vfio , region -> sgl_addr , num_sge ,
370368 offset , bmp_bytes , read_seq );
371369 if (err )
372370 dev_err (& pdev -> dev ,
373371 "Dirty bitmap %s failed offset %u bmp_bytes %u num_sge %u DMA 0x%llx: %pe\n" ,
374372 bmp_type_str , offset , bmp_bytes ,
375- num_sge , dirty -> sgl_addr , ERR_PTR (err ));
376- dma_sync_single_for_cpu (pdsc_dev , dirty -> sgl_addr , size , dma_dir );
373+ num_sge , region -> sgl_addr , ERR_PTR (err ));
374+ dma_sync_single_for_cpu (pdsc_dev , region -> sgl_addr , size , dma_dir );
377375
378376 dma_unmap_sgtable (pdsc_dev , & sg_table , dma_dir , 0 );
379377out_free_sg_table :
@@ -387,30 +385,34 @@ static int pds_vfio_dirty_seq_ack(struct pds_vfio_pci_device *pds_vfio,
387385static int pds_vfio_dirty_write_ack (struct pds_vfio_pci_device * pds_vfio ,
388386 u32 offset , u32 len )
389387{
390- return pds_vfio_dirty_seq_ack (pds_vfio , & pds_vfio -> dirty .host_ack ,
388+ struct pds_vfio_region * region = & pds_vfio -> dirty .region ;
389+
390+ return pds_vfio_dirty_seq_ack (pds_vfio , & region -> host_ack ,
391391 offset , len , WRITE_ACK );
392392}
393393
394394static int pds_vfio_dirty_read_seq (struct pds_vfio_pci_device * pds_vfio ,
395395 u32 offset , u32 len )
396396{
397- return pds_vfio_dirty_seq_ack (pds_vfio , & pds_vfio -> dirty .host_seq ,
397+ struct pds_vfio_region * region = & pds_vfio -> dirty .region ;
398+
399+ return pds_vfio_dirty_seq_ack (pds_vfio , & region -> host_seq ,
398400 offset , len , READ_SEQ );
399401}
400402
401403static int pds_vfio_dirty_process_bitmaps (struct pds_vfio_pci_device * pds_vfio ,
402404 struct iova_bitmap * dirty_bitmap ,
403405 u32 bmp_offset , u32 len_bytes )
404406{
405- u64 page_size = pds_vfio -> dirty .region_page_size ;
406- u64 region_start = pds_vfio -> dirty .region_start ;
407+ u64 page_size = pds_vfio -> dirty .region . page_size ;
408+ u64 region_start = pds_vfio -> dirty .region . start ;
407409 u32 bmp_offset_bit ;
408410 __le64 * seq , * ack ;
409411 int dword_count ;
410412
411413 dword_count = len_bytes / sizeof (u64 );
412- seq = (__le64 * )((u64 )pds_vfio -> dirty .host_seq .bmp + bmp_offset );
413- ack = (__le64 * )((u64 )pds_vfio -> dirty .host_ack .bmp + bmp_offset );
414+ seq = (__le64 * )((u64 )pds_vfio -> dirty .region . host_seq .bmp + bmp_offset );
415+ ack = (__le64 * )((u64 )pds_vfio -> dirty .region . host_ack .bmp + bmp_offset );
414416 bmp_offset_bit = bmp_offset * 8 ;
415417
416418 for (int i = 0 ; i < dword_count ; i ++ ) {
@@ -451,34 +453,33 @@ static int pds_vfio_dirty_sync(struct pds_vfio_pci_device *pds_vfio,
451453 return - EINVAL ;
452454 }
453455
454- pages = DIV_ROUND_UP (length , pds_vfio -> dirty .region_page_size );
456+ pages = DIV_ROUND_UP (length , pds_vfio -> dirty .region . page_size );
455457 bitmap_size =
456458 round_up (pages , sizeof (u64 ) * BITS_PER_BYTE ) / BITS_PER_BYTE ;
457459
458460 dev_dbg (dev ,
459461 "vf%u: iova 0x%lx length %lu page_size %llu pages %llu bitmap_size %llu\n" ,
460- pds_vfio -> vf_id , iova , length , pds_vfio -> dirty .region_page_size ,
462+ pds_vfio -> vf_id , iova , length , pds_vfio -> dirty .region . page_size ,
461463 pages , bitmap_size );
462464
463- if (!length || ((iova - dirty -> region_start + length ) > dirty -> region_size )) {
465+ if (!length || ((iova - dirty -> region . start + length ) > dirty -> region . size )) {
464466 dev_err (dev , "Invalid iova 0x%lx and/or length 0x%lx to sync\n" ,
465467 iova , length );
466468 return - EINVAL ;
467469 }
468470
469471 /* bitmap is modified in 64 bit chunks */
470- bmp_bytes = ALIGN (DIV_ROUND_UP (length / dirty -> region_page_size ,
471- sizeof (u64 )),
472- sizeof (u64 ));
472+ bmp_bytes = ALIGN (DIV_ROUND_UP (length / dirty -> region .page_size ,
473+ sizeof (u64 )), sizeof (u64 ));
473474 if (bmp_bytes != bitmap_size ) {
474475 dev_err (dev ,
475476 "Calculated bitmap bytes %llu not equal to bitmap size %llu\n" ,
476477 bmp_bytes , bitmap_size );
477478 return - EINVAL ;
478479 }
479480
480- bmp_offset = DIV_ROUND_UP ((iova - dirty -> region_start ) /
481- dirty -> region_page_size , sizeof (u64 ));
481+ bmp_offset = DIV_ROUND_UP ((iova - dirty -> region . start ) /
482+ dirty -> region . page_size , sizeof (u64 ));
482483
483484 dev_dbg (dev ,
484485 "Syncing dirty bitmap, iova 0x%lx length 0x%lx, bmp_offset %llu bmp_bytes %llu\n" ,
0 commit comments