Lines Matching defs:gfn
369 void kvm_flush_remote_tlbs_range(struct kvm *kvm, gfn_t gfn, u64 nr_pages)
371 if (!kvm_arch_flush_remote_tlbs_range(kvm, gfn, nr_pages))
625 * {gfn(page) | page intersects with [hva_start, hva_end)} =
1533 * If the memslot gfn is unchanged, rb_replace_node() can be used to
1534 * switch the node in the gfn tree instead of removing the old and
1767 * memslot will be created. Validation of sp->gfn happens in:
2345 struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn)
2347 return __gfn_to_memslot(kvm_memslots(kvm), gfn);
2351 struct kvm_memory_slot *kvm_vcpu_gfn_to_memslot(struct kvm_vcpu *vcpu, gfn_t gfn)
2366 slot = try_get_memslot(vcpu->last_used_slot, gfn);
2375 slot = search_memslots(slots, gfn, false);
2384 bool kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn)
2386 struct kvm_memory_slot *memslot = gfn_to_memslot(kvm, gfn);
2392 bool kvm_vcpu_is_visible_gfn(struct kvm_vcpu *vcpu, gfn_t gfn)
2394 struct kvm_memory_slot *memslot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);
2400 unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn)
2407 addr = kvm_vcpu_gfn_to_hva_prot(vcpu, gfn, NULL);
2429 static unsigned long __gfn_to_hva_many(const struct kvm_memory_slot *slot, gfn_t gfn,
2439 *nr_pages = slot->npages - (gfn - slot->base_gfn);
2441 return __gfn_to_hva_memslot(slot, gfn);
2444 static unsigned long gfn_to_hva_many(struct kvm_memory_slot *slot, gfn_t gfn,
2447 return __gfn_to_hva_many(slot, gfn, nr_pages, true);
2451 gfn_t gfn)
2453 return gfn_to_hva_many(slot, gfn, NULL);
2457 unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn)
2459 return gfn_to_hva_many(gfn_to_memslot(kvm, gfn), gfn, NULL);
2463 unsigned long kvm_vcpu_gfn_to_hva(struct kvm_vcpu *vcpu, gfn_t gfn)
2465 return gfn_to_hva_many(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn, NULL);
2470 * Return the hva of a @gfn and the R/W attribute if possible.
2472 * @slot: the kvm_memory_slot which contains @gfn
2473 * @gfn: the gfn to be translated
2478 gfn_t gfn, bool *writable)
2480 unsigned long hva = __gfn_to_hva_many(slot, gfn, NULL, false);
2488 unsigned long gfn_to_hva_prot(struct kvm *kvm, gfn_t gfn, bool *writable)
2490 struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);
2492 return gfn_to_hva_memslot_prot(slot, gfn, writable);
2495 unsigned long kvm_vcpu_gfn_to_hva_prot(struct kvm_vcpu *vcpu, gfn_t gfn, bool *writable)
2497 struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);
2499 return gfn_to_hva_memslot_prot(slot, gfn, writable);
2746 kvm_pfn_t __gfn_to_pfn_memslot(const struct kvm_memory_slot *slot, gfn_t gfn,
2750 unsigned long addr = __gfn_to_hva_many(slot, gfn, NULL, write_fault);
2778 kvm_pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault,
2781 return __gfn_to_pfn_memslot(gfn_to_memslot(kvm, gfn), gfn, false, false,
2786 kvm_pfn_t gfn_to_pfn_memslot(const struct kvm_memory_slot *slot, gfn_t gfn)
2788 return __gfn_to_pfn_memslot(slot, gfn, false, false, NULL, true,
2793 kvm_pfn_t gfn_to_pfn_memslot_atomic(const struct kvm_memory_slot *slot, gfn_t gfn)
2795 return __gfn_to_pfn_memslot(slot, gfn, true, false, NULL, true,
2800 kvm_pfn_t kvm_vcpu_gfn_to_pfn_atomic(struct kvm_vcpu *vcpu, gfn_t gfn)
2802 return gfn_to_pfn_memslot_atomic(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn);
2806 kvm_pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn)
2808 return gfn_to_pfn_memslot(gfn_to_memslot(kvm, gfn), gfn);
2812 kvm_pfn_t kvm_vcpu_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn)
2814 return gfn_to_pfn_memslot(kvm_vcpu_gfn_to_memslot(vcpu, gfn), gfn);
2818 int gfn_to_page_many_atomic(struct kvm_memory_slot *slot, gfn_t gfn,
2824 addr = gfn_to_hva_many(slot, gfn, &entry);
2836 * Do not use this helper unless you are absolutely certain the gfn _must_ be
2841 struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn)
2846 pfn = gfn_to_pfn(kvm, gfn);
2867 int kvm_vcpu_map(struct kvm_vcpu *vcpu, gfn_t gfn, struct kvm_host_map *map)
2876 pfn = gfn_to_pfn(vcpu->kvm, gfn);
2895 map->gfn = gfn;
2917 kvm_vcpu_mark_page_dirty(vcpu, map->gfn);
3028 static int __kvm_read_guest_page(struct kvm_memory_slot *slot, gfn_t gfn,
3034 addr = gfn_to_hva_memslot_prot(slot, gfn, NULL);
3043 int kvm_read_guest_page(struct kvm *kvm, gfn_t gfn, void *data, int offset,
3046 struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);
3048 return __kvm_read_guest_page(slot, gfn, data, offset, len);
3052 int kvm_vcpu_read_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn, void *data,
3055 struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);
3057 return __kvm_read_guest_page(slot, gfn, data, offset, len);
3063 gfn_t gfn = gpa >> PAGE_SHIFT;
3069 ret = kvm_read_guest_page(kvm, gfn, data, offset, seg);
3075 ++gfn;
3083 gfn_t gfn = gpa >> PAGE_SHIFT;
3089 ret = kvm_vcpu_read_guest_page(vcpu, gfn, data, offset, seg);
3095 ++gfn;
3101 static int __kvm_read_guest_atomic(struct kvm_memory_slot *slot, gfn_t gfn,
3107 addr = gfn_to_hva_memslot_prot(slot, gfn, NULL);
3121 gfn_t gfn = gpa >> PAGE_SHIFT;
3122 struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);
3125 return __kvm_read_guest_atomic(slot, gfn, data, offset, len);
3130 struct kvm_memory_slot *memslot, gfn_t gfn,
3136 addr = gfn_to_hva_memslot(memslot, gfn);
3142 mark_page_dirty_in_slot(kvm, memslot, gfn);
3146 int kvm_write_guest_page(struct kvm *kvm, gfn_t gfn,
3149 struct kvm_memory_slot *slot = gfn_to_memslot(kvm, gfn);
3151 return __kvm_write_guest_page(kvm, slot, gfn, data, offset, len);
3155 int kvm_vcpu_write_guest_page(struct kvm_vcpu *vcpu, gfn_t gfn,
3158 struct kvm_memory_slot *slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);
3160 return __kvm_write_guest_page(vcpu->kvm, slot, gfn, data, offset, len);
3167 gfn_t gfn = gpa >> PAGE_SHIFT;
3173 ret = kvm_write_guest_page(kvm, gfn, data, offset, seg);
3179 ++gfn;
3188 gfn_t gfn = gpa >> PAGE_SHIFT;
3194 ret = kvm_vcpu_write_guest_page(vcpu, gfn, data, offset, seg);
3200 ++gfn;
3333 gfn_t gfn = gpa >> PAGE_SHIFT;
3339 ret = kvm_write_guest_page(kvm, gfn, zero_page, offset, len);
3344 ++gfn;
3352 gfn_t gfn)
3364 unsigned long rel_gfn = gfn - memslot->base_gfn;
3375 void mark_page_dirty(struct kvm *kvm, gfn_t gfn)
3379 memslot = gfn_to_memslot(kvm, gfn);
3380 mark_page_dirty_in_slot(kvm, memslot, gfn);
3384 void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn)
3388 memslot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);
3389 mark_page_dirty_in_slot(vcpu->kvm, memslot, gfn);