diff for duplicates of <87y2fawj4n.fsf@linux.ibm.com> diff --git a/a/1.txt b/N1/1.txt index fff75c3..88f2559 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -263,7 +263,7 @@ That would avoid having the C code knowing about scratch areas. > */ > case BOOK3S_INTERRUPT_H_DATA_STORAGE: > r = RESUME_PAGE_FAULT; -> + if (vcpu->arch.fault_dsisr = HDSISR_CANARY) +> + if (vcpu->arch.fault_dsisr == HDSISR_CANARY) > + r = RESUME_GUEST; /* Just retry if it's the canary */ > break; > case BOOK3S_INTERRUPT_H_INST_STORAGE: @@ -274,9 +274,9 @@ That would avoid having the C code knowing about scratch areas. > mtspr(SPRN_PSSCR_PR, host_psscr); > - > /* H_CEDE has to be handled now, not later */ -> - if (trap = BOOK3S_INTERRUPT_SYSCALL && !vcpu->arch.nested && -> + if (trap = BOOK3S_INTERRUPT_SYSCALL && -> kvmppc_get_gpr(vcpu, 3) = H_CEDE) { +> - if (trap == BOOK3S_INTERRUPT_SYSCALL && !vcpu->arch.nested && +> + if (trap == BOOK3S_INTERRUPT_SYSCALL && +> kvmppc_get_gpr(vcpu, 3) == H_CEDE) { > kvmppc_cede(vcpu); > kvmppc_set_gpr(vcpu, 3, 0); > trap = 0; @@ -301,12 +301,12 @@ That would avoid having the C code knowing about scratch areas. > else > r = kvmppc_run_vcpu(vcpu); > -> - if (run->exit_reason = KVM_EXIT_PAPR_HCALL && +> - if (run->exit_reason == KVM_EXIT_PAPR_HCALL && > - !(vcpu->arch.shregs.msr & MSR_PR)) { > - trace_kvm_hcall_enter(vcpu); > - r = kvmppc_pseries_do_hcall(vcpu); > - trace_kvm_hcall_exit(vcpu, r); -> + if (run->exit_reason = KVM_EXIT_PAPR_HCALL) { +> + if (run->exit_reason == KVM_EXIT_PAPR_HCALL) { > + if (unlikely(vcpu->arch.shregs.msr & MSR_PR)) { > + /* > + * Guest userspace executed sc 1, reflect it @@ -335,7 +335,7 @@ in there as well. > + trace_kvm_hcall_exit(vcpu, r); > + } > kvmppc_core_prepare_to_enter(vcpu); -> } else if (r = RESUME_PAGE_FAULT) { +> } else if (r == RESUME_PAGE_FAULT) { > srcu_idx = srcu_read_lock(&kvm->srcu); > diff --git a/arch/powerpc/kvm/book3s_hv_interrupt.c b/arch/powerpc/kvm/book3s_hv_interrupt.c > new file mode 100644 @@ -383,7 +383,7 @@ in there as well. > + curr->seqcount = seq + 1; > + smp_wmb(); > + curr->tb_total += delta; -> + if (seq = 0 || delta < curr->tb_min) +> + if (seq == 0 || delta < curr->tb_min) > + curr->tb_min = delta; > + if (delta > curr->tb_max) > + curr->tb_max = delta; @@ -496,9 +496,9 @@ in asm already. > + if (likely(trap > BOOK3S_INTERRUPT_MACHINE_CHECK)) { > + exsave = local_paca->exgen; -> + } else if (trap = BOOK3S_INTERRUPT_SYSTEM_RESET) { +> + } else if (trap == BOOK3S_INTERRUPT_SYSTEM_RESET) { > + exsave = local_paca->exnmi; -> + } else { /* trap = 0x200 */ +> + } else { /* trap == 0x200 */ > + exsave = local_paca->exmc; > + } > + @@ -515,26 +515,26 @@ in asm already. > + > + vcpu->arch.last_inst = KVM_INST_FETCH_FAILED; > + -> + if (unlikely(trap = BOOK3S_INTERRUPT_MACHINE_CHECK)) { +> + if (unlikely(trap == BOOK3S_INTERRUPT_MACHINE_CHECK)) { > + vcpu->arch.fault_dar = exsave[EX_DAR/sizeof(u64)]; > + vcpu->arch.fault_dsisr = exsave[EX_DSISR/sizeof(u64)]; > + kvmppc_realmode_machine_check(vcpu); > + -> + } else if (unlikely(trap = BOOK3S_INTERRUPT_HMI)) { +> + } else if (unlikely(trap == BOOK3S_INTERRUPT_HMI)) { > + kvmppc_realmode_hmi_handler(); > + -> + } else if (trap = BOOK3S_INTERRUPT_H_EMUL_ASSIST) { +> + } else if (trap == BOOK3S_INTERRUPT_H_EMUL_ASSIST) { > + vcpu->arch.emul_inst = mfspr(SPRN_HEIR); > + -> + } else if (trap = BOOK3S_INTERRUPT_H_DATA_STORAGE) { +> + } else if (trap == BOOK3S_INTERRUPT_H_DATA_STORAGE) { > + vcpu->arch.fault_dar = exsave[EX_DAR/sizeof(u64)]; > + vcpu->arch.fault_dsisr = exsave[EX_DSISR/sizeof(u64)]; > + vcpu->arch.fault_gpa = mfspr(SPRN_ASDR); > + -> + } else if (trap = BOOK3S_INTERRUPT_H_INST_STORAGE) { +> + } else if (trap == BOOK3S_INTERRUPT_H_INST_STORAGE) { > + vcpu->arch.fault_gpa = mfspr(SPRN_ASDR); > + -> + } else if (trap = BOOK3S_INTERRUPT_H_FAC_UNAVAIL) { +> + } else if (trap == BOOK3S_INTERRUPT_H_FAC_UNAVAIL) { > + vcpu->arch.hfscr = mfspr(SPRN_HFSCR); > + > +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM @@ -543,7 +543,7 @@ in asm already. > + * on POWER9 DD2.2. This is early in the guest exit path - we > + * haven't saved registers or done a treclaim yet. > + */ -> + } else if (trap = BOOK3S_INTERRUPT_HV_SOFTPATCH) { +> + } else if (trap == BOOK3S_INTERRUPT_HV_SOFTPATCH) { > + vcpu->arch.emul_inst = mfspr(SPRN_HEIR); > + > + /* diff --git a/a/content_digest b/N1/content_digest index bd29ccf..c689a8c 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -2,7 +2,7 @@ "ref\020210225134652.2127648-24-npiggin@gmail.com\0" "From\0Fabiano Rosas <farosas@linux.ibm.com>\0" "Subject\0Re: [PATCH v2 23/37] KVM: PPC: Book3S HV P9: Implement the rest of the P9 path in C\0" - "Date\0Fri, 26 Feb 2021 22:37:28 +0000\0" + "Date\0Fri, 26 Feb 2021 19:37:28 -0300\0" "To\0Nicholas Piggin <npiggin@gmail.com>" " kvm-ppc@vger.kernel.org\0" "Cc\0linuxppc-dev@lists.ozlabs.org" @@ -274,7 +274,7 @@ "> \t */\n" "> \tcase BOOK3S_INTERRUPT_H_DATA_STORAGE:\n" "> \t\tr = RESUME_PAGE_FAULT;\n" - "> +\t\tif (vcpu->arch.fault_dsisr = HDSISR_CANARY)\n" + "> +\t\tif (vcpu->arch.fault_dsisr == HDSISR_CANARY)\n" "> +\t\t\tr = RESUME_GUEST; /* Just retry if it's the canary */\n" "> \t\tbreak;\n" "> \tcase BOOK3S_INTERRUPT_H_INST_STORAGE:\n" @@ -285,9 +285,9 @@ "> \t\tmtspr(SPRN_PSSCR_PR, host_psscr);\n" "> -\n" "> \t\t/* H_CEDE has to be handled now, not later */\n" - "> -\t\tif (trap = BOOK3S_INTERRUPT_SYSCALL && !vcpu->arch.nested &&\n" - "> +\t\tif (trap = BOOK3S_INTERRUPT_SYSCALL &&\n" - "> \t\t kvmppc_get_gpr(vcpu, 3) = H_CEDE) {\n" + "> -\t\tif (trap == BOOK3S_INTERRUPT_SYSCALL && !vcpu->arch.nested &&\n" + "> +\t\tif (trap == BOOK3S_INTERRUPT_SYSCALL &&\n" + "> \t\t kvmppc_get_gpr(vcpu, 3) == H_CEDE) {\n" "> \t\t\tkvmppc_cede(vcpu);\n" "> \t\t\tkvmppc_set_gpr(vcpu, 3, 0);\n" "> \t\t\ttrap = 0;\n" @@ -312,12 +312,12 @@ "> \t\telse\n" "> \t\t\tr = kvmppc_run_vcpu(vcpu);\n" ">\n" - "> -\t\tif (run->exit_reason = KVM_EXIT_PAPR_HCALL &&\n" + "> -\t\tif (run->exit_reason == KVM_EXIT_PAPR_HCALL &&\n" "> -\t\t !(vcpu->arch.shregs.msr & MSR_PR)) {\n" "> -\t\t\ttrace_kvm_hcall_enter(vcpu);\n" "> -\t\t\tr = kvmppc_pseries_do_hcall(vcpu);\n" "> -\t\t\ttrace_kvm_hcall_exit(vcpu, r);\n" - "> +\t\tif (run->exit_reason = KVM_EXIT_PAPR_HCALL) {\n" + "> +\t\tif (run->exit_reason == KVM_EXIT_PAPR_HCALL) {\n" "> +\t\t\tif (unlikely(vcpu->arch.shregs.msr & MSR_PR)) {\n" "> +\t\t\t\t/*\n" "> +\t\t\t\t * Guest userspace executed sc 1, reflect it\n" @@ -346,7 +346,7 @@ "> +\t\t\t\ttrace_kvm_hcall_exit(vcpu, r);\n" "> +\t\t\t}\n" "> \t\t\tkvmppc_core_prepare_to_enter(vcpu);\n" - "> \t\t} else if (r = RESUME_PAGE_FAULT) {\n" + "> \t\t} else if (r == RESUME_PAGE_FAULT) {\n" "> \t\t\tsrcu_idx = srcu_read_lock(&kvm->srcu);\n" "> diff --git a/arch/powerpc/kvm/book3s_hv_interrupt.c b/arch/powerpc/kvm/book3s_hv_interrupt.c\n" "> new file mode 100644\n" @@ -394,7 +394,7 @@ "> +\tcurr->seqcount = seq + 1;\n" "> +\tsmp_wmb();\n" "> +\tcurr->tb_total += delta;\n" - "> +\tif (seq = 0 || delta < curr->tb_min)\n" + "> +\tif (seq == 0 || delta < curr->tb_min)\n" "> +\t\tcurr->tb_min = delta;\n" "> +\tif (delta > curr->tb_max)\n" "> +\t\tcurr->tb_max = delta;\n" @@ -507,9 +507,9 @@ "\n" "> +\tif (likely(trap > BOOK3S_INTERRUPT_MACHINE_CHECK)) {\n" "> +\t\texsave = local_paca->exgen;\n" - "> +\t} else if (trap = BOOK3S_INTERRUPT_SYSTEM_RESET) {\n" + "> +\t} else if (trap == BOOK3S_INTERRUPT_SYSTEM_RESET) {\n" "> +\t\texsave = local_paca->exnmi;\n" - "> +\t} else { /* trap = 0x200 */\n" + "> +\t} else { /* trap == 0x200 */\n" "> +\t\texsave = local_paca->exmc;\n" "> +\t}\n" "> +\n" @@ -526,26 +526,26 @@ "> +\n" "> +\tvcpu->arch.last_inst = KVM_INST_FETCH_FAILED;\n" "> +\n" - "> +\tif (unlikely(trap = BOOK3S_INTERRUPT_MACHINE_CHECK)) {\n" + "> +\tif (unlikely(trap == BOOK3S_INTERRUPT_MACHINE_CHECK)) {\n" "> +\t\tvcpu->arch.fault_dar = exsave[EX_DAR/sizeof(u64)];\n" "> +\t\tvcpu->arch.fault_dsisr = exsave[EX_DSISR/sizeof(u64)];\n" "> +\t\tkvmppc_realmode_machine_check(vcpu);\n" "> +\n" - "> +\t} else if (unlikely(trap = BOOK3S_INTERRUPT_HMI)) {\n" + "> +\t} else if (unlikely(trap == BOOK3S_INTERRUPT_HMI)) {\n" "> +\t\tkvmppc_realmode_hmi_handler();\n" "> +\n" - "> +\t} else if (trap = BOOK3S_INTERRUPT_H_EMUL_ASSIST) {\n" + "> +\t} else if (trap == BOOK3S_INTERRUPT_H_EMUL_ASSIST) {\n" "> +\t\tvcpu->arch.emul_inst = mfspr(SPRN_HEIR);\n" "> +\n" - "> +\t} else if (trap = BOOK3S_INTERRUPT_H_DATA_STORAGE) {\n" + "> +\t} else if (trap == BOOK3S_INTERRUPT_H_DATA_STORAGE) {\n" "> +\t\tvcpu->arch.fault_dar = exsave[EX_DAR/sizeof(u64)];\n" "> +\t\tvcpu->arch.fault_dsisr = exsave[EX_DSISR/sizeof(u64)];\n" "> +\t\tvcpu->arch.fault_gpa = mfspr(SPRN_ASDR);\n" "> +\n" - "> +\t} else if (trap = BOOK3S_INTERRUPT_H_INST_STORAGE) {\n" + "> +\t} else if (trap == BOOK3S_INTERRUPT_H_INST_STORAGE) {\n" "> +\t\tvcpu->arch.fault_gpa = mfspr(SPRN_ASDR);\n" "> +\n" - "> +\t} else if (trap = BOOK3S_INTERRUPT_H_FAC_UNAVAIL) {\n" + "> +\t} else if (trap == BOOK3S_INTERRUPT_H_FAC_UNAVAIL) {\n" "> +\t\tvcpu->arch.hfscr = mfspr(SPRN_HFSCR);\n" "> +\n" "> +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM\n" @@ -554,7 +554,7 @@ "> +\t * on POWER9 DD2.2. This is early in the guest exit path - we\n" "> +\t * haven't saved registers or done a treclaim yet.\n" "> +\t */\n" - "> +\t} else if (trap = BOOK3S_INTERRUPT_HV_SOFTPATCH) {\n" + "> +\t} else if (trap == BOOK3S_INTERRUPT_HV_SOFTPATCH) {\n" "> +\t\tvcpu->arch.emul_inst = mfspr(SPRN_HEIR);\n" "> +\n" "> +\t\t/*\n" @@ -589,4 +589,4 @@ "\n" <snip> -1c156f0374af7589fa04ce4fcd0b0f0493f89bfbdefb176700cd241c521a3180 +c633a7c192a824bfb93872032c9b57c9c1266805f2417ffbf7a9a1d3e2309239
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.