ca7dabaf67
Currently, there are various global init exit issues encountered on Andriod/linux system. It's hard to debug these issues on product environment without a usable coredump. For example, it's hard to get the root cause why global init task exited from the below kmsg: [ 4.696032][T400001] e2fsck: /dev/block/by-name/metadata: clean, 35/8192 files, 2083/8192 blocks [ 4.696783][T500326] [bq27z561] fg_debug_dump_regs: slave_dump:Reg[0x0073] = 0x05C5 [ 4.700583][T400001] EXT4-fs (sdc17): mounted filesystem with ordered data mode. Opts: discard [ 4.706445][T400001] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00007f0000 [ 4.706459][T400001] CPU: 4 PID: 1 Comm: init Tainted: G S W 5.10.136-android12-9-00005-gf9a66cbe7091-ab9177899 #1 [ 4.706464][T400001] Hardware name: MT6983Z/TCZA (DT) [ 4.706469][T400001] Call trace: [ 4.706482][T400001] dump_backtrace.cfi_jt+0x0/0x8 [ 4.706493][T400001] dump_stack_lvl+0xc4/0x140 [ 4.706504][T400001] panic+0x178/0x464 [ 4.706511][T400001] do_exit+0xb30/0xf9c [ 4.706517][T400001] do_group_exit+0x130/0x1c8 [ 4.706523][T400001] do_group_exit+0x0/0x1c8 [ 4.706529][T400001] __do_sys_exit_group+0x0/0x18 [ 4.706535][T400001] __se_sys_exit_group+0x0/0x14 [ 4.706543][T400001] el0_svc_common+0xd4/0x270 [ 4.706551][T400001] el0_svc+0x28/0x88 [ 4.706559][T400001] el0_sync_handler+0x8c/0xf0 [ 4.706567][T400001] el0_sync+0x1b4/0x1c0 Add hook for task exiting routine, while will be helpful for OEMs to get the reason of any exiting task to be noticed such as dump last exit thread executable sections and registers info. Bug: 324013972 Link: https://lore.kernel.org/lkml/20231110032043.34516-1-qiwu.chen@transsion.com/T/ Change-Id: Ibb7c9012af18b99a1bb458d236f166e6450241c3 Signed-off-by: qiwu.chen <qiwu.chen@transsion.com>
115 lines
3.8 KiB
C
115 lines
3.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM dtask
|
|
#define TRACE_INCLUDE_PATH trace/hooks
|
|
|
|
#if !defined(_TRACE_HOOK_DTASK_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_HOOK_DTASK_H
|
|
#include <linux/tracepoint.h>
|
|
#include <trace/hooks/vendor_hooks.h>
|
|
/*
|
|
* Following tracepoints are not exported in tracefs and provide a
|
|
* mechanism for vendor modules to hook and extend functionality
|
|
*/
|
|
#ifdef __GENKSYMS__
|
|
struct mutex;
|
|
struct rt_mutex;
|
|
struct rw_semaphore;
|
|
struct task_struct;
|
|
#else
|
|
/* struct mutex */
|
|
#include <linux/mutex.h>
|
|
/* struct rt_mutex */
|
|
#include <linux/rtmutex.h>
|
|
/* struct rw_semaphore */
|
|
#include <linux/rwsem.h>
|
|
/* struct task_struct */
|
|
#include <linux/sched.h>
|
|
#endif /* __GENKSYMS__ */
|
|
DECLARE_HOOK(android_vh_mutex_wait_start,
|
|
TP_PROTO(struct mutex *lock),
|
|
TP_ARGS(lock));
|
|
DECLARE_HOOK(android_vh_mutex_wait_finish,
|
|
TP_PROTO(struct mutex *lock),
|
|
TP_ARGS(lock));
|
|
DECLARE_HOOK(android_vh_mutex_opt_spin_start,
|
|
TP_PROTO(struct mutex *lock, bool *time_out, int *cnt),
|
|
TP_ARGS(lock, time_out, cnt));
|
|
DECLARE_HOOK(android_vh_mutex_opt_spin_finish,
|
|
TP_PROTO(struct mutex *lock, bool taken),
|
|
TP_ARGS(lock, taken));
|
|
DECLARE_HOOK(android_vh_mutex_can_spin_on_owner,
|
|
TP_PROTO(struct mutex *lock, int *retval),
|
|
TP_ARGS(lock, retval));
|
|
|
|
DECLARE_HOOK(android_vh_rtmutex_wait_start,
|
|
TP_PROTO(struct rt_mutex *lock),
|
|
TP_ARGS(lock));
|
|
DECLARE_HOOK(android_vh_rtmutex_wait_finish,
|
|
TP_PROTO(struct rt_mutex *lock),
|
|
TP_ARGS(lock));
|
|
|
|
DECLARE_HOOK(android_vh_rwsem_read_wait_start,
|
|
TP_PROTO(struct rw_semaphore *sem),
|
|
TP_ARGS(sem));
|
|
DECLARE_HOOK(android_vh_rwsem_read_wait_finish,
|
|
TP_PROTO(struct rw_semaphore *sem),
|
|
TP_ARGS(sem));
|
|
DECLARE_HOOK(android_vh_rwsem_write_wait_start,
|
|
TP_PROTO(struct rw_semaphore *sem),
|
|
TP_ARGS(sem));
|
|
DECLARE_HOOK(android_vh_rwsem_write_wait_finish,
|
|
TP_PROTO(struct rw_semaphore *sem),
|
|
TP_ARGS(sem));
|
|
DECLARE_HOOK(android_vh_rwsem_opt_spin_start,
|
|
TP_PROTO(struct rw_semaphore *sem, bool *time_out, int *cnt, bool chk_only),
|
|
TP_ARGS(sem, time_out, cnt, chk_only));
|
|
DECLARE_HOOK(android_vh_rwsem_opt_spin_finish,
|
|
TP_PROTO(struct rw_semaphore *sem, bool taken, bool wlock),
|
|
TP_ARGS(sem, taken, wlock));
|
|
DECLARE_HOOK(android_vh_rwsem_can_spin_on_owner,
|
|
TP_PROTO(struct rw_semaphore *sem, bool *ret, bool wlock),
|
|
TP_ARGS(sem, ret, wlock));
|
|
|
|
DECLARE_HOOK(android_vh_sched_show_task,
|
|
TP_PROTO(struct task_struct *task),
|
|
TP_ARGS(task));
|
|
DECLARE_HOOK(android_vh_alter_mutex_list_add,
|
|
TP_PROTO(struct mutex *lock,
|
|
struct mutex_waiter *waiter,
|
|
struct list_head *list,
|
|
bool *already_on_list),
|
|
TP_ARGS(lock, waiter, list, already_on_list));
|
|
DECLARE_HOOK(android_vh_mutex_unlock_slowpath,
|
|
TP_PROTO(struct mutex *lock),
|
|
TP_ARGS(lock));
|
|
DECLARE_HOOK(android_vh_mutex_unlock_slowpath_end,
|
|
TP_PROTO(struct mutex *lock, struct task_struct *next),
|
|
TP_ARGS(lock, next));
|
|
DECLARE_HOOK(android_vh_record_mutex_lock_starttime,
|
|
TP_PROTO(struct task_struct *tsk, unsigned long settime_jiffies),
|
|
TP_ARGS(tsk, settime_jiffies));
|
|
DECLARE_HOOK(android_vh_record_rtmutex_lock_starttime,
|
|
TP_PROTO(struct task_struct *tsk, unsigned long settime_jiffies),
|
|
TP_ARGS(tsk, settime_jiffies));
|
|
DECLARE_HOOK(android_vh_record_rwsem_lock_starttime,
|
|
TP_PROTO(struct task_struct *tsk, unsigned long settime_jiffies),
|
|
TP_ARGS(tsk, settime_jiffies));
|
|
DECLARE_HOOK(android_vh_record_pcpu_rwsem_starttime,
|
|
TP_PROTO(struct task_struct *tsk, unsigned long settime_jiffies),
|
|
TP_ARGS(tsk, settime_jiffies));
|
|
|
|
struct percpu_rw_semaphore;
|
|
DECLARE_HOOK(android_vh_percpu_rwsem_wq_add,
|
|
TP_PROTO(struct percpu_rw_semaphore *sem, bool reader),
|
|
TP_ARGS(sem, reader));
|
|
|
|
DECLARE_HOOK(android_vh_exit_check,
|
|
TP_PROTO(struct task_struct *tsk, long code, int group_dead),
|
|
TP_ARGS(tsk, code, group_dead));
|
|
/* macro versions of hooks are no longer required */
|
|
|
|
#endif /* _TRACE_HOOK_DTASK_H */
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|