|
@@ -466,7 +466,7 @@ static void user_cache_maint_handler(unsigned int esr, struct pt_regs *regs)
|
|
int crm = (esr & ESR_ELx_SYS64_ISS_CRM_MASK) >> ESR_ELx_SYS64_ISS_CRM_SHIFT;
|
|
int crm = (esr & ESR_ELx_SYS64_ISS_CRM_MASK) >> ESR_ELx_SYS64_ISS_CRM_SHIFT;
|
|
int ret = 0;
|
|
int ret = 0;
|
|
|
|
|
|
- address = (rt == 31) ? 0 : regs->regs[rt];
|
|
|
|
|
|
+ address = pt_regs_read_reg(regs, rt);
|
|
|
|
|
|
switch (crm) {
|
|
switch (crm) {
|
|
case ESR_ELx_SYS64_ISS_CRM_DC_CVAU: /* DC CVAU, gets promoted */
|
|
case ESR_ELx_SYS64_ISS_CRM_DC_CVAU: /* DC CVAU, gets promoted */
|
|
@@ -495,8 +495,10 @@ static void user_cache_maint_handler(unsigned int esr, struct pt_regs *regs)
|
|
static void ctr_read_handler(unsigned int esr, struct pt_regs *regs)
|
|
static void ctr_read_handler(unsigned int esr, struct pt_regs *regs)
|
|
{
|
|
{
|
|
int rt = (esr & ESR_ELx_SYS64_ISS_RT_MASK) >> ESR_ELx_SYS64_ISS_RT_SHIFT;
|
|
int rt = (esr & ESR_ELx_SYS64_ISS_RT_MASK) >> ESR_ELx_SYS64_ISS_RT_SHIFT;
|
|
|
|
+ unsigned long val = arm64_ftr_reg_user_value(&arm64_ftr_reg_ctrel0);
|
|
|
|
+
|
|
|
|
+ pt_regs_write_reg(regs, rt, val);
|
|
|
|
|
|
- regs->regs[rt] = arm64_ftr_reg_user_value(&arm64_ftr_reg_ctrel0);
|
|
|
|
regs->pc += 4;
|
|
regs->pc += 4;
|
|
}
|
|
}
|
|
|
|
|