From 01573e231f18eb2d99162747186f59511f56b64d Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 08 Dec 2023 10:40:48 +0000 Subject: [PATCH] 移去rt --- kernel/kernel/locking/rwlock-rt.c | 92 ++++++++++----------------------------------- 1 files changed, 21 insertions(+), 71 deletions(-) diff --git a/kernel/kernel/locking/rwlock-rt.c b/kernel/kernel/locking/rwlock-rt.c index 0ae8c62..3d2d1f1 100644 --- a/kernel/kernel/locking/rwlock-rt.c +++ b/kernel/kernel/locking/rwlock-rt.c @@ -1,5 +1,4 @@ -/* - */ +// SPDX-License-Identifier: GPL-2.0-only #include <linux/sched/debug.h> #include <linux/export.h> @@ -62,7 +61,7 @@ lock->rtmutex.save_state = 1; } -int __read_rt_trylock(struct rt_rw_lock *lock) +static int __read_rt_trylock(struct rt_rw_lock *lock) { int r, old; @@ -79,7 +78,7 @@ return 0; } -void __sched __read_rt_lock(struct rt_rw_lock *lock) +static void __read_rt_lock(struct rt_rw_lock *lock) { struct rt_mutex *m = &lock->rtmutex; struct rt_mutex_waiter waiter; @@ -142,7 +141,7 @@ debug_rt_mutex_free_waiter(&waiter); } -void __read_rt_unlock(struct rt_rw_lock *lock) +static void __read_rt_unlock(struct rt_rw_lock *lock) { struct rt_mutex *m = &lock->rtmutex; struct task_struct *tsk; @@ -178,7 +177,7 @@ rt_spin_lock_slowunlock(m); } -void __sched __write_rt_lock(struct rt_rw_lock *lock) +static void __write_rt_lock(struct rt_rw_lock *lock) { struct rt_mutex *m = &lock->rtmutex; struct task_struct *self = current; @@ -212,7 +211,7 @@ raw_spin_unlock_irqrestore(&m->wait_lock, flags); if (atomic_read(&lock->readers) != 0) - schedule(); + preempt_schedule_lock(); raw_spin_lock_irqsave(&m->wait_lock, flags); @@ -222,7 +221,7 @@ } } -int __write_rt_trylock(struct rt_rw_lock *lock) +static int __write_rt_trylock(struct rt_rw_lock *lock) { struct rt_mutex *m = &lock->rtmutex; unsigned long flags; @@ -242,50 +241,13 @@ return 0; } -void __write_rt_unlock(struct rt_rw_lock *lock) +static void __write_rt_unlock(struct rt_rw_lock *lock) { struct rt_mutex *m = &lock->rtmutex; unsigned long flags; raw_spin_lock_irqsave(&m->wait_lock, flags); __write_unlock_common(lock, WRITER_BIAS, flags); -} - -/* Map the reader biased implementation */ -static inline int do_read_rt_trylock(rwlock_t *rwlock) -{ - return __read_rt_trylock(rwlock); -} - -static inline int do_write_rt_trylock(rwlock_t *rwlock) -{ - return __write_rt_trylock(rwlock); -} - -static inline void do_read_rt_lock(rwlock_t *rwlock) -{ - __read_rt_lock(rwlock); -} - -static inline void do_write_rt_lock(rwlock_t *rwlock) -{ - __write_rt_lock(rwlock); -} - -static inline void do_read_rt_unlock(rwlock_t *rwlock) -{ - __read_rt_unlock(rwlock); -} - -static inline void do_write_rt_unlock(rwlock_t *rwlock) -{ - __write_rt_unlock(rwlock); -} - -static inline void do_rwlock_rt_init(rwlock_t *rwlock, const char *name, - struct lock_class_key *key) -{ - __rwlock_biased_rt_init(rwlock, name, key); } int __lockfunc rt_read_can_lock(rwlock_t *rwlock) @@ -305,15 +267,11 @@ { int ret; - sleeping_lock_inc(); - migrate_disable(); - ret = do_read_rt_trylock(rwlock); + ret = __read_rt_trylock(rwlock); if (ret) { rwlock_acquire_read(&rwlock->dep_map, 0, 1, _RET_IP_); rcu_read_lock(); - } else { - migrate_enable(); - sleeping_lock_dec(); + migrate_disable(); } return ret; } @@ -323,15 +281,11 @@ { int ret; - sleeping_lock_inc(); - migrate_disable(); - ret = do_write_rt_trylock(rwlock); + ret = __write_rt_trylock(rwlock); if (ret) { rwlock_acquire(&rwlock->dep_map, 0, 1, _RET_IP_); rcu_read_lock(); - } else { - migrate_enable(); - sleeping_lock_dec(); + migrate_disable(); } return ret; } @@ -339,46 +293,42 @@ void __lockfunc rt_read_lock(rwlock_t *rwlock) { - sleeping_lock_inc(); + rwlock_acquire_read(&rwlock->dep_map, 0, 0, _RET_IP_); + __read_rt_lock(rwlock); rcu_read_lock(); migrate_disable(); - rwlock_acquire_read(&rwlock->dep_map, 0, 0, _RET_IP_); - do_read_rt_lock(rwlock); } EXPORT_SYMBOL(rt_read_lock); void __lockfunc rt_write_lock(rwlock_t *rwlock) { - sleeping_lock_inc(); + rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_); + __write_rt_lock(rwlock); rcu_read_lock(); migrate_disable(); - rwlock_acquire(&rwlock->dep_map, 0, 0, _RET_IP_); - do_write_rt_lock(rwlock); } EXPORT_SYMBOL(rt_write_lock); void __lockfunc rt_read_unlock(rwlock_t *rwlock) { - rwlock_release(&rwlock->dep_map, 1, _RET_IP_); - do_read_rt_unlock(rwlock); + rwlock_release(&rwlock->dep_map, _RET_IP_); migrate_enable(); rcu_read_unlock(); - sleeping_lock_dec(); + __read_rt_unlock(rwlock); } EXPORT_SYMBOL(rt_read_unlock); void __lockfunc rt_write_unlock(rwlock_t *rwlock) { - rwlock_release(&rwlock->dep_map, 1, _RET_IP_); - do_write_rt_unlock(rwlock); + rwlock_release(&rwlock->dep_map, _RET_IP_); migrate_enable(); rcu_read_unlock(); - sleeping_lock_dec(); + __write_rt_unlock(rwlock); } EXPORT_SYMBOL(rt_write_unlock); void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key) { - do_rwlock_rt_init(rwlock, name, key); + __rwlock_biased_rt_init(rwlock, name, key); } EXPORT_SYMBOL(__rt_rwlock_init); -- Gitblit v1.6.2