KVM: PPC: Always use the GPR accessors
authorJordan Niethe <jniethe5@gmail.com>
Thu, 14 Sep 2023 03:05:50 +0000 (13:05 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 14 Sep 2023 12:04:23 +0000 (22:04 +1000)
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
arch/powerpc/kvm/book3s_64_vio.c
arch/powerpc/kvm/book3s_hv.c
arch/powerpc/kvm/book3s_hv_builtin.c
arch/powerpc/kvm/book3s_hv_rm_mmu.c
arch/powerpc/kvm/book3s_hv_rm_xics.c
arch/powerpc/kvm/book3s_xive.c

index 93b695b289e99a71622c883841bb33b6e495b210..4ba048f272f28e2bafd8424d522d125ce53ce677 100644 (file)
@@ -786,12 +786,12 @@ long kvmppc_h_get_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
        idx = (ioba >> stt->page_shift) - stt->offset;
        page = stt->pages[idx / TCES_PER_PAGE];
        if (!page) {
-               vcpu->arch.regs.gpr[4] = 0;
+               kvmppc_set_gpr(vcpu, 4, 0);
                return H_SUCCESS;
        }
        tbl = (u64 *)page_address(page);
 
-       vcpu->arch.regs.gpr[4] = tbl[idx % TCES_PER_PAGE];
+       kvmppc_set_gpr(vcpu, 4, tbl[idx % TCES_PER_PAGE]);
 
        return H_SUCCESS;
 }
index 130bafdb143088abf6d6983bea5e60ff3c110f28..4af5b68cf7f8620ce8ed6e4393eaf454a1786238 100644 (file)
@@ -1267,10 +1267,14 @@ int kvmppc_pseries_do_hcall(struct kvm_vcpu *vcpu)
                        return RESUME_HOST;
                break;
 #endif
-       case H_RANDOM:
-               if (!arch_get_random_seed_longs(&vcpu->arch.regs.gpr[4], 1))
+       case H_RANDOM: {
+               unsigned long rand;
+
+               if (!arch_get_random_seed_longs(&rand, 1))
                        ret = H_HARDWARE;
+               kvmppc_set_gpr(vcpu, 4, rand);
                break;
+       }
        case H_RPT_INVALIDATE:
                ret = kvmppc_h_rpt_invalidate(vcpu, kvmppc_get_gpr(vcpu, 4),
                                              kvmppc_get_gpr(vcpu, 5),
index 0f5b021fa5590b59ac13227dcb952bd8e830d6ab..f3afe194e616bca18aa1a4cb5b3b48871a5cc600 100644 (file)
@@ -182,9 +182,13 @@ EXPORT_SYMBOL_GPL(kvmppc_hwrng_present);
 
 long kvmppc_rm_h_random(struct kvm_vcpu *vcpu)
 {
+       unsigned long rand;
+
        if (ppc_md.get_random_seed &&
-           ppc_md.get_random_seed(&vcpu->arch.regs.gpr[4]))
+           ppc_md.get_random_seed(&rand)) {
+               kvmppc_set_gpr(vcpu, 4, rand);
                return H_SUCCESS;
+       }
 
        return H_HARDWARE;
 }
index 9182324dbef931df3dc314af659dc7501b9c8de4..17cb75a127b04f4e79a8554984fe53d52edd294a 100644 (file)
@@ -776,8 +776,8 @@ long kvmppc_h_read(struct kvm_vcpu *vcpu, unsigned long flags,
                        r = rev[i].guest_rpte | (r & (HPTE_R_R | HPTE_R_C));
                        r &= ~HPTE_GR_RESERVED;
                }
-               vcpu->arch.regs.gpr[4 + i * 2] = v;
-               vcpu->arch.regs.gpr[5 + i * 2] = r;
+               kvmppc_set_gpr(vcpu, 4 + i * 2, v);
+               kvmppc_set_gpr(vcpu, 5 + i * 2, r);
        }
        return H_SUCCESS;
 }
@@ -824,7 +824,7 @@ long kvmppc_h_clear_ref(struct kvm_vcpu *vcpu, unsigned long flags,
                        }
                }
        }
-       vcpu->arch.regs.gpr[4] = gr;
+       kvmppc_set_gpr(vcpu, 4, gr);
        ret = H_SUCCESS;
  out:
        unlock_hpte(hpte, v & ~HPTE_V_HVLOCK);
@@ -872,7 +872,7 @@ long kvmppc_h_clear_mod(struct kvm_vcpu *vcpu, unsigned long flags,
                        kvmppc_set_dirty_from_hpte(kvm, v, gr);
                }
        }
-       vcpu->arch.regs.gpr[4] = gr;
+       kvmppc_set_gpr(vcpu, 4, gr);
        ret = H_SUCCESS;
  out:
        unlock_hpte(hpte, v & ~HPTE_V_HVLOCK);
index e165bfa842bfca8c27bb2676a1d098964db10584..e429848785033c87eb0c3426d8900dae586a3957 100644 (file)
@@ -481,7 +481,7 @@ static void icp_rm_down_cppr(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
 
 unsigned long xics_rm_h_xirr_x(struct kvm_vcpu *vcpu)
 {
-       vcpu->arch.regs.gpr[5] = get_tb();
+       kvmppc_set_gpr(vcpu, 5, get_tb());
        return xics_rm_h_xirr(vcpu);
 }
 
@@ -518,7 +518,7 @@ unsigned long xics_rm_h_xirr(struct kvm_vcpu *vcpu)
        } while (!icp_rm_try_update(icp, old_state, new_state));
 
        /* Return the result in GPR4 */
-       vcpu->arch.regs.gpr[4] = xirr;
+       kvmppc_set_gpr(vcpu, 4, xirr);
 
        return check_too_hard(xics, icp);
 }
index f4115819e738cc039dd8f9b4bebe45b7820818b9..48d11baf1f16aa457a9b3b518021516b4d205bb0 100644 (file)
@@ -328,7 +328,7 @@ static unsigned long xive_vm_h_xirr(struct kvm_vcpu *vcpu)
         */
 
        /* Return interrupt and old CPPR in GPR4 */
-       vcpu->arch.regs.gpr[4] = hirq | (old_cppr << 24);
+       kvmppc_set_gpr(vcpu, 4, hirq | (old_cppr << 24));
 
        return H_SUCCESS;
 }
@@ -364,7 +364,7 @@ static unsigned long xive_vm_h_ipoll(struct kvm_vcpu *vcpu, unsigned long server
        hirq = xive_vm_scan_interrupts(xc, pending, scan_poll);
 
        /* Return interrupt and old CPPR in GPR4 */
-       vcpu->arch.regs.gpr[4] = hirq | (xc->cppr << 24);
+       kvmppc_set_gpr(vcpu, 4, hirq | (xc->cppr << 24));
 
        return H_SUCCESS;
 }