summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kvm/book3s_hv.h
diff options
context:
space:
mode:
authorJordan Niethe <jniethe5@gmail.com>2023-09-14 05:05:56 +0200
committerMichael Ellerman <mpe@ellerman.id.au>2023-09-14 14:04:24 +0200
commit6de2e837babb411cfb3cdb570581c3a65576ddaf (patch)
treef03f9bc408505793515a111e21dfe91b451ab561 /arch/powerpc/kvm/book3s_hv.h
parentKVM: PPC: Book3S HV: Use accessors for VCPU registers (diff)
downloadlinux-6de2e837babb411cfb3cdb570581c3a65576ddaf.tar.xz
linux-6de2e837babb411cfb3cdb570581c3a65576ddaf.zip
KVM: PPC: Book3S HV: Introduce low level MSR accessor
kvmppc_get_msr() and kvmppc_set_msr_fast() serve as accessors for the MSR. However because the MSR is kept in the shared regs they include a conditional check for kvmppc_shared_big_endian() and endian conversion. Within the Book3S HV specific code there are direct reads and writes of shregs::msr. In preparation for Nested APIv2 these accesses need to be replaced with accessor functions so it is possible to extend their behavior. However, using the kvmppc_get_msr() and kvmppc_set_msr_fast() functions is undesirable because it would introduce a conditional branch and endian conversion that is not currently present. kvmppc_set_msr_hv() already exists, it is used for the kvmppc_ops::set_msr callback. Introduce a low level accessor __kvmppc_{s,g}et_msr_hv() that simply gets and sets shregs::msr. This will be extend for Nested APIv2 support. Signed-off-by: Jordan Niethe <jniethe5@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20230914030600.16993-8-jniethe5@gmail.com
Diffstat (limited to 'arch/powerpc/kvm/book3s_hv.h')
-rw-r--r--arch/powerpc/kvm/book3s_hv.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s_hv.h b/arch/powerpc/kvm/book3s_hv.h
index acd9a7a95bbf..95241764dfb4 100644
--- a/arch/powerpc/kvm/book3s_hv.h
+++ b/arch/powerpc/kvm/book3s_hv.h
@@ -51,6 +51,16 @@ void accumulate_time(struct kvm_vcpu *vcpu, struct kvmhv_tb_accumulator *next);
#define end_timing(vcpu) do {} while (0)
#endif
+static inline void __kvmppc_set_msr_hv(struct kvm_vcpu *vcpu, u64 val)
+{
+ vcpu->arch.shregs.msr = val;
+}
+
+static inline u64 __kvmppc_get_msr_hv(struct kvm_vcpu *vcpu)
+{
+ return vcpu->arch.shregs.msr;
+}
+
#define KVMPPC_BOOK3S_HV_VCPU_ACCESSOR_SET(reg, size) \
static inline void kvmppc_set_##reg ##_hv(struct kvm_vcpu *vcpu, u##size val) \
{ \