diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/exit.c | 2 | ||||
| -rw-r--r-- | kernel/fork.c | 2 | ||||
| -rw-r--r-- | kernel/kprobes.c | 20 | ||||
| -rw-r--r-- | kernel/pid.c | 2 |
4 files changed, 16 insertions, 10 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 35401720635b..fec12eb12471 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -938,8 +938,8 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 938 | 938 | ||
| 939 | tsk->exit_code = code; | 939 | tsk->exit_code = code; |
| 940 | proc_exit_connector(tsk); | 940 | proc_exit_connector(tsk); |
| 941 | exit_notify(tsk); | ||
| 942 | exit_task_namespaces(tsk); | 941 | exit_task_namespaces(tsk); |
| 942 | exit_notify(tsk); | ||
| 943 | #ifdef CONFIG_NUMA | 943 | #ifdef CONFIG_NUMA |
| 944 | mpol_free(tsk->mempolicy); | 944 | mpol_free(tsk->mempolicy); |
| 945 | tsk->mempolicy = NULL; | 945 | tsk->mempolicy = NULL; |
diff --git a/kernel/fork.c b/kernel/fork.c index fc723e595cd5..d57118da73ff 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -1313,7 +1313,7 @@ noinline struct pt_regs * __devinit __attribute__((weak)) idle_regs(struct pt_re | |||
| 1313 | return regs; | 1313 | return regs; |
| 1314 | } | 1314 | } |
| 1315 | 1315 | ||
| 1316 | struct task_struct * __devinit fork_idle(int cpu) | 1316 | struct task_struct * __cpuinit fork_idle(int cpu) |
| 1317 | { | 1317 | { |
| 1318 | struct task_struct *task; | 1318 | struct task_struct *task; |
| 1319 | struct pt_regs regs; | 1319 | struct pt_regs regs; |
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 17ec4afb0994..6fcf8dd148d0 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c | |||
| @@ -87,6 +87,12 @@ struct kprobe_insn_page { | |||
| 87 | int ngarbage; | 87 | int ngarbage; |
| 88 | }; | 88 | }; |
| 89 | 89 | ||
| 90 | enum kprobe_slot_state { | ||
| 91 | SLOT_CLEAN = 0, | ||
| 92 | SLOT_DIRTY = 1, | ||
| 93 | SLOT_USED = 2, | ||
| 94 | }; | ||
| 95 | |||
| 90 | static struct hlist_head kprobe_insn_pages; | 96 | static struct hlist_head kprobe_insn_pages; |
| 91 | static int kprobe_garbage_slots; | 97 | static int kprobe_garbage_slots; |
| 92 | static int collect_garbage_slots(void); | 98 | static int collect_garbage_slots(void); |
| @@ -130,8 +136,8 @@ kprobe_opcode_t __kprobes *get_insn_slot(void) | |||
| 130 | if (kip->nused < INSNS_PER_PAGE) { | 136 | if (kip->nused < INSNS_PER_PAGE) { |
| 131 | int i; | 137 | int i; |
| 132 | for (i = 0; i < INSNS_PER_PAGE; i++) { | 138 | for (i = 0; i < INSNS_PER_PAGE; i++) { |
| 133 | if (!kip->slot_used[i]) { | 139 | if (kip->slot_used[i] == SLOT_CLEAN) { |
| 134 | kip->slot_used[i] = 1; | 140 | kip->slot_used[i] = SLOT_USED; |
| 135 | kip->nused++; | 141 | kip->nused++; |
| 136 | return kip->insns + (i * MAX_INSN_SIZE); | 142 | return kip->insns + (i * MAX_INSN_SIZE); |
| 137 | } | 143 | } |
| @@ -163,8 +169,8 @@ kprobe_opcode_t __kprobes *get_insn_slot(void) | |||
| 163 | } | 169 | } |
| 164 | INIT_HLIST_NODE(&kip->hlist); | 170 | INIT_HLIST_NODE(&kip->hlist); |
| 165 | hlist_add_head(&kip->hlist, &kprobe_insn_pages); | 171 | hlist_add_head(&kip->hlist, &kprobe_insn_pages); |
| 166 | memset(kip->slot_used, 0, INSNS_PER_PAGE); | 172 | memset(kip->slot_used, SLOT_CLEAN, INSNS_PER_PAGE); |
| 167 | kip->slot_used[0] = 1; | 173 | kip->slot_used[0] = SLOT_USED; |
| 168 | kip->nused = 1; | 174 | kip->nused = 1; |
| 169 | kip->ngarbage = 0; | 175 | kip->ngarbage = 0; |
| 170 | return kip->insns; | 176 | return kip->insns; |
| @@ -173,7 +179,7 @@ kprobe_opcode_t __kprobes *get_insn_slot(void) | |||
| 173 | /* Return 1 if all garbages are collected, otherwise 0. */ | 179 | /* Return 1 if all garbages are collected, otherwise 0. */ |
| 174 | static int __kprobes collect_one_slot(struct kprobe_insn_page *kip, int idx) | 180 | static int __kprobes collect_one_slot(struct kprobe_insn_page *kip, int idx) |
| 175 | { | 181 | { |
| 176 | kip->slot_used[idx] = 0; | 182 | kip->slot_used[idx] = SLOT_CLEAN; |
| 177 | kip->nused--; | 183 | kip->nused--; |
| 178 | if (kip->nused == 0) { | 184 | if (kip->nused == 0) { |
| 179 | /* | 185 | /* |
| @@ -212,7 +218,7 @@ static int __kprobes collect_garbage_slots(void) | |||
| 212 | continue; | 218 | continue; |
| 213 | kip->ngarbage = 0; /* we will collect all garbages */ | 219 | kip->ngarbage = 0; /* we will collect all garbages */ |
| 214 | for (i = 0; i < INSNS_PER_PAGE; i++) { | 220 | for (i = 0; i < INSNS_PER_PAGE; i++) { |
| 215 | if (kip->slot_used[i] == -1 && | 221 | if (kip->slot_used[i] == SLOT_DIRTY && |
| 216 | collect_one_slot(kip, i)) | 222 | collect_one_slot(kip, i)) |
| 217 | break; | 223 | break; |
| 218 | } | 224 | } |
| @@ -232,7 +238,7 @@ void __kprobes free_insn_slot(kprobe_opcode_t * slot, int dirty) | |||
| 232 | slot < kip->insns + (INSNS_PER_PAGE * MAX_INSN_SIZE)) { | 238 | slot < kip->insns + (INSNS_PER_PAGE * MAX_INSN_SIZE)) { |
| 233 | int i = (slot - kip->insns) / MAX_INSN_SIZE; | 239 | int i = (slot - kip->insns) / MAX_INSN_SIZE; |
| 234 | if (dirty) { | 240 | if (dirty) { |
| 235 | kip->slot_used[i] = -1; | 241 | kip->slot_used[i] = SLOT_DIRTY; |
| 236 | kip->ngarbage++; | 242 | kip->ngarbage++; |
| 237 | } else { | 243 | } else { |
| 238 | collect_one_slot(kip, i); | 244 | collect_one_slot(kip, i); |
diff --git a/kernel/pid.c b/kernel/pid.c index 2efe9d8d367b..78f2aee90f54 100644 --- a/kernel/pid.c +++ b/kernel/pid.c | |||
| @@ -197,7 +197,7 @@ fastcall void free_pid(struct pid *pid) | |||
| 197 | hlist_del_rcu(&pid->pid_chain); | 197 | hlist_del_rcu(&pid->pid_chain); |
| 198 | spin_unlock_irqrestore(&pidmap_lock, flags); | 198 | spin_unlock_irqrestore(&pidmap_lock, flags); |
| 199 | 199 | ||
| 200 | free_pidmap(current->nsproxy->pid_ns, pid->nr); | 200 | free_pidmap(&init_pid_ns, pid->nr); |
| 201 | call_rcu(&pid->rcu, delayed_put_pid); | 201 | call_rcu(&pid->rcu, delayed_put_pid); |
| 202 | } | 202 | } |
| 203 | 203 | ||
