ANDROID: Re-apply vendor hooks for information of blocked tasks
This reverts commit 31c9ccb138 (Revert "ANDROID: vendor_hooks: add
waiting information for blocked tasks")
And also revert portions of 396a501b1743 (Revert "ANDROID: rwsem: Add
vendor hook to the rw-semaphore")
The original patch has been reverted to resolve merge issues.
This patch adds again the vendor hooks for the original purpose.
Bug: 216016261
Signed-off-by: Sangmoon Kim <sangmoon.kim@samsung.com>
Change-Id: I04ed7b055eee40f7975bd5d74fb73dd080cd76bf
(cherry picked from commit c23da05eac0d35441695caff0b7d0220f92ca8a0)
This commit is contained in:
@@ -68,6 +68,12 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wakeup_ilocked);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wakeup_ilocked);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish);
|
||||||
|
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_write_wait_start);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_enter);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_enter);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit);
|
||||||
|
|||||||
@@ -11,6 +11,28 @@
|
|||||||
* Following tracepoints are not exported in tracefs and provide a
|
* Following tracepoints are not exported in tracefs and provide a
|
||||||
* mechanism for vendor modules to hook and extend functionality
|
* mechanism for vendor modules to hook and extend functionality
|
||||||
*/
|
*/
|
||||||
|
struct mutex;
|
||||||
|
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));
|
||||||
|
|
||||||
|
struct rw_semaphore;
|
||||||
|
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));
|
||||||
|
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
DECLARE_HOOK(android_vh_sched_show_task,
|
DECLARE_HOOK(android_vh_sched_show_task,
|
||||||
TP_PROTO(struct task_struct *task),
|
TP_PROTO(struct task_struct *task),
|
||||||
|
|||||||
@@ -39,6 +39,8 @@
|
|||||||
# define MUTEX_WARN_ON(cond)
|
# define MUTEX_WARN_ON(cond)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <trace/hooks/dtask.h>
|
||||||
|
|
||||||
void
|
void
|
||||||
__mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
|
__mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
|
||||||
{
|
{
|
||||||
@@ -636,6 +638,7 @@ __mutex_lock_common(struct mutex *lock, unsigned int state, unsigned int subclas
|
|||||||
goto err_early_kill;
|
goto err_early_kill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace_android_vh_mutex_wait_start(lock);
|
||||||
set_current_state(state);
|
set_current_state(state);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
bool first;
|
bool first;
|
||||||
@@ -685,6 +688,7 @@ __mutex_lock_common(struct mutex *lock, unsigned int state, unsigned int subclas
|
|||||||
raw_spin_lock(&lock->wait_lock);
|
raw_spin_lock(&lock->wait_lock);
|
||||||
acquired:
|
acquired:
|
||||||
__set_current_state(TASK_RUNNING);
|
__set_current_state(TASK_RUNNING);
|
||||||
|
trace_android_vh_mutex_wait_finish(lock);
|
||||||
|
|
||||||
if (ww_ctx) {
|
if (ww_ctx) {
|
||||||
/*
|
/*
|
||||||
@@ -713,6 +717,7 @@ skip_wait:
|
|||||||
|
|
||||||
err:
|
err:
|
||||||
__set_current_state(TASK_RUNNING);
|
__set_current_state(TASK_RUNNING);
|
||||||
|
trace_android_vh_mutex_wait_finish(lock);
|
||||||
__mutex_remove_waiter(lock, &waiter);
|
__mutex_remove_waiter(lock, &waiter);
|
||||||
err_early_kill:
|
err_early_kill:
|
||||||
raw_spin_unlock(&lock->wait_lock);
|
raw_spin_unlock(&lock->wait_lock);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#ifndef CONFIG_PREEMPT_RT
|
#ifndef CONFIG_PREEMPT_RT
|
||||||
#include "lock_events.h"
|
#include "lock_events.h"
|
||||||
|
#include <trace/hooks/dtask.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The least significant 2 bits of the owner value has the following
|
* The least significant 2 bits of the owner value has the following
|
||||||
@@ -1007,6 +1008,7 @@ queue:
|
|||||||
wake_up_q(&wake_q);
|
wake_up_q(&wake_q);
|
||||||
|
|
||||||
/* wait to be given the lock */
|
/* wait to be given the lock */
|
||||||
|
trace_android_vh_rwsem_read_wait_start(sem);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
set_current_state(state);
|
set_current_state(state);
|
||||||
if (!smp_load_acquire(&waiter.task)) {
|
if (!smp_load_acquire(&waiter.task)) {
|
||||||
@@ -1026,6 +1028,7 @@ queue:
|
|||||||
}
|
}
|
||||||
|
|
||||||
__set_current_state(TASK_RUNNING);
|
__set_current_state(TASK_RUNNING);
|
||||||
|
trace_android_vh_rwsem_read_wait_finish(sem);
|
||||||
lockevent_inc(rwsem_rlock);
|
lockevent_inc(rwsem_rlock);
|
||||||
return sem;
|
return sem;
|
||||||
|
|
||||||
@@ -1033,6 +1036,7 @@ out_nolock:
|
|||||||
rwsem_del_waiter(sem, &waiter);
|
rwsem_del_waiter(sem, &waiter);
|
||||||
raw_spin_unlock_irq(&sem->wait_lock);
|
raw_spin_unlock_irq(&sem->wait_lock);
|
||||||
__set_current_state(TASK_RUNNING);
|
__set_current_state(TASK_RUNNING);
|
||||||
|
trace_android_vh_rwsem_read_wait_finish(sem);
|
||||||
lockevent_inc(rwsem_rlock_fail);
|
lockevent_inc(rwsem_rlock_fail);
|
||||||
return ERR_PTR(-EINTR);
|
return ERR_PTR(-EINTR);
|
||||||
}
|
}
|
||||||
@@ -1100,6 +1104,7 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state)
|
|||||||
|
|
||||||
wait:
|
wait:
|
||||||
/* wait until we successfully acquire the lock */
|
/* wait until we successfully acquire the lock */
|
||||||
|
trace_android_vh_rwsem_write_wait_start(sem);
|
||||||
set_current_state(state);
|
set_current_state(state);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (rwsem_try_write_lock(sem, &waiter)) {
|
if (rwsem_try_write_lock(sem, &waiter)) {
|
||||||
@@ -1138,12 +1143,14 @@ trylock_again:
|
|||||||
raw_spin_lock_irq(&sem->wait_lock);
|
raw_spin_lock_irq(&sem->wait_lock);
|
||||||
}
|
}
|
||||||
__set_current_state(TASK_RUNNING);
|
__set_current_state(TASK_RUNNING);
|
||||||
|
trace_android_vh_rwsem_write_wait_finish(sem);
|
||||||
raw_spin_unlock_irq(&sem->wait_lock);
|
raw_spin_unlock_irq(&sem->wait_lock);
|
||||||
lockevent_inc(rwsem_wlock);
|
lockevent_inc(rwsem_wlock);
|
||||||
return sem;
|
return sem;
|
||||||
|
|
||||||
out_nolock:
|
out_nolock:
|
||||||
__set_current_state(TASK_RUNNING);
|
__set_current_state(TASK_RUNNING);
|
||||||
|
trace_android_vh_rwsem_write_wait_finish(sem);
|
||||||
raw_spin_lock_irq(&sem->wait_lock);
|
raw_spin_lock_irq(&sem->wait_lock);
|
||||||
rwsem_del_waiter(sem, &waiter);
|
rwsem_del_waiter(sem, &waiter);
|
||||||
if (!list_empty(&sem->wait_list))
|
if (!list_empty(&sem->wait_list))
|
||||||
|
|||||||
Reference in New Issue
Block a user