mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
ANDROID: KVM: arm64: refactor vcpu_read_sys_reg and vcpu_write_sys_reg for hyp use
Move vcpu_read_sys_reg and vcpu_write_sys_reg to a shared header to be used by hyp in protected mode. Refactored as macros to avoid including kvm.h, which would have been needed for struct vcpu. No functional change intended. Signed-off-by: Fuad Tabba <tabba@google.com> Bug: 209580772 Change-Id: I6b949d60b1cab6aa12978e2f9b775192701990c6 Signed-off-by: Will Deacon <willdeacon@google.com>
This commit is contained in:
@@ -502,9 +502,6 @@ struct kvm_vcpu_arch {
|
|||||||
|
|
||||||
#define __vcpu_sys_reg(v,r) (ctxt_sys_reg(&(v)->arch.ctxt, (r)))
|
#define __vcpu_sys_reg(v,r) (ctxt_sys_reg(&(v)->arch.ctxt, (r)))
|
||||||
|
|
||||||
u64 vcpu_read_sys_reg(const struct kvm_vcpu *vcpu, int reg);
|
|
||||||
void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg);
|
|
||||||
|
|
||||||
static inline bool __vcpu_read_sys_reg_from_cpu(int reg, u64 *val)
|
static inline bool __vcpu_read_sys_reg_from_cpu(int reg, u64 *val)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -596,6 +593,29 @@ static inline bool __vcpu_write_sys_reg_to_cpu(u64 val, int reg)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline u64 vcpu_arch_read_sys_reg(const struct kvm_vcpu_arch *vcpu_arch, int reg)
|
||||||
|
{
|
||||||
|
u64 val = 0x8badf00d8badf00d;
|
||||||
|
|
||||||
|
if (is_vhe_hyp_code() && vcpu_arch->sysregs_loaded_on_cpu &&
|
||||||
|
__vcpu_read_sys_reg_from_cpu(reg, &val))
|
||||||
|
return val;
|
||||||
|
|
||||||
|
return ctxt_sys_reg(&vcpu_arch->ctxt, reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void vcpu_arch_write_sys_reg(struct kvm_vcpu_arch *vcpu_arch, u64 val, int reg)
|
||||||
|
{
|
||||||
|
if (is_vhe_hyp_code() && vcpu_arch->sysregs_loaded_on_cpu &&
|
||||||
|
__vcpu_write_sys_reg_to_cpu(val, reg))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ctxt_sys_reg(&vcpu_arch->ctxt, reg) = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define vcpu_read_sys_reg(vcpu, reg) vcpu_arch_read_sys_reg(&((vcpu)->arch), reg)
|
||||||
|
#define vcpu_write_sys_reg(vcpu, val, reg) vcpu_arch_write_sys_reg(&((vcpu)->arch), val, reg)
|
||||||
|
|
||||||
struct kvm_vm_stat {
|
struct kvm_vm_stat {
|
||||||
struct kvm_vm_stat_generic generic;
|
struct kvm_vm_stat_generic generic;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -64,26 +64,6 @@ static bool write_to_read_only(struct kvm_vcpu *vcpu,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 vcpu_read_sys_reg(const struct kvm_vcpu *vcpu, int reg)
|
|
||||||
{
|
|
||||||
u64 val = 0x8badf00d8badf00d;
|
|
||||||
|
|
||||||
if (vcpu->arch.sysregs_loaded_on_cpu &&
|
|
||||||
__vcpu_read_sys_reg_from_cpu(reg, &val))
|
|
||||||
return val;
|
|
||||||
|
|
||||||
return __vcpu_sys_reg(vcpu, reg);
|
|
||||||
}
|
|
||||||
|
|
||||||
void vcpu_write_sys_reg(struct kvm_vcpu *vcpu, u64 val, int reg)
|
|
||||||
{
|
|
||||||
if (vcpu->arch.sysregs_loaded_on_cpu &&
|
|
||||||
__vcpu_write_sys_reg_to_cpu(val, reg))
|
|
||||||
return;
|
|
||||||
|
|
||||||
__vcpu_sys_reg(vcpu, reg) = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 3 bits per cache level, as per CLIDR, but non-existent caches always 0 */
|
/* 3 bits per cache level, as per CLIDR, but non-existent caches always 0 */
|
||||||
static u32 cache_levels;
|
static u32 cache_levels;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user