Lines Matching refs:pds_vfio

18 bool pds_vfio_dirty_is_enabled(struct pds_vfio_pci_device *pds_vfio)
20 return pds_vfio->dirty.is_enabled;
23 void pds_vfio_dirty_set_enabled(struct pds_vfio_pci_device *pds_vfio)
25 pds_vfio->dirty.is_enabled = true;
28 void pds_vfio_dirty_set_disabled(struct pds_vfio_pci_device *pds_vfio)
30 pds_vfio->dirty.is_enabled = false;
34 pds_vfio_print_guest_region_info(struct pds_vfio_pci_device *pds_vfio,
38 struct pci_dev *pdev = pds_vfio->vfio_coredev.pdev;
56 err = pds_vfio_dirty_status_cmd(pds_vfio, regions_dma, &max_regions,
102 static void __pds_vfio_dirty_free_sgl(struct pds_vfio_pci_device *pds_vfio,
105 struct pci_dev *pdev = pds_vfio->vfio_coredev.pdev;
118 static void pds_vfio_dirty_free_sgl(struct pds_vfio_pci_device *pds_vfio)
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);
126 static int __pds_vfio_dirty_alloc_sgl(struct pds_vfio_pci_device *pds_vfio,
130 struct pci_dev *pdev = pds_vfio->vfio_coredev.pdev;
157 static int pds_vfio_dirty_alloc_sgl(struct pds_vfio_pci_device *pds_vfio,
160 struct pds_vfio_dirty *dirty = &pds_vfio->dirty;
163 err = __pds_vfio_dirty_alloc_sgl(pds_vfio, &dirty->host_seq,
168 err = __pds_vfio_dirty_alloc_sgl(pds_vfio, &dirty->host_ack,
171 __pds_vfio_dirty_free_sgl(pds_vfio, &dirty->host_seq);
178 static int pds_vfio_dirty_enable(struct pds_vfio_pci_device *pds_vfio,
182 struct pci_dev *pdev = pds_vfio->vfio_coredev.pdev;
184 struct pds_vfio_dirty *dirty = &pds_vfio->dirty;
196 pds_vfio->vf_id);
198 if (pds_vfio_dirty_is_enabled(pds_vfio))
202 err = pds_vfio_dirty_status_cmd(pds_vfio, 0, &max_regions,
261 err = pds_vfio_dirty_enable_cmd(pds_vfio, regions_dma, max_regions);
284 err = pds_vfio_dirty_alloc_sgl(pds_vfio, page_count);
294 pds_vfio_dirty_set_enabled(pds_vfio);
296 pds_vfio_print_guest_region_info(pds_vfio, max_regions);
309 void pds_vfio_dirty_disable(struct pds_vfio_pci_device *pds_vfio, bool send_cmd)
311 if (pds_vfio_dirty_is_enabled(pds_vfio)) {
312 pds_vfio_dirty_set_disabled(pds_vfio);
314 pds_vfio_dirty_disable_cmd(pds_vfio);
315 pds_vfio_dirty_free_sgl(pds_vfio);
316 pds_vfio_dirty_free_bitmaps(&pds_vfio->dirty);
320 pds_vfio_send_host_vf_lm_status_cmd(pds_vfio, PDS_LM_STA_NONE);
323 static int pds_vfio_dirty_seq_ack(struct pds_vfio_pci_device *pds_vfio,
329 struct pci_dev *pdev = pds_vfio->vfio_coredev.pdev;
387 err = pds_vfio_dirty_seq_ack_cmd(pds_vfio, bmp_info->sgl_addr, num_sge,
405 static int pds_vfio_dirty_write_ack(struct pds_vfio_pci_device *pds_vfio,
408 return pds_vfio_dirty_seq_ack(pds_vfio, &pds_vfio->dirty.host_ack,
412 static int pds_vfio_dirty_read_seq(struct pds_vfio_pci_device *pds_vfio,
415 return pds_vfio_dirty_seq_ack(pds_vfio, &pds_vfio->dirty.host_seq,
419 static int pds_vfio_dirty_process_bitmaps(struct pds_vfio_pci_device *pds_vfio,
423 u64 page_size = pds_vfio->dirty.region_page_size;
424 u64 region_start = pds_vfio->dirty.region_start;
430 seq = (__le64 *)((u64)pds_vfio->dirty.host_seq.bmp + bmp_offset);
431 ack = (__le64 *)((u64)pds_vfio->dirty.host_ack.bmp + bmp_offset);
454 static int pds_vfio_dirty_sync(struct pds_vfio_pci_device *pds_vfio,
458 struct device *dev = &pds_vfio->vfio_coredev.pdev->dev;
459 struct pds_vfio_dirty *dirty = &pds_vfio->dirty;
464 dev_dbg(dev, "vf%u: Get dirty page bitmap\n", pds_vfio->vf_id);
466 if (!pds_vfio_dirty_is_enabled(pds_vfio)) {
468 pds_vfio->vf_id);
472 pages = DIV_ROUND_UP(length, pds_vfio->dirty.region_page_size);
478 pds_vfio->vf_id, iova, length, pds_vfio->dirty.region_page_size,
505 err = pds_vfio_dirty_read_seq(pds_vfio, bmp_offset, bmp_bytes);
509 err = pds_vfio_dirty_process_bitmaps(pds_vfio, dirty_bitmap, bmp_offset,
514 err = pds_vfio_dirty_write_ack(pds_vfio, bmp_offset, bmp_bytes);
524 struct pds_vfio_pci_device *pds_vfio =
529 mutex_lock(&pds_vfio->state_mutex);
530 err = pds_vfio_dirty_sync(pds_vfio, dirty, iova, length);
531 pds_vfio_state_mutex_unlock(pds_vfio);
540 struct pds_vfio_pci_device *pds_vfio =
545 mutex_lock(&pds_vfio->state_mutex);
546 pds_vfio_send_host_vf_lm_status_cmd(pds_vfio, PDS_LM_STA_IN_PROGRESS);
547 err = pds_vfio_dirty_enable(pds_vfio, ranges, nnodes, page_size);
548 pds_vfio_state_mutex_unlock(pds_vfio);
555 struct pds_vfio_pci_device *pds_vfio =
559 mutex_lock(&pds_vfio->state_mutex);
560 pds_vfio_dirty_disable(pds_vfio, true);
561 pds_vfio_state_mutex_unlock(pds_vfio);