From 9999e48639b3cecb08ffb37358bcba3b48161b29 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 08:50:17 +0000
Subject: [PATCH] add ax88772_rst
---
kernel/kernel/locking/rwsem.c | 15 +++++++++++++++
1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/kernel/kernel/locking/rwsem.c b/kernel/kernel/locking/rwsem.c
index d368d1a..acd1fc7 100644
--- a/kernel/kernel/locking/rwsem.c
+++ b/kernel/kernel/locking/rwsem.c
@@ -673,6 +673,7 @@
ret = false;
rcu_read_unlock();
preempt_enable();
+ trace_android_vh_rwsem_can_spin_on_owner(sem, &ret, nonspinnable == RWSEM_WR_NONSPINNABLE);
lockevent_cond_inc(rwsem_opt_fail, !ret);
return ret;
@@ -715,6 +716,8 @@
struct task_struct *new, *owner;
unsigned long flags, new_flags;
enum owner_state state;
+ int cnt = 0;
+ bool time_out = false;
owner = rwsem_owner_flags(sem, &flags);
state = rwsem_owner_state(owner, flags, nonspinnable);
@@ -723,6 +726,9 @@
rcu_read_lock();
for (;;) {
+ trace_android_vh_rwsem_opt_spin_start(sem, &time_out, &cnt, true);
+ if (time_out)
+ break;
/*
* When a waiting writer set the handoff flag, it may spin
* on the owner as well. Once that writer acquires the lock,
@@ -786,6 +792,8 @@
int prev_owner_state = OWNER_NULL;
int loop = 0;
u64 rspin_threshold = 0;
+ int cnt = 0;
+ bool time_out = false;
unsigned long nonspinnable = wlock ? RWSEM_WR_NONSPINNABLE
: RWSEM_RD_NONSPINNABLE;
@@ -803,6 +811,10 @@
*/
for (;;) {
enum owner_state owner_state;
+
+ trace_android_vh_rwsem_opt_spin_start(sem, &time_out, &cnt, false);
+ if (time_out)
+ break;
owner_state = rwsem_spin_on_owner(sem, nonspinnable);
if (!(owner_state & OWNER_SPINNABLE))
@@ -898,6 +910,7 @@
cpu_relax();
}
osq_unlock(&sem->osq);
+ trace_android_vh_rwsem_opt_spin_finish(sem, taken, wlock);
done:
preempt_enable();
lockevent_cond_inc(rwsem_opt_fail, !taken);
@@ -1053,6 +1066,8 @@
raw_spin_unlock_irq(&sem->wait_lock);
rwsem_set_reader_owned(sem);
lockevent_inc(rwsem_rlock_fast);
+ trace_android_vh_record_rwsem_lock_starttime(
+ current, jiffies);
return sem;
}
adjustment += RWSEM_FLAG_WAITERS;
--
Gitblit v1.6.2