diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml index fe8b0982b6d9..caaf70ce713b 100755 --- a/android/abi_gki_aarch64.xml +++ b/android/abi_gki_aarch64.xml @@ -6049,6 +6049,7 @@ + @@ -117500,6 +117501,7 @@ + diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index cd8a90f237a6..bcfc4c9ef782 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -2688,6 +2688,7 @@ __tracepoint_android_vh_ftrace_size_check __tracepoint_android_vh_gic_resume __tracepoint_android_vh_gpio_block_read + __tracepoint_android_vh_handle_tlb_conf __tracepoint_android_vh_iommu_setup_dma_ops __tracepoint_android_vh_ipi_stop __tracepoint_android_vh_jiffies_update diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index 8f59bbeba7a7..f2b6a8f90d57 100644 --- a/arch/arm64/include/asm/esr.h +++ b/arch/arm64/include/asm/esr.h @@ -112,6 +112,7 @@ #define ESR_ELx_FSC_ACCESS (0x08) #define ESR_ELx_FSC_FAULT (0x04) #define ESR_ELx_FSC_PERM (0x0C) +#define ESR_ELx_FSC_TLBCONF (0x30) /* ISS field definitions for Data Aborts */ #define ESR_ELx_ISV_SHIFT (24) diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index 37806735f722..cbec7bc70095 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -711,7 +711,11 @@ static int do_alignment_fault(unsigned long far, unsigned int esr, static int do_bad(unsigned long far, unsigned int esr, struct pt_regs *regs) { - return 1; /* "fault" */ + unsigned long addr = untagged_addr(far); + int ret = 1; + + trace_android_vh_handle_tlb_conf(addr, esr, &ret); + return ret; } static int do_sea(unsigned long far, unsigned int esr, struct pt_regs *regs) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 6492e896e61f..3e26777a54c2 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -392,3 +392,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_free_proc); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_thread_release); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_has_work_ilocked); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_read_done); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_handle_tlb_conf); diff --git a/include/trace/hooks/fault.h b/include/trace/hooks/fault.h index 1daf2d250f31..2c4176001ead 100644 --- a/include/trace/hooks/fault.h +++ b/include/trace/hooks/fault.h @@ -29,6 +29,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_do_sp_pc_abort, TP_ARGS(regs, esr, addr, user), TP_CONDITION(!user)); +DECLARE_HOOK(android_vh_handle_tlb_conf, + TP_PROTO(unsigned long addr, unsigned int esr, int *ret), + TP_ARGS(addr, esr, ret)); + /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_FAULT_H */