aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/cpuset.c5
-rw-r--r--kernel/exit.c2
-rw-r--r--kernel/fork.c8
-rw-r--r--kernel/posix-timers.c10
-rw-r--r--kernel/power/Kconfig9
-rw-r--r--kernel/power/Makefile3
-rw-r--r--kernel/power/pm.c1
-rw-r--r--kernel/printk.c16
-rw-r--r--kernel/ptrace.c2
-rw-r--r--kernel/rcutorture.c4
-rw-r--r--kernel/sched.c10
-rw-r--r--kernel/signal.c11
-rw-r--r--kernel/stop_machine.c6
13 files changed, 50 insertions, 37 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c
index 5a737ed9dac7..7430640f9816 100644
--- a/kernel/cpuset.c
+++ b/kernel/cpuset.c
@@ -1809,11 +1809,12 @@ int cpuset_zone_allowed(struct zone *z, gfp_t gfp_mask)
1809 if (gfp_mask & __GFP_HARDWALL) /* If hardwall request, stop here */ 1809 if (gfp_mask & __GFP_HARDWALL) /* If hardwall request, stop here */
1810 return 0; 1810 return 0;
1811 1811
1812 if (current->flags & PF_EXITING) /* Let dying task have memory */
1813 return 1;
1814
1812 /* Not hardwall and node outside mems_allowed: scan up cpusets */ 1815 /* Not hardwall and node outside mems_allowed: scan up cpusets */
1813 down(&callback_sem); 1816 down(&callback_sem);
1814 1817
1815 if (current->flags & PF_EXITING) /* Let dying task have memory */
1816 return 1;
1817 task_lock(current); 1818 task_lock(current);
1818 cs = nearest_exclusive_ancestor(current->cpuset); 1819 cs = nearest_exclusive_ancestor(current->cpuset);
1819 task_unlock(current); 1820 task_unlock(current);
diff --git a/kernel/exit.c b/kernel/exit.c
index 452a1d116178..ee515683b92d 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -859,7 +859,7 @@ fastcall NORET_TYPE void do_exit(long code)
859 if (group_dead && tsk->signal->leader) 859 if (group_dead && tsk->signal->leader)
860 disassociate_ctty(1); 860 disassociate_ctty(1);
861 861
862 module_put(tsk->thread_info->exec_domain->module); 862 module_put(task_thread_info(tsk)->exec_domain->module);
863 if (tsk->binfmt) 863 if (tsk->binfmt)
864 module_put(tsk->binfmt->module); 864 module_put(tsk->binfmt->module);
865 865
diff --git a/kernel/fork.c b/kernel/fork.c
index 158710d22566..e0d0b77343f8 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -171,10 +171,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
171 return NULL; 171 return NULL;
172 } 172 }
173 173
174 *ti = *orig->thread_info;
175 *tsk = *orig; 174 *tsk = *orig;
176 tsk->thread_info = ti; 175 tsk->thread_info = ti;
177 ti->task = tsk; 176 setup_thread_stack(tsk, orig);
178 177
179 /* One for us, one for whoever does the "release_task()" (usually parent) */ 178 /* One for us, one for whoever does the "release_task()" (usually parent) */
180 atomic_set(&tsk->usage,2); 179 atomic_set(&tsk->usage,2);
@@ -324,7 +323,6 @@ static struct mm_struct * mm_init(struct mm_struct * mm)
324 spin_lock_init(&mm->page_table_lock); 323 spin_lock_init(&mm->page_table_lock);
325 rwlock_init(&mm->ioctx_list_lock); 324 rwlock_init(&mm->ioctx_list_lock);
326 mm->ioctx_list = NULL; 325 mm->ioctx_list = NULL;
327 mm->default_kioctx = (struct kioctx)INIT_KIOCTX(mm->default_kioctx, *mm);
328 mm->free_area_cache = TASK_UNMAPPED_BASE; 326 mm->free_area_cache = TASK_UNMAPPED_BASE;
329 mm->cached_hole_size = ~0UL; 327 mm->cached_hole_size = ~0UL;
330 328
@@ -919,7 +917,7 @@ static task_t *copy_process(unsigned long clone_flags,
919 if (nr_threads >= max_threads) 917 if (nr_threads >= max_threads)
920 goto bad_fork_cleanup_count; 918 goto bad_fork_cleanup_count;
921 919
922 if (!try_module_get(p->thread_info->exec_domain->module)) 920 if (!try_module_get(task_thread_info(p)->exec_domain->module))
923 goto bad_fork_cleanup_count; 921 goto bad_fork_cleanup_count;
924 922
925 if (p->binfmt && !try_module_get(p->binfmt->module)) 923 if (p->binfmt && !try_module_get(p->binfmt->module))
@@ -1180,7 +1178,7 @@ bad_fork_cleanup:
1180 if (p->binfmt) 1178 if (p->binfmt)
1181 module_put(p->binfmt->module); 1179 module_put(p->binfmt->module);
1182bad_fork_cleanup_put_domain: 1180bad_fork_cleanup_put_domain:
1183 module_put(p->thread_info->exec_domain->module); 1181 module_put(task_thread_info(p)->exec_domain->module);
1184bad_fork_cleanup_count: 1182bad_fork_cleanup_count:
1185 put_group_info(p->group_info); 1183 put_group_info(p->group_info);
1186 atomic_dec(&p->user->processes); 1184 atomic_dec(&p->user->processes);
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c
index ea55c7a1cd75..5870efb3e200 100644
--- a/kernel/posix-timers.c
+++ b/kernel/posix-timers.c
@@ -270,7 +270,7 @@ static void tstojiffie(struct timespec *tp, int res, u64 *jiff)
270 long sec = tp->tv_sec; 270 long sec = tp->tv_sec;
271 long nsec = tp->tv_nsec + res - 1; 271 long nsec = tp->tv_nsec + res - 1;
272 272
273 if (nsec > NSEC_PER_SEC) { 273 if (nsec >= NSEC_PER_SEC) {
274 sec++; 274 sec++;
275 nsec -= NSEC_PER_SEC; 275 nsec -= NSEC_PER_SEC;
276 } 276 }
@@ -1209,13 +1209,9 @@ static int do_posix_clock_monotonic_get(clockid_t clock, struct timespec *tp)
1209 1209
1210 do_posix_clock_monotonic_gettime_parts(tp, &wall_to_mono); 1210 do_posix_clock_monotonic_gettime_parts(tp, &wall_to_mono);
1211 1211
1212 tp->tv_sec += wall_to_mono.tv_sec; 1212 set_normalized_timespec(tp, tp->tv_sec + wall_to_mono.tv_sec,
1213 tp->tv_nsec += wall_to_mono.tv_nsec; 1213 tp->tv_nsec + wall_to_mono.tv_nsec);
1214 1214
1215 if ((tp->tv_nsec - NSEC_PER_SEC) > 0) {
1216 tp->tv_nsec -= NSEC_PER_SEC;
1217 tp->tv_sec++;
1218 }
1219 return 0; 1215 return 0;
1220} 1216}
1221 1217
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
index 46a5e5acff97..5ec248cb7f4a 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -19,6 +19,15 @@ config PM
19 will issue the hlt instruction if nothing is to be done, thereby 19 will issue the hlt instruction if nothing is to be done, thereby
20 sending the processor to sleep and saving power. 20 sending the processor to sleep and saving power.
21 21
22config PM_LEGACY
23 bool "Legacy Power Management API"
24 depends on PM
25 default y
26 ---help---
27 Support for pm_register() and friends.
28
29 If unsure, say Y.
30
22config PM_DEBUG 31config PM_DEBUG
23 bool "Power Management Debug Support" 32 bool "Power Management Debug Support"
24 depends on PM 33 depends on PM
diff --git a/kernel/power/Makefile b/kernel/power/Makefile
index c71eb4579c07..04be7d0d96a7 100644
--- a/kernel/power/Makefile
+++ b/kernel/power/Makefile
@@ -3,7 +3,8 @@ ifeq ($(CONFIG_PM_DEBUG),y)
3EXTRA_CFLAGS += -DDEBUG 3EXTRA_CFLAGS += -DDEBUG
4endif 4endif
5 5
6obj-y := main.o process.o console.o pm.o 6obj-y := main.o process.o console.o
7obj-$(CONFIG_PM_LEGACY) += pm.o
7obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o disk.o snapshot.o 8obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o disk.o snapshot.o
8 9
9obj-$(CONFIG_SUSPEND_SMP) += smp.o 10obj-$(CONFIG_SUSPEND_SMP) += smp.o
diff --git a/kernel/power/pm.c b/kernel/power/pm.c
index 159149321b3c..33c508e857dd 100644
--- a/kernel/power/pm.c
+++ b/kernel/power/pm.c
@@ -23,6 +23,7 @@
23#include <linux/mm.h> 23#include <linux/mm.h>
24#include <linux/slab.h> 24#include <linux/slab.h>
25#include <linux/pm.h> 25#include <linux/pm.h>
26#include <linux/pm_legacy.h>
26#include <linux/interrupt.h> 27#include <linux/interrupt.h>
27 28
28int pm_active; 29int pm_active;
diff --git a/kernel/printk.c b/kernel/printk.c
index e9be027bc930..ac8a08f36207 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -491,7 +491,10 @@ __attribute__((weak)) unsigned long long printk_clock(void)
491 return sched_clock(); 491 return sched_clock();
492} 492}
493 493
494/* 494/**
495 * printk - print a kernel message
496 * @fmt: format string
497 *
495 * This is printk. It can be called from any context. We want it to work. 498 * This is printk. It can be called from any context. We want it to work.
496 * 499 *
497 * We try to grab the console_sem. If we succeed, it's easy - we log the output and 500 * We try to grab the console_sem. If we succeed, it's easy - we log the output and
@@ -503,6 +506,9 @@ __attribute__((weak)) unsigned long long printk_clock(void)
503 * One effect of this deferred printing is that code which calls printk() and 506 * One effect of this deferred printing is that code which calls printk() and
504 * then changes console_loglevel may break. This is because console_loglevel 507 * then changes console_loglevel may break. This is because console_loglevel
505 * is inspected when the actual printing occurs. 508 * is inspected when the actual printing occurs.
509 *
510 * See also:
511 * printf(3)
506 */ 512 */
507 513
508asmlinkage int printk(const char *fmt, ...) 514asmlinkage int printk(const char *fmt, ...)
@@ -655,6 +661,9 @@ static void call_console_drivers(unsigned long start, unsigned long end)
655 661
656/** 662/**
657 * add_preferred_console - add a device to the list of preferred consoles. 663 * add_preferred_console - add a device to the list of preferred consoles.
664 * @name: device name
665 * @idx: device index
666 * @options: options for this console
658 * 667 *
659 * The last preferred console added will be used for kernel messages 668 * The last preferred console added will be used for kernel messages
660 * and stdin/out/err for init. Normally this is used by console_setup 669 * and stdin/out/err for init. Normally this is used by console_setup
@@ -764,7 +773,8 @@ void release_console_sem(void)
764} 773}
765EXPORT_SYMBOL(release_console_sem); 774EXPORT_SYMBOL(release_console_sem);
766 775
767/** console_conditional_schedule - yield the CPU if required 776/**
777 * console_conditional_schedule - yield the CPU if required
768 * 778 *
769 * If the console code is currently allowed to sleep, and 779 * If the console code is currently allowed to sleep, and
770 * if this CPU should yield the CPU to another task, do 780 * if this CPU should yield the CPU to another task, do
@@ -976,6 +986,8 @@ EXPORT_SYMBOL(unregister_console);
976 986
977/** 987/**
978 * tty_write_message - write a message to a certain tty, not just the console. 988 * tty_write_message - write a message to a certain tty, not just the console.
989 * @tty: the destination tty_struct
990 * @msg: the message to write
979 * 991 *
980 * This is used for messages that need to be redirected to a specific tty. 992 * This is used for messages that need to be redirected to a specific tty.
981 * We don't put it into the syslog queue right now maybe in the future if 993 * We don't put it into the syslog queue right now maybe in the future if
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index b88d4186cd7a..17ee7e5a3451 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -470,7 +470,7 @@ asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
470 470
471 if (request == PTRACE_ATTACH) { 471 if (request == PTRACE_ATTACH) {
472 ret = ptrace_attach(child); 472 ret = ptrace_attach(child);
473 goto out; 473 goto out_put_task_struct;
474 } 474 }
475 475
476 ret = ptrace_check_attach(child, request == PTRACE_KILL); 476 ret = ptrace_check_attach(child, request == PTRACE_KILL);
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c
index 9b58f1eff3ca..eb6719c50b4e 100644
--- a/kernel/rcutorture.c
+++ b/kernel/rcutorture.c
@@ -195,6 +195,8 @@ rcu_torture_writer(void *arg)
195 static DEFINE_RCU_RANDOM(rand); 195 static DEFINE_RCU_RANDOM(rand);
196 196
197 VERBOSE_PRINTK_STRING("rcu_torture_writer task started"); 197 VERBOSE_PRINTK_STRING("rcu_torture_writer task started");
198 set_user_nice(current, 19);
199
198 do { 200 do {
199 schedule_timeout_uninterruptible(1); 201 schedule_timeout_uninterruptible(1);
200 if (rcu_batches_completed() == oldbatch) 202 if (rcu_batches_completed() == oldbatch)
@@ -238,6 +240,8 @@ rcu_torture_reader(void *arg)
238 int pipe_count; 240 int pipe_count;
239 241
240 VERBOSE_PRINTK_STRING("rcu_torture_reader task started"); 242 VERBOSE_PRINTK_STRING("rcu_torture_reader task started");
243 set_user_nice(current, 19);
244
241 do { 245 do {
242 rcu_read_lock(); 246 rcu_read_lock();
243 completed = rcu_batches_completed(); 247 completed = rcu_batches_completed();
diff --git a/kernel/sched.c b/kernel/sched.c
index b6506671b2be..6f46c94cc29e 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1437,7 +1437,7 @@ void fastcall sched_fork(task_t *p, int clone_flags)
1437#endif 1437#endif
1438#ifdef CONFIG_PREEMPT 1438#ifdef CONFIG_PREEMPT
1439 /* Want to start with kernel preemption disabled. */ 1439 /* Want to start with kernel preemption disabled. */
1440 p->thread_info->preempt_count = 1; 1440 task_thread_info(p)->preempt_count = 1;
1441#endif 1441#endif
1442 /* 1442 /*
1443 * Share the timeslice between parent and child, thus the 1443 * Share the timeslice between parent and child, thus the
@@ -4327,10 +4327,10 @@ static void show_task(task_t *p)
4327#endif 4327#endif
4328#ifdef CONFIG_DEBUG_STACK_USAGE 4328#ifdef CONFIG_DEBUG_STACK_USAGE
4329 { 4329 {
4330 unsigned long *n = (unsigned long *) (p->thread_info+1); 4330 unsigned long *n = end_of_stack(p);
4331 while (!*n) 4331 while (!*n)
4332 n++; 4332 n++;
4333 free = (unsigned long) n - (unsigned long)(p->thread_info+1); 4333 free = (unsigned long)n - (unsigned long)end_of_stack(p);
4334 } 4334 }
4335#endif 4335#endif
4336 printk("%5lu %5d %6d ", free, p->pid, p->parent->pid); 4336 printk("%5lu %5d %6d ", free, p->pid, p->parent->pid);
@@ -4410,9 +4410,9 @@ void __devinit init_idle(task_t *idle, int cpu)
4410 4410
4411 /* Set the preempt count _outside_ the spinlocks! */ 4411 /* Set the preempt count _outside_ the spinlocks! */
4412#if defined(CONFIG_PREEMPT) && !defined(CONFIG_PREEMPT_BKL) 4412#if defined(CONFIG_PREEMPT) && !defined(CONFIG_PREEMPT_BKL)
4413 idle->thread_info->preempt_count = (idle->lock_depth >= 0); 4413 task_thread_info(idle)->preempt_count = (idle->lock_depth >= 0);
4414#else 4414#else
4415 idle->thread_info->preempt_count = 0; 4415 task_thread_info(idle)->preempt_count = 0;
4416#endif 4416#endif
4417} 4417}
4418 4418
diff --git a/kernel/signal.c b/kernel/signal.c
index 80789a59b4db..d7611f189ef7 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -513,16 +513,7 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
513{ 513{
514 int sig = 0; 514 int sig = 0;
515 515
516 /* SIGKILL must have priority, otherwise it is quite easy 516 sig = next_signal(pending, mask);
517 * to create an unkillable process, sending sig < SIGKILL
518 * to self */
519 if (unlikely(sigismember(&pending->signal, SIGKILL))) {
520 if (!sigismember(mask, SIGKILL))
521 sig = SIGKILL;
522 }
523
524 if (likely(!sig))
525 sig = next_signal(pending, mask);
526 if (sig) { 517 if (sig) {
527 if (current->notifier) { 518 if (current->notifier) {
528 if (sigismember(current->notifier_mask, sig)) { 519 if (sigismember(current->notifier_mask, sig)) {
diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
index 84a9d18aa8da..b3d4dc858e35 100644
--- a/kernel/stop_machine.c
+++ b/kernel/stop_machine.c
@@ -119,13 +119,12 @@ static int stop_machine(void)
119 return ret; 119 return ret;
120 } 120 }
121 121
122 /* Don't schedule us away at this point, please. */
123 local_irq_disable();
124
125 /* Now they are all started, make them hold the CPUs, ready. */ 122 /* Now they are all started, make them hold the CPUs, ready. */
123 preempt_disable();
126 stopmachine_set_state(STOPMACHINE_PREPARE); 124 stopmachine_set_state(STOPMACHINE_PREPARE);
127 125
128 /* Make them disable irqs. */ 126 /* Make them disable irqs. */
127 local_irq_disable();
129 stopmachine_set_state(STOPMACHINE_DISABLE_IRQ); 128 stopmachine_set_state(STOPMACHINE_DISABLE_IRQ);
130 129
131 return 0; 130 return 0;
@@ -135,6 +134,7 @@ static void restart_machine(void)
135{ 134{
136 stopmachine_set_state(STOPMACHINE_EXIT); 135 stopmachine_set_state(STOPMACHINE_EXIT);
137 local_irq_enable(); 136 local_irq_enable();
137 preempt_enable_no_resched();
138} 138}
139 139
140struct stop_machine_data 140struct stop_machine_data