diff options
Diffstat (limited to 'include/linux/semaphore.h')
| -rw-r--r-- | include/linux/semaphore.h | 15 | 
1 files changed, 14 insertions, 1 deletions
diff --git a/include/linux/semaphore.h b/include/linux/semaphore.h index 04655faadc2d..89706157e622 100644 --- a/include/linux/semaphore.h +++ b/include/linux/semaphore.h @@ -16,13 +16,25 @@ struct semaphore {  	raw_spinlock_t		lock;  	unsigned int		count;  	struct list_head	wait_list; + +#ifdef CONFIG_DETECT_HUNG_TASK_BLOCKER +	unsigned long		last_holder; +#endif  }; +#ifdef CONFIG_DETECT_HUNG_TASK_BLOCKER +#define __LAST_HOLDER_SEMAPHORE_INITIALIZER				\ +	, .last_holder = 0UL +#else +#define __LAST_HOLDER_SEMAPHORE_INITIALIZER +#endif +  #define __SEMAPHORE_INITIALIZER(name, n)				\  {									\  	.lock		= __RAW_SPIN_LOCK_UNLOCKED((name).lock),	\  	.count		= n,						\ -	.wait_list	= LIST_HEAD_INIT((name).wait_list),		\ +	.wait_list	= LIST_HEAD_INIT((name).wait_list)		\ +	__LAST_HOLDER_SEMAPHORE_INITIALIZER				\  }  /* @@ -47,5 +59,6 @@ extern int __must_check down_killable(struct semaphore *sem);  extern int __must_check down_trylock(struct semaphore *sem);  extern int __must_check down_timeout(struct semaphore *sem, long jiffies);  extern void up(struct semaphore *sem); +extern unsigned long sem_last_holder(struct semaphore *sem);  #endif /* __LINUX_SEMAPHORE_H */  | 
