|
@@ -27,34 +27,34 @@ void __hyp_text __kvm_timer_set_cntvoff(u32 cntvoff_low, u32 cntvoff_high)
|
|
|
write_sysreg(cntvoff, cntvoff_el2);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Should only be called on non-VHE systems.
|
|
|
+ * VHE systems use EL2 timers and configure EL1 timers in kvm_timer_init_vhe().
|
|
|
+ */
|
|
|
void __hyp_text __timer_disable_traps(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
- /*
|
|
|
- * We don't need to do this for VHE since the host kernel runs in EL2
|
|
|
- * with HCR_EL2.TGE ==1, which makes those bits have no impact.
|
|
|
- */
|
|
|
- if (!has_vhe()) {
|
|
|
- u64 val;
|
|
|
+ u64 val;
|
|
|
|
|
|
- /* Allow physical timer/counter access for the host */
|
|
|
- val = read_sysreg(cnthctl_el2);
|
|
|
- val |= CNTHCTL_EL1PCTEN | CNTHCTL_EL1PCEN;
|
|
|
- write_sysreg(val, cnthctl_el2);
|
|
|
- }
|
|
|
+ /* Allow physical timer/counter access for the host */
|
|
|
+ val = read_sysreg(cnthctl_el2);
|
|
|
+ val |= CNTHCTL_EL1PCTEN | CNTHCTL_EL1PCEN;
|
|
|
+ write_sysreg(val, cnthctl_el2);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Should only be called on non-VHE systems.
|
|
|
+ * VHE systems use EL2 timers and configure EL1 timers in kvm_timer_init_vhe().
|
|
|
+ */
|
|
|
void __hyp_text __timer_enable_traps(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
- if (!has_vhe()) {
|
|
|
- u64 val;
|
|
|
+ u64 val;
|
|
|
|
|
|
- /*
|
|
|
- * Disallow physical timer access for the guest
|
|
|
- * Physical counter access is allowed
|
|
|
- */
|
|
|
- val = read_sysreg(cnthctl_el2);
|
|
|
- val &= ~CNTHCTL_EL1PCEN;
|
|
|
- val |= CNTHCTL_EL1PCTEN;
|
|
|
- write_sysreg(val, cnthctl_el2);
|
|
|
- }
|
|
|
+ /*
|
|
|
+ * Disallow physical timer access for the guest
|
|
|
+ * Physical counter access is allowed
|
|
|
+ */
|
|
|
+ val = read_sysreg(cnthctl_el2);
|
|
|
+ val &= ~CNTHCTL_EL1PCEN;
|
|
|
+ val |= CNTHCTL_EL1PCTEN;
|
|
|
+ write_sysreg(val, cnthctl_el2);
|
|
|
}
|