ANDROID: vendor_hook: add hooks to protect locking-tsk in cpu scheduler
Providing vendor hooks to record the start time of holding the lock, which protects rwsem/mutex locking-process from being preemptedfor a short time in some cases. - android_vh_record_mutex_lock_starttime - android_vh_record_rtmutex_lock_starttime - android_vh_record_rwsem_lock_starttime - android_vh_record_percpu_rwsem_lock_starttime Bug: 241191475 Signed-off-by: Peifeng Li <lipeifeng@oppo.com> Change-Id: I0e967a1e8b77c32a1ad588acd54028fae2f90c4e
This commit is contained in:

committed by
Matthias Männich

parent
fb39cdb9ea
commit
eed2741ae6
@@ -10,6 +10,21 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/errno.h>
|
||||
|
||||
#include <trace/hooks/dtask.h>
|
||||
|
||||
/*
|
||||
* trace_android_vh_record_percpu_rwsem_lock_starttime is called in
|
||||
* include/linux/percpu-rwsem.h by including include/hooks/dtask.h, which
|
||||
* will result to build-err. So we create
|
||||
* func:_trace_android_vh_record_percpu_rwsem_lock_starttime for percpu-rwsem.h to call.
|
||||
*/
|
||||
void _trace_android_vh_record_percpu_rwsem_lock_starttime(struct task_struct *tsk,
|
||||
unsigned long settime)
|
||||
{
|
||||
trace_android_vh_record_percpu_rwsem_lock_starttime(tsk, settime);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(_trace_android_vh_record_percpu_rwsem_lock_starttime);
|
||||
|
||||
int __percpu_init_rwsem(struct percpu_rw_semaphore *sem,
|
||||
const char *name, struct lock_class_key *key)
|
||||
{
|
||||
@@ -237,11 +252,13 @@ void percpu_down_write(struct percpu_rw_semaphore *sem)
|
||||
|
||||
/* Wait for all active readers to complete. */
|
||||
rcuwait_wait_event(&sem->writer, readers_active_check(sem), TASK_UNINTERRUPTIBLE);
|
||||
trace_android_vh_record_percpu_rwsem_lock_starttime(current, jiffies);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(percpu_down_write);
|
||||
|
||||
void percpu_up_write(struct percpu_rw_semaphore *sem)
|
||||
{
|
||||
trace_android_vh_record_percpu_rwsem_lock_starttime(current, 0);
|
||||
rwsem_release(&sem->dep_map, _RET_IP_);
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user