diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/cpuset.c | 24 | ||||
| -rw-r--r-- | kernel/exit.c | 1 | ||||
| -rw-r--r-- | kernel/fork.c | 1 | ||||
| -rw-r--r-- | kernel/kprobes.c | 2 | ||||
| -rw-r--r-- | kernel/ptrace.c | 15 | ||||
| -rw-r--r-- | kernel/rcupreempt.c | 20 | ||||
| -rw-r--r-- | kernel/sched.c | 7 |
7 files changed, 41 insertions, 29 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 9fceb97e989c..798b3ab054eb 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
| @@ -1882,7 +1882,7 @@ static void scan_for_empty_cpusets(const struct cpuset *root) | |||
| 1882 | * in order to minimize text size. | 1882 | * in order to minimize text size. |
| 1883 | */ | 1883 | */ |
| 1884 | 1884 | ||
| 1885 | static void common_cpu_mem_hotplug_unplug(void) | 1885 | static void common_cpu_mem_hotplug_unplug(int rebuild_sd) |
| 1886 | { | 1886 | { |
| 1887 | cgroup_lock(); | 1887 | cgroup_lock(); |
| 1888 | 1888 | ||
| @@ -1894,7 +1894,8 @@ static void common_cpu_mem_hotplug_unplug(void) | |||
| 1894 | * Scheduler destroys domains on hotplug events. | 1894 | * Scheduler destroys domains on hotplug events. |
| 1895 | * Rebuild them based on the current settings. | 1895 | * Rebuild them based on the current settings. |
| 1896 | */ | 1896 | */ |
| 1897 | rebuild_sched_domains(); | 1897 | if (rebuild_sd) |
| 1898 | rebuild_sched_domains(); | ||
| 1898 | 1899 | ||
| 1899 | cgroup_unlock(); | 1900 | cgroup_unlock(); |
| 1900 | } | 1901 | } |
| @@ -1912,11 +1913,22 @@ static void common_cpu_mem_hotplug_unplug(void) | |||
| 1912 | static int cpuset_handle_cpuhp(struct notifier_block *unused_nb, | 1913 | static int cpuset_handle_cpuhp(struct notifier_block *unused_nb, |
| 1913 | unsigned long phase, void *unused_cpu) | 1914 | unsigned long phase, void *unused_cpu) |
| 1914 | { | 1915 | { |
| 1915 | if (phase == CPU_DYING || phase == CPU_DYING_FROZEN) | 1916 | switch (phase) { |
| 1917 | case CPU_UP_CANCELED: | ||
| 1918 | case CPU_UP_CANCELED_FROZEN: | ||
| 1919 | case CPU_DOWN_FAILED: | ||
| 1920 | case CPU_DOWN_FAILED_FROZEN: | ||
| 1921 | case CPU_ONLINE: | ||
| 1922 | case CPU_ONLINE_FROZEN: | ||
| 1923 | case CPU_DEAD: | ||
| 1924 | case CPU_DEAD_FROZEN: | ||
| 1925 | common_cpu_mem_hotplug_unplug(1); | ||
| 1926 | break; | ||
| 1927 | default: | ||
| 1916 | return NOTIFY_DONE; | 1928 | return NOTIFY_DONE; |
| 1929 | } | ||
| 1917 | 1930 | ||
| 1918 | common_cpu_mem_hotplug_unplug(); | 1931 | return NOTIFY_OK; |
| 1919 | return 0; | ||
| 1920 | } | 1932 | } |
| 1921 | 1933 | ||
| 1922 | #ifdef CONFIG_MEMORY_HOTPLUG | 1934 | #ifdef CONFIG_MEMORY_HOTPLUG |
| @@ -1929,7 +1941,7 @@ static int cpuset_handle_cpuhp(struct notifier_block *unused_nb, | |||
| 1929 | 1941 | ||
| 1930 | void cpuset_track_online_nodes(void) | 1942 | void cpuset_track_online_nodes(void) |
| 1931 | { | 1943 | { |
| 1932 | common_cpu_mem_hotplug_unplug(); | 1944 | common_cpu_mem_hotplug_unplug(0); |
| 1933 | } | 1945 | } |
| 1934 | #endif | 1946 | #endif |
| 1935 | 1947 | ||
diff --git a/kernel/exit.c b/kernel/exit.c index 8f6185e69b69..ceb258782835 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/personality.h> | 13 | #include <linux/personality.h> |
| 14 | #include <linux/tty.h> | 14 | #include <linux/tty.h> |
| 15 | #include <linux/mnt_namespace.h> | 15 | #include <linux/mnt_namespace.h> |
| 16 | #include <linux/iocontext.h> | ||
| 16 | #include <linux/key.h> | 17 | #include <linux/key.h> |
| 17 | #include <linux/security.h> | 18 | #include <linux/security.h> |
| 18 | #include <linux/cpu.h> | 19 | #include <linux/cpu.h> |
diff --git a/kernel/fork.c b/kernel/fork.c index 19908b26cf80..b71ccd09fc8d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <linux/sem.h> | 23 | #include <linux/sem.h> |
| 24 | #include <linux/file.h> | 24 | #include <linux/file.h> |
| 25 | #include <linux/fdtable.h> | 25 | #include <linux/fdtable.h> |
| 26 | #include <linux/iocontext.h> | ||
| 26 | #include <linux/key.h> | 27 | #include <linux/key.h> |
| 27 | #include <linux/binfmts.h> | 28 | #include <linux/binfmts.h> |
| 28 | #include <linux/mman.h> | 29 | #include <linux/mman.h> |
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index d4998f81e229..1485ca8d0e00 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c | |||
| @@ -79,7 +79,7 @@ static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL; | |||
| 79 | * | 79 | * |
| 80 | * For such cases, we now have a blacklist | 80 | * For such cases, we now have a blacklist |
| 81 | */ | 81 | */ |
| 82 | struct kprobe_blackpoint kprobe_blacklist[] = { | 82 | static struct kprobe_blackpoint kprobe_blacklist[] = { |
| 83 | {"preempt_schedule",}, | 83 | {"preempt_schedule",}, |
| 84 | {NULL} /* Terminator */ | 84 | {NULL} /* Terminator */ |
| 85 | }; | 85 | }; |
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 6c19e94fd0a5..e337390fce01 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
| @@ -121,7 +121,7 @@ int ptrace_check_attach(struct task_struct *child, int kill) | |||
| 121 | return ret; | 121 | return ret; |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | int __ptrace_may_attach(struct task_struct *task) | 124 | int __ptrace_may_access(struct task_struct *task, unsigned int mode) |
| 125 | { | 125 | { |
| 126 | /* May we inspect the given task? | 126 | /* May we inspect the given task? |
| 127 | * This check is used both for attaching with ptrace | 127 | * This check is used both for attaching with ptrace |
| @@ -148,16 +148,16 @@ int __ptrace_may_attach(struct task_struct *task) | |||
| 148 | if (!dumpable && !capable(CAP_SYS_PTRACE)) | 148 | if (!dumpable && !capable(CAP_SYS_PTRACE)) |
| 149 | return -EPERM; | 149 | return -EPERM; |
| 150 | 150 | ||
| 151 | return security_ptrace(current, task); | 151 | return security_ptrace(current, task, mode); |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | int ptrace_may_attach(struct task_struct *task) | 154 | bool ptrace_may_access(struct task_struct *task, unsigned int mode) |
| 155 | { | 155 | { |
| 156 | int err; | 156 | int err; |
| 157 | task_lock(task); | 157 | task_lock(task); |
| 158 | err = __ptrace_may_attach(task); | 158 | err = __ptrace_may_access(task, mode); |
| 159 | task_unlock(task); | 159 | task_unlock(task); |
| 160 | return !err; | 160 | return (!err ? true : false); |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | int ptrace_attach(struct task_struct *task) | 163 | int ptrace_attach(struct task_struct *task) |
| @@ -195,7 +195,7 @@ repeat: | |||
| 195 | /* the same process cannot be attached many times */ | 195 | /* the same process cannot be attached many times */ |
| 196 | if (task->ptrace & PT_PTRACED) | 196 | if (task->ptrace & PT_PTRACED) |
| 197 | goto bad; | 197 | goto bad; |
| 198 | retval = __ptrace_may_attach(task); | 198 | retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH); |
| 199 | if (retval) | 199 | if (retval) |
| 200 | goto bad; | 200 | goto bad; |
| 201 | 201 | ||
| @@ -494,7 +494,8 @@ int ptrace_traceme(void) | |||
| 494 | */ | 494 | */ |
| 495 | task_lock(current); | 495 | task_lock(current); |
| 496 | if (!(current->ptrace & PT_PTRACED)) { | 496 | if (!(current->ptrace & PT_PTRACED)) { |
| 497 | ret = security_ptrace(current->parent, current); | 497 | ret = security_ptrace(current->parent, current, |
| 498 | PTRACE_MODE_ATTACH); | ||
| 498 | /* | 499 | /* |
| 499 | * Set the ptrace bit in the process ptrace flags. | 500 | * Set the ptrace bit in the process ptrace flags. |
| 500 | */ | 501 | */ |
diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c index 5e02b7740702..41d275a81df5 100644 --- a/kernel/rcupreempt.c +++ b/kernel/rcupreempt.c | |||
| @@ -925,26 +925,22 @@ void rcu_offline_cpu(int cpu) | |||
| 925 | spin_unlock_irqrestore(&rdp->lock, flags); | 925 | spin_unlock_irqrestore(&rdp->lock, flags); |
| 926 | } | 926 | } |
| 927 | 927 | ||
| 928 | void __devinit rcu_online_cpu(int cpu) | ||
| 929 | { | ||
| 930 | unsigned long flags; | ||
| 931 | |||
| 932 | spin_lock_irqsave(&rcu_ctrlblk.fliplock, flags); | ||
| 933 | cpu_set(cpu, rcu_cpu_online_map); | ||
| 934 | spin_unlock_irqrestore(&rcu_ctrlblk.fliplock, flags); | ||
| 935 | } | ||
| 936 | |||
| 937 | #else /* #ifdef CONFIG_HOTPLUG_CPU */ | 928 | #else /* #ifdef CONFIG_HOTPLUG_CPU */ |
| 938 | 929 | ||
| 939 | void rcu_offline_cpu(int cpu) | 930 | void rcu_offline_cpu(int cpu) |
| 940 | { | 931 | { |
| 941 | } | 932 | } |
| 942 | 933 | ||
| 943 | void __devinit rcu_online_cpu(int cpu) | 934 | #endif /* #else #ifdef CONFIG_HOTPLUG_CPU */ |
| 935 | |||
| 936 | void __cpuinit rcu_online_cpu(int cpu) | ||
| 944 | { | 937 | { |
| 945 | } | 938 | unsigned long flags; |
| 946 | 939 | ||
| 947 | #endif /* #else #ifdef CONFIG_HOTPLUG_CPU */ | 940 | spin_lock_irqsave(&rcu_ctrlblk.fliplock, flags); |
| 941 | cpu_set(cpu, rcu_cpu_online_map); | ||
| 942 | spin_unlock_irqrestore(&rcu_ctrlblk.fliplock, flags); | ||
| 943 | } | ||
| 948 | 944 | ||
| 949 | static void rcu_process_callbacks(struct softirq_action *unused) | 945 | static void rcu_process_callbacks(struct softirq_action *unused) |
| 950 | { | 946 | { |
diff --git a/kernel/sched.c b/kernel/sched.c index 94ead43eda62..4e2f60335656 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -5622,10 +5622,10 @@ static int __migrate_task(struct task_struct *p, int src_cpu, int dest_cpu) | |||
| 5622 | double_rq_lock(rq_src, rq_dest); | 5622 | double_rq_lock(rq_src, rq_dest); |
| 5623 | /* Already moved. */ | 5623 | /* Already moved. */ |
| 5624 | if (task_cpu(p) != src_cpu) | 5624 | if (task_cpu(p) != src_cpu) |
| 5625 | goto out; | 5625 | goto done; |
| 5626 | /* Affinity changed (again). */ | 5626 | /* Affinity changed (again). */ |
| 5627 | if (!cpu_isset(dest_cpu, p->cpus_allowed)) | 5627 | if (!cpu_isset(dest_cpu, p->cpus_allowed)) |
| 5628 | goto out; | 5628 | goto fail; |
| 5629 | 5629 | ||
| 5630 | on_rq = p->se.on_rq; | 5630 | on_rq = p->se.on_rq; |
| 5631 | if (on_rq) | 5631 | if (on_rq) |
| @@ -5636,8 +5636,9 @@ static int __migrate_task(struct task_struct *p, int src_cpu, int dest_cpu) | |||
| 5636 | activate_task(rq_dest, p, 0); | 5636 | activate_task(rq_dest, p, 0); |
| 5637 | check_preempt_curr(rq_dest, p); | 5637 | check_preempt_curr(rq_dest, p); |
| 5638 | } | 5638 | } |
| 5639 | done: | ||
| 5639 | ret = 1; | 5640 | ret = 1; |
| 5640 | out: | 5641 | fail: |
| 5641 | double_rq_unlock(rq_src, rq_dest); | 5642 | double_rq_unlock(rq_src, rq_dest); |
| 5642 | return ret; | 5643 | return ret; |
| 5643 | } | 5644 | } |
