KVM: PPC: bookehv: Add EPCR support in mtspr/mfspr emulation
Add EPCR support in booke mtspr/mfspr emulation. EPCR register is defined only for 64-bit and HV categories, we will expose it at this point only to 64-bit virtual processors running on 64-bit HV hosts. Define a reusable setter function for vcpu's EPCR. Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com> [agraf: move HV dependency in the code] Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
Родитель
95e90b43c9
Коммит
38f988240c
|
@ -1473,6 +1473,18 @@ void kvmppc_core_flush_memslot(struct kvm *kvm, struct kvm_memory_slot *memslot)
|
|||
{
|
||||
}
|
||||
|
||||
void kvmppc_set_epcr(struct kvm_vcpu *vcpu, u32 new_epcr)
|
||||
{
|
||||
#if defined(CONFIG_64BIT)
|
||||
vcpu->arch.epcr = new_epcr;
|
||||
#ifdef CONFIG_KVM_BOOKE_HV
|
||||
vcpu->arch.shadow_epcr &= ~SPRN_EPCR_GICM;
|
||||
if (vcpu->arch.epcr & SPRN_EPCR_ICM)
|
||||
vcpu->arch.shadow_epcr |= SPRN_EPCR_GICM;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void kvmppc_set_tcr(struct kvm_vcpu *vcpu, u32 new_tcr)
|
||||
{
|
||||
vcpu->arch.tcr = new_tcr;
|
||||
|
|
|
@ -69,6 +69,7 @@ extern unsigned long kvmppc_booke_handlers;
|
|||
void kvmppc_set_msr(struct kvm_vcpu *vcpu, u32 new_msr);
|
||||
void kvmppc_mmu_msr_notify(struct kvm_vcpu *vcpu, u32 old_msr);
|
||||
|
||||
void kvmppc_set_epcr(struct kvm_vcpu *vcpu, u32 new_epcr);
|
||||
void kvmppc_set_tcr(struct kvm_vcpu *vcpu, u32 new_tcr);
|
||||
void kvmppc_set_tsr_bits(struct kvm_vcpu *vcpu, u32 tsr_bits);
|
||||
void kvmppc_clr_tsr_bits(struct kvm_vcpu *vcpu, u32 tsr_bits);
|
||||
|
|
|
@ -240,7 +240,14 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val)
|
|||
case SPRN_MCSR:
|
||||
vcpu->arch.mcsr &= ~spr_val;
|
||||
break;
|
||||
|
||||
#if defined(CONFIG_64BIT)
|
||||
case SPRN_EPCR:
|
||||
kvmppc_set_epcr(vcpu, spr_val);
|
||||
#ifdef CONFIG_KVM_BOOKE_HV
|
||||
mtspr(SPRN_EPCR, vcpu->arch.shadow_epcr);
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
emulated = EMULATE_FAIL;
|
||||
}
|
||||
|
@ -335,6 +342,11 @@ int kvmppc_booke_emulate_mfspr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val)
|
|||
case SPRN_MCSR:
|
||||
*spr_val = vcpu->arch.mcsr;
|
||||
break;
|
||||
#if defined(CONFIG_64BIT)
|
||||
case SPRN_EPCR:
|
||||
*spr_val = vcpu->arch.epcr;
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
emulated = EMULATE_FAIL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче