KVM: PPC: Book3S HV P9: Split !nested case out from guest entry
The differences between nested and !nested will become larger in later changes so split them out for readability. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20220303053315.1056880-5-npiggin@gmail.com
This commit is contained in:
parent
ad5ace91c5
commit
42b4a2b347
@ -4029,6 +4029,8 @@ static int kvmhv_vcpu_entry_p9_nested(struct kvm_vcpu *vcpu, u64 time_limit, uns
|
||||
static int kvmhv_p9_guest_entry(struct kvm_vcpu *vcpu, u64 time_limit,
|
||||
unsigned long lpcr, u64 *tb)
|
||||
{
|
||||
struct kvm *kvm = vcpu->kvm;
|
||||
struct kvm_nested_guest *nested = vcpu->arch.nested;
|
||||
u64 next_timer;
|
||||
int trap;
|
||||
|
||||
@ -4048,23 +4050,30 @@ static int kvmhv_p9_guest_entry(struct kvm_vcpu *vcpu, u64 time_limit,
|
||||
trap = kvmhv_vcpu_entry_p9_nested(vcpu, time_limit, lpcr, tb);
|
||||
|
||||
/* H_CEDE has to be handled now, not later */
|
||||
if (trap == BOOK3S_INTERRUPT_SYSCALL && !vcpu->arch.nested &&
|
||||
if (trap == BOOK3S_INTERRUPT_SYSCALL && !nested &&
|
||||
kvmppc_get_gpr(vcpu, 3) == H_CEDE) {
|
||||
kvmppc_cede(vcpu);
|
||||
kvmppc_set_gpr(vcpu, 3, 0);
|
||||
trap = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
struct kvm *kvm = vcpu->kvm;
|
||||
|
||||
} else if (nested) {
|
||||
kvmppc_xive_push_vcpu(vcpu);
|
||||
|
||||
__this_cpu_write(cpu_in_guest, kvm);
|
||||
trap = kvmhv_vcpu_entry_p9(vcpu, time_limit, lpcr, tb);
|
||||
__this_cpu_write(cpu_in_guest, NULL);
|
||||
|
||||
if (trap == BOOK3S_INTERRUPT_SYSCALL && !vcpu->arch.nested &&
|
||||
kvmppc_xive_pull_vcpu(vcpu);
|
||||
|
||||
} else {
|
||||
kvmppc_xive_push_vcpu(vcpu);
|
||||
|
||||
__this_cpu_write(cpu_in_guest, kvm);
|
||||
trap = kvmhv_vcpu_entry_p9(vcpu, time_limit, lpcr, tb);
|
||||
__this_cpu_write(cpu_in_guest, NULL);
|
||||
|
||||
if (trap == BOOK3S_INTERRUPT_SYSCALL &&
|
||||
!(vcpu->arch.shregs.msr & MSR_PR)) {
|
||||
unsigned long req = kvmppc_get_gpr(vcpu, 3);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user