ANDROID: vendor_hooks: Add hooks for rwsem
we want to record tasks who will own sem, so we need to add some hook in rwsem.c Bug: 230829284 Change-Id: Ide66540aa38d6058d8aad5f94f4403be991078a4 Signed-off-by: Peifeng Li <lipeifeng@oppo.com>
This commit is contained in:
@@ -113,6 +113,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_start);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_finish);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_finish);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_set_owner);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_set_reader_owned);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_mark_wake_readers);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_up_read_end);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_up_write_end);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_alloc_page);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_alloc_page);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_enter);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_enter);
|
||||||
|
@@ -29,7 +29,21 @@ DECLARE_HOOK(android_vh_alter_rwsem_list_add,
|
|||||||
DECLARE_HOOK(android_vh_rwsem_wake_finish,
|
DECLARE_HOOK(android_vh_rwsem_wake_finish,
|
||||||
TP_PROTO(struct rw_semaphore *sem),
|
TP_PROTO(struct rw_semaphore *sem),
|
||||||
TP_ARGS(sem));
|
TP_ARGS(sem));
|
||||||
|
DECLARE_HOOK(android_vh_rwsem_set_owner,
|
||||||
|
TP_PROTO(struct rw_semaphore *sem),
|
||||||
|
TP_ARGS(sem));
|
||||||
|
DECLARE_HOOK(android_vh_rwsem_set_reader_owned,
|
||||||
|
TP_PROTO(struct rw_semaphore *sem),
|
||||||
|
TP_ARGS(sem));
|
||||||
|
DECLARE_HOOK(android_vh_rwsem_up_write_end,
|
||||||
|
TP_PROTO(struct rw_semaphore *sem),
|
||||||
|
TP_ARGS(sem));
|
||||||
|
DECLARE_HOOK(android_vh_rwsem_up_read_end,
|
||||||
|
TP_PROTO(struct rw_semaphore *sem),
|
||||||
|
TP_ARGS(sem));
|
||||||
|
DECLARE_HOOK(android_vh_rwsem_mark_wake_readers,
|
||||||
|
TP_PROTO(struct rw_semaphore *sem, struct rwsem_waiter *waiter),
|
||||||
|
TP_ARGS(sem, waiter));
|
||||||
/* macro versions of hooks are no longer required */
|
/* macro versions of hooks are no longer required */
|
||||||
|
|
||||||
#endif /* _TRACE_HOOK_RWSEM_H */
|
#endif /* _TRACE_HOOK_RWSEM_H */
|
||||||
|
@@ -176,6 +176,7 @@
|
|||||||
static inline void rwsem_set_owner(struct rw_semaphore *sem)
|
static inline void rwsem_set_owner(struct rw_semaphore *sem)
|
||||||
{
|
{
|
||||||
atomic_long_set(&sem->owner, (long)current);
|
atomic_long_set(&sem->owner, (long)current);
|
||||||
|
trace_android_vh_rwsem_set_owner(sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void rwsem_clear_owner(struct rw_semaphore *sem)
|
static inline void rwsem_clear_owner(struct rw_semaphore *sem)
|
||||||
@@ -213,6 +214,7 @@ static inline void __rwsem_set_reader_owned(struct rw_semaphore *sem,
|
|||||||
static inline void rwsem_set_reader_owned(struct rw_semaphore *sem)
|
static inline void rwsem_set_reader_owned(struct rw_semaphore *sem)
|
||||||
{
|
{
|
||||||
__rwsem_set_reader_owned(sem, current);
|
__rwsem_set_reader_owned(sem, current);
|
||||||
|
trace_android_vh_rwsem_set_reader_owned(sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -496,6 +498,7 @@ static void rwsem_mark_wake(struct rw_semaphore *sem,
|
|||||||
woken++;
|
woken++;
|
||||||
list_move_tail(&waiter->list, &wlist);
|
list_move_tail(&waiter->list, &wlist);
|
||||||
|
|
||||||
|
trace_android_vh_rwsem_mark_wake_readers(sem, waiter);
|
||||||
/*
|
/*
|
||||||
* Limit # of readers that can be woken up per wakeup call.
|
* Limit # of readers that can be woken up per wakeup call.
|
||||||
*/
|
*/
|
||||||
@@ -1460,6 +1463,7 @@ static inline void __up_read(struct rw_semaphore *sem)
|
|||||||
clear_wr_nonspinnable(sem);
|
clear_wr_nonspinnable(sem);
|
||||||
rwsem_wake(sem, tmp);
|
rwsem_wake(sem, tmp);
|
||||||
}
|
}
|
||||||
|
trace_android_vh_rwsem_up_read_end(sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1481,6 +1485,7 @@ static inline void __up_write(struct rw_semaphore *sem)
|
|||||||
tmp = atomic_long_fetch_add_release(-RWSEM_WRITER_LOCKED, &sem->count);
|
tmp = atomic_long_fetch_add_release(-RWSEM_WRITER_LOCKED, &sem->count);
|
||||||
if (unlikely(tmp & RWSEM_FLAG_WAITERS))
|
if (unlikely(tmp & RWSEM_FLAG_WAITERS))
|
||||||
rwsem_wake(sem, tmp);
|
rwsem_wake(sem, tmp);
|
||||||
|
trace_android_vh_rwsem_up_write_end(sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user