Skip to content

Commit 4633243

Browse files
committed
KVM: SVM: Use guard(mutex) to simplify SNP AP Creation error handling
Use guard(mutex) in sev_snp_ap_creation() and modify the error paths to return directly instead of jumping to a common exit point. No functional change intended. Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com> Reviewed-by: Pankaj Gupta <pankaj.gupta@amd.com> Link: https://lore.kernel.org/r/20250227012541.3234589-8-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent c6e129f commit 4633243

File tree

1 file changed

+6
-16
lines changed

1 file changed

+6
-16
lines changed

arch/x86/kvm/svm/sev.c

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3944,7 +3944,6 @@ static int sev_snp_ap_creation(struct vcpu_svm *svm)
39443944
struct vcpu_svm *target_svm;
39453945
unsigned int request;
39463946
unsigned int apic_id;
3947-
int ret;
39483947

39493948
request = lower_32_bits(svm->vmcb->control.exit_info_1);
39503949
apic_id = upper_32_bits(svm->vmcb->control.exit_info_1);
@@ -3957,27 +3956,23 @@ static int sev_snp_ap_creation(struct vcpu_svm *svm)
39573956
return -EINVAL;
39583957
}
39593958

3960-
ret = 0;
3961-
39623959
target_svm = to_svm(target_vcpu);
39633960

3964-
mutex_lock(&target_svm->sev_es.snp_vmsa_mutex);
3961+
guard(mutex)(&target_svm->sev_es.snp_vmsa_mutex);
39653962

39663963
switch (request) {
39673964
case SVM_VMGEXIT_AP_CREATE_ON_INIT:
39683965
case SVM_VMGEXIT_AP_CREATE:
39693966
if (vcpu->arch.regs[VCPU_REGS_RAX] != sev->vmsa_features) {
39703967
vcpu_unimpl(vcpu, "vmgexit: mismatched AP sev_features [%#lx] != [%#llx] from guest\n",
39713968
vcpu->arch.regs[VCPU_REGS_RAX], sev->vmsa_features);
3972-
ret = -EINVAL;
3973-
goto out;
3969+
return -EINVAL;
39743970
}
39753971

39763972
if (!page_address_valid(vcpu, svm->vmcb->control.exit_info_2)) {
39773973
vcpu_unimpl(vcpu, "vmgexit: invalid AP VMSA address [%#llx] from guest\n",
39783974
svm->vmcb->control.exit_info_2);
3979-
ret = -EINVAL;
3980-
goto out;
3975+
return -EINVAL;
39813976
}
39823977

39833978
/*
@@ -3991,8 +3986,7 @@ static int sev_snp_ap_creation(struct vcpu_svm *svm)
39913986
vcpu_unimpl(vcpu,
39923987
"vmgexit: AP VMSA address [%llx] from guest is unsafe as it is 2M aligned\n",
39933988
svm->vmcb->control.exit_info_2);
3994-
ret = -EINVAL;
3995-
goto out;
3989+
return -EINVAL;
39963990
}
39973991

39983992
target_svm->sev_es.snp_vmsa_gpa = svm->vmcb->control.exit_info_2;
@@ -4003,8 +3997,7 @@ static int sev_snp_ap_creation(struct vcpu_svm *svm)
40033997
default:
40043998
vcpu_unimpl(vcpu, "vmgexit: invalid AP creation request [%#x] from guest\n",
40053999
request);
4006-
ret = -EINVAL;
4007-
goto out;
4000+
return -EINVAL;
40084001
}
40094002

40104003
target_svm->sev_es.snp_ap_waiting_for_reset = true;
@@ -4018,10 +4011,7 @@ static int sev_snp_ap_creation(struct vcpu_svm *svm)
40184011
kvm_vcpu_kick(target_vcpu);
40194012
}
40204013

4021-
out:
4022-
mutex_unlock(&target_svm->sev_es.snp_vmsa_mutex);
4023-
4024-
return ret;
4014+
return 0;
40254015
}
40264016

40274017
static int snp_handle_guest_req(struct vcpu_svm *svm, gpa_t req_gpa, gpa_t resp_gpa)

0 commit comments

Comments
 (0)