Nicholas Piggin <npig...@gmail.com> writes:

> Switching the MMU from radix<->radix mode is tricky particularly as the
> MMU can remain enabled and requires a certain sequence of SPR updates.
> Move these together into their own functions.
>
> This also includes the radix TLB check / flush because it's tied in to
> MMU switching due to tlbiel getting LPID from LPIDR.
>
> Signed-off-by: Nicholas Piggin <npig...@gmail.com>
> ---

<snip>

> @@ -4117,7 +4138,7 @@ int kvmhv_run_single_vcpu(struct kvm_vcpu *vcpu, u64 
> time_limit,
>  {
>       struct kvm_run *run = vcpu->run;
>       int trap, r, pcpu;
> -     int srcu_idx, lpid;
> +     int srcu_idx;
>       struct kvmppc_vcore *vc;
>       struct kvm *kvm = vcpu->kvm;
>       struct kvm_nested_guest *nested = vcpu->arch.nested;
> @@ -4191,13 +4212,6 @@ int kvmhv_run_single_vcpu(struct kvm_vcpu *vcpu, u64 
> time_limit,
>       vc->vcore_state = VCORE_RUNNING;
>       trace_kvmppc_run_core(vc, 0);
>
> -     if (cpu_has_feature(CPU_FTR_HVMODE)) {
> -             lpid = nested ? nested->shadow_lpid : kvm->arch.lpid;
> -             mtspr(SPRN_LPID, lpid);
> -             isync();
> -             kvmppc_check_need_tlb_flush(kvm, pcpu, nested);
> -     }
> -

What about the counterpart to this^ down below?

        if (cpu_has_feature(CPU_FTR_HVMODE)) {
                mtspr(SPRN_LPID, kvm->arch.host_lpid);
                isync();
        }
        
>       guest_enter_irqoff();
>
>       srcu_idx = srcu_read_lock(&kvm->srcu);

Reply via email to