Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull scheduler fixes from Ingo Molnar: "A CONFIG_STACK_GROWSUP=y fix, and a hotplug llc CPU mask fix" * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: sched: Fix unreleased llc_shared_mask bit during CPU hotplug sched: Fix end_of_stack() and location of stack canary for architectures using CONFIG_STACK_GROWSUP
This commit is contained in:
commit
d2865c7d4e
@ -1284,6 +1284,9 @@ static void remove_siblinginfo(int cpu)
|
|||||||
|
|
||||||
for_each_cpu(sibling, cpu_sibling_mask(cpu))
|
for_each_cpu(sibling, cpu_sibling_mask(cpu))
|
||||||
cpumask_clear_cpu(cpu, cpu_sibling_mask(sibling));
|
cpumask_clear_cpu(cpu, cpu_sibling_mask(sibling));
|
||||||
|
for_each_cpu(sibling, cpu_llc_shared_mask(cpu))
|
||||||
|
cpumask_clear_cpu(cpu, cpu_llc_shared_mask(sibling));
|
||||||
|
cpumask_clear(cpu_llc_shared_mask(cpu));
|
||||||
cpumask_clear(cpu_sibling_mask(cpu));
|
cpumask_clear(cpu_sibling_mask(cpu));
|
||||||
cpumask_clear(cpu_core_mask(cpu));
|
cpumask_clear(cpu_core_mask(cpu));
|
||||||
c->phys_proc_id = 0;
|
c->phys_proc_id = 0;
|
||||||
|
@ -2608,9 +2608,22 @@ static inline void setup_thread_stack(struct task_struct *p, struct task_struct
|
|||||||
task_thread_info(p)->task = p;
|
task_thread_info(p)->task = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the address of the last usable long on the stack.
|
||||||
|
*
|
||||||
|
* When the stack grows down, this is just above the thread
|
||||||
|
* info struct. Going any lower will corrupt the threadinfo.
|
||||||
|
*
|
||||||
|
* When the stack grows up, this is the highest address.
|
||||||
|
* Beyond that position, we corrupt data on the next page.
|
||||||
|
*/
|
||||||
static inline unsigned long *end_of_stack(struct task_struct *p)
|
static inline unsigned long *end_of_stack(struct task_struct *p)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_STACK_GROWSUP
|
||||||
|
return (unsigned long *)((unsigned long)task_thread_info(p) + THREAD_SIZE) - 1;
|
||||||
|
#else
|
||||||
return (unsigned long *)(task_thread_info(p) + 1);
|
return (unsigned long *)(task_thread_info(p) + 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user