lkml.org 
[lkml]   [2016]   [Dec]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 5/8] KVM: arm64: Add the EL1 physical timer access handler
    Date
    KVM traps on the EL1 phys timer accesses from VMs, but it doesn't handle
    those traps. This results in terminating VMs. Instead, set a handler for
    the EL1 phys timer access, and inject an undefined exception as an
    intermediate step.

    Signed-off-by: Jintack Lim <jintack@cs.columbia.edu>
    ---
    arch/arm64/kvm/sys_regs.c | 34 ++++++++++++++++++++++++++++++++++
    1 file changed, 34 insertions(+)

    diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
    index 87e7e66..fd9e747 100644
    --- a/arch/arm64/kvm/sys_regs.c
    +++ b/arch/arm64/kvm/sys_regs.c
    @@ -820,6 +820,30 @@ static bool access_pmuserenr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
    CRm((0b1100 | (((n) >> 3) & 0x3))), Op2(((n) & 0x7)), \
    access_pmu_evtyper, reset_unknown, (PMEVTYPER0_EL0 + n), }

    +static bool access_cntp_tval(struct kvm_vcpu *vcpu,
    + struct sys_reg_params *p,
    + const struct sys_reg_desc *r)
    +{
    + kvm_inject_undefined(vcpu);
    + return true;
    +}
    +
    +static bool access_cntp_ctl(struct kvm_vcpu *vcpu,
    + struct sys_reg_params *p,
    + const struct sys_reg_desc *r)
    +{
    + kvm_inject_undefined(vcpu);
    + return true;
    +}
    +
    +static bool access_cntp_cval(struct kvm_vcpu *vcpu,
    + struct sys_reg_params *p,
    + const struct sys_reg_desc *r)
    +{
    + kvm_inject_undefined(vcpu);
    + return true;
    +}
    +
    /*
    * Architected system registers.
    * Important: Must be sorted ascending by Op0, Op1, CRn, CRm, Op2
    @@ -1029,6 +1053,16 @@ static bool access_pmuserenr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
    { Op0(0b11), Op1(0b011), CRn(0b1101), CRm(0b0000), Op2(0b011),
    NULL, reset_unknown, TPIDRRO_EL0 },

    + /* CNTP_TVAL_EL0 */
    + { Op0(0b11), Op1(0b011), CRn(0b1110), CRm(0b0010), Op2(0b000),
    + access_cntp_tval },
    + /* CNTP_CTL_EL0 */
    + { Op0(0b11), Op1(0b011), CRn(0b1110), CRm(0b0010), Op2(0b001),
    + access_cntp_ctl },
    + /* CNTP_CVAL_EL0 */
    + { Op0(0b11), Op1(0b011), CRn(0b1110), CRm(0b0010), Op2(0b010),
    + access_cntp_cval },
    +
    /* PMEVCNTRn_EL0 */
    PMU_PMEVCNTR_EL0(0),
    PMU_PMEVCNTR_EL0(1),
    --
    1.9.1

    \
     
     \ /
      Last update: 2016-12-26 18:47    [W:5.032 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site