lkml.org 
[lkml]   [2022]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] ANDROID: mutex: Add vendor hook and oem data to the mutex
Date

Add hooks and oem data to apply oem's optimization of mutex.

Signed-off-by: Dezhi Huang <huangdezhi@hihonor.com>
---

diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c
index 8ffa2fb..db972d1 100644
--- a/drivers/android/vendor_hooks.c
+++ b/drivers/android/vendor_hooks.c
@@ -91,6 +91,10 @@
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_mutex_waiter_list_add);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_waiting);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rtmutex_wait_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rtmutex_wait_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_start);
diff --git a/include/linux/mutex.h b/include/linux/mutex.h
index 8f226d4..93a5bf0 100644
--- a/include/linux/mutex.h
+++ b/include/linux/mutex.h
@@ -19,6 +19,7 @@
#include <asm/processor.h>
#include <linux/osq_lock.h>
#include <linux/debug_locks.h>
+#include <linux/android_vendor.h>

#ifdef CONFIG_DEBUG_LOCK_ALLOC
# define __DEP_MAP_MUTEX_INITIALIZER(lockname) \
@@ -73,6 +74,7 @@
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lockdep_map dep_map;
#endif
+ ANDROID_OEM_DATA(1);
};

#ifdef CONFIG_DEBUG_MUTEXES
diff --git a/include/trace/hooks/dtask.h b/include/trace/hooks/dtask.h
index 6f005d4..3c4277f 100644
--- a/include/trace/hooks/dtask.h
+++ b/include/trace/hooks/dtask.h
@@ -11,12 +11,28 @@
* mechanism for vendor modules to hook and extend functionality
*/
struct mutex;
+struct mutex_waiter;
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_waiter_list_add,
+ TP_PROTO(struct mutex *lock,
+ struct mutex_waiter *waiter,
+ struct list_head *list,
+ bool *add_finish),
+ TP_ARGS(lock, waiter, list, add_finish));
+DECLARE_HOOK(android_vh_mutex_unlock_slowpath,
+ TP_PROTO(struct mutex *lock),
+ TP_ARGS(lock));
+DECLARE_HOOK(android_vh_mutex_waiting,
+ TP_PROTO(struct mutex *lock),
+ TP_ARGS(lock));
+DECLARE_HOOK(android_vh_mutex_init,
+ TP_PROTO(struct mutex *lock),
+ TP_ARGS(lock));

struct rt_mutex_base;
DECLARE_HOOK(android_vh_rtmutex_wait_start,
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index 77fa3dc..37f6316 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -51,6 +51,7 @@
osq_lock_init(&lock->osq);
#endif

+ trace_android_vh_mutex_init(lock);
debug_mutex_init(lock, name, key);
}
EXPORT_SYMBOL(__mutex_init);
@@ -201,9 +202,12 @@
__mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter,
struct list_head *list)
{
+ bool add_finish = false;
debug_mutex_add_waiter(lock, waiter, current);

- list_add_tail(&waiter->list, list);
+ trace_android_vh_mutex_waiter_list_add(lock, waiter, list, &add_finish);
+ if (!add_finish)
+ list_add_tail(&waiter->list, list);
if (__mutex_waiter_is_first(lock, waiter))
__mutex_set_flag(lock, MUTEX_FLAG_WAITERS);
}
@@ -668,6 +672,7 @@
goto err;
}

+ trace_android_vh_mutex_waiting(lock);
raw_spin_unlock(&lock->wait_lock);
schedule_preempt_disabled();

@@ -895,6 +900,7 @@
if (owner & MUTEX_FLAG_HANDOFF)
__mutex_handoff(lock, next);

+ trace_android_vh_mutex_unlock_slowpath(lock);
raw_spin_unlock(&lock->wait_lock);

wake_up_q(&wake_q);
\
 
 \ /
  Last update: 2022-05-13 16:02    [W:0.040 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site