]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: x86/mmu: Avoid reacquiring RCU if TDP MMU fails to allocate an SP
authorDavid Matlack <dmatlack@google.com>
Tue, 11 Jun 2024 22:05:12 +0000 (15:05 -0700)
committerSean Christopherson <seanjc@google.com>
Fri, 14 Jun 2024 16:25:03 +0000 (09:25 -0700)
Avoid needlessly reacquiring the RCU read lock if the TDP MMU fails to
allocate a shadow page during eager page splitting. Opportunistically
drop the local variable ret as well now that it's no longer necessary.

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: David Matlack <dmatlack@google.com>
Link: https://lore.kernel.org/r/20240611220512.2426439-5-dmatlack@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/mmu/tdp_mmu.c

index 028f5a667482d213233edfb9891d4661fc11241a..c512a02c44a16b52221d0dcdc641405d9dff942c 100644 (file)
@@ -1402,7 +1402,6 @@ static int tdp_mmu_split_huge_pages_root(struct kvm *kvm,
 {
        struct kvm_mmu_page *sp = NULL;
        struct tdp_iter iter;
-       int ret = 0;
 
        rcu_read_lock();
 
@@ -1440,16 +1439,15 @@ retry:
                        else
                                write_lock(&kvm->mmu_lock);
 
-                       rcu_read_lock();
-
                        if (!sp) {
-                               ret = -ENOMEM;
                                trace_kvm_mmu_split_huge_page(iter.gfn,
                                                              iter.old_spte,
-                                                             iter.level, ret);
-                               break;
+                                                             iter.level, -ENOMEM);
+                               return -ENOMEM;
                        }
 
+                       rcu_read_lock();
+
                        iter.yielded = true;
                        continue;
                }
@@ -1472,7 +1470,7 @@ retry:
        if (sp)
                tdp_mmu_free_sp(sp);
 
-       return ret;
+       return 0;
 }