Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: PPC: Always use the GPR accessors

Always use the GPR accessor functions. This will be important later for
Nested APIv2 support which requires additional functionality for
accessing and modifying VCPU state.

Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230914030600.16993-2-jniethe5@gmail.com

authored by

Jordan Niethe and committed by
Michael Ellerman
0e85b7df 0bb80ecc

+21 -13
+2 -2
arch/powerpc/kvm/book3s_64_vio.c
··· 786 786 idx = (ioba >> stt->page_shift) - stt->offset; 787 787 page = stt->pages[idx / TCES_PER_PAGE]; 788 788 if (!page) { 789 - vcpu->arch.regs.gpr[4] = 0; 789 + kvmppc_set_gpr(vcpu, 4, 0); 790 790 return H_SUCCESS; 791 791 } 792 792 tbl = (u64 *)page_address(page); 793 793 794 - vcpu->arch.regs.gpr[4] = tbl[idx % TCES_PER_PAGE]; 794 + kvmppc_set_gpr(vcpu, 4, tbl[idx % TCES_PER_PAGE]); 795 795 796 796 return H_SUCCESS; 797 797 }
+6 -2
arch/powerpc/kvm/book3s_hv.c
··· 1267 1267 return RESUME_HOST; 1268 1268 break; 1269 1269 #endif 1270 - case H_RANDOM: 1271 - if (!arch_get_random_seed_longs(&vcpu->arch.regs.gpr[4], 1)) 1270 + case H_RANDOM: { 1271 + unsigned long rand; 1272 + 1273 + if (!arch_get_random_seed_longs(&rand, 1)) 1272 1274 ret = H_HARDWARE; 1275 + kvmppc_set_gpr(vcpu, 4, rand); 1273 1276 break; 1277 + } 1274 1278 case H_RPT_INVALIDATE: 1275 1279 ret = kvmppc_h_rpt_invalidate(vcpu, kvmppc_get_gpr(vcpu, 4), 1276 1280 kvmppc_get_gpr(vcpu, 5),
+5 -1
arch/powerpc/kvm/book3s_hv_builtin.c
··· 182 182 183 183 long kvmppc_rm_h_random(struct kvm_vcpu *vcpu) 184 184 { 185 + unsigned long rand; 186 + 185 187 if (ppc_md.get_random_seed && 186 - ppc_md.get_random_seed(&vcpu->arch.regs.gpr[4])) 188 + ppc_md.get_random_seed(&rand)) { 189 + kvmppc_set_gpr(vcpu, 4, rand); 187 190 return H_SUCCESS; 191 + } 188 192 189 193 return H_HARDWARE; 190 194 }
+4 -4
arch/powerpc/kvm/book3s_hv_rm_mmu.c
··· 776 776 r = rev[i].guest_rpte | (r & (HPTE_R_R | HPTE_R_C)); 777 777 r &= ~HPTE_GR_RESERVED; 778 778 } 779 - vcpu->arch.regs.gpr[4 + i * 2] = v; 780 - vcpu->arch.regs.gpr[5 + i * 2] = r; 779 + kvmppc_set_gpr(vcpu, 4 + i * 2, v); 780 + kvmppc_set_gpr(vcpu, 5 + i * 2, r); 781 781 } 782 782 return H_SUCCESS; 783 783 } ··· 824 824 } 825 825 } 826 826 } 827 - vcpu->arch.regs.gpr[4] = gr; 827 + kvmppc_set_gpr(vcpu, 4, gr); 828 828 ret = H_SUCCESS; 829 829 out: 830 830 unlock_hpte(hpte, v & ~HPTE_V_HVLOCK); ··· 872 872 kvmppc_set_dirty_from_hpte(kvm, v, gr); 873 873 } 874 874 } 875 - vcpu->arch.regs.gpr[4] = gr; 875 + kvmppc_set_gpr(vcpu, 4, gr); 876 876 ret = H_SUCCESS; 877 877 out: 878 878 unlock_hpte(hpte, v & ~HPTE_V_HVLOCK);
+2 -2
arch/powerpc/kvm/book3s_hv_rm_xics.c
··· 481 481 482 482 unsigned long xics_rm_h_xirr_x(struct kvm_vcpu *vcpu) 483 483 { 484 - vcpu->arch.regs.gpr[5] = get_tb(); 484 + kvmppc_set_gpr(vcpu, 5, get_tb()); 485 485 return xics_rm_h_xirr(vcpu); 486 486 } 487 487 ··· 518 518 } while (!icp_rm_try_update(icp, old_state, new_state)); 519 519 520 520 /* Return the result in GPR4 */ 521 - vcpu->arch.regs.gpr[4] = xirr; 521 + kvmppc_set_gpr(vcpu, 4, xirr); 522 522 523 523 return check_too_hard(xics, icp); 524 524 }
+2 -2
arch/powerpc/kvm/book3s_xive.c
··· 328 328 */ 329 329 330 330 /* Return interrupt and old CPPR in GPR4 */ 331 - vcpu->arch.regs.gpr[4] = hirq | (old_cppr << 24); 331 + kvmppc_set_gpr(vcpu, 4, hirq | (old_cppr << 24)); 332 332 333 333 return H_SUCCESS; 334 334 } ··· 364 364 hirq = xive_vm_scan_interrupts(xc, pending, scan_poll); 365 365 366 366 /* Return interrupt and old CPPR in GPR4 */ 367 - vcpu->arch.regs.gpr[4] = hirq | (xc->cppr << 24); 367 + kvmppc_set_gpr(vcpu, 4, hirq | (xc->cppr << 24)); 368 368 369 369 return H_SUCCESS; 370 370 }