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 | 23 +++++++++++++++++------
1 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/kernel/kernel/locking/rwsem.c b/kernel/kernel/locking/rwsem.c
index b55d945..acd1fc7 100644
--- a/kernel/kernel/locking/rwsem.c
+++ b/kernel/kernel/locking/rwsem.c
@@ -28,7 +28,6 @@
#include <linux/rwsem.h>
#include <linux/atomic.h>
-#ifndef CONFIG_PREEMPT_RT
#include "lock_events.h"
#include <trace/hooks/rwsem.h>
#include <trace/hooks/dtask.h>
@@ -674,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;
@@ -716,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);
@@ -724,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,
@@ -787,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;
@@ -804,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))
@@ -899,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);
@@ -1054,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;
@@ -1525,7 +1539,6 @@
if (tmp & RWSEM_FLAG_WAITERS)
rwsem_downgrade_wake(sem);
}
-#endif
/*
* lock for reading
@@ -1639,6 +1652,7 @@
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);
@@ -1649,6 +1663,7 @@
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);
@@ -1689,9 +1704,7 @@
{
might_sleep();
__down_read(sem);
-#ifndef CONFIG_PREEMPT_RT
__rwsem_set_reader_owned(sem, NULL);
-#endif
}
EXPORT_SYMBOL(down_read_non_owner);
@@ -1720,9 +1733,7 @@
void up_read_non_owner(struct rw_semaphore *sem)
{
-#ifndef CONFIG_PREEMPT_RT
DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem);
-#endif
__up_read(sem);
}
EXPORT_SYMBOL(up_read_non_owner);
--
Gitblit v1.6.2