diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cpuset.c | 5 | ||||
-rw-r--r-- | kernel/exit.c | 2 | ||||
-rw-r--r-- | kernel/fork.c | 8 | ||||
-rw-r--r-- | kernel/posix-timers.c | 10 | ||||
-rw-r--r-- | kernel/power/Kconfig | 9 | ||||
-rw-r--r-- | kernel/power/Makefile | 3 | ||||
-rw-r--r-- | kernel/power/pm.c | 1 | ||||
-rw-r--r-- | kernel/printk.c | 16 | ||||
-rw-r--r-- | kernel/ptrace.c | 2 | ||||
-rw-r--r-- | kernel/rcutorture.c | 4 | ||||
-rw-r--r-- | kernel/sched.c | 10 | ||||
-rw-r--r-- | kernel/signal.c | 11 | ||||
-rw-r--r-- | kernel/stop_machine.c | 6 |
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); |
1182 | bad_fork_cleanup_put_domain: | 1180 | bad_fork_cleanup_put_domain: |
1183 | module_put(p->thread_info->exec_domain->module); | 1181 | module_put(task_thread_info(p)->exec_domain->module); |
1184 | bad_fork_cleanup_count: | 1182 | bad_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 | ||
22 | config 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 | |||
22 | config PM_DEBUG | 31 | config 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) | |||
3 | EXTRA_CFLAGS += -DDEBUG | 3 | EXTRA_CFLAGS += -DDEBUG |
4 | endif | 4 | endif |
5 | 5 | ||
6 | obj-y := main.o process.o console.o pm.o | 6 | obj-y := main.o process.o console.o |
7 | obj-$(CONFIG_PM_LEGACY) += pm.o | ||
7 | obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o disk.o snapshot.o | 8 | obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o disk.o snapshot.o |
8 | 9 | ||
9 | obj-$(CONFIG_SUSPEND_SMP) += smp.o | 10 | obj-$(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 | ||
28 | int pm_active; | 29 | int 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 | ||
508 | asmlinkage int printk(const char *fmt, ...) | 514 | asmlinkage 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 | } |
765 | EXPORT_SYMBOL(release_console_sem); | 774 | EXPORT_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 | ||
140 | struct stop_machine_data | 140 | struct stop_machine_data |