From 396a501b17436dfe9acfb952214f6f85d14daf90 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 29 Nov 2021 12:01:17 +0100 Subject: [PATCH] Revert "ANDROID: rwsem: Add vendor hook to the rw-semaphore" This reverts commit df18d99dab5eb16fca087ba31ff3d7dfa1ea6ba8. And also revert portions of 9ad8ff902e39 ("ANDROID: vendor_hooks: add waiting information for blocked tasks") In the 5.16-rc development cycle, the rwsem code was reworked such that the existing Android trace hooks were incorrect and were causing major merge issues. Revert the hooks and if they are still needed, they can be added back later. Bug: 161400830 Bug: 162776704 Cc: Sangmoon Kim Cc: JianMin Liu Signed-off-by: Greg Kroah-Hartman Change-Id: Ifb3d2ed0bdc73b70718820fbf31e775fedb387c5 --- drivers/android/vendor_hooks.c | 9 --------- include/linux/rwsem.h | 2 -- include/trace/hooks/dtask.h | 14 -------------- include/trace/hooks/rwsem.h | 32 -------------------------------- kernel/locking/rwsem.c | 27 ++------------------------- 5 files changed, 2 insertions(+), 82 deletions(-) delete mode 100644 include/trace/hooks/rwsem.h diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 5ad033fbd1e3..fb7552cc8677 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -66,14 +65,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_init); 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_wakeup_ilocked); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_init); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished); -EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add); -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_cpu_idle_enter); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit); diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index 5330610f27f5..f9348769e558 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -31,7 +31,6 @@ #ifdef CONFIG_RWSEM_SPIN_ON_OWNER #include #endif -#include /* * For an uncontended rwsem, count and owner are the only fields a task @@ -64,7 +63,6 @@ struct rw_semaphore { #ifdef CONFIG_DEBUG_LOCK_ALLOC struct lockdep_map dep_map; #endif - ANDROID_VENDOR_DATA(1); }; /* In all implementations count != 0 means locked */ diff --git a/include/trace/hooks/dtask.h b/include/trace/hooks/dtask.h index 80fd5fc2cef8..9051b2678e2d 100644 --- a/include/trace/hooks/dtask.h +++ b/include/trace/hooks/dtask.h @@ -11,20 +11,6 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ -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; DECLARE_HOOK(android_vh_sched_show_task, TP_PROTO(struct task_struct *task), diff --git a/include/trace/hooks/rwsem.h b/include/trace/hooks/rwsem.h deleted file mode 100644 index 8408974007d3..000000000000 --- a/include/trace/hooks/rwsem.h +++ /dev/null @@ -1,32 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#undef TRACE_SYSTEM -#define TRACE_SYSTEM rwsem -#define TRACE_INCLUDE_PATH trace/hooks -#if !defined(_TRACE_HOOK_RWSEM_H) || defined(TRACE_HEADER_MULTI_READ) -#define _TRACE_HOOK_RWSEM_H -#include -#include -/* - * Following tracepoints are not exported in tracefs and provide a - * mechanism for vendor modules to hook and extend functionality - */ -struct rw_semaphore; -struct rwsem_waiter; -DECLARE_HOOK(android_vh_rwsem_init, - TP_PROTO(struct rw_semaphore *sem), - TP_ARGS(sem)); -DECLARE_HOOK(android_vh_rwsem_wake, - TP_PROTO(struct rw_semaphore *sem), - TP_ARGS(sem)); -DECLARE_HOOK(android_vh_rwsem_write_finished, - TP_PROTO(struct rw_semaphore *sem), - TP_ARGS(sem)); -DECLARE_HOOK(android_vh_alter_rwsem_list_add, - TP_PROTO(struct rwsem_waiter *waiter, - struct rw_semaphore *sem, - bool *already_on_list), - TP_ARGS(waiter, sem, already_on_list)); - -#endif /* _TRACE_HOOK_RWSEM_H */ -/* This part must be outside protection */ -#include diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c index e10633f79ed7..c51387a43265 100644 --- a/kernel/locking/rwsem.c +++ b/kernel/locking/rwsem.c @@ -30,8 +30,6 @@ #ifndef CONFIG_PREEMPT_RT #include "lock_events.h" -#include -#include /* * The least significant 2 bits of the owner value has the following @@ -323,7 +321,6 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name, #ifdef CONFIG_RWSEM_SPIN_ON_OWNER osq_lock_init(&sem->osq); #endif - trace_android_vh_rwsem_init(sem); } EXPORT_SYMBOL(__init_rwsem); @@ -903,7 +900,6 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, long count, unsigned int stat struct rwsem_waiter waiter; DEFINE_WAKE_Q(wake_q); bool wake = false; - bool already_on_list = false; /* * To prevent a constant stream of readers from starving a sleeping @@ -960,11 +956,7 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, long count, unsigned int stat } adjustment += RWSEM_FLAG_WAITERS; } - trace_android_vh_alter_rwsem_list_add( - &waiter, - sem, &already_on_list); - if (!already_on_list) - list_add_tail(&waiter.list, &sem->wait_list); + list_add_tail(&waiter.list, &sem->wait_list); /* we're now waiting on the lock, but no longer actively locking */ count = atomic_long_add_return(adjustment, &sem->count); @@ -983,12 +975,10 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, long count, unsigned int stat (adjustment & RWSEM_FLAG_WAITERS))) rwsem_mark_wake(sem, RWSEM_WAKE_ANY, &wake_q); - trace_android_vh_rwsem_wake(sem); raw_spin_unlock_irq(&sem->wait_lock); wake_up_q(&wake_q); /* wait to be given the lock */ - trace_android_vh_rwsem_read_wait_start(sem); for (;;) { set_current_state(state); if (!smp_load_acquire(&waiter.task)) { @@ -1008,7 +998,6 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, long count, unsigned int stat } __set_current_state(TASK_RUNNING); - trace_android_vh_rwsem_read_wait_finish(sem); lockevent_inc(rwsem_rlock); return sem; @@ -1020,7 +1009,6 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, long count, unsigned int stat } raw_spin_unlock_irq(&sem->wait_lock); __set_current_state(TASK_RUNNING); - trace_android_vh_rwsem_read_wait_finish(sem); lockevent_inc(rwsem_rlock_fail); return ERR_PTR(-EINTR); } @@ -1036,7 +1024,6 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state) struct rwsem_waiter waiter; struct rw_semaphore *ret = sem; DEFINE_WAKE_Q(wake_q); - bool already_on_list = false; /* do optimistic spinning and steal lock if possible */ if (rwsem_can_spin_on_owner(sem) && rwsem_optimistic_spin(sem)) { @@ -1057,11 +1044,7 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state) /* account for this before adding a new element to the list */ wstate = list_empty(&sem->wait_list) ? WRITER_FIRST : WRITER_NOT_FIRST; - trace_android_vh_alter_rwsem_list_add( - &waiter, - sem, &already_on_list); - if (!already_on_list) - list_add_tail(&waiter.list, &sem->wait_list); + list_add_tail(&waiter.list, &sem->wait_list); /* we're now waiting on the lock */ if (wstate == WRITER_NOT_FIRST) { @@ -1097,9 +1080,7 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state) } wait: - trace_android_vh_rwsem_wake(sem); /* wait until we successfully acquire the lock */ - trace_android_vh_rwsem_write_wait_start(sem); set_current_state(state); for (;;) { if (rwsem_try_write_lock(sem, wstate)) { @@ -1166,7 +1147,6 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state) raw_spin_lock_irq(&sem->wait_lock); } __set_current_state(TASK_RUNNING); - trace_android_vh_rwsem_write_wait_finish(sem); list_del(&waiter.list); raw_spin_unlock_irq(&sem->wait_lock); lockevent_inc(rwsem_wlock); @@ -1175,7 +1155,6 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state) out_nolock: __set_current_state(TASK_RUNNING); - trace_android_vh_rwsem_write_wait_finish(sem); raw_spin_lock_irq(&sem->wait_lock); list_del(&waiter.list); @@ -1598,7 +1577,6 @@ EXPORT_SYMBOL(up_read); void up_write(struct rw_semaphore *sem) { rwsem_release(&sem->dep_map, _RET_IP_); - trace_android_vh_rwsem_write_finished(sem); __up_write(sem); } EXPORT_SYMBOL(up_write); @@ -1609,7 +1587,6 @@ EXPORT_SYMBOL(up_write); void downgrade_write(struct rw_semaphore *sem) { lock_downgrade(&sem->dep_map, _RET_IP_); - trace_android_vh_rwsem_write_finished(sem); __downgrade_write(sem); } EXPORT_SYMBOL(downgrade_write);