diff options
Diffstat (limited to 'kernel/sched')
| -rw-r--r-- | kernel/sched/core.c | 5 | ||||
| -rw-r--r-- | kernel/sched/sched.h | 4 |
2 files changed, 8 insertions, 1 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index fac6492f0b98..94732d1ab00a 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
| @@ -2781,6 +2781,10 @@ static struct rq *finish_task_switch(struct task_struct *prev) | |||
| 2781 | * task and put them back on the free list. | 2781 | * task and put them back on the free list. |
| 2782 | */ | 2782 | */ |
| 2783 | kprobe_flush_task(prev); | 2783 | kprobe_flush_task(prev); |
| 2784 | |||
| 2785 | /* Task is done with its stack. */ | ||
| 2786 | put_task_stack(prev); | ||
| 2787 | |||
| 2784 | put_task_struct(prev); | 2788 | put_task_struct(prev); |
| 2785 | } | 2789 | } |
| 2786 | 2790 | ||
| @@ -3403,7 +3407,6 @@ static void __sched notrace __schedule(bool preempt) | |||
| 3403 | 3407 | ||
| 3404 | balance_callback(rq); | 3408 | balance_callback(rq); |
| 3405 | } | 3409 | } |
| 3406 | STACK_FRAME_NON_STANDARD(__schedule); /* switch_to() */ | ||
| 3407 | 3410 | ||
| 3408 | void __noreturn do_task_dead(void) | 3411 | void __noreturn do_task_dead(void) |
| 3409 | { | 3412 | { |
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 58df5590d028..055f935d4421 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h | |||
| @@ -1021,7 +1021,11 @@ static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu) | |||
| 1021 | * per-task data have been completed by this moment. | 1021 | * per-task data have been completed by this moment. |
| 1022 | */ | 1022 | */ |
| 1023 | smp_wmb(); | 1023 | smp_wmb(); |
| 1024 | #ifdef CONFIG_THREAD_INFO_IN_TASK | ||
| 1025 | p->cpu = cpu; | ||
| 1026 | #else | ||
| 1024 | task_thread_info(p)->cpu = cpu; | 1027 | task_thread_info(p)->cpu = cpu; |
| 1028 | #endif | ||
| 1025 | p->wake_cpu = cpu; | 1029 | p->wake_cpu = cpu; |
| 1026 | #endif | 1030 | #endif |
| 1027 | } | 1031 | } |
