diff options
Diffstat (limited to 'kernel/mutex.c')
| -rw-r--r-- | kernel/mutex.c | 25 | 
1 files changed, 17 insertions, 8 deletions
diff --git a/kernel/mutex.c b/kernel/mutex.c index 2c938e2337c..d607ed5dd44 100644 --- a/kernel/mutex.c +++ b/kernel/mutex.c @@ -131,14 +131,14 @@ EXPORT_SYMBOL(mutex_unlock);   */  static inline int __sched  __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, -	       	unsigned long ip) +		    struct lockdep_map *nest_lock, unsigned long ip)  {  	struct task_struct *task = current;  	struct mutex_waiter waiter;  	unsigned long flags;  	preempt_disable(); -	mutex_acquire(&lock->dep_map, subclass, 0, ip); +	mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);  #ifdef CONFIG_MUTEX_SPIN_ON_OWNER  	/* @@ -269,16 +269,25 @@ void __sched  mutex_lock_nested(struct mutex *lock, unsigned int subclass)  {  	might_sleep(); -	__mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, subclass, _RET_IP_); +	__mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, subclass, NULL, _RET_IP_);  }  EXPORT_SYMBOL_GPL(mutex_lock_nested); +void __sched +_mutex_lock_nest_lock(struct mutex *lock, struct lockdep_map *nest) +{ +	might_sleep(); +	__mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, 0, nest, _RET_IP_); +} + +EXPORT_SYMBOL_GPL(_mutex_lock_nest_lock); +  int __sched  mutex_lock_killable_nested(struct mutex *lock, unsigned int subclass)  {  	might_sleep(); -	return __mutex_lock_common(lock, TASK_KILLABLE, subclass, _RET_IP_); +	return __mutex_lock_common(lock, TASK_KILLABLE, subclass, NULL, _RET_IP_);  }  EXPORT_SYMBOL_GPL(mutex_lock_killable_nested); @@ -287,7 +296,7 @@ mutex_lock_interruptible_nested(struct mutex *lock, unsigned int subclass)  {  	might_sleep();  	return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, -				   subclass, _RET_IP_); +				   subclass, NULL, _RET_IP_);  }  EXPORT_SYMBOL_GPL(mutex_lock_interruptible_nested); @@ -393,7 +402,7 @@ __mutex_lock_slowpath(atomic_t *lock_count)  {  	struct mutex *lock = container_of(lock_count, struct mutex, count); -	__mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, 0, _RET_IP_); +	__mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, 0, NULL, _RET_IP_);  }  static noinline int __sched @@ -401,7 +410,7 @@ __mutex_lock_killable_slowpath(atomic_t *lock_count)  {  	struct mutex *lock = container_of(lock_count, struct mutex, count); -	return __mutex_lock_common(lock, TASK_KILLABLE, 0, _RET_IP_); +	return __mutex_lock_common(lock, TASK_KILLABLE, 0, NULL, _RET_IP_);  }  static noinline int __sched @@ -409,7 +418,7 @@ __mutex_lock_interruptible_slowpath(atomic_t *lock_count)  {  	struct mutex *lock = container_of(lock_count, struct mutex, count); -	return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, 0, _RET_IP_); +	return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, 0, NULL, _RET_IP_);  }  #endif  |