Lines Matching refs:gfn

92 	gfn_t gfn;
100 gfn_t gfn;
111 static void kvmgt_page_track_remove_region(gfn_t gfn, unsigned long nr_pages,
128 static void gvt_unpin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn,
131 vfio_unpin_pages(&vgpu->vfio_device, gfn << PAGE_SHIFT,
136 static int gvt_pin_guest_page(struct intel_vgpu *vgpu, unsigned long gfn,
149 dma_addr_t cur_iova = (gfn + npage) << PAGE_SHIFT;
173 gvt_unpin_guest_page(vgpu, gfn, npage * PAGE_SIZE);
177 static int gvt_dma_map_page(struct intel_vgpu *vgpu, unsigned long gfn,
184 ret = gvt_pin_guest_page(vgpu, gfn, size, &page);
193 gvt_unpin_guest_page(vgpu, gfn, size);
200 static void gvt_dma_unmap_page(struct intel_vgpu *vgpu, unsigned long gfn,
206 gvt_unpin_guest_page(vgpu, gfn, size);
228 static struct gvt_dma *__gvt_cache_find_gfn(struct intel_vgpu *vgpu, gfn_t gfn)
236 if (gfn < itr->gfn)
238 else if (gfn > itr->gfn)
246 static int __gvt_cache_add(struct intel_vgpu *vgpu, gfn_t gfn,
257 new->gfn = gfn;
262 /* gfn_cache maps gfn to struct gvt_dma. */
268 if (gfn < itr->gfn)
317 gvt_dma_unmap_page(vgpu, dma->gfn, dma->dma_addr, dma->size);
349 __kvmgt_protect_table_find(struct intel_vgpu *info, gfn_t gfn)
355 hash_for_each_possible(info->ptable, p, hnode, gfn) {
356 if (gfn == p->gfn) {
365 static bool kvmgt_gfn_is_write_protected(struct intel_vgpu *info, gfn_t gfn)
369 p = __kvmgt_protect_table_find(info, gfn);
373 static void kvmgt_protect_table_add(struct intel_vgpu *info, gfn_t gfn)
377 if (kvmgt_gfn_is_write_protected(info, gfn))
381 if (WARN(!p, "gfn: 0x%llx\n", gfn))
384 p->gfn = gfn;
385 hash_add(info->ptable, &p->hnode, gfn);
388 static void kvmgt_protect_table_del(struct intel_vgpu *info, gfn_t gfn)
392 p = __kvmgt_protect_table_find(info, gfn);
626 gvt_dma_unmap_page(vgpu, entry->gfn, entry->dma_addr,
1545 int intel_gvt_page_track_add(struct intel_vgpu *info, u64 gfn)
1552 if (kvmgt_gfn_is_write_protected(info, gfn))
1555 r = kvm_write_track_add_gfn(info->vfio_device.kvm, gfn);
1559 kvmgt_protect_table_add(info, gfn);
1563 int intel_gvt_page_track_remove(struct intel_vgpu *info, u64 gfn)
1570 if (!kvmgt_gfn_is_write_protected(info, gfn))
1573 r = kvm_write_track_remove_gfn(info->vfio_device.kvm, gfn);
1577 kvmgt_protect_table_del(info, gfn);
1596 static void kvmgt_page_track_remove_region(gfn_t gfn, unsigned long nr_pages,
1606 if (kvmgt_gfn_is_write_protected(info, gfn + i))
1607 kvmgt_protect_table_del(info, gfn + i);
1629 int intel_gvt_dma_map_guest_page(struct intel_vgpu *vgpu, unsigned long gfn,
1640 entry = __gvt_cache_find_gfn(vgpu, gfn);
1642 ret = gvt_dma_map_page(vgpu, gfn, dma_addr, size);
1646 ret = __gvt_cache_add(vgpu, gfn, *dma_addr, size);
1650 /* the same gfn with different size: unmap and re-map */
1651 gvt_dma_unmap_page(vgpu, gfn, entry->dma_addr, entry->size);
1654 ret = gvt_dma_map_page(vgpu, gfn, dma_addr, size);
1658 ret = __gvt_cache_add(vgpu, gfn, *dma_addr, size);
1670 gvt_dma_unmap_page(vgpu, gfn, *dma_addr, size);
1699 gvt_dma_unmap_page(entry->vgpu, entry->gfn, entry->dma_addr,