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 */