Lines Matching refs:dirty
13 #include "dirty.h"
20 return pds_vfio->dirty.is_enabled;
25 pds_vfio->dirty.is_enabled = true;
30 pds_vfio->dirty.is_enabled = false;
73 static int pds_vfio_dirty_alloc_bitmaps(struct pds_vfio_dirty *dirty,
88 dirty->host_seq.bmp = host_seq_bmp;
89 dirty->host_ack.bmp = host_ack_bmp;
94 static void pds_vfio_dirty_free_bitmaps(struct pds_vfio_dirty *dirty)
96 vfree(dirty->host_seq.bmp);
97 vfree(dirty->host_ack.bmp);
98 dirty->host_seq.bmp = NULL;
99 dirty->host_ack.bmp = NULL;
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);
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);
184 struct pds_vfio_dirty *dirty = &pds_vfio->dirty;
195 dev_dbg(&pdev->dev, "vf%u: Start dirty page tracking\n",
201 /* find if dirty tracking is disabled, i.e. num_regions == 0 */
205 dev_err(&pdev->dev, "Failed to get dirty status, err %pe\n",
215 "Device doesn't support dirty tracking, max_regions %d\n",
277 err = pds_vfio_dirty_alloc_bitmaps(dirty, page_count / BITS_PER_BYTE);
279 dev_err(&pdev->dev, "Failed to alloc dirty bitmaps: %pe\n",
286 dev_err(&pdev->dev, "Failed to alloc dirty sg lists: %pe\n",
291 dirty->region_start = region_start;
292 dirty->region_size = region_size;
293 dirty->region_page_size = region_page_size;
303 pds_vfio_dirty_free_bitmaps(dirty);
316 pds_vfio_dirty_free_bitmaps(&pds_vfio->dirty);
408 return pds_vfio_dirty_seq_ack(pds_vfio, &pds_vfio->dirty.host_ack,
415 return pds_vfio_dirty_seq_ack(pds_vfio, &pds_vfio->dirty.host_seq,
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);
459 struct pds_vfio_dirty *dirty = &pds_vfio->dirty;
464 dev_dbg(dev, "vf%u: Get dirty page bitmap\n", pds_vfio->vf_id);
467 dev_err(dev, "vf%u: Sync failed, dirty tracking is disabled\n",
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,
481 if (!length || ((iova - dirty->region_start + length) > dirty->region_size)) {
488 bmp_bytes = ALIGN(DIV_ROUND_UP(length / dirty->region_page_size,
498 bmp_offset = DIV_ROUND_UP((iova - dirty->region_start) /
499 dirty->region_page_size, sizeof(u64));
502 "Syncing dirty bitmap, iova 0x%lx length 0x%lx, bmp_offset %llu bmp_bytes %llu\n",
522 unsigned long length, struct iova_bitmap *dirty)
530 err = pds_vfio_dirty_sync(pds_vfio, dirty, iova, length);