diff options
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 9b4e54ef0225..628198a4f28a 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -104,6 +104,7 @@ static kmem_cache_t *mm_cachep; | |||
104 | void free_task(struct task_struct *tsk) | 104 | void free_task(struct task_struct *tsk) |
105 | { | 105 | { |
106 | free_thread_info(tsk->thread_info); | 106 | free_thread_info(tsk->thread_info); |
107 | rt_mutex_debug_task_free(tsk); | ||
107 | free_task_struct(tsk); | 108 | free_task_struct(tsk); |
108 | } | 109 | } |
109 | EXPORT_SYMBOL(free_task); | 110 | EXPORT_SYMBOL(free_task); |
@@ -913,6 +914,19 @@ asmlinkage long sys_set_tid_address(int __user *tidptr) | |||
913 | return current->pid; | 914 | return current->pid; |
914 | } | 915 | } |
915 | 916 | ||
917 | static inline void rt_mutex_init_task(struct task_struct *p) | ||
918 | { | ||
919 | #ifdef CONFIG_RT_MUTEXES | ||
920 | spin_lock_init(&p->pi_lock); | ||
921 | plist_head_init(&p->pi_waiters, &p->pi_lock); | ||
922 | p->pi_blocked_on = NULL; | ||
923 | # ifdef CONFIG_DEBUG_RT_MUTEXES | ||
924 | spin_lock_init(&p->held_list_lock); | ||
925 | INIT_LIST_HEAD(&p->held_list_head); | ||
926 | # endif | ||
927 | #endif | ||
928 | } | ||
929 | |||
916 | /* | 930 | /* |
917 | * This creates a new process as a copy of the old one, | 931 | * This creates a new process as a copy of the old one, |
918 | * but does not actually start it yet. | 932 | * but does not actually start it yet. |
@@ -1034,6 +1048,8 @@ static task_t *copy_process(unsigned long clone_flags, | |||
1034 | mpol_fix_fork_child_flag(p); | 1048 | mpol_fix_fork_child_flag(p); |
1035 | #endif | 1049 | #endif |
1036 | 1050 | ||
1051 | rt_mutex_init_task(p); | ||
1052 | |||
1037 | #ifdef CONFIG_DEBUG_MUTEXES | 1053 | #ifdef CONFIG_DEBUG_MUTEXES |
1038 | p->blocked_on = NULL; /* not blocked yet */ | 1054 | p->blocked_on = NULL; /* not blocked yet */ |
1039 | #endif | 1055 | #endif |
@@ -1076,6 +1092,9 @@ static task_t *copy_process(unsigned long clone_flags, | |||
1076 | #ifdef CONFIG_COMPAT | 1092 | #ifdef CONFIG_COMPAT |
1077 | p->compat_robust_list = NULL; | 1093 | p->compat_robust_list = NULL; |
1078 | #endif | 1094 | #endif |
1095 | INIT_LIST_HEAD(&p->pi_state_list); | ||
1096 | p->pi_state_cache = NULL; | ||
1097 | |||
1079 | /* | 1098 | /* |
1080 | * sigaltstack should be cleared when sharing the same VM | 1099 | * sigaltstack should be cleared when sharing the same VM |
1081 | */ | 1100 | */ |