Commit 6720a305 authored by Linus Torvalds's avatar Linus Torvalds

locking: avoid passing around 'thread_info' in mutex debugging code

None of the code actually wants a thread_info, it all wants a
task_struct, and it's just converting back and forth between the two
("ti->task" to get the task_struct from the thread_info, and
"task_thread_info(task)" to go the other way).

No semantic change.
Acked-by: default avatarPeter Zijlstra <peterz@infradead.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent f9020d17
...@@ -49,21 +49,21 @@ void debug_mutex_free_waiter(struct mutex_waiter *waiter) ...@@ -49,21 +49,21 @@ void debug_mutex_free_waiter(struct mutex_waiter *waiter)
} }
void debug_mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, void debug_mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter,
struct thread_info *ti) struct task_struct *task)
{ {
SMP_DEBUG_LOCKS_WARN_ON(!spin_is_locked(&lock->wait_lock)); SMP_DEBUG_LOCKS_WARN_ON(!spin_is_locked(&lock->wait_lock));
/* Mark the current thread as blocked on the lock: */ /* Mark the current thread as blocked on the lock: */
ti->task->blocked_on = waiter; task->blocked_on = waiter;
} }
void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter, void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
struct thread_info *ti) struct task_struct *task)
{ {
DEBUG_LOCKS_WARN_ON(list_empty(&waiter->list)); DEBUG_LOCKS_WARN_ON(list_empty(&waiter->list));
DEBUG_LOCKS_WARN_ON(waiter->task != ti->task); DEBUG_LOCKS_WARN_ON(waiter->task != task);
DEBUG_LOCKS_WARN_ON(ti->task->blocked_on != waiter); DEBUG_LOCKS_WARN_ON(task->blocked_on != waiter);
ti->task->blocked_on = NULL; task->blocked_on = NULL;
list_del_init(&waiter->list); list_del_init(&waiter->list);
waiter->task = NULL; waiter->task = NULL;
......
...@@ -20,9 +20,9 @@ extern void debug_mutex_wake_waiter(struct mutex *lock, ...@@ -20,9 +20,9 @@ extern void debug_mutex_wake_waiter(struct mutex *lock,
extern void debug_mutex_free_waiter(struct mutex_waiter *waiter); extern void debug_mutex_free_waiter(struct mutex_waiter *waiter);
extern void debug_mutex_add_waiter(struct mutex *lock, extern void debug_mutex_add_waiter(struct mutex *lock,
struct mutex_waiter *waiter, struct mutex_waiter *waiter,
struct thread_info *ti); struct task_struct *task);
extern void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter, extern void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,
struct thread_info *ti); struct task_struct *task);
extern void debug_mutex_unlock(struct mutex *lock); extern void debug_mutex_unlock(struct mutex *lock);
extern void debug_mutex_init(struct mutex *lock, const char *name, extern void debug_mutex_init(struct mutex *lock, const char *name,
struct lock_class_key *key); struct lock_class_key *key);
......
...@@ -537,7 +537,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, ...@@ -537,7 +537,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
goto skip_wait; goto skip_wait;
debug_mutex_lock_common(lock, &waiter); debug_mutex_lock_common(lock, &waiter);
debug_mutex_add_waiter(lock, &waiter, task_thread_info(task)); debug_mutex_add_waiter(lock, &waiter, task);
/* add waiting tasks to the end of the waitqueue (FIFO): */ /* add waiting tasks to the end of the waitqueue (FIFO): */
list_add_tail(&waiter.list, &lock->wait_list); list_add_tail(&waiter.list, &lock->wait_list);
...@@ -584,7 +584,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, ...@@ -584,7 +584,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
} }
__set_task_state(task, TASK_RUNNING); __set_task_state(task, TASK_RUNNING);
mutex_remove_waiter(lock, &waiter, current_thread_info()); mutex_remove_waiter(lock, &waiter, task);
/* set it to 0 if there are no waiters left: */ /* set it to 0 if there are no waiters left: */
if (likely(list_empty(&lock->wait_list))) if (likely(list_empty(&lock->wait_list)))
atomic_set(&lock->count, 0); atomic_set(&lock->count, 0);
...@@ -605,7 +605,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, ...@@ -605,7 +605,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
return 0; return 0;
err: err:
mutex_remove_waiter(lock, &waiter, task_thread_info(task)); mutex_remove_waiter(lock, &waiter, task);
spin_unlock_mutex(&lock->wait_lock, flags); spin_unlock_mutex(&lock->wait_lock, flags);
debug_mutex_free_waiter(&waiter); debug_mutex_free_waiter(&waiter);
mutex_release(&lock->dep_map, 1, ip); mutex_release(&lock->dep_map, 1, ip);
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
do { spin_lock(lock); (void)(flags); } while (0) do { spin_lock(lock); (void)(flags); } while (0)
#define spin_unlock_mutex(lock, flags) \ #define spin_unlock_mutex(lock, flags) \
do { spin_unlock(lock); (void)(flags); } while (0) do { spin_unlock(lock); (void)(flags); } while (0)
#define mutex_remove_waiter(lock, waiter, ti) \ #define mutex_remove_waiter(lock, waiter, task) \
__list_del((waiter)->list.prev, (waiter)->list.next) __list_del((waiter)->list.prev, (waiter)->list.next)
#ifdef CONFIG_MUTEX_SPIN_ON_OWNER #ifdef CONFIG_MUTEX_SPIN_ON_OWNER
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment