xref: /openbmc/linux/arch/x86/kvm/mmu/tdp_mmu.c (revision 4c004ed9)
1 // SPDX-License-Identifier: GPL-2.0
2 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
3 
4 #include "mmu.h"
5 #include "mmu_internal.h"
6 #include "mmutrace.h"
7 #include "tdp_iter.h"
8 #include "tdp_mmu.h"
9 #include "spte.h"
10 
11 #include <asm/cmpxchg.h>
12 #include <trace/events/kvm.h>
13 
14 /* Initializes the TDP MMU for the VM, if enabled. */
15 void kvm_mmu_init_tdp_mmu(struct kvm *kvm)
16 {
17 	INIT_LIST_HEAD(&kvm->arch.tdp_mmu_roots);
18 	spin_lock_init(&kvm->arch.tdp_mmu_pages_lock);
19 }
20 
21 /* Arbitrarily returns true so that this may be used in if statements. */
22 static __always_inline bool kvm_lockdep_assert_mmu_lock_held(struct kvm *kvm,
23 							     bool shared)
24 {
25 	if (shared)
26 		lockdep_assert_held_read(&kvm->mmu_lock);
27 	else
28 		lockdep_assert_held_write(&kvm->mmu_lock);
29 
30 	return true;
31 }
32 
33 void kvm_mmu_uninit_tdp_mmu(struct kvm *kvm)
34 {
35 	/*
36 	 * Invalidate all roots, which besides the obvious, schedules all roots
37 	 * for zapping and thus puts the TDP MMU's reference to each root, i.e.
38 	 * ultimately frees all roots.
39 	 */
40 	kvm_tdp_mmu_invalidate_all_roots(kvm);
41 	kvm_tdp_mmu_zap_invalidated_roots(kvm);
42 
43 	WARN_ON(atomic64_read(&kvm->arch.tdp_mmu_pages));
44 	WARN_ON(!list_empty(&kvm->arch.tdp_mmu_roots));
45 
46 	/*
47 	 * Ensure that all the outstanding RCU callbacks to free shadow pages
48 	 * can run before the VM is torn down.  Putting the last reference to
49 	 * zapped roots will create new callbacks.
50 	 */
51 	rcu_barrier();
52 }
53 
54 static void tdp_mmu_free_sp(struct kvm_mmu_page *sp)
55 {
56 	free_page((unsigned long)sp->spt);
57 	kmem_cache_free(mmu_page_header_cache, sp);
58 }
59 
60 /*
61  * This is called through call_rcu in order to free TDP page table memory
62  * safely with respect to other kernel threads that may be operating on
63  * the memory.
64  * By only accessing TDP MMU page table memory in an RCU read critical
65  * section, and freeing it after a grace period, lockless access to that
66  * memory won't use it after it is freed.
67  */
68 static void tdp_mmu_free_sp_rcu_callback(struct rcu_head *head)
69 {
70 	struct kvm_mmu_page *sp = container_of(head, struct kvm_mmu_page,
71 					       rcu_head);
72 
73 	tdp_mmu_free_sp(sp);
74 }
75 
76 void kvm_tdp_mmu_put_root(struct kvm *kvm, struct kvm_mmu_page *root,
77 			  bool shared)
78 {
79 	kvm_lockdep_assert_mmu_lock_held(kvm, shared);
80 
81 	if (!refcount_dec_and_test(&root->tdp_mmu_root_count))
82 		return;
83 
84 	/*
85 	 * The TDP MMU itself holds a reference to each root until the root is
86 	 * explicitly invalidated, i.e. the final reference should be never be
87 	 * put for a valid root.
88 	 */
89 	KVM_BUG_ON(!is_tdp_mmu_page(root) || !root->role.invalid, kvm);
90 
91 	spin_lock(&kvm->arch.tdp_mmu_pages_lock);
92 	list_del_rcu(&root->link);
93 	spin_unlock(&kvm->arch.tdp_mmu_pages_lock);
94 	call_rcu(&root->rcu_head, tdp_mmu_free_sp_rcu_callback);
95 }
96 
97 /*
98  * Returns the next root after @prev_root (or the first root if @prev_root is
99  * NULL).  A reference to the returned root is acquired, and the reference to
100  * @prev_root is released (the caller obviously must hold a reference to
101  * @prev_root if it's non-NULL).
102  *
103  * If @only_valid is true, invalid roots are skipped.
104  *
105  * Returns NULL if the end of tdp_mmu_roots was reached.
106  */
107 static struct kvm_mmu_page *tdp_mmu_next_root(struct kvm *kvm,
108 					      struct kvm_mmu_page *prev_root,
109 					      bool shared, bool only_valid)
110 {
111 	struct kvm_mmu_page *next_root;
112 
113 	rcu_read_lock();
114 
115 	if (prev_root)
116 		next_root = list_next_or_null_rcu(&kvm->arch.tdp_mmu_roots,
117 						  &prev_root->link,
118 						  typeof(*prev_root), link);
119 	else
120 		next_root = list_first_or_null_rcu(&kvm->arch.tdp_mmu_roots,
121 						   typeof(*next_root), link);
122 
123 	while (next_root) {
124 		if ((!only_valid || !next_root->role.invalid) &&
125 		    kvm_tdp_mmu_get_root(next_root))
126 			break;
127 
128 		next_root = list_next_or_null_rcu(&kvm->arch.tdp_mmu_roots,
129 				&next_root->link, typeof(*next_root), link);
130 	}
131 
132 	rcu_read_unlock();
133 
134 	if (prev_root)
135 		kvm_tdp_mmu_put_root(kvm, prev_root, shared);
136 
137 	return next_root;
138 }
139 
140 /*
141  * Note: this iterator gets and puts references to the roots it iterates over.
142  * This makes it safe to release the MMU lock and yield within the loop, but
143  * if exiting the loop early, the caller must drop the reference to the most
144  * recent root. (Unless keeping a live reference is desirable.)
145  *
146  * If shared is set, this function is operating under the MMU lock in read
147  * mode. In the unlikely event that this thread must free a root, the lock
148  * will be temporarily dropped and reacquired in write mode.
149  */
150 #define __for_each_tdp_mmu_root_yield_safe(_kvm, _root, _as_id, _shared, _only_valid)\
151 	for (_root = tdp_mmu_next_root(_kvm, NULL, _shared, _only_valid);	\
152 	     _root;								\
153 	     _root = tdp_mmu_next_root(_kvm, _root, _shared, _only_valid))	\
154 		if (kvm_lockdep_assert_mmu_lock_held(_kvm, _shared) &&		\
155 		    kvm_mmu_page_as_id(_root) != _as_id) {			\
156 		} else
157 
158 #define for_each_valid_tdp_mmu_root_yield_safe(_kvm, _root, _as_id, _shared)	\
159 	__for_each_tdp_mmu_root_yield_safe(_kvm, _root, _as_id, _shared, true)
160 
161 #define for_each_tdp_mmu_root_yield_safe(_kvm, _root, _shared)			\
162 	for (_root = tdp_mmu_next_root(_kvm, NULL, _shared, false);		\
163 	     _root;								\
164 	     _root = tdp_mmu_next_root(_kvm, _root, _shared, false))		\
165 		if (!kvm_lockdep_assert_mmu_lock_held(_kvm, _shared)) {		\
166 		} else
167 
168 /*
169  * Iterate over all TDP MMU roots.  Requires that mmu_lock be held for write,
170  * the implication being that any flow that holds mmu_lock for read is
171  * inherently yield-friendly and should use the yield-safe variant above.
172  * Holding mmu_lock for write obviates the need for RCU protection as the list
173  * is guaranteed to be stable.
174  */
175 #define for_each_tdp_mmu_root(_kvm, _root, _as_id)			\
176 	list_for_each_entry(_root, &_kvm->arch.tdp_mmu_roots, link)	\
177 		if (kvm_lockdep_assert_mmu_lock_held(_kvm, false) &&	\
178 		    kvm_mmu_page_as_id(_root) != _as_id) {		\
179 		} else
180 
181 static struct kvm_mmu_page *tdp_mmu_alloc_sp(struct kvm_vcpu *vcpu)
182 {
183 	struct kvm_mmu_page *sp;
184 
185 	sp = kvm_mmu_memory_cache_alloc(&vcpu->arch.mmu_page_header_cache);
186 	sp->spt = kvm_mmu_memory_cache_alloc(&vcpu->arch.mmu_shadow_page_cache);
187 
188 	return sp;
189 }
190 
191 static void tdp_mmu_init_sp(struct kvm_mmu_page *sp, tdp_ptep_t sptep,
192 			    gfn_t gfn, union kvm_mmu_page_role role)
193 {
194 	INIT_LIST_HEAD(&sp->possible_nx_huge_page_link);
195 
196 	set_page_private(virt_to_page(sp->spt), (unsigned long)sp);
197 
198 	sp->role = role;
199 	sp->gfn = gfn;
200 	sp->ptep = sptep;
201 	sp->tdp_mmu_page = true;
202 
203 	trace_kvm_mmu_get_page(sp, true);
204 }
205 
206 static void tdp_mmu_init_child_sp(struct kvm_mmu_page *child_sp,
207 				  struct tdp_iter *iter)
208 {
209 	struct kvm_mmu_page *parent_sp;
210 	union kvm_mmu_page_role role;
211 
212 	parent_sp = sptep_to_sp(rcu_dereference(iter->sptep));
213 
214 	role = parent_sp->role;
215 	role.level--;
216 
217 	tdp_mmu_init_sp(child_sp, iter->sptep, iter->gfn, role);
218 }
219 
220 hpa_t kvm_tdp_mmu_get_vcpu_root_hpa(struct kvm_vcpu *vcpu)
221 {
222 	union kvm_mmu_page_role role = vcpu->arch.mmu->root_role;
223 	struct kvm *kvm = vcpu->kvm;
224 	struct kvm_mmu_page *root;
225 
226 	lockdep_assert_held_write(&kvm->mmu_lock);
227 
228 	/*
229 	 * Check for an existing root before allocating a new one.  Note, the
230 	 * role check prevents consuming an invalid root.
231 	 */
232 	for_each_tdp_mmu_root(kvm, root, kvm_mmu_role_as_id(role)) {
233 		if (root->role.word == role.word &&
234 		    kvm_tdp_mmu_get_root(root))
235 			goto out;
236 	}
237 
238 	root = tdp_mmu_alloc_sp(vcpu);
239 	tdp_mmu_init_sp(root, NULL, 0, role);
240 
241 	/*
242 	 * TDP MMU roots are kept until they are explicitly invalidated, either
243 	 * by a memslot update or by the destruction of the VM.  Initialize the
244 	 * refcount to two; one reference for the vCPU, and one reference for
245 	 * the TDP MMU itself, which is held until the root is invalidated and
246 	 * is ultimately put by kvm_tdp_mmu_zap_invalidated_roots().
247 	 */
248 	refcount_set(&root->tdp_mmu_root_count, 2);
249 
250 	spin_lock(&kvm->arch.tdp_mmu_pages_lock);
251 	list_add_rcu(&root->link, &kvm->arch.tdp_mmu_roots);
252 	spin_unlock(&kvm->arch.tdp_mmu_pages_lock);
253 
254 out:
255 	return __pa(root->spt);
256 }
257 
258 static void handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,
259 				u64 old_spte, u64 new_spte, int level,
260 				bool shared);
261 
262 static void tdp_account_mmu_page(struct kvm *kvm, struct kvm_mmu_page *sp)
263 {
264 	kvm_account_pgtable_pages((void *)sp->spt, +1);
265 	atomic64_inc(&kvm->arch.tdp_mmu_pages);
266 }
267 
268 static void tdp_unaccount_mmu_page(struct kvm *kvm, struct kvm_mmu_page *sp)
269 {
270 	kvm_account_pgtable_pages((void *)sp->spt, -1);
271 	atomic64_dec(&kvm->arch.tdp_mmu_pages);
272 }
273 
274 /**
275  * tdp_mmu_unlink_sp() - Remove a shadow page from the list of used pages
276  *
277  * @kvm: kvm instance
278  * @sp: the page to be removed
279  * @shared: This operation may not be running under the exclusive use of
280  *	    the MMU lock and the operation must synchronize with other
281  *	    threads that might be adding or removing pages.
282  */
283 static void tdp_mmu_unlink_sp(struct kvm *kvm, struct kvm_mmu_page *sp,
284 			      bool shared)
285 {
286 	tdp_unaccount_mmu_page(kvm, sp);
287 
288 	if (!sp->nx_huge_page_disallowed)
289 		return;
290 
291 	if (shared)
292 		spin_lock(&kvm->arch.tdp_mmu_pages_lock);
293 	else
294 		lockdep_assert_held_write(&kvm->mmu_lock);
295 
296 	sp->nx_huge_page_disallowed = false;
297 	untrack_possible_nx_huge_page(kvm, sp);
298 
299 	if (shared)
300 		spin_unlock(&kvm->arch.tdp_mmu_pages_lock);
301 }
302 
303 /**
304  * handle_removed_pt() - handle a page table removed from the TDP structure
305  *
306  * @kvm: kvm instance
307  * @pt: the page removed from the paging structure
308  * @shared: This operation may not be running under the exclusive use
309  *	    of the MMU lock and the operation must synchronize with other
310  *	    threads that might be modifying SPTEs.
311  *
312  * Given a page table that has been removed from the TDP paging structure,
313  * iterates through the page table to clear SPTEs and free child page tables.
314  *
315  * Note that pt is passed in as a tdp_ptep_t, but it does not need RCU
316  * protection. Since this thread removed it from the paging structure,
317  * this thread will be responsible for ensuring the page is freed. Hence the
318  * early rcu_dereferences in the function.
319  */
320 static void handle_removed_pt(struct kvm *kvm, tdp_ptep_t pt, bool shared)
321 {
322 	struct kvm_mmu_page *sp = sptep_to_sp(rcu_dereference(pt));
323 	int level = sp->role.level;
324 	gfn_t base_gfn = sp->gfn;
325 	int i;
326 
327 	trace_kvm_mmu_prepare_zap_page(sp);
328 
329 	tdp_mmu_unlink_sp(kvm, sp, shared);
330 
331 	for (i = 0; i < SPTE_ENT_PER_PAGE; i++) {
332 		tdp_ptep_t sptep = pt + i;
333 		gfn_t gfn = base_gfn + i * KVM_PAGES_PER_HPAGE(level);
334 		u64 old_spte;
335 
336 		if (shared) {
337 			/*
338 			 * Set the SPTE to a nonpresent value that other
339 			 * threads will not overwrite. If the SPTE was
340 			 * already marked as removed then another thread
341 			 * handling a page fault could overwrite it, so
342 			 * set the SPTE until it is set from some other
343 			 * value to the removed SPTE value.
344 			 */
345 			for (;;) {
346 				old_spte = kvm_tdp_mmu_write_spte_atomic(sptep, REMOVED_SPTE);
347 				if (!is_removed_spte(old_spte))
348 					break;
349 				cpu_relax();
350 			}
351 		} else {
352 			/*
353 			 * If the SPTE is not MMU-present, there is no backing
354 			 * page associated with the SPTE and so no side effects
355 			 * that need to be recorded, and exclusive ownership of
356 			 * mmu_lock ensures the SPTE can't be made present.
357 			 * Note, zapping MMIO SPTEs is also unnecessary as they
358 			 * are guarded by the memslots generation, not by being
359 			 * unreachable.
360 			 */
361 			old_spte = kvm_tdp_mmu_read_spte(sptep);
362 			if (!is_shadow_present_pte(old_spte))
363 				continue;
364 
365 			/*
366 			 * Use the common helper instead of a raw WRITE_ONCE as
367 			 * the SPTE needs to be updated atomically if it can be
368 			 * modified by a different vCPU outside of mmu_lock.
369 			 * Even though the parent SPTE is !PRESENT, the TLB
370 			 * hasn't yet been flushed, and both Intel and AMD
371 			 * document that A/D assists can use upper-level PxE
372 			 * entries that are cached in the TLB, i.e. the CPU can
373 			 * still access the page and mark it dirty.
374 			 *
375 			 * No retry is needed in the atomic update path as the
376 			 * sole concern is dropping a Dirty bit, i.e. no other
377 			 * task can zap/remove the SPTE as mmu_lock is held for
378 			 * write.  Marking the SPTE as a removed SPTE is not
379 			 * strictly necessary for the same reason, but using
380 			 * the remove SPTE value keeps the shared/exclusive
381 			 * paths consistent and allows the handle_changed_spte()
382 			 * call below to hardcode the new value to REMOVED_SPTE.
383 			 *
384 			 * Note, even though dropping a Dirty bit is the only
385 			 * scenario where a non-atomic update could result in a
386 			 * functional bug, simply checking the Dirty bit isn't
387 			 * sufficient as a fast page fault could read the upper
388 			 * level SPTE before it is zapped, and then make this
389 			 * target SPTE writable, resume the guest, and set the
390 			 * Dirty bit between reading the SPTE above and writing
391 			 * it here.
392 			 */
393 			old_spte = kvm_tdp_mmu_write_spte(sptep, old_spte,
394 							  REMOVED_SPTE, level);
395 		}
396 		handle_changed_spte(kvm, kvm_mmu_page_as_id(sp), gfn,
397 				    old_spte, REMOVED_SPTE, level, shared);
398 	}
399 
400 	call_rcu(&sp->rcu_head, tdp_mmu_free_sp_rcu_callback);
401 }
402 
403 /**
404  * handle_changed_spte - handle bookkeeping associated with an SPTE change
405  * @kvm: kvm instance
406  * @as_id: the address space of the paging structure the SPTE was a part of
407  * @gfn: the base GFN that was mapped by the SPTE
408  * @old_spte: The value of the SPTE before the change
409  * @new_spte: The value of the SPTE after the change
410  * @level: the level of the PT the SPTE is part of in the paging structure
411  * @shared: This operation may not be running under the exclusive use of
412  *	    the MMU lock and the operation must synchronize with other
413  *	    threads that might be modifying SPTEs.
414  *
415  * Handle bookkeeping that might result from the modification of a SPTE.  Note,
416  * dirty logging updates are handled in common code, not here (see make_spte()
417  * and fast_pf_fix_direct_spte()).
418  */
419 static void handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,
420 				u64 old_spte, u64 new_spte, int level,
421 				bool shared)
422 {
423 	bool was_present = is_shadow_present_pte(old_spte);
424 	bool is_present = is_shadow_present_pte(new_spte);
425 	bool was_leaf = was_present && is_last_spte(old_spte, level);
426 	bool is_leaf = is_present && is_last_spte(new_spte, level);
427 	bool pfn_changed = spte_to_pfn(old_spte) != spte_to_pfn(new_spte);
428 
429 	WARN_ON_ONCE(level > PT64_ROOT_MAX_LEVEL);
430 	WARN_ON_ONCE(level < PG_LEVEL_4K);
431 	WARN_ON_ONCE(gfn & (KVM_PAGES_PER_HPAGE(level) - 1));
432 
433 	/*
434 	 * If this warning were to trigger it would indicate that there was a
435 	 * missing MMU notifier or a race with some notifier handler.
436 	 * A present, leaf SPTE should never be directly replaced with another
437 	 * present leaf SPTE pointing to a different PFN. A notifier handler
438 	 * should be zapping the SPTE before the main MM's page table is
439 	 * changed, or the SPTE should be zeroed, and the TLBs flushed by the
440 	 * thread before replacement.
441 	 */
442 	if (was_leaf && is_leaf && pfn_changed) {
443 		pr_err("Invalid SPTE change: cannot replace a present leaf\n"
444 		       "SPTE with another present leaf SPTE mapping a\n"
445 		       "different PFN!\n"
446 		       "as_id: %d gfn: %llx old_spte: %llx new_spte: %llx level: %d",
447 		       as_id, gfn, old_spte, new_spte, level);
448 
449 		/*
450 		 * Crash the host to prevent error propagation and guest data
451 		 * corruption.
452 		 */
453 		BUG();
454 	}
455 
456 	if (old_spte == new_spte)
457 		return;
458 
459 	trace_kvm_tdp_mmu_spte_changed(as_id, gfn, level, old_spte, new_spte);
460 
461 	if (is_leaf)
462 		check_spte_writable_invariants(new_spte);
463 
464 	/*
465 	 * The only times a SPTE should be changed from a non-present to
466 	 * non-present state is when an MMIO entry is installed/modified/
467 	 * removed. In that case, there is nothing to do here.
468 	 */
469 	if (!was_present && !is_present) {
470 		/*
471 		 * If this change does not involve a MMIO SPTE or removed SPTE,
472 		 * it is unexpected. Log the change, though it should not
473 		 * impact the guest since both the former and current SPTEs
474 		 * are nonpresent.
475 		 */
476 		if (WARN_ON_ONCE(!is_mmio_spte(old_spte) &&
477 				 !is_mmio_spte(new_spte) &&
478 				 !is_removed_spte(new_spte)))
479 			pr_err("Unexpected SPTE change! Nonpresent SPTEs\n"
480 			       "should not be replaced with another,\n"
481 			       "different nonpresent SPTE, unless one or both\n"
482 			       "are MMIO SPTEs, or the new SPTE is\n"
483 			       "a temporary removed SPTE.\n"
484 			       "as_id: %d gfn: %llx old_spte: %llx new_spte: %llx level: %d",
485 			       as_id, gfn, old_spte, new_spte, level);
486 		return;
487 	}
488 
489 	if (is_leaf != was_leaf)
490 		kvm_update_page_stats(kvm, level, is_leaf ? 1 : -1);
491 
492 	if (was_leaf && is_dirty_spte(old_spte) &&
493 	    (!is_present || !is_dirty_spte(new_spte) || pfn_changed))
494 		kvm_set_pfn_dirty(spte_to_pfn(old_spte));
495 
496 	/*
497 	 * Recursively handle child PTs if the change removed a subtree from
498 	 * the paging structure.  Note the WARN on the PFN changing without the
499 	 * SPTE being converted to a hugepage (leaf) or being zapped.  Shadow
500 	 * pages are kernel allocations and should never be migrated.
501 	 */
502 	if (was_present && !was_leaf &&
503 	    (is_leaf || !is_present || WARN_ON_ONCE(pfn_changed)))
504 		handle_removed_pt(kvm, spte_to_child_pt(old_spte, level), shared);
505 
506 	if (was_leaf && is_accessed_spte(old_spte) &&
507 	    (!is_present || !is_accessed_spte(new_spte) || pfn_changed))
508 		kvm_set_pfn_accessed(spte_to_pfn(old_spte));
509 }
510 
511 /*
512  * tdp_mmu_set_spte_atomic - Set a TDP MMU SPTE atomically
513  * and handle the associated bookkeeping.  Do not mark the page dirty
514  * in KVM's dirty bitmaps.
515  *
516  * If setting the SPTE fails because it has changed, iter->old_spte will be
517  * refreshed to the current value of the spte.
518  *
519  * @kvm: kvm instance
520  * @iter: a tdp_iter instance currently on the SPTE that should be set
521  * @new_spte: The value the SPTE should be set to
522  * Return:
523  * * 0      - If the SPTE was set.
524  * * -EBUSY - If the SPTE cannot be set. In this case this function will have
525  *            no side-effects other than setting iter->old_spte to the last
526  *            known value of the spte.
527  */
528 static inline int tdp_mmu_set_spte_atomic(struct kvm *kvm,
529 					  struct tdp_iter *iter,
530 					  u64 new_spte)
531 {
532 	u64 *sptep = rcu_dereference(iter->sptep);
533 
534 	/*
535 	 * The caller is responsible for ensuring the old SPTE is not a REMOVED
536 	 * SPTE.  KVM should never attempt to zap or manipulate a REMOVED SPTE,
537 	 * and pre-checking before inserting a new SPTE is advantageous as it
538 	 * avoids unnecessary work.
539 	 */
540 	WARN_ON_ONCE(iter->yielded || is_removed_spte(iter->old_spte));
541 
542 	lockdep_assert_held_read(&kvm->mmu_lock);
543 
544 	/*
545 	 * Note, fast_pf_fix_direct_spte() can also modify TDP MMU SPTEs and
546 	 * does not hold the mmu_lock.  On failure, i.e. if a different logical
547 	 * CPU modified the SPTE, try_cmpxchg64() updates iter->old_spte with
548 	 * the current value, so the caller operates on fresh data, e.g. if it
549 	 * retries tdp_mmu_set_spte_atomic()
550 	 */
551 	if (!try_cmpxchg64(sptep, &iter->old_spte, new_spte))
552 		return -EBUSY;
553 
554 	handle_changed_spte(kvm, iter->as_id, iter->gfn, iter->old_spte,
555 			    new_spte, iter->level, true);
556 
557 	return 0;
558 }
559 
560 static inline int tdp_mmu_zap_spte_atomic(struct kvm *kvm,
561 					  struct tdp_iter *iter)
562 {
563 	int ret;
564 
565 	/*
566 	 * Freeze the SPTE by setting it to a special,
567 	 * non-present value. This will stop other threads from
568 	 * immediately installing a present entry in its place
569 	 * before the TLBs are flushed.
570 	 */
571 	ret = tdp_mmu_set_spte_atomic(kvm, iter, REMOVED_SPTE);
572 	if (ret)
573 		return ret;
574 
575 	kvm_flush_remote_tlbs_gfn(kvm, iter->gfn, iter->level);
576 
577 	/*
578 	 * No other thread can overwrite the removed SPTE as they must either
579 	 * wait on the MMU lock or use tdp_mmu_set_spte_atomic() which will not
580 	 * overwrite the special removed SPTE value. No bookkeeping is needed
581 	 * here since the SPTE is going from non-present to non-present.  Use
582 	 * the raw write helper to avoid an unnecessary check on volatile bits.
583 	 */
584 	__kvm_tdp_mmu_write_spte(iter->sptep, 0);
585 
586 	return 0;
587 }
588 
589 
590 /*
591  * tdp_mmu_set_spte - Set a TDP MMU SPTE and handle the associated bookkeeping
592  * @kvm:	      KVM instance
593  * @as_id:	      Address space ID, i.e. regular vs. SMM
594  * @sptep:	      Pointer to the SPTE
595  * @old_spte:	      The current value of the SPTE
596  * @new_spte:	      The new value that will be set for the SPTE
597  * @gfn:	      The base GFN that was (or will be) mapped by the SPTE
598  * @level:	      The level _containing_ the SPTE (its parent PT's level)
599  *
600  * Returns the old SPTE value, which _may_ be different than @old_spte if the
601  * SPTE had voldatile bits.
602  */
603 static u64 tdp_mmu_set_spte(struct kvm *kvm, int as_id, tdp_ptep_t sptep,
604 			    u64 old_spte, u64 new_spte, gfn_t gfn, int level)
605 {
606 	lockdep_assert_held_write(&kvm->mmu_lock);
607 
608 	/*
609 	 * No thread should be using this function to set SPTEs to or from the
610 	 * temporary removed SPTE value.
611 	 * If operating under the MMU lock in read mode, tdp_mmu_set_spte_atomic
612 	 * should be used. If operating under the MMU lock in write mode, the
613 	 * use of the removed SPTE should not be necessary.
614 	 */
615 	WARN_ON_ONCE(is_removed_spte(old_spte) || is_removed_spte(new_spte));
616 
617 	old_spte = kvm_tdp_mmu_write_spte(sptep, old_spte, new_spte, level);
618 
619 	handle_changed_spte(kvm, as_id, gfn, old_spte, new_spte, level, false);
620 	return old_spte;
621 }
622 
623 static inline void tdp_mmu_iter_set_spte(struct kvm *kvm, struct tdp_iter *iter,
624 					 u64 new_spte)
625 {
626 	WARN_ON_ONCE(iter->yielded);
627 	iter->old_spte = tdp_mmu_set_spte(kvm, iter->as_id, iter->sptep,
628 					  iter->old_spte, new_spte,
629 					  iter->gfn, iter->level);
630 }
631 
632 #define tdp_root_for_each_pte(_iter, _root, _start, _end) \
633 	for_each_tdp_pte(_iter, _root, _start, _end)
634 
635 #define tdp_root_for_each_leaf_pte(_iter, _root, _start, _end)	\
636 	tdp_root_for_each_pte(_iter, _root, _start, _end)		\
637 		if (!is_shadow_present_pte(_iter.old_spte) ||		\
638 		    !is_last_spte(_iter.old_spte, _iter.level))		\
639 			continue;					\
640 		else
641 
642 #define tdp_mmu_for_each_pte(_iter, _mmu, _start, _end)		\
643 	for_each_tdp_pte(_iter, root_to_sp(_mmu->root.hpa), _start, _end)
644 
645 /*
646  * Yield if the MMU lock is contended or this thread needs to return control
647  * to the scheduler.
648  *
649  * If this function should yield and flush is set, it will perform a remote
650  * TLB flush before yielding.
651  *
652  * If this function yields, iter->yielded is set and the caller must skip to
653  * the next iteration, where tdp_iter_next() will reset the tdp_iter's walk
654  * over the paging structures to allow the iterator to continue its traversal
655  * from the paging structure root.
656  *
657  * Returns true if this function yielded.
658  */
659 static inline bool __must_check tdp_mmu_iter_cond_resched(struct kvm *kvm,
660 							  struct tdp_iter *iter,
661 							  bool flush, bool shared)
662 {
663 	WARN_ON_ONCE(iter->yielded);
664 
665 	/* Ensure forward progress has been made before yielding. */
666 	if (iter->next_last_level_gfn == iter->yielded_gfn)
667 		return false;
668 
669 	if (need_resched() || rwlock_needbreak(&kvm->mmu_lock)) {
670 		if (flush)
671 			kvm_flush_remote_tlbs(kvm);
672 
673 		rcu_read_unlock();
674 
675 		if (shared)
676 			cond_resched_rwlock_read(&kvm->mmu_lock);
677 		else
678 			cond_resched_rwlock_write(&kvm->mmu_lock);
679 
680 		rcu_read_lock();
681 
682 		WARN_ON_ONCE(iter->gfn > iter->next_last_level_gfn);
683 
684 		iter->yielded = true;
685 	}
686 
687 	return iter->yielded;
688 }
689 
690 static inline gfn_t tdp_mmu_max_gfn_exclusive(void)
691 {
692 	/*
693 	 * Bound TDP MMU walks at host.MAXPHYADDR.  KVM disallows memslots with
694 	 * a gpa range that would exceed the max gfn, and KVM does not create
695 	 * MMIO SPTEs for "impossible" gfns, instead sending such accesses down
696 	 * the slow emulation path every time.
697 	 */
698 	return kvm_mmu_max_gfn() + 1;
699 }
700 
701 static void __tdp_mmu_zap_root(struct kvm *kvm, struct kvm_mmu_page *root,
702 			       bool shared, int zap_level)
703 {
704 	struct tdp_iter iter;
705 
706 	gfn_t end = tdp_mmu_max_gfn_exclusive();
707 	gfn_t start = 0;
708 
709 	for_each_tdp_pte_min_level(iter, root, zap_level, start, end) {
710 retry:
711 		if (tdp_mmu_iter_cond_resched(kvm, &iter, false, shared))
712 			continue;
713 
714 		if (!is_shadow_present_pte(iter.old_spte))
715 			continue;
716 
717 		if (iter.level > zap_level)
718 			continue;
719 
720 		if (!shared)
721 			tdp_mmu_iter_set_spte(kvm, &iter, 0);
722 		else if (tdp_mmu_set_spte_atomic(kvm, &iter, 0))
723 			goto retry;
724 	}
725 }
726 
727 static void tdp_mmu_zap_root(struct kvm *kvm, struct kvm_mmu_page *root,
728 			     bool shared)
729 {
730 
731 	/*
732 	 * The root must have an elevated refcount so that it's reachable via
733 	 * mmu_notifier callbacks, which allows this path to yield and drop
734 	 * mmu_lock.  When handling an unmap/release mmu_notifier command, KVM
735 	 * must drop all references to relevant pages prior to completing the
736 	 * callback.  Dropping mmu_lock with an unreachable root would result
737 	 * in zapping SPTEs after a relevant mmu_notifier callback completes
738 	 * and lead to use-after-free as zapping a SPTE triggers "writeback" of
739 	 * dirty accessed bits to the SPTE's associated struct page.
740 	 */
741 	WARN_ON_ONCE(!refcount_read(&root->tdp_mmu_root_count));
742 
743 	kvm_lockdep_assert_mmu_lock_held(kvm, shared);
744 
745 	rcu_read_lock();
746 
747 	/*
748 	 * To avoid RCU stalls due to recursively removing huge swaths of SPs,
749 	 * split the zap into two passes.  On the first pass, zap at the 1gb
750 	 * level, and then zap top-level SPs on the second pass.  "1gb" is not
751 	 * arbitrary, as KVM must be able to zap a 1gb shadow page without
752 	 * inducing a stall to allow in-place replacement with a 1gb hugepage.
753 	 *
754 	 * Because zapping a SP recurses on its children, stepping down to
755 	 * PG_LEVEL_4K in the iterator itself is unnecessary.
756 	 */
757 	__tdp_mmu_zap_root(kvm, root, shared, PG_LEVEL_1G);
758 	__tdp_mmu_zap_root(kvm, root, shared, root->role.level);
759 
760 	rcu_read_unlock();
761 }
762 
763 bool kvm_tdp_mmu_zap_sp(struct kvm *kvm, struct kvm_mmu_page *sp)
764 {
765 	u64 old_spte;
766 
767 	/*
768 	 * This helper intentionally doesn't allow zapping a root shadow page,
769 	 * which doesn't have a parent page table and thus no associated entry.
770 	 */
771 	if (WARN_ON_ONCE(!sp->ptep))
772 		return false;
773 
774 	old_spte = kvm_tdp_mmu_read_spte(sp->ptep);
775 	if (WARN_ON_ONCE(!is_shadow_present_pte(old_spte)))
776 		return false;
777 
778 	tdp_mmu_set_spte(kvm, kvm_mmu_page_as_id(sp), sp->ptep, old_spte, 0,
779 			 sp->gfn, sp->role.level + 1);
780 
781 	return true;
782 }
783 
784 /*
785  * If can_yield is true, will release the MMU lock and reschedule if the
786  * scheduler needs the CPU or there is contention on the MMU lock. If this
787  * function cannot yield, it will not release the MMU lock or reschedule and
788  * the caller must ensure it does not supply too large a GFN range, or the
789  * operation can cause a soft lockup.
790  */
791 static bool tdp_mmu_zap_leafs(struct kvm *kvm, struct kvm_mmu_page *root,
792 			      gfn_t start, gfn_t end, bool can_yield, bool flush)
793 {
794 	struct tdp_iter iter;
795 
796 	end = min(end, tdp_mmu_max_gfn_exclusive());
797 
798 	lockdep_assert_held_write(&kvm->mmu_lock);
799 
800 	rcu_read_lock();
801 
802 	for_each_tdp_pte_min_level(iter, root, PG_LEVEL_4K, start, end) {
803 		if (can_yield &&
804 		    tdp_mmu_iter_cond_resched(kvm, &iter, flush, false)) {
805 			flush = false;
806 			continue;
807 		}
808 
809 		if (!is_shadow_present_pte(iter.old_spte) ||
810 		    !is_last_spte(iter.old_spte, iter.level))
811 			continue;
812 
813 		tdp_mmu_iter_set_spte(kvm, &iter, 0);
814 		flush = true;
815 	}
816 
817 	rcu_read_unlock();
818 
819 	/*
820 	 * Because this flow zaps _only_ leaf SPTEs, the caller doesn't need
821 	 * to provide RCU protection as no 'struct kvm_mmu_page' will be freed.
822 	 */
823 	return flush;
824 }
825 
826 /*
827  * Zap leaf SPTEs for the range of gfns, [start, end), for all roots. Returns
828  * true if a TLB flush is needed before releasing the MMU lock, i.e. if one or
829  * more SPTEs were zapped since the MMU lock was last acquired.
830  */
831 bool kvm_tdp_mmu_zap_leafs(struct kvm *kvm, gfn_t start, gfn_t end, bool flush)
832 {
833 	struct kvm_mmu_page *root;
834 
835 	for_each_tdp_mmu_root_yield_safe(kvm, root, false)
836 		flush = tdp_mmu_zap_leafs(kvm, root, start, end, true, flush);
837 
838 	return flush;
839 }
840 
841 void kvm_tdp_mmu_zap_all(struct kvm *kvm)
842 {
843 	struct kvm_mmu_page *root;
844 
845 	/*
846 	 * Zap all roots, including invalid roots, as all SPTEs must be dropped
847 	 * before returning to the caller.  Zap directly even if the root is
848 	 * also being zapped by a worker.  Walking zapped top-level SPTEs isn't
849 	 * all that expensive and mmu_lock is already held, which means the
850 	 * worker has yielded, i.e. flushing the work instead of zapping here
851 	 * isn't guaranteed to be any faster.
852 	 *
853 	 * A TLB flush is unnecessary, KVM zaps everything if and only the VM
854 	 * is being destroyed or the userspace VMM has exited.  In both cases,
855 	 * KVM_RUN is unreachable, i.e. no vCPUs will ever service the request.
856 	 */
857 	for_each_tdp_mmu_root_yield_safe(kvm, root, false)
858 		tdp_mmu_zap_root(kvm, root, false);
859 }
860 
861 /*
862  * Zap all invalidated roots to ensure all SPTEs are dropped before the "fast
863  * zap" completes.
864  */
865 void kvm_tdp_mmu_zap_invalidated_roots(struct kvm *kvm)
866 {
867 	struct kvm_mmu_page *root;
868 
869 	read_lock(&kvm->mmu_lock);
870 
871 	for_each_tdp_mmu_root_yield_safe(kvm, root, true) {
872 		if (!root->tdp_mmu_scheduled_root_to_zap)
873 			continue;
874 
875 		root->tdp_mmu_scheduled_root_to_zap = false;
876 		KVM_BUG_ON(!root->role.invalid, kvm);
877 
878 		/*
879 		 * A TLB flush is not necessary as KVM performs a local TLB
880 		 * flush when allocating a new root (see kvm_mmu_load()), and
881 		 * when migrating a vCPU to a different pCPU.  Note, the local
882 		 * TLB flush on reuse also invalidates paging-structure-cache
883 		 * entries, i.e. TLB entries for intermediate paging structures,
884 		 * that may be zapped, as such entries are associated with the
885 		 * ASID on both VMX and SVM.
886 		 */
887 		tdp_mmu_zap_root(kvm, root, true);
888 
889 		/*
890 		 * The referenced needs to be put *after* zapping the root, as
891 		 * the root must be reachable by mmu_notifiers while it's being
892 		 * zapped
893 		 */
894 		kvm_tdp_mmu_put_root(kvm, root, true);
895 	}
896 
897 	read_unlock(&kvm->mmu_lock);
898 }
899 
900 /*
901  * Mark each TDP MMU root as invalid to prevent vCPUs from reusing a root that
902  * is about to be zapped, e.g. in response to a memslots update.  The actual
903  * zapping is done separately so that it happens with mmu_lock with read,
904  * whereas invalidating roots must be done with mmu_lock held for write (unless
905  * the VM is being destroyed).
906  *
907  * Note, kvm_tdp_mmu_zap_invalidated_roots() is gifted the TDP MMU's reference.
908  * See kvm_tdp_mmu_get_vcpu_root_hpa().
909  */
910 void kvm_tdp_mmu_invalidate_all_roots(struct kvm *kvm)
911 {
912 	struct kvm_mmu_page *root;
913 
914 	/*
915 	 * mmu_lock must be held for write to ensure that a root doesn't become
916 	 * invalid while there are active readers (invalidating a root while
917 	 * there are active readers may or may not be problematic in practice,
918 	 * but it's uncharted territory and not supported).
919 	 *
920 	 * Waive the assertion if there are no users of @kvm, i.e. the VM is
921 	 * being destroyed after all references have been put, or if no vCPUs
922 	 * have been created (which means there are no roots), i.e. the VM is
923 	 * being destroyed in an error path of KVM_CREATE_VM.
924 	 */
925 	if (IS_ENABLED(CONFIG_PROVE_LOCKING) &&
926 	    refcount_read(&kvm->users_count) && kvm->created_vcpus)
927 		lockdep_assert_held_write(&kvm->mmu_lock);
928 
929 	/*
930 	 * As above, mmu_lock isn't held when destroying the VM!  There can't
931 	 * be other references to @kvm, i.e. nothing else can invalidate roots
932 	 * or get/put references to roots.
933 	 */
934 	list_for_each_entry(root, &kvm->arch.tdp_mmu_roots, link) {
935 		/*
936 		 * Note, invalid roots can outlive a memslot update!  Invalid
937 		 * roots must be *zapped* before the memslot update completes,
938 		 * but a different task can acquire a reference and keep the
939 		 * root alive after its been zapped.
940 		 */
941 		if (!root->role.invalid) {
942 			root->tdp_mmu_scheduled_root_to_zap = true;
943 			root->role.invalid = true;
944 		}
945 	}
946 }
947 
948 /*
949  * Installs a last-level SPTE to handle a TDP page fault.
950  * (NPT/EPT violation/misconfiguration)
951  */
952 static int tdp_mmu_map_handle_target_level(struct kvm_vcpu *vcpu,
953 					  struct kvm_page_fault *fault,
954 					  struct tdp_iter *iter)
955 {
956 	struct kvm_mmu_page *sp = sptep_to_sp(rcu_dereference(iter->sptep));
957 	u64 new_spte;
958 	int ret = RET_PF_FIXED;
959 	bool wrprot = false;
960 
961 	if (WARN_ON_ONCE(sp->role.level != fault->goal_level))
962 		return RET_PF_RETRY;
963 
964 	if (unlikely(!fault->slot))
965 		new_spte = make_mmio_spte(vcpu, iter->gfn, ACC_ALL);
966 	else
967 		wrprot = make_spte(vcpu, sp, fault->slot, ACC_ALL, iter->gfn,
968 					 fault->pfn, iter->old_spte, fault->prefetch, true,
969 					 fault->map_writable, &new_spte);
970 
971 	if (new_spte == iter->old_spte)
972 		ret = RET_PF_SPURIOUS;
973 	else if (tdp_mmu_set_spte_atomic(vcpu->kvm, iter, new_spte))
974 		return RET_PF_RETRY;
975 	else if (is_shadow_present_pte(iter->old_spte) &&
976 		 !is_last_spte(iter->old_spte, iter->level))
977 		kvm_flush_remote_tlbs_gfn(vcpu->kvm, iter->gfn, iter->level);
978 
979 	/*
980 	 * If the page fault was caused by a write but the page is write
981 	 * protected, emulation is needed. If the emulation was skipped,
982 	 * the vCPU would have the same fault again.
983 	 */
984 	if (wrprot) {
985 		if (fault->write)
986 			ret = RET_PF_EMULATE;
987 	}
988 
989 	/* If a MMIO SPTE is installed, the MMIO will need to be emulated. */
990 	if (unlikely(is_mmio_spte(new_spte))) {
991 		vcpu->stat.pf_mmio_spte_created++;
992 		trace_mark_mmio_spte(rcu_dereference(iter->sptep), iter->gfn,
993 				     new_spte);
994 		ret = RET_PF_EMULATE;
995 	} else {
996 		trace_kvm_mmu_set_spte(iter->level, iter->gfn,
997 				       rcu_dereference(iter->sptep));
998 	}
999 
1000 	return ret;
1001 }
1002 
1003 /*
1004  * tdp_mmu_link_sp - Replace the given spte with an spte pointing to the
1005  * provided page table.
1006  *
1007  * @kvm: kvm instance
1008  * @iter: a tdp_iter instance currently on the SPTE that should be set
1009  * @sp: The new TDP page table to install.
1010  * @shared: This operation is running under the MMU lock in read mode.
1011  *
1012  * Returns: 0 if the new page table was installed. Non-0 if the page table
1013  *          could not be installed (e.g. the atomic compare-exchange failed).
1014  */
1015 static int tdp_mmu_link_sp(struct kvm *kvm, struct tdp_iter *iter,
1016 			   struct kvm_mmu_page *sp, bool shared)
1017 {
1018 	u64 spte = make_nonleaf_spte(sp->spt, !kvm_ad_enabled());
1019 	int ret = 0;
1020 
1021 	if (shared) {
1022 		ret = tdp_mmu_set_spte_atomic(kvm, iter, spte);
1023 		if (ret)
1024 			return ret;
1025 	} else {
1026 		tdp_mmu_iter_set_spte(kvm, iter, spte);
1027 	}
1028 
1029 	tdp_account_mmu_page(kvm, sp);
1030 
1031 	return 0;
1032 }
1033 
1034 static int tdp_mmu_split_huge_page(struct kvm *kvm, struct tdp_iter *iter,
1035 				   struct kvm_mmu_page *sp, bool shared);
1036 
1037 /*
1038  * Handle a TDP page fault (NPT/EPT violation/misconfiguration) by installing
1039  * page tables and SPTEs to translate the faulting guest physical address.
1040  */
1041 int kvm_tdp_mmu_map(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault)
1042 {
1043 	struct kvm_mmu *mmu = vcpu->arch.mmu;
1044 	struct kvm *kvm = vcpu->kvm;
1045 	struct tdp_iter iter;
1046 	struct kvm_mmu_page *sp;
1047 	int ret = RET_PF_RETRY;
1048 
1049 	kvm_mmu_hugepage_adjust(vcpu, fault);
1050 
1051 	trace_kvm_mmu_spte_requested(fault);
1052 
1053 	rcu_read_lock();
1054 
1055 	tdp_mmu_for_each_pte(iter, mmu, fault->gfn, fault->gfn + 1) {
1056 		int r;
1057 
1058 		if (fault->nx_huge_page_workaround_enabled)
1059 			disallowed_hugepage_adjust(fault, iter.old_spte, iter.level);
1060 
1061 		/*
1062 		 * If SPTE has been frozen by another thread, just give up and
1063 		 * retry, avoiding unnecessary page table allocation and free.
1064 		 */
1065 		if (is_removed_spte(iter.old_spte))
1066 			goto retry;
1067 
1068 		if (iter.level == fault->goal_level)
1069 			goto map_target_level;
1070 
1071 		/* Step down into the lower level page table if it exists. */
1072 		if (is_shadow_present_pte(iter.old_spte) &&
1073 		    !is_large_pte(iter.old_spte))
1074 			continue;
1075 
1076 		/*
1077 		 * The SPTE is either non-present or points to a huge page that
1078 		 * needs to be split.
1079 		 */
1080 		sp = tdp_mmu_alloc_sp(vcpu);
1081 		tdp_mmu_init_child_sp(sp, &iter);
1082 
1083 		sp->nx_huge_page_disallowed = fault->huge_page_disallowed;
1084 
1085 		if (is_shadow_present_pte(iter.old_spte))
1086 			r = tdp_mmu_split_huge_page(kvm, &iter, sp, true);
1087 		else
1088 			r = tdp_mmu_link_sp(kvm, &iter, sp, true);
1089 
1090 		/*
1091 		 * Force the guest to retry if installing an upper level SPTE
1092 		 * failed, e.g. because a different task modified the SPTE.
1093 		 */
1094 		if (r) {
1095 			tdp_mmu_free_sp(sp);
1096 			goto retry;
1097 		}
1098 
1099 		if (fault->huge_page_disallowed &&
1100 		    fault->req_level >= iter.level) {
1101 			spin_lock(&kvm->arch.tdp_mmu_pages_lock);
1102 			if (sp->nx_huge_page_disallowed)
1103 				track_possible_nx_huge_page(kvm, sp);
1104 			spin_unlock(&kvm->arch.tdp_mmu_pages_lock);
1105 		}
1106 	}
1107 
1108 	/*
1109 	 * The walk aborted before reaching the target level, e.g. because the
1110 	 * iterator detected an upper level SPTE was frozen during traversal.
1111 	 */
1112 	WARN_ON_ONCE(iter.level == fault->goal_level);
1113 	goto retry;
1114 
1115 map_target_level:
1116 	ret = tdp_mmu_map_handle_target_level(vcpu, fault, &iter);
1117 
1118 retry:
1119 	rcu_read_unlock();
1120 	return ret;
1121 }
1122 
1123 bool kvm_tdp_mmu_unmap_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range,
1124 				 bool flush)
1125 {
1126 	struct kvm_mmu_page *root;
1127 
1128 	__for_each_tdp_mmu_root_yield_safe(kvm, root, range->slot->as_id, false, false)
1129 		flush = tdp_mmu_zap_leafs(kvm, root, range->start, range->end,
1130 					  range->may_block, flush);
1131 
1132 	return flush;
1133 }
1134 
1135 typedef bool (*tdp_handler_t)(struct kvm *kvm, struct tdp_iter *iter,
1136 			      struct kvm_gfn_range *range);
1137 
1138 static __always_inline bool kvm_tdp_mmu_handle_gfn(struct kvm *kvm,
1139 						   struct kvm_gfn_range *range,
1140 						   tdp_handler_t handler)
1141 {
1142 	struct kvm_mmu_page *root;
1143 	struct tdp_iter iter;
1144 	bool ret = false;
1145 
1146 	/*
1147 	 * Don't support rescheduling, none of the MMU notifiers that funnel
1148 	 * into this helper allow blocking; it'd be dead, wasteful code.
1149 	 */
1150 	for_each_tdp_mmu_root(kvm, root, range->slot->as_id) {
1151 		rcu_read_lock();
1152 
1153 		tdp_root_for_each_leaf_pte(iter, root, range->start, range->end)
1154 			ret |= handler(kvm, &iter, range);
1155 
1156 		rcu_read_unlock();
1157 	}
1158 
1159 	return ret;
1160 }
1161 
1162 /*
1163  * Mark the SPTEs range of GFNs [start, end) unaccessed and return non-zero
1164  * if any of the GFNs in the range have been accessed.
1165  *
1166  * No need to mark the corresponding PFN as accessed as this call is coming
1167  * from the clear_young() or clear_flush_young() notifier, which uses the
1168  * return value to determine if the page has been accessed.
1169  */
1170 static bool age_gfn_range(struct kvm *kvm, struct tdp_iter *iter,
1171 			  struct kvm_gfn_range *range)
1172 {
1173 	u64 new_spte;
1174 
1175 	/* If we have a non-accessed entry we don't need to change the pte. */
1176 	if (!is_accessed_spte(iter->old_spte))
1177 		return false;
1178 
1179 	if (spte_ad_enabled(iter->old_spte)) {
1180 		iter->old_spte = tdp_mmu_clear_spte_bits(iter->sptep,
1181 							 iter->old_spte,
1182 							 shadow_accessed_mask,
1183 							 iter->level);
1184 		new_spte = iter->old_spte & ~shadow_accessed_mask;
1185 	} else {
1186 		/*
1187 		 * Capture the dirty status of the page, so that it doesn't get
1188 		 * lost when the SPTE is marked for access tracking.
1189 		 */
1190 		if (is_writable_pte(iter->old_spte))
1191 			kvm_set_pfn_dirty(spte_to_pfn(iter->old_spte));
1192 
1193 		new_spte = mark_spte_for_access_track(iter->old_spte);
1194 		iter->old_spte = kvm_tdp_mmu_write_spte(iter->sptep,
1195 							iter->old_spte, new_spte,
1196 							iter->level);
1197 	}
1198 
1199 	trace_kvm_tdp_mmu_spte_changed(iter->as_id, iter->gfn, iter->level,
1200 				       iter->old_spte, new_spte);
1201 	return true;
1202 }
1203 
1204 bool kvm_tdp_mmu_age_gfn_range(struct kvm *kvm, struct kvm_gfn_range *range)
1205 {
1206 	return kvm_tdp_mmu_handle_gfn(kvm, range, age_gfn_range);
1207 }
1208 
1209 static bool test_age_gfn(struct kvm *kvm, struct tdp_iter *iter,
1210 			 struct kvm_gfn_range *range)
1211 {
1212 	return is_accessed_spte(iter->old_spte);
1213 }
1214 
1215 bool kvm_tdp_mmu_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range)
1216 {
1217 	return kvm_tdp_mmu_handle_gfn(kvm, range, test_age_gfn);
1218 }
1219 
1220 static bool set_spte_gfn(struct kvm *kvm, struct tdp_iter *iter,
1221 			 struct kvm_gfn_range *range)
1222 {
1223 	u64 new_spte;
1224 
1225 	/* Huge pages aren't expected to be modified without first being zapped. */
1226 	WARN_ON_ONCE(pte_huge(range->arg.pte) || range->start + 1 != range->end);
1227 
1228 	if (iter->level != PG_LEVEL_4K ||
1229 	    !is_shadow_present_pte(iter->old_spte))
1230 		return false;
1231 
1232 	/*
1233 	 * Note, when changing a read-only SPTE, it's not strictly necessary to
1234 	 * zero the SPTE before setting the new PFN, but doing so preserves the
1235 	 * invariant that the PFN of a present * leaf SPTE can never change.
1236 	 * See handle_changed_spte().
1237 	 */
1238 	tdp_mmu_iter_set_spte(kvm, iter, 0);
1239 
1240 	if (!pte_write(range->arg.pte)) {
1241 		new_spte = kvm_mmu_changed_pte_notifier_make_spte(iter->old_spte,
1242 								  pte_pfn(range->arg.pte));
1243 
1244 		tdp_mmu_iter_set_spte(kvm, iter, new_spte);
1245 	}
1246 
1247 	return true;
1248 }
1249 
1250 /*
1251  * Handle the changed_pte MMU notifier for the TDP MMU.
1252  * data is a pointer to the new pte_t mapping the HVA specified by the MMU
1253  * notifier.
1254  * Returns non-zero if a flush is needed before releasing the MMU lock.
1255  */
1256 bool kvm_tdp_mmu_set_spte_gfn(struct kvm *kvm, struct kvm_gfn_range *range)
1257 {
1258 	/*
1259 	 * No need to handle the remote TLB flush under RCU protection, the
1260 	 * target SPTE _must_ be a leaf SPTE, i.e. cannot result in freeing a
1261 	 * shadow page. See the WARN on pfn_changed in handle_changed_spte().
1262 	 */
1263 	return kvm_tdp_mmu_handle_gfn(kvm, range, set_spte_gfn);
1264 }
1265 
1266 /*
1267  * Remove write access from all SPTEs at or above min_level that map GFNs
1268  * [start, end). Returns true if an SPTE has been changed and the TLBs need to
1269  * be flushed.
1270  */
1271 static bool wrprot_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root,
1272 			     gfn_t start, gfn_t end, int min_level)
1273 {
1274 	struct tdp_iter iter;
1275 	u64 new_spte;
1276 	bool spte_set = false;
1277 
1278 	rcu_read_lock();
1279 
1280 	BUG_ON(min_level > KVM_MAX_HUGEPAGE_LEVEL);
1281 
1282 	for_each_tdp_pte_min_level(iter, root, min_level, start, end) {
1283 retry:
1284 		if (tdp_mmu_iter_cond_resched(kvm, &iter, false, true))
1285 			continue;
1286 
1287 		if (!is_shadow_present_pte(iter.old_spte) ||
1288 		    !is_last_spte(iter.old_spte, iter.level) ||
1289 		    !(iter.old_spte & PT_WRITABLE_MASK))
1290 			continue;
1291 
1292 		new_spte = iter.old_spte & ~PT_WRITABLE_MASK;
1293 
1294 		if (tdp_mmu_set_spte_atomic(kvm, &iter, new_spte))
1295 			goto retry;
1296 
1297 		spte_set = true;
1298 	}
1299 
1300 	rcu_read_unlock();
1301 	return spte_set;
1302 }
1303 
1304 /*
1305  * Remove write access from all the SPTEs mapping GFNs in the memslot. Will
1306  * only affect leaf SPTEs down to min_level.
1307  * Returns true if an SPTE has been changed and the TLBs need to be flushed.
1308  */
1309 bool kvm_tdp_mmu_wrprot_slot(struct kvm *kvm,
1310 			     const struct kvm_memory_slot *slot, int min_level)
1311 {
1312 	struct kvm_mmu_page *root;
1313 	bool spte_set = false;
1314 
1315 	lockdep_assert_held_read(&kvm->mmu_lock);
1316 
1317 	for_each_valid_tdp_mmu_root_yield_safe(kvm, root, slot->as_id, true)
1318 		spte_set |= wrprot_gfn_range(kvm, root, slot->base_gfn,
1319 			     slot->base_gfn + slot->npages, min_level);
1320 
1321 	return spte_set;
1322 }
1323 
1324 static struct kvm_mmu_page *__tdp_mmu_alloc_sp_for_split(gfp_t gfp)
1325 {
1326 	struct kvm_mmu_page *sp;
1327 
1328 	gfp |= __GFP_ZERO;
1329 
1330 	sp = kmem_cache_alloc(mmu_page_header_cache, gfp);
1331 	if (!sp)
1332 		return NULL;
1333 
1334 	sp->spt = (void *)__get_free_page(gfp);
1335 	if (!sp->spt) {
1336 		kmem_cache_free(mmu_page_header_cache, sp);
1337 		return NULL;
1338 	}
1339 
1340 	return sp;
1341 }
1342 
1343 static struct kvm_mmu_page *tdp_mmu_alloc_sp_for_split(struct kvm *kvm,
1344 						       struct tdp_iter *iter,
1345 						       bool shared)
1346 {
1347 	struct kvm_mmu_page *sp;
1348 
1349 	/*
1350 	 * Since we are allocating while under the MMU lock we have to be
1351 	 * careful about GFP flags. Use GFP_NOWAIT to avoid blocking on direct
1352 	 * reclaim and to avoid making any filesystem callbacks (which can end
1353 	 * up invoking KVM MMU notifiers, resulting in a deadlock).
1354 	 *
1355 	 * If this allocation fails we drop the lock and retry with reclaim
1356 	 * allowed.
1357 	 */
1358 	sp = __tdp_mmu_alloc_sp_for_split(GFP_NOWAIT | __GFP_ACCOUNT);
1359 	if (sp)
1360 		return sp;
1361 
1362 	rcu_read_unlock();
1363 
1364 	if (shared)
1365 		read_unlock(&kvm->mmu_lock);
1366 	else
1367 		write_unlock(&kvm->mmu_lock);
1368 
1369 	iter->yielded = true;
1370 	sp = __tdp_mmu_alloc_sp_for_split(GFP_KERNEL_ACCOUNT);
1371 
1372 	if (shared)
1373 		read_lock(&kvm->mmu_lock);
1374 	else
1375 		write_lock(&kvm->mmu_lock);
1376 
1377 	rcu_read_lock();
1378 
1379 	return sp;
1380 }
1381 
1382 /* Note, the caller is responsible for initializing @sp. */
1383 static int tdp_mmu_split_huge_page(struct kvm *kvm, struct tdp_iter *iter,
1384 				   struct kvm_mmu_page *sp, bool shared)
1385 {
1386 	const u64 huge_spte = iter->old_spte;
1387 	const int level = iter->level;
1388 	int ret, i;
1389 
1390 	/*
1391 	 * No need for atomics when writing to sp->spt since the page table has
1392 	 * not been linked in yet and thus is not reachable from any other CPU.
1393 	 */
1394 	for (i = 0; i < SPTE_ENT_PER_PAGE; i++)
1395 		sp->spt[i] = make_huge_page_split_spte(kvm, huge_spte, sp->role, i);
1396 
1397 	/*
1398 	 * Replace the huge spte with a pointer to the populated lower level
1399 	 * page table. Since we are making this change without a TLB flush vCPUs
1400 	 * will see a mix of the split mappings and the original huge mapping,
1401 	 * depending on what's currently in their TLB. This is fine from a
1402 	 * correctness standpoint since the translation will be the same either
1403 	 * way.
1404 	 */
1405 	ret = tdp_mmu_link_sp(kvm, iter, sp, shared);
1406 	if (ret)
1407 		goto out;
1408 
1409 	/*
1410 	 * tdp_mmu_link_sp_atomic() will handle subtracting the huge page we
1411 	 * are overwriting from the page stats. But we have to manually update
1412 	 * the page stats with the new present child pages.
1413 	 */
1414 	kvm_update_page_stats(kvm, level - 1, SPTE_ENT_PER_PAGE);
1415 
1416 out:
1417 	trace_kvm_mmu_split_huge_page(iter->gfn, huge_spte, level, ret);
1418 	return ret;
1419 }
1420 
1421 static int tdp_mmu_split_huge_pages_root(struct kvm *kvm,
1422 					 struct kvm_mmu_page *root,
1423 					 gfn_t start, gfn_t end,
1424 					 int target_level, bool shared)
1425 {
1426 	struct kvm_mmu_page *sp = NULL;
1427 	struct tdp_iter iter;
1428 	int ret = 0;
1429 
1430 	rcu_read_lock();
1431 
1432 	/*
1433 	 * Traverse the page table splitting all huge pages above the target
1434 	 * level into one lower level. For example, if we encounter a 1GB page
1435 	 * we split it into 512 2MB pages.
1436 	 *
1437 	 * Since the TDP iterator uses a pre-order traversal, we are guaranteed
1438 	 * to visit an SPTE before ever visiting its children, which means we
1439 	 * will correctly recursively split huge pages that are more than one
1440 	 * level above the target level (e.g. splitting a 1GB to 512 2MB pages,
1441 	 * and then splitting each of those to 512 4KB pages).
1442 	 */
1443 	for_each_tdp_pte_min_level(iter, root, target_level + 1, start, end) {
1444 retry:
1445 		if (tdp_mmu_iter_cond_resched(kvm, &iter, false, shared))
1446 			continue;
1447 
1448 		if (!is_shadow_present_pte(iter.old_spte) || !is_large_pte(iter.old_spte))
1449 			continue;
1450 
1451 		if (!sp) {
1452 			sp = tdp_mmu_alloc_sp_for_split(kvm, &iter, shared);
1453 			if (!sp) {
1454 				ret = -ENOMEM;
1455 				trace_kvm_mmu_split_huge_page(iter.gfn,
1456 							      iter.old_spte,
1457 							      iter.level, ret);
1458 				break;
1459 			}
1460 
1461 			if (iter.yielded)
1462 				continue;
1463 		}
1464 
1465 		tdp_mmu_init_child_sp(sp, &iter);
1466 
1467 		if (tdp_mmu_split_huge_page(kvm, &iter, sp, shared))
1468 			goto retry;
1469 
1470 		sp = NULL;
1471 	}
1472 
1473 	rcu_read_unlock();
1474 
1475 	/*
1476 	 * It's possible to exit the loop having never used the last sp if, for
1477 	 * example, a vCPU doing HugePage NX splitting wins the race and
1478 	 * installs its own sp in place of the last sp we tried to split.
1479 	 */
1480 	if (sp)
1481 		tdp_mmu_free_sp(sp);
1482 
1483 	return ret;
1484 }
1485 
1486 
1487 /*
1488  * Try to split all huge pages mapped by the TDP MMU down to the target level.
1489  */
1490 void kvm_tdp_mmu_try_split_huge_pages(struct kvm *kvm,
1491 				      const struct kvm_memory_slot *slot,
1492 				      gfn_t start, gfn_t end,
1493 				      int target_level, bool shared)
1494 {
1495 	struct kvm_mmu_page *root;
1496 	int r = 0;
1497 
1498 	kvm_lockdep_assert_mmu_lock_held(kvm, shared);
1499 
1500 	for_each_valid_tdp_mmu_root_yield_safe(kvm, root, slot->as_id, shared) {
1501 		r = tdp_mmu_split_huge_pages_root(kvm, root, start, end, target_level, shared);
1502 		if (r) {
1503 			kvm_tdp_mmu_put_root(kvm, root, shared);
1504 			break;
1505 		}
1506 	}
1507 }
1508 
1509 /*
1510  * Clear the dirty status of all the SPTEs mapping GFNs in the memslot. If
1511  * AD bits are enabled, this will involve clearing the dirty bit on each SPTE.
1512  * If AD bits are not enabled, this will require clearing the writable bit on
1513  * each SPTE. Returns true if an SPTE has been changed and the TLBs need to
1514  * be flushed.
1515  */
1516 static bool clear_dirty_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root,
1517 			   gfn_t start, gfn_t end)
1518 {
1519 	u64 dbit = kvm_ad_enabled() ? shadow_dirty_mask : PT_WRITABLE_MASK;
1520 	struct tdp_iter iter;
1521 	bool spte_set = false;
1522 
1523 	rcu_read_lock();
1524 
1525 	tdp_root_for_each_leaf_pte(iter, root, start, end) {
1526 retry:
1527 		if (tdp_mmu_iter_cond_resched(kvm, &iter, false, true))
1528 			continue;
1529 
1530 		if (!is_shadow_present_pte(iter.old_spte))
1531 			continue;
1532 
1533 		KVM_MMU_WARN_ON(kvm_ad_enabled() &&
1534 				spte_ad_need_write_protect(iter.old_spte));
1535 
1536 		if (!(iter.old_spte & dbit))
1537 			continue;
1538 
1539 		if (tdp_mmu_set_spte_atomic(kvm, &iter, iter.old_spte & ~dbit))
1540 			goto retry;
1541 
1542 		spte_set = true;
1543 	}
1544 
1545 	rcu_read_unlock();
1546 	return spte_set;
1547 }
1548 
1549 /*
1550  * Clear the dirty status of all the SPTEs mapping GFNs in the memslot. If
1551  * AD bits are enabled, this will involve clearing the dirty bit on each SPTE.
1552  * If AD bits are not enabled, this will require clearing the writable bit on
1553  * each SPTE. Returns true if an SPTE has been changed and the TLBs need to
1554  * be flushed.
1555  */
1556 bool kvm_tdp_mmu_clear_dirty_slot(struct kvm *kvm,
1557 				  const struct kvm_memory_slot *slot)
1558 {
1559 	struct kvm_mmu_page *root;
1560 	bool spte_set = false;
1561 
1562 	lockdep_assert_held_read(&kvm->mmu_lock);
1563 
1564 	for_each_valid_tdp_mmu_root_yield_safe(kvm, root, slot->as_id, true)
1565 		spte_set |= clear_dirty_gfn_range(kvm, root, slot->base_gfn,
1566 				slot->base_gfn + slot->npages);
1567 
1568 	return spte_set;
1569 }
1570 
1571 /*
1572  * Clears the dirty status of all the 4k SPTEs mapping GFNs for which a bit is
1573  * set in mask, starting at gfn. The given memslot is expected to contain all
1574  * the GFNs represented by set bits in the mask. If AD bits are enabled,
1575  * clearing the dirty status will involve clearing the dirty bit on each SPTE
1576  * or, if AD bits are not enabled, clearing the writable bit on each SPTE.
1577  */
1578 static void clear_dirty_pt_masked(struct kvm *kvm, struct kvm_mmu_page *root,
1579 				  gfn_t gfn, unsigned long mask, bool wrprot)
1580 {
1581 	u64 dbit = (wrprot || !kvm_ad_enabled()) ? PT_WRITABLE_MASK :
1582 						   shadow_dirty_mask;
1583 	struct tdp_iter iter;
1584 
1585 	lockdep_assert_held_write(&kvm->mmu_lock);
1586 
1587 	rcu_read_lock();
1588 
1589 	tdp_root_for_each_leaf_pte(iter, root, gfn + __ffs(mask),
1590 				    gfn + BITS_PER_LONG) {
1591 		if (!mask)
1592 			break;
1593 
1594 		KVM_MMU_WARN_ON(kvm_ad_enabled() &&
1595 				spte_ad_need_write_protect(iter.old_spte));
1596 
1597 		if (iter.level > PG_LEVEL_4K ||
1598 		    !(mask & (1UL << (iter.gfn - gfn))))
1599 			continue;
1600 
1601 		mask &= ~(1UL << (iter.gfn - gfn));
1602 
1603 		if (!(iter.old_spte & dbit))
1604 			continue;
1605 
1606 		iter.old_spte = tdp_mmu_clear_spte_bits(iter.sptep,
1607 							iter.old_spte, dbit,
1608 							iter.level);
1609 
1610 		trace_kvm_tdp_mmu_spte_changed(iter.as_id, iter.gfn, iter.level,
1611 					       iter.old_spte,
1612 					       iter.old_spte & ~dbit);
1613 		kvm_set_pfn_dirty(spte_to_pfn(iter.old_spte));
1614 	}
1615 
1616 	rcu_read_unlock();
1617 }
1618 
1619 /*
1620  * Clears the dirty status of all the 4k SPTEs mapping GFNs for which a bit is
1621  * set in mask, starting at gfn. The given memslot is expected to contain all
1622  * the GFNs represented by set bits in the mask. If AD bits are enabled,
1623  * clearing the dirty status will involve clearing the dirty bit on each SPTE
1624  * or, if AD bits are not enabled, clearing the writable bit on each SPTE.
1625  */
1626 void kvm_tdp_mmu_clear_dirty_pt_masked(struct kvm *kvm,
1627 				       struct kvm_memory_slot *slot,
1628 				       gfn_t gfn, unsigned long mask,
1629 				       bool wrprot)
1630 {
1631 	struct kvm_mmu_page *root;
1632 
1633 	for_each_tdp_mmu_root(kvm, root, slot->as_id)
1634 		clear_dirty_pt_masked(kvm, root, gfn, mask, wrprot);
1635 }
1636 
1637 static void zap_collapsible_spte_range(struct kvm *kvm,
1638 				       struct kvm_mmu_page *root,
1639 				       const struct kvm_memory_slot *slot)
1640 {
1641 	gfn_t start = slot->base_gfn;
1642 	gfn_t end = start + slot->npages;
1643 	struct tdp_iter iter;
1644 	int max_mapping_level;
1645 
1646 	rcu_read_lock();
1647 
1648 	for_each_tdp_pte_min_level(iter, root, PG_LEVEL_2M, start, end) {
1649 retry:
1650 		if (tdp_mmu_iter_cond_resched(kvm, &iter, false, true))
1651 			continue;
1652 
1653 		if (iter.level > KVM_MAX_HUGEPAGE_LEVEL ||
1654 		    !is_shadow_present_pte(iter.old_spte))
1655 			continue;
1656 
1657 		/*
1658 		 * Don't zap leaf SPTEs, if a leaf SPTE could be replaced with
1659 		 * a large page size, then its parent would have been zapped
1660 		 * instead of stepping down.
1661 		 */
1662 		if (is_last_spte(iter.old_spte, iter.level))
1663 			continue;
1664 
1665 		/*
1666 		 * If iter.gfn resides outside of the slot, i.e. the page for
1667 		 * the current level overlaps but is not contained by the slot,
1668 		 * then the SPTE can't be made huge.  More importantly, trying
1669 		 * to query that info from slot->arch.lpage_info will cause an
1670 		 * out-of-bounds access.
1671 		 */
1672 		if (iter.gfn < start || iter.gfn >= end)
1673 			continue;
1674 
1675 		max_mapping_level = kvm_mmu_max_mapping_level(kvm, slot,
1676 							      iter.gfn, PG_LEVEL_NUM);
1677 		if (max_mapping_level < iter.level)
1678 			continue;
1679 
1680 		/* Note, a successful atomic zap also does a remote TLB flush. */
1681 		if (tdp_mmu_zap_spte_atomic(kvm, &iter))
1682 			goto retry;
1683 	}
1684 
1685 	rcu_read_unlock();
1686 }
1687 
1688 /*
1689  * Zap non-leaf SPTEs (and free their associated page tables) which could
1690  * be replaced by huge pages, for GFNs within the slot.
1691  */
1692 void kvm_tdp_mmu_zap_collapsible_sptes(struct kvm *kvm,
1693 				       const struct kvm_memory_slot *slot)
1694 {
1695 	struct kvm_mmu_page *root;
1696 
1697 	lockdep_assert_held_read(&kvm->mmu_lock);
1698 
1699 	for_each_valid_tdp_mmu_root_yield_safe(kvm, root, slot->as_id, true)
1700 		zap_collapsible_spte_range(kvm, root, slot);
1701 }
1702 
1703 /*
1704  * Removes write access on the last level SPTE mapping this GFN and unsets the
1705  * MMU-writable bit to ensure future writes continue to be intercepted.
1706  * Returns true if an SPTE was set and a TLB flush is needed.
1707  */
1708 static bool write_protect_gfn(struct kvm *kvm, struct kvm_mmu_page *root,
1709 			      gfn_t gfn, int min_level)
1710 {
1711 	struct tdp_iter iter;
1712 	u64 new_spte;
1713 	bool spte_set = false;
1714 
1715 	BUG_ON(min_level > KVM_MAX_HUGEPAGE_LEVEL);
1716 
1717 	rcu_read_lock();
1718 
1719 	for_each_tdp_pte_min_level(iter, root, min_level, gfn, gfn + 1) {
1720 		if (!is_shadow_present_pte(iter.old_spte) ||
1721 		    !is_last_spte(iter.old_spte, iter.level))
1722 			continue;
1723 
1724 		new_spte = iter.old_spte &
1725 			~(PT_WRITABLE_MASK | shadow_mmu_writable_mask);
1726 
1727 		if (new_spte == iter.old_spte)
1728 			break;
1729 
1730 		tdp_mmu_iter_set_spte(kvm, &iter, new_spte);
1731 		spte_set = true;
1732 	}
1733 
1734 	rcu_read_unlock();
1735 
1736 	return spte_set;
1737 }
1738 
1739 /*
1740  * Removes write access on the last level SPTE mapping this GFN and unsets the
1741  * MMU-writable bit to ensure future writes continue to be intercepted.
1742  * Returns true if an SPTE was set and a TLB flush is needed.
1743  */
1744 bool kvm_tdp_mmu_write_protect_gfn(struct kvm *kvm,
1745 				   struct kvm_memory_slot *slot, gfn_t gfn,
1746 				   int min_level)
1747 {
1748 	struct kvm_mmu_page *root;
1749 	bool spte_set = false;
1750 
1751 	lockdep_assert_held_write(&kvm->mmu_lock);
1752 	for_each_tdp_mmu_root(kvm, root, slot->as_id)
1753 		spte_set |= write_protect_gfn(kvm, root, gfn, min_level);
1754 
1755 	return spte_set;
1756 }
1757 
1758 /*
1759  * Return the level of the lowest level SPTE added to sptes.
1760  * That SPTE may be non-present.
1761  *
1762  * Must be called between kvm_tdp_mmu_walk_lockless_{begin,end}.
1763  */
1764 int kvm_tdp_mmu_get_walk(struct kvm_vcpu *vcpu, u64 addr, u64 *sptes,
1765 			 int *root_level)
1766 {
1767 	struct tdp_iter iter;
1768 	struct kvm_mmu *mmu = vcpu->arch.mmu;
1769 	gfn_t gfn = addr >> PAGE_SHIFT;
1770 	int leaf = -1;
1771 
1772 	*root_level = vcpu->arch.mmu->root_role.level;
1773 
1774 	tdp_mmu_for_each_pte(iter, mmu, gfn, gfn + 1) {
1775 		leaf = iter.level;
1776 		sptes[leaf] = iter.old_spte;
1777 	}
1778 
1779 	return leaf;
1780 }
1781 
1782 /*
1783  * Returns the last level spte pointer of the shadow page walk for the given
1784  * gpa, and sets *spte to the spte value. This spte may be non-preset. If no
1785  * walk could be performed, returns NULL and *spte does not contain valid data.
1786  *
1787  * Contract:
1788  *  - Must be called between kvm_tdp_mmu_walk_lockless_{begin,end}.
1789  *  - The returned sptep must not be used after kvm_tdp_mmu_walk_lockless_end.
1790  *
1791  * WARNING: This function is only intended to be called during fast_page_fault.
1792  */
1793 u64 *kvm_tdp_mmu_fast_pf_get_last_sptep(struct kvm_vcpu *vcpu, u64 addr,
1794 					u64 *spte)
1795 {
1796 	struct tdp_iter iter;
1797 	struct kvm_mmu *mmu = vcpu->arch.mmu;
1798 	gfn_t gfn = addr >> PAGE_SHIFT;
1799 	tdp_ptep_t sptep = NULL;
1800 
1801 	tdp_mmu_for_each_pte(iter, mmu, gfn, gfn + 1) {
1802 		*spte = iter.old_spte;
1803 		sptep = iter.sptep;
1804 	}
1805 
1806 	/*
1807 	 * Perform the rcu_dereference to get the raw spte pointer value since
1808 	 * we are passing it up to fast_page_fault, which is shared with the
1809 	 * legacy MMU and thus does not retain the TDP MMU-specific __rcu
1810 	 * annotation.
1811 	 *
1812 	 * This is safe since fast_page_fault obeys the contracts of this
1813 	 * function as well as all TDP MMU contracts around modifying SPTEs
1814 	 * outside of mmu_lock.
1815 	 */
1816 	return rcu_dereference(sptep);
1817 }
1818