[PATCH 09/11] KVM: arm64: Remove SPSR manipulation primitives
Mark Rutland
mark.rutland at arm.com
Mon Oct 26 10:30:19 EDT 2020
On Mon, Oct 26, 2020 at 01:34:48PM +0000, Marc Zyngier wrote:
> The SPR setting code is now completely unused, including that dealing
> with banked AArch32 SPSRs. Cleanup time.
>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
Acked-by: Mark Rutland <mark.rutland at arm.com>
Mark.
> ---
> arch/arm64/include/asm/kvm_emulate.h | 26 --------
> arch/arm64/kvm/regmap.c | 96 ----------------------------
> 2 files changed, 122 deletions(-)
>
> diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h
> index 736a342dadf7..5d957d0e7b69 100644
> --- a/arch/arm64/include/asm/kvm_emulate.h
> +++ b/arch/arm64/include/asm/kvm_emulate.h
> @@ -34,8 +34,6 @@ enum exception_type {
> };
>
> unsigned long *vcpu_reg32(const struct kvm_vcpu *vcpu, u8 reg_num);
> -unsigned long vcpu_read_spsr32(const struct kvm_vcpu *vcpu);
> -void vcpu_write_spsr32(struct kvm_vcpu *vcpu, unsigned long v);
>
> bool kvm_condition_valid32(const struct kvm_vcpu *vcpu);
> void kvm_skip_instr32(struct kvm_vcpu *vcpu);
> @@ -180,30 +178,6 @@ static __always_inline void vcpu_set_reg(struct kvm_vcpu *vcpu, u8 reg_num,
> vcpu_gp_regs(vcpu)->regs[reg_num] = val;
> }
>
> -static inline unsigned long vcpu_read_spsr(const struct kvm_vcpu *vcpu)
> -{
> - if (vcpu_mode_is_32bit(vcpu))
> - return vcpu_read_spsr32(vcpu);
> -
> - if (vcpu->arch.sysregs_loaded_on_cpu)
> - return read_sysreg_el1(SYS_SPSR);
> - else
> - return __vcpu_sys_reg(vcpu, SPSR_EL1);
> -}
> -
> -static inline void vcpu_write_spsr(struct kvm_vcpu *vcpu, unsigned long v)
> -{
> - if (vcpu_mode_is_32bit(vcpu)) {
> - vcpu_write_spsr32(vcpu, v);
> - return;
> - }
> -
> - if (vcpu->arch.sysregs_loaded_on_cpu)
> - write_sysreg_el1(v, SYS_SPSR);
> - else
> - __vcpu_sys_reg(vcpu, SPSR_EL1) = v;
> -}
> -
> /*
> * The layout of SPSR for an AArch32 state is different when observed from an
> * AArch64 SPSR_ELx or an AArch32 SPSR_*. This function generates the AArch32
> diff --git a/arch/arm64/kvm/regmap.c b/arch/arm64/kvm/regmap.c
> index accc1d5fba61..ae7e290bb017 100644
> --- a/arch/arm64/kvm/regmap.c
> +++ b/arch/arm64/kvm/regmap.c
> @@ -126,99 +126,3 @@ unsigned long *vcpu_reg32(const struct kvm_vcpu *vcpu, u8 reg_num)
>
> return reg_array + vcpu_reg_offsets[mode][reg_num];
> }
> -
> -/*
> - * Return the SPSR for the current mode of the virtual CPU.
> - */
> -static int vcpu_spsr32_mode(const struct kvm_vcpu *vcpu)
> -{
> - unsigned long mode = *vcpu_cpsr(vcpu) & PSR_AA32_MODE_MASK;
> - switch (mode) {
> - case PSR_AA32_MODE_SVC: return KVM_SPSR_SVC;
> - case PSR_AA32_MODE_ABT: return KVM_SPSR_ABT;
> - case PSR_AA32_MODE_UND: return KVM_SPSR_UND;
> - case PSR_AA32_MODE_IRQ: return KVM_SPSR_IRQ;
> - case PSR_AA32_MODE_FIQ: return KVM_SPSR_FIQ;
> - default: BUG();
> - }
> -}
> -
> -unsigned long vcpu_read_spsr32(const struct kvm_vcpu *vcpu)
> -{
> - int spsr_idx = vcpu_spsr32_mode(vcpu);
> -
> - if (!vcpu->arch.sysregs_loaded_on_cpu) {
> - switch (spsr_idx) {
> - case KVM_SPSR_SVC:
> - return __vcpu_sys_reg(vcpu, SPSR_EL1);
> - case KVM_SPSR_ABT:
> - return vcpu->arch.ctxt.spsr_abt;
> - case KVM_SPSR_UND:
> - return vcpu->arch.ctxt.spsr_und;
> - case KVM_SPSR_IRQ:
> - return vcpu->arch.ctxt.spsr_irq;
> - case KVM_SPSR_FIQ:
> - return vcpu->arch.ctxt.spsr_fiq;
> - }
> - }
> -
> - switch (spsr_idx) {
> - case KVM_SPSR_SVC:
> - return read_sysreg_el1(SYS_SPSR);
> - case KVM_SPSR_ABT:
> - return read_sysreg(spsr_abt);
> - case KVM_SPSR_UND:
> - return read_sysreg(spsr_und);
> - case KVM_SPSR_IRQ:
> - return read_sysreg(spsr_irq);
> - case KVM_SPSR_FIQ:
> - return read_sysreg(spsr_fiq);
> - default:
> - BUG();
> - }
> -}
> -
> -void vcpu_write_spsr32(struct kvm_vcpu *vcpu, unsigned long v)
> -{
> - int spsr_idx = vcpu_spsr32_mode(vcpu);
> -
> - if (!vcpu->arch.sysregs_loaded_on_cpu) {
> - switch (spsr_idx) {
> - case KVM_SPSR_SVC:
> - __vcpu_sys_reg(vcpu, SPSR_EL1) = v;
> - break;
> - case KVM_SPSR_ABT:
> - vcpu->arch.ctxt.spsr_abt = v;
> - break;
> - case KVM_SPSR_UND:
> - vcpu->arch.ctxt.spsr_und = v;
> - break;
> - case KVM_SPSR_IRQ:
> - vcpu->arch.ctxt.spsr_irq = v;
> - break;
> - case KVM_SPSR_FIQ:
> - vcpu->arch.ctxt.spsr_fiq = v;
> - break;
> - }
> -
> - return;
> - }
> -
> - switch (spsr_idx) {
> - case KVM_SPSR_SVC:
> - write_sysreg_el1(v, SYS_SPSR);
> - break;
> - case KVM_SPSR_ABT:
> - write_sysreg(v, spsr_abt);
> - break;
> - case KVM_SPSR_UND:
> - write_sysreg(v, spsr_und);
> - break;
> - case KVM_SPSR_IRQ:
> - write_sysreg(v, spsr_irq);
> - break;
> - case KVM_SPSR_FIQ:
> - write_sysreg(v, spsr_fiq);
> - break;
> - }
> -}
> --
> 2.28.0
>
> _______________________________________________
> kvmarm mailing list
> kvmarm at lists.cs.columbia.edu
> https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
More information about the linux-arm-kernel
mailing list