xref: /linux/arch/riscv/kvm/mmu.c (revision 3a2c4d55e32ad65efebdb6de44eef3bfa08bb49d)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2019 Western Digital Corporation or its affiliates.
4  *
5  * Authors:
6  *     Anup Patel <anup.patel@wdc.com>
7  */
8 
9 #include <linux/errno.h>
10 #include <linux/hugetlb.h>
11 #include <linux/module.h>
12 #include <linux/uaccess.h>
13 #include <linux/vmalloc.h>
14 #include <linux/kvm_host.h>
15 #include <linux/sched/signal.h>
16 #include <asm/kvm_mmu.h>
17 #include <asm/kvm_nacl.h>
18 
19 static bool __read_mostly eager_page_split = true;
20 module_param(eager_page_split, bool, 0644);
21 
22 static void mmu_wp_memory_region(struct kvm *kvm, int slot)
23 {
24 	struct kvm_memslots *slots = kvm_memslots(kvm);
25 	struct kvm_memory_slot *memslot = id_to_memslot(slots, slot);
26 	phys_addr_t start = memslot->base_gfn << PAGE_SHIFT;
27 	phys_addr_t end = (memslot->base_gfn + memslot->npages) << PAGE_SHIFT;
28 	struct kvm_gstage gstage;
29 	bool flush;
30 
31 	kvm_riscv_gstage_init(&gstage, kvm);
32 
33 	write_lock(&kvm->mmu_lock);
34 	flush = kvm_riscv_gstage_wp_range(&gstage, start, end);
35 	write_unlock(&kvm->mmu_lock);
36 	if (flush)
37 		kvm_flush_remote_tlbs_memslot(kvm, memslot);
38 }
39 
40 int kvm_riscv_mmu_ioremap(struct kvm *kvm, gpa_t gpa, phys_addr_t hpa,
41 			  unsigned long size, bool writable, bool in_atomic)
42 {
43 	int ret = 0;
44 	pgprot_t prot;
45 	unsigned long pfn;
46 	phys_addr_t addr, end;
47 	unsigned long pgd_levels = kvm->arch.pgd_levels;
48 	struct kvm_mmu_memory_cache pcache = {
49 		.gfp_custom = (in_atomic) ? GFP_ATOMIC | __GFP_ACCOUNT : 0,
50 		.gfp_zero = __GFP_ZERO,
51 	};
52 	struct kvm_gstage_mapping map;
53 	struct kvm_gstage gstage;
54 
55 	kvm_riscv_gstage_init(&gstage, kvm);
56 
57 	end = (gpa + size + PAGE_SIZE - 1) & PAGE_MASK;
58 	pfn = __phys_to_pfn(hpa);
59 	prot = pgprot_noncached(PAGE_WRITE);
60 
61 	for (addr = gpa; addr < end; addr += PAGE_SIZE) {
62 		map.addr = addr;
63 		map.pte = pfn_pte(pfn, prot);
64 		map.pte = pte_mkdirty(map.pte);
65 		map.level = 0;
66 
67 		if (!writable)
68 			map.pte = pte_wrprotect(map.pte);
69 
70 		ret = __kvm_mmu_topup_memory_cache(&pcache, pgd_levels, pgd_levels);
71 		if (ret)
72 			goto out;
73 
74 		write_lock(&kvm->mmu_lock);
75 		ret = kvm_riscv_gstage_set_pte(&gstage, &pcache, &map);
76 		write_unlock(&kvm->mmu_lock);
77 		if (ret)
78 			goto out;
79 
80 		pfn++;
81 	}
82 
83 out:
84 	kvm_mmu_free_memory_cache(&pcache);
85 	return ret;
86 }
87 
88 void kvm_riscv_mmu_iounmap(struct kvm *kvm, gpa_t gpa, unsigned long size)
89 {
90 	struct kvm_gstage gstage;
91 	bool flush;
92 
93 	kvm_riscv_gstage_init(&gstage, kvm);
94 
95 	write_lock(&kvm->mmu_lock);
96 	flush = kvm_riscv_gstage_unmap_range(&gstage, gpa, size, false);
97 	write_unlock(&kvm->mmu_lock);
98 
99 	if (flush)
100 		kvm_flush_remote_tlbs_range(kvm, gpa >> PAGE_SHIFT,
101 					    size >> PAGE_SHIFT);
102 }
103 
104 static bool need_topup_split_caches_or_resched(struct kvm *kvm, int count)
105 {
106 	struct kvm_mmu_memory_cache *cache;
107 
108 	if (need_resched() || rwlock_needbreak(&kvm->mmu_lock))
109 		return true;
110 
111 	cache = &kvm->arch.pgd_split_page_cache;
112 	return kvm_mmu_memory_cache_nr_free_objects(cache) < count;
113 }
114 
115 static bool mmu_split_huge_pages(struct kvm_gstage *gstage,
116 				 phys_addr_t start, phys_addr_t end)
117 {
118 	struct kvm *kvm = gstage->kvm;
119 	struct kvm_mmu_memory_cache *pcache = &kvm->arch.pgd_split_page_cache;
120 	phys_addr_t addr = ALIGN_DOWN(start, PMD_SIZE);
121 	phys_addr_t last_flush_gfn = addr >> PAGE_SHIFT;
122 	int count = gstage->pgd_levels;
123 	bool flush = false;
124 	int ret;
125 
126 	lockdep_assert_held_write(&kvm->mmu_lock);
127 
128 	while (addr < end) {
129 		if (need_topup_split_caches_or_resched(kvm, count)) {
130 			if (flush) {
131 				kvm_flush_remote_tlbs_range(kvm, last_flush_gfn,
132 					  (addr >> PAGE_SHIFT) - last_flush_gfn);
133 				last_flush_gfn = addr >> PAGE_SHIFT;
134 				flush = false;
135 			}
136 
137 			write_unlock(&kvm->mmu_lock);
138 			cond_resched();
139 
140 			ret = kvm_mmu_topup_memory_cache(pcache, count);
141 			if (ret) {
142 				kvm_err("Failed to toup split page cache\n");
143 				write_lock(&kvm->mmu_lock);
144 				return flush;
145 			}
146 			write_lock(&kvm->mmu_lock);
147 		}
148 
149 		if (!kvm->arch.pgd)
150 			return flush;
151 
152 		flush |= kvm_riscv_gstage_split_huge(gstage, pcache, addr, 0, false);
153 
154 		addr += PMD_SIZE;
155 	}
156 
157 	return flush;
158 }
159 
160 void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm,
161 					     struct kvm_memory_slot *slot,
162 					     gfn_t gfn_offset,
163 					     unsigned long mask)
164 {
165 	phys_addr_t base_gfn = slot->base_gfn + gfn_offset;
166 	phys_addr_t start = (base_gfn +  __ffs(mask)) << PAGE_SHIFT;
167 	phys_addr_t end = (base_gfn + __fls(mask) + 1) << PAGE_SHIFT;
168 	struct kvm_gstage gstage;
169 
170 	kvm_riscv_gstage_init(&gstage, kvm);
171 
172 	kvm_riscv_gstage_wp_pt_masked(&gstage, base_gfn, mask);
173 
174 	if (kvm_dirty_log_manual_protect_and_init_set(kvm)) {
175 		if (READ_ONCE(eager_page_split))
176 			mmu_split_huge_pages(&gstage, start, end);
177 	}
178 
179 	/*
180 	 * Remote TLB flush is not needed here since callers of
181 	 * kvm_arch_mmu_enable_log_dirty_pt_masked() already do it.
182 	 */
183 }
184 
185 void kvm_arch_sync_dirty_log(struct kvm *kvm, struct kvm_memory_slot *memslot)
186 {
187 }
188 
189 void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free)
190 {
191 }
192 
193 void kvm_arch_memslots_updated(struct kvm *kvm, u64 gen)
194 {
195 }
196 
197 void kvm_arch_flush_shadow_all(struct kvm *kvm)
198 {
199 	kvm_riscv_mmu_free_pgd(kvm);
200 }
201 
202 void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
203 				   struct kvm_memory_slot *slot)
204 {
205 	gpa_t gpa = slot->base_gfn << PAGE_SHIFT;
206 	phys_addr_t size = slot->npages << PAGE_SHIFT;
207 	struct kvm_gstage gstage;
208 	bool flush;
209 
210 	kvm_riscv_gstage_init(&gstage, kvm);
211 
212 	write_lock(&kvm->mmu_lock);
213 	flush = kvm_riscv_gstage_unmap_range(&gstage, gpa, size, false);
214 	write_unlock(&kvm->mmu_lock);
215 	if (flush)
216 		kvm_flush_remote_tlbs_range(kvm, gpa >> PAGE_SHIFT,
217 					    size >> PAGE_SHIFT);
218 }
219 
220 static void mmu_split_memory_region(struct kvm *kvm, int slot)
221 {
222 	struct kvm_memslots *slots = kvm_memslots(kvm);
223 	struct kvm_memory_slot *memslot = id_to_memslot(slots, slot);
224 	phys_addr_t start = memslot->base_gfn << PAGE_SHIFT;
225 	phys_addr_t end = (memslot->base_gfn + memslot->npages) << PAGE_SHIFT;
226 	struct kvm_gstage gstage;
227 	bool flush;
228 
229 	kvm_riscv_gstage_init(&gstage, kvm);
230 
231 	write_lock(&kvm->mmu_lock);
232 	flush = mmu_split_huge_pages(&gstage, start, end);
233 	write_unlock(&kvm->mmu_lock);
234 
235 	if (flush)
236 		kvm_flush_remote_tlbs_memslot(kvm, memslot);
237 }
238 
239 void kvm_arch_commit_memory_region(struct kvm *kvm,
240 				struct kvm_memory_slot *old,
241 				const struct kvm_memory_slot *new,
242 				enum kvm_mr_change change)
243 {
244 	/*
245 	 * At this point memslot has been committed and dirty pages will be
246 	 * tracked while the memory slot is write protected.
247 	 */
248 	if (change != KVM_MR_DELETE && new->flags & KVM_MEM_LOG_DIRTY_PAGES) {
249 		if (kvm_dirty_log_manual_protect_and_init_set(kvm))
250 			return;
251 		mmu_wp_memory_region(kvm, new->id);
252 
253 		if (READ_ONCE(eager_page_split))
254 			mmu_split_memory_region(kvm, new->id);
255 	}
256 }
257 
258 int kvm_arch_prepare_memory_region(struct kvm *kvm,
259 				const struct kvm_memory_slot *old,
260 				struct kvm_memory_slot *new,
261 				enum kvm_mr_change change)
262 {
263 	hva_t hva, reg_end, size;
264 	bool writable;
265 	int ret = 0;
266 
267 	if (change != KVM_MR_CREATE && change != KVM_MR_MOVE &&
268 			change != KVM_MR_FLAGS_ONLY)
269 		return 0;
270 
271 	/*
272 	 * Prevent userspace from creating a memory region outside of the GPA
273 	 * space addressable by the KVM guest GPA space.
274 	 */
275 	if ((new->base_gfn + new->npages) >
276 	     kvm_riscv_gstage_gpa_size(kvm->arch.pgd_levels) >> PAGE_SHIFT)
277 		return -EFAULT;
278 
279 	hva = new->userspace_addr;
280 	size = new->npages << PAGE_SHIFT;
281 	reg_end = hva + size;
282 	writable = !(new->flags & KVM_MEM_READONLY);
283 
284 	mmap_read_lock(current->mm);
285 
286 	/*
287 	 * A memory region could potentially cover multiple VMAs, and
288 	 * any holes between them, so iterate over all of them.
289 	 *
290 	 *     +--------------------------------------------+
291 	 * +---------------+----------------+   +----------------+
292 	 * |   : VMA 1     |      VMA 2     |   |    VMA 3  :    |
293 	 * +---------------+----------------+   +----------------+
294 	 *     |               memory region                |
295 	 *     +--------------------------------------------+
296 	 */
297 	do {
298 		struct vm_area_struct *vma;
299 		hva_t vm_end;
300 
301 		vma = find_vma_intersection(current->mm, hva, reg_end);
302 		if (!vma)
303 			break;
304 
305 		/*
306 		 * Mapping a read-only VMA is only allowed if the
307 		 * memory region is configured as read-only.
308 		 */
309 		if (writable && !(vma->vm_flags & VM_WRITE)) {
310 			ret = -EPERM;
311 			break;
312 		}
313 
314 		/* Take the intersection of this VMA with the memory region */
315 		vm_end = min(reg_end, vma->vm_end);
316 
317 		if (vma->vm_flags & VM_PFNMAP) {
318 			/* IO region dirty page logging not allowed */
319 			if (new->flags & KVM_MEM_LOG_DIRTY_PAGES) {
320 				ret = -EINVAL;
321 				goto out;
322 			}
323 		}
324 		hva = vm_end;
325 	} while (hva < reg_end);
326 
327 out:
328 	mmap_read_unlock(current->mm);
329 	return ret;
330 }
331 
332 bool kvm_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range)
333 {
334 	struct kvm_gstage gstage;
335 	bool flush;
336 
337 	if (!kvm->arch.pgd)
338 		return false;
339 
340 	lockdep_assert_held_write(&kvm->mmu_lock);
341 
342 	kvm_riscv_gstage_init(&gstage, kvm);
343 	flush = kvm_riscv_gstage_unmap_range(&gstage, range->start << PAGE_SHIFT,
344 					     (range->end - range->start) << PAGE_SHIFT,
345 					     range->may_block);
346 	if (flush)
347 		kvm_flush_remote_tlbs_range(kvm, range->start,
348 					    range->end - range->start);
349 	return false;
350 }
351 
352 bool kvm_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range)
353 {
354 	pte_t *ptep;
355 	u32 ptep_level = 0;
356 	u64 size = (range->end - range->start) << PAGE_SHIFT;
357 	struct kvm_gstage gstage;
358 
359 	if (!kvm->arch.pgd)
360 		return false;
361 
362 	WARN_ON(size != PAGE_SIZE && size != PMD_SIZE && size != PUD_SIZE);
363 
364 	kvm_riscv_gstage_init(&gstage, kvm);
365 	if (!kvm_riscv_gstage_get_leaf(&gstage, range->start << PAGE_SHIFT,
366 				       &ptep, &ptep_level))
367 		return false;
368 
369 	return ptep_test_and_clear_young(NULL, 0, ptep);
370 }
371 
372 bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range)
373 {
374 	pte_t *ptep;
375 	u32 ptep_level = 0;
376 	u64 size = (range->end - range->start) << PAGE_SHIFT;
377 	struct kvm_gstage gstage;
378 
379 	if (!kvm->arch.pgd)
380 		return false;
381 
382 	WARN_ON(size != PAGE_SIZE && size != PMD_SIZE && size != PUD_SIZE);
383 
384 	kvm_riscv_gstage_init(&gstage, kvm);
385 	if (!kvm_riscv_gstage_get_leaf(&gstage, range->start << PAGE_SHIFT,
386 				       &ptep, &ptep_level))
387 		return false;
388 
389 	return pte_young(ptep_get(ptep));
390 }
391 
392 static bool fault_supports_gstage_huge_mapping(struct kvm_memory_slot *memslot,
393 					       unsigned long hva,
394 					       unsigned long map_size)
395 {
396 	hva_t uaddr_start, uaddr_end;
397 	gpa_t gpa_start;
398 	size_t size;
399 
400 	size = memslot->npages * PAGE_SIZE;
401 	uaddr_start = memslot->userspace_addr;
402 	uaddr_end = uaddr_start + size;
403 
404 	gpa_start = memslot->base_gfn << PAGE_SHIFT;
405 
406 	/*
407 	 * Pages belonging to memslots that don't have the same alignment
408 	 * within a huge page for userspace and GPA cannot be mapped with
409 	 * g-stage block entries, because we'll end up mapping the wrong pages.
410 	 *
411 	 * Consider a layout like the following:
412 	 *
413 	 *    memslot->userspace_addr:
414 	 *    +-----+--------------------+--------------------+---+
415 	 *    |abcde|fgh  vs-stage block  |    vs-stage block tv|xyz|
416 	 *    +-----+--------------------+--------------------+---+
417 	 *
418 	 *    memslot->base_gfn << PAGE_SHIFT:
419 	 *      +---+--------------------+--------------------+-----+
420 	 *      |abc|def  g-stage block  |    g-stage block   |tvxyz|
421 	 *      +---+--------------------+--------------------+-----+
422 	 *
423 	 * If we create those g-stage blocks, we'll end up with this incorrect
424 	 * mapping:
425 	 *   d -> f
426 	 *   e -> g
427 	 *   f -> h
428 	 */
429 	if ((gpa_start & (map_size - 1)) != (uaddr_start & (map_size - 1)))
430 		return false;
431 
432 	/*
433 	 * Next, let's make sure we're not trying to map anything not covered
434 	 * by the memslot. This means we have to prohibit block size mappings
435 	 * for the beginning and end of a non-block aligned and non-block sized
436 	 * memory slot (illustrated by the head and tail parts of the
437 	 * userspace view above containing pages 'abcde' and 'xyz',
438 	 * respectively).
439 	 *
440 	 * Note that it doesn't matter if we do the check using the
441 	 * userspace_addr or the base_gfn, as both are equally aligned (per
442 	 * the check above) and equally sized.
443 	 */
444 	return (hva >= ALIGN(uaddr_start, map_size)) &&
445 	       (hva < ALIGN_DOWN(uaddr_end, map_size));
446 }
447 
448 static int get_hva_mapping_size(struct kvm *kvm,
449 				unsigned long hva)
450 {
451 	int size = PAGE_SIZE;
452 	unsigned long flags;
453 	pgd_t pgd;
454 	p4d_t p4d;
455 	pud_t pud;
456 	pmd_t pmd;
457 
458 	/*
459 	 * Disable IRQs to prevent concurrent tear down of host page tables,
460 	 * e.g. if the primary MMU promotes a P*D to a huge page and then frees
461 	 * the original page table.
462 	 */
463 	local_irq_save(flags);
464 
465 	/*
466 	 * Read each entry once.  As above, a non-leaf entry can be promoted to
467 	 * a huge page _during_ this walk.  Re-reading the entry could send the
468 	 * walk into the weeks, e.g. p*d_leaf() returns false (sees the old
469 	 * value) and then p*d_offset() walks into the target huge page instead
470 	 * of the old page table (sees the new value).
471 	 */
472 	pgd = pgdp_get(pgd_offset(kvm->mm, hva));
473 	if (pgd_none(pgd))
474 		goto out;
475 
476 	p4d = p4dp_get(p4d_offset(&pgd, hva));
477 	if (p4d_none(p4d) || !p4d_present(p4d))
478 		goto out;
479 
480 	pud = pudp_get(pud_offset(&p4d, hva));
481 	if (pud_none(pud) || !pud_present(pud))
482 		goto out;
483 
484 	if (pud_leaf(pud)) {
485 		size = PUD_SIZE;
486 		goto out;
487 	}
488 
489 	pmd = pmdp_get(pmd_offset(&pud, hva));
490 	if (pmd_none(pmd) || !pmd_present(pmd))
491 		goto out;
492 
493 	if (pmd_leaf(pmd))
494 		size = PMD_SIZE;
495 
496 out:
497 	local_irq_restore(flags);
498 	return size;
499 }
500 
501 static unsigned long transparent_hugepage_adjust(struct kvm *kvm,
502 						 struct kvm_memory_slot *memslot,
503 						 unsigned long hva,
504 						 kvm_pfn_t *hfnp, gpa_t *gpa)
505 {
506 	kvm_pfn_t hfn = *hfnp;
507 
508 	/*
509 	 * Make sure the adjustment is done only for THP pages. Also make
510 	 * sure that the HVA and GPA are sufficiently aligned and that the
511 	 * block map is contained within the memslot.
512 	 */
513 	if (fault_supports_gstage_huge_mapping(memslot, hva, PMD_SIZE)) {
514 		int sz;
515 
516 		sz = get_hva_mapping_size(kvm, hva);
517 		if (sz < PMD_SIZE)
518 			return sz;
519 
520 		*gpa &= PMD_MASK;
521 		hfn &= ~(PTRS_PER_PMD - 1);
522 		*hfnp = hfn;
523 
524 		return PMD_SIZE;
525 	}
526 
527 	return PAGE_SIZE;
528 }
529 
530 static unsigned long hugetlb_mapping_size(struct kvm_memory_slot *memslot,
531 					  unsigned long hva,
532 					  unsigned long map_size)
533 {
534 	switch (map_size) {
535 #ifndef CONFIG_32BIT
536 	case PUD_SIZE:
537 		if (fault_supports_gstage_huge_mapping(memslot, hva, PUD_SIZE))
538 			return PUD_SIZE;
539 		fallthrough;
540 #endif
541 	case PMD_SIZE:
542 		if (fault_supports_gstage_huge_mapping(memslot, hva, PMD_SIZE))
543 			return PMD_SIZE;
544 		fallthrough;
545 	case PAGE_SIZE:
546 		return PAGE_SIZE;
547 	default:
548 		return map_size;
549 	}
550 }
551 
552 static bool kvm_riscv_mmu_dirty_log_write_fault_fast(struct kvm *kvm,
553 						     struct kvm_memory_slot *memslot,
554 						     gpa_t gpa,
555 						     struct kvm_gstage_mapping *out_map)
556 {
557 	struct kvm_gstage gstage;
558 	unsigned long mmu_seq;
559 	pte_t old_pte, new_pte;
560 	pte_t *ptep;
561 	gfn_t gfn = gpa >> PAGE_SHIFT;
562 	u32 ptep_level;
563 	bool dirty_marked = false;
564 	bool ret;
565 
566 	kvm_riscv_gstage_init(&gstage, kvm);
567 	mmu_seq = kvm->mmu_invalidate_seq;
568 
569 	read_lock(&kvm->mmu_lock);
570 
571 	if (mmu_invalidate_retry_gfn(kvm, mmu_seq, gfn)) {
572 		ret = false;
573 		goto out_unlock;
574 	}
575 
576 	if (!kvm_riscv_gstage_get_leaf(&gstage, gpa, &ptep, &ptep_level) ||
577 	    ptep_level) {
578 		ret = false;
579 		goto out_unlock;
580 	}
581 
582 	for (;;) {
583 		old_pte = ptep_get(ptep);
584 		if (!(pte_val(old_pte) & _PAGE_LEAF)) {
585 			ret = false;
586 			break;
587 		}
588 
589 		if (!dirty_marked) {
590 			mark_page_dirty_in_slot(kvm, memslot, gfn);
591 			dirty_marked = true;
592 		}
593 
594 		if ((pte_val(old_pte) & (_PAGE_WRITE | _PAGE_DIRTY)) ==
595 		    (_PAGE_WRITE | _PAGE_DIRTY)) {
596 			new_pte = old_pte;
597 			ret = true;
598 			break;
599 		}
600 
601 		new_pte = pte_mkdirty(pte_mkwrite_novma(old_pte));
602 
603 		if (kvm_riscv_gstage_try_update_pte(&gstage, ptep_level, gpa,
604 						    ptep, old_pte, new_pte)) {
605 			ret = true;
606 			break;
607 		}
608 		cpu_relax();
609 	}
610 
611 out_unlock:
612 	read_unlock(&kvm->mmu_lock);
613 
614 	if (ret) {
615 		out_map->addr = gpa & PAGE_MASK;
616 		out_map->level = 0;
617 		out_map->pte = new_pte;
618 	}
619 
620 	return ret;
621 }
622 
623 int kvm_riscv_mmu_map(struct kvm_vcpu *vcpu, struct kvm_memory_slot *memslot,
624 		      gpa_t gpa, unsigned long hva, bool is_write,
625 		      struct kvm_gstage_mapping *out_map)
626 {
627 	int ret;
628 	kvm_pfn_t hfn;
629 	bool is_hugetlb;
630 	bool writable;
631 	unsigned int vma_pageshift;
632 	gfn_t gfn = gpa >> PAGE_SHIFT;
633 	struct vm_area_struct *vma;
634 	struct kvm *kvm = vcpu->kvm;
635 	struct kvm_mmu_memory_cache *pcache = &vcpu->arch.mmu_page_cache;
636 	bool logging = kvm_slot_dirty_track_enabled(memslot) &&
637 		       !(memslot->flags & KVM_MEM_READONLY);
638 	unsigned long vma_pagesize, mmu_seq;
639 	struct kvm_gstage gstage;
640 	struct page *page;
641 
642 	kvm_riscv_gstage_init(&gstage, kvm);
643 
644 	/* Setup initial state of output mapping */
645 	memset(out_map, 0, sizeof(*out_map));
646 
647 	if (is_write && logging &&
648 	    kvm_riscv_mmu_dirty_log_write_fault_fast(kvm, memslot, gpa, out_map))
649 		return 0;
650 
651 	/* We need minimum second+third level pages */
652 	ret = kvm_mmu_topup_memory_cache(pcache, kvm->arch.pgd_levels);
653 	if (ret) {
654 		kvm_err("Failed to topup G-stage cache\n");
655 		return ret;
656 	}
657 
658 	mmap_read_lock(current->mm);
659 
660 	vma = vma_lookup(current->mm, hva);
661 	if (unlikely(!vma)) {
662 		kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
663 		mmap_read_unlock(current->mm);
664 		return -EFAULT;
665 	}
666 
667 	is_hugetlb = is_vm_hugetlb_page(vma);
668 	if (is_hugetlb)
669 		vma_pageshift = huge_page_shift(hstate_vma(vma));
670 	else
671 		vma_pageshift = PAGE_SHIFT;
672 	vma_pagesize = 1ULL << vma_pageshift;
673 	if (logging || (vma->vm_flags & VM_PFNMAP))
674 		vma_pagesize = PAGE_SIZE;
675 	else if (is_hugetlb)
676 		vma_pagesize = hugetlb_mapping_size(memslot, hva, vma_pagesize);
677 
678 	/*
679 	 * For hugetlb mappings, vma_pagesize might have been reduced from the
680 	 * VMA size to a smaller safe mapping size.
681 	 */
682 	if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
683 		gfn = ALIGN_DOWN(gpa, vma_pagesize) >> PAGE_SHIFT;
684 
685 	/*
686 	 * Read mmu_invalidate_seq so that KVM can detect if the results of
687 	 * vma_lookup() or __kvm_faultin_pfn() become stale prior to acquiring
688 	 * kvm->mmu_lock.
689 	 *
690 	 * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
691 	 * with the smp_wmb() in kvm_mmu_invalidate_end().
692 	 */
693 	mmu_seq = kvm->mmu_invalidate_seq;
694 	mmap_read_unlock(current->mm);
695 
696 	if (vma_pagesize != PUD_SIZE &&
697 	    vma_pagesize != PMD_SIZE &&
698 	    vma_pagesize != PAGE_SIZE) {
699 		kvm_err("Invalid VMA page size 0x%lx\n", vma_pagesize);
700 		return -EFAULT;
701 	}
702 
703 	hfn = __kvm_faultin_pfn(memslot, gfn, is_write ? FOLL_WRITE : 0,
704 				&writable, &page);
705 	if (hfn == KVM_PFN_ERR_HWPOISON) {
706 		send_sig_mceerr(BUS_MCEERR_AR, (void __user *)hva,
707 				vma_pageshift, current);
708 		return 0;
709 	}
710 	if (is_error_noslot_pfn(hfn))
711 		return -EFAULT;
712 
713 	/*
714 	 * If logging is active then we allow writable pages only
715 	 * for write faults.
716 	 */
717 	if (logging && !is_write)
718 		writable = false;
719 
720 	write_lock(&kvm->mmu_lock);
721 
722 	if (mmu_invalidate_retry(kvm, mmu_seq))
723 		goto out_unlock;
724 
725 	/*
726 	 * Check if we are backed by a THP and thus use block mapping if
727 	 * possible. Hugetlb mappings already selected their target size above,
728 	 * so do not promote them through the THP helper.
729 	 */
730 	if (!logging && !is_hugetlb && vma_pagesize == PAGE_SIZE)
731 		vma_pagesize = transparent_hugepage_adjust(kvm, memslot, hva, &hfn, &gpa);
732 
733 	if (writable) {
734 		mark_page_dirty_in_slot(kvm, memslot, gfn);
735 		ret = kvm_riscv_gstage_map_page(&gstage, pcache, gpa, hfn << PAGE_SHIFT,
736 						vma_pagesize, false, true, out_map);
737 	} else {
738 		ret = kvm_riscv_gstage_map_page(&gstage, pcache, gpa, hfn << PAGE_SHIFT,
739 						vma_pagesize, true, true, out_map);
740 	}
741 
742 	if (ret)
743 		kvm_err("Failed to map in G-stage\n");
744 
745 out_unlock:
746 	kvm_release_faultin_page(kvm, page, ret && ret != -EEXIST, writable);
747 	write_unlock(&kvm->mmu_lock);
748 	return ret;
749 }
750 
751 int kvm_riscv_mmu_alloc_pgd(struct kvm *kvm)
752 {
753 	struct page *pgd_page;
754 
755 	if (kvm->arch.pgd != NULL) {
756 		kvm_err("kvm_arch already initialized?\n");
757 		return -EINVAL;
758 	}
759 
760 	pgd_page = alloc_pages(GFP_KERNEL_ACCOUNT | __GFP_ZERO,
761 			       get_order(kvm_riscv_gstage_pgd_size));
762 	if (!pgd_page)
763 		return -ENOMEM;
764 	kvm->arch.pgd = page_to_virt(pgd_page);
765 	kvm->arch.pgd_phys = page_to_phys(pgd_page);
766 	kvm->arch.pgd_levels = kvm_riscv_gstage_max_pgd_levels;
767 	kvm->arch.pgd_split_page_cache.gfp_zero = __GFP_ZERO;
768 
769 	return 0;
770 }
771 
772 void kvm_riscv_mmu_free_pgd(struct kvm *kvm)
773 {
774 	struct kvm_gstage gstage;
775 	void *pgd = NULL;
776 	bool flush = false;
777 
778 	write_lock(&kvm->mmu_lock);
779 	if (kvm->arch.pgd) {
780 		kvm_riscv_gstage_init(&gstage, kvm);
781 		flush = kvm_riscv_gstage_unmap_range(&gstage, 0UL,
782 			kvm_riscv_gstage_gpa_size(kvm->arch.pgd_levels), false);
783 		pgd = READ_ONCE(kvm->arch.pgd);
784 		kvm->arch.pgd = NULL;
785 		kvm->arch.pgd_phys = 0;
786 		kvm->arch.pgd_levels = 0;
787 	}
788 	write_unlock(&kvm->mmu_lock);
789 
790 	if (flush)
791 		kvm_flush_remote_tlbs(kvm);
792 
793 	if (pgd)
794 		free_pages((unsigned long)pgd, get_order(kvm_riscv_gstage_pgd_size));
795 
796 	kvm_mmu_free_memory_cache(&kvm->arch.pgd_split_page_cache);
797 }
798 
799 void kvm_riscv_mmu_update_hgatp(struct kvm_vcpu *vcpu)
800 {
801 	struct kvm_arch *ka = &vcpu->kvm->arch;
802 	unsigned long hgatp = kvm_riscv_gstage_mode(ka->pgd_levels)
803 			      << HGATP_MODE_SHIFT;
804 
805 	hgatp |= (READ_ONCE(ka->vmid.vmid) << HGATP_VMID_SHIFT) & HGATP_VMID;
806 	hgatp |= (ka->pgd_phys >> PAGE_SHIFT) & HGATP_PPN;
807 
808 	ncsr_write(CSR_HGATP, hgatp);
809 
810 	if (!kvm_riscv_gstage_vmid_bits())
811 		kvm_riscv_local_hfence_gvma_all();
812 }
813