diff options
author | Arnd Bergmann <arnd@arndb.de> | 2011-07-28 11:25:46 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2011-07-28 11:25:46 -0400 |
commit | 6124a4e430b64d1577438c8648c59e996d02e73e (patch) | |
tree | 49cfafad785d1c9e403a5b0d755298b9af2c260f /kernel | |
parent | 8e267f3da5f117d2f1316cf6ddf740f93f1c73aa (diff) | |
parent | 580975d7f48d7d047e22bb0f42adf7557801d8d4 (diff) |
Merge branch 'imx/dt' into next/dt
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/Makefile | 5 | ||||
-rw-r--r-- | kernel/audit.c | 2 | ||||
-rw-r--r-- | kernel/auditsc.c | 2 | ||||
-rw-r--r-- | kernel/cgroup.c | 10 | ||||
-rw-r--r-- | kernel/configs.c | 4 | ||||
-rw-r--r-- | kernel/cpuset.c | 10 | ||||
-rw-r--r-- | kernel/debug/debug_core.c | 2 | ||||
-rw-r--r-- | kernel/exit.c | 3 | ||||
-rw-r--r-- | kernel/fork.c | 88 | ||||
-rw-r--r-- | kernel/futex.c | 4 | ||||
-rw-r--r-- | kernel/gcov/Kconfig | 2 | ||||
-rw-r--r-- | kernel/irq/devres.c | 2 | ||||
-rw-r--r-- | kernel/kexec.c | 2 | ||||
-rw-r--r-- | kernel/notifier.c | 31 | ||||
-rw-r--r-- | kernel/panic.c | 2 | ||||
-rw-r--r-- | kernel/pid.c | 1 | ||||
-rw-r--r-- | kernel/power/Kconfig | 4 | ||||
-rw-r--r-- | kernel/rcupdate.c | 2 | ||||
-rw-r--r-- | kernel/rcutorture.c | 4 | ||||
-rw-r--r-- | kernel/rcutree_trace.c | 2 | ||||
-rw-r--r-- | kernel/rwsem.c | 2 | ||||
-rw-r--r-- | kernel/sched.c | 1 | ||||
-rw-r--r-- | kernel/stop_machine.c | 2 | ||||
-rw-r--r-- | kernel/sys.c | 32 | ||||
-rw-r--r-- | kernel/taskstats.c | 2 | ||||
-rw-r--r-- | kernel/trace/trace.h | 2 | ||||
-rw-r--r-- | kernel/trace/trace_mmiotrace.c | 2 |
27 files changed, 120 insertions, 105 deletions
diff --git a/kernel/Makefile b/kernel/Makefile index 2d64cfcc8b42..d06467fc8f7c 100644 --- a/kernel/Makefile +++ b/kernel/Makefile | |||
@@ -125,11 +125,10 @@ targets += config_data.gz | |||
125 | $(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE | 125 | $(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE |
126 | $(call if_changed,gzip) | 126 | $(call if_changed,gzip) |
127 | 127 | ||
128 | quiet_cmd_ikconfiggz = IKCFG $@ | 128 | filechk_ikconfiggz = (echo "static const char kernel_config_data[] __used = MAGIC_START"; cat $< | scripts/bin2c; echo "MAGIC_END;") |
129 | cmd_ikconfiggz = (echo "static const char kernel_config_data[] __used = MAGIC_START"; cat $< | scripts/bin2c; echo "MAGIC_END;") > $@ | ||
130 | targets += config_data.h | 129 | targets += config_data.h |
131 | $(obj)/config_data.h: $(obj)/config_data.gz FORCE | 130 | $(obj)/config_data.h: $(obj)/config_data.gz FORCE |
132 | $(call if_changed,ikconfiggz) | 131 | $(call filechk,ikconfiggz) |
133 | 132 | ||
134 | $(obj)/time.o: $(obj)/timeconst.h | 133 | $(obj)/time.o: $(obj)/timeconst.h |
135 | 134 | ||
diff --git a/kernel/audit.c b/kernel/audit.c index 52501b5d4902..0a1355ca3d79 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -43,7 +43,7 @@ | |||
43 | 43 | ||
44 | #include <linux/init.h> | 44 | #include <linux/init.h> |
45 | #include <asm/types.h> | 45 | #include <asm/types.h> |
46 | #include <asm/atomic.h> | 46 | #include <linux/atomic.h> |
47 | #include <linux/mm.h> | 47 | #include <linux/mm.h> |
48 | #include <linux/module.h> | 48 | #include <linux/module.h> |
49 | #include <linux/slab.h> | 49 | #include <linux/slab.h> |
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 00d79df03e76..ce4b054acee5 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -44,7 +44,7 @@ | |||
44 | 44 | ||
45 | #include <linux/init.h> | 45 | #include <linux/init.h> |
46 | #include <asm/types.h> | 46 | #include <asm/types.h> |
47 | #include <asm/atomic.h> | 47 | #include <linux/atomic.h> |
48 | #include <linux/fs.h> | 48 | #include <linux/fs.h> |
49 | #include <linux/namei.h> | 49 | #include <linux/namei.h> |
50 | #include <linux/mm.h> | 50 | #include <linux/mm.h> |
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index e1c72c0f512b..984458035d4a 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -59,7 +59,7 @@ | |||
59 | #include <linux/poll.h> | 59 | #include <linux/poll.h> |
60 | #include <linux/flex_array.h> /* used in cgroup_attach_proc */ | 60 | #include <linux/flex_array.h> /* used in cgroup_attach_proc */ |
61 | 61 | ||
62 | #include <asm/atomic.h> | 62 | #include <linux/atomic.h> |
63 | 63 | ||
64 | static DEFINE_MUTEX(cgroup_mutex); | 64 | static DEFINE_MUTEX(cgroup_mutex); |
65 | 65 | ||
@@ -1697,7 +1697,6 @@ int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen) | |||
1697 | { | 1697 | { |
1698 | char *start; | 1698 | char *start; |
1699 | struct dentry *dentry = rcu_dereference_check(cgrp->dentry, | 1699 | struct dentry *dentry = rcu_dereference_check(cgrp->dentry, |
1700 | rcu_read_lock_held() || | ||
1701 | cgroup_lock_is_held()); | 1700 | cgroup_lock_is_held()); |
1702 | 1701 | ||
1703 | if (!dentry || cgrp == dummytop) { | 1702 | if (!dentry || cgrp == dummytop) { |
@@ -1723,7 +1722,6 @@ int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen) | |||
1723 | break; | 1722 | break; |
1724 | 1723 | ||
1725 | dentry = rcu_dereference_check(cgrp->dentry, | 1724 | dentry = rcu_dereference_check(cgrp->dentry, |
1726 | rcu_read_lock_held() || | ||
1727 | cgroup_lock_is_held()); | 1725 | cgroup_lock_is_held()); |
1728 | if (!cgrp->parent) | 1726 | if (!cgrp->parent) |
1729 | continue; | 1727 | continue; |
@@ -4814,8 +4812,7 @@ unsigned short css_id(struct cgroup_subsys_state *css) | |||
4814 | * on this or this is under rcu_read_lock(). Once css->id is allocated, | 4812 | * on this or this is under rcu_read_lock(). Once css->id is allocated, |
4815 | * it's unchanged until freed. | 4813 | * it's unchanged until freed. |
4816 | */ | 4814 | */ |
4817 | cssid = rcu_dereference_check(css->id, | 4815 | cssid = rcu_dereference_check(css->id, atomic_read(&css->refcnt)); |
4818 | rcu_read_lock_held() || atomic_read(&css->refcnt)); | ||
4819 | 4816 | ||
4820 | if (cssid) | 4817 | if (cssid) |
4821 | return cssid->id; | 4818 | return cssid->id; |
@@ -4827,8 +4824,7 @@ unsigned short css_depth(struct cgroup_subsys_state *css) | |||
4827 | { | 4824 | { |
4828 | struct css_id *cssid; | 4825 | struct css_id *cssid; |
4829 | 4826 | ||
4830 | cssid = rcu_dereference_check(css->id, | 4827 | cssid = rcu_dereference_check(css->id, atomic_read(&css->refcnt)); |
4831 | rcu_read_lock_held() || atomic_read(&css->refcnt)); | ||
4832 | 4828 | ||
4833 | if (cssid) | 4829 | if (cssid) |
4834 | return cssid->depth; | 4830 | return cssid->depth; |
diff --git a/kernel/configs.c b/kernel/configs.c index b4066b44a99d..42e8fa075eed 100644 --- a/kernel/configs.c +++ b/kernel/configs.c | |||
@@ -92,8 +92,8 @@ static void __exit ikconfig_cleanup(void) | |||
92 | module_init(ikconfig_init); | 92 | module_init(ikconfig_init); |
93 | module_exit(ikconfig_cleanup); | 93 | module_exit(ikconfig_cleanup); |
94 | 94 | ||
95 | #endif /* CONFIG_IKCONFIG_PROC */ | ||
96 | |||
95 | MODULE_LICENSE("GPL"); | 97 | MODULE_LICENSE("GPL"); |
96 | MODULE_AUTHOR("Randy Dunlap"); | 98 | MODULE_AUTHOR("Randy Dunlap"); |
97 | MODULE_DESCRIPTION("Echo the kernel .config file used to build the kernel"); | 99 | MODULE_DESCRIPTION("Echo the kernel .config file used to build the kernel"); |
98 | |||
99 | #endif /* CONFIG_IKCONFIG_PROC */ | ||
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 9c9b7545c810..10131fdaff70 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -55,7 +55,7 @@ | |||
55 | #include <linux/sort.h> | 55 | #include <linux/sort.h> |
56 | 56 | ||
57 | #include <asm/uaccess.h> | 57 | #include <asm/uaccess.h> |
58 | #include <asm/atomic.h> | 58 | #include <linux/atomic.h> |
59 | #include <linux/mutex.h> | 59 | #include <linux/mutex.h> |
60 | #include <linux/workqueue.h> | 60 | #include <linux/workqueue.h> |
61 | #include <linux/cgroup.h> | 61 | #include <linux/cgroup.h> |
@@ -2460,11 +2460,19 @@ static int cpuset_spread_node(int *rotor) | |||
2460 | 2460 | ||
2461 | int cpuset_mem_spread_node(void) | 2461 | int cpuset_mem_spread_node(void) |
2462 | { | 2462 | { |
2463 | if (current->cpuset_mem_spread_rotor == NUMA_NO_NODE) | ||
2464 | current->cpuset_mem_spread_rotor = | ||
2465 | node_random(¤t->mems_allowed); | ||
2466 | |||
2463 | return cpuset_spread_node(¤t->cpuset_mem_spread_rotor); | 2467 | return cpuset_spread_node(¤t->cpuset_mem_spread_rotor); |
2464 | } | 2468 | } |
2465 | 2469 | ||
2466 | int cpuset_slab_spread_node(void) | 2470 | int cpuset_slab_spread_node(void) |
2467 | { | 2471 | { |
2472 | if (current->cpuset_slab_spread_rotor == NUMA_NO_NODE) | ||
2473 | current->cpuset_slab_spread_rotor = | ||
2474 | node_random(¤t->mems_allowed); | ||
2475 | |||
2468 | return cpuset_spread_node(¤t->cpuset_slab_spread_rotor); | 2476 | return cpuset_spread_node(¤t->cpuset_slab_spread_rotor); |
2469 | } | 2477 | } |
2470 | 2478 | ||
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c index bad6786dee88..0d7c08784efb 100644 --- a/kernel/debug/debug_core.c +++ b/kernel/debug/debug_core.c | |||
@@ -51,7 +51,7 @@ | |||
51 | 51 | ||
52 | #include <asm/cacheflush.h> | 52 | #include <asm/cacheflush.h> |
53 | #include <asm/byteorder.h> | 53 | #include <asm/byteorder.h> |
54 | #include <asm/atomic.h> | 54 | #include <linux/atomic.h> |
55 | #include <asm/system.h> | 55 | #include <asm/system.h> |
56 | 56 | ||
57 | #include "debug_core.h" | 57 | #include "debug_core.h" |
diff --git a/kernel/exit.c b/kernel/exit.c index 73bb192a3d32..2913b3509d42 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -85,7 +85,6 @@ static void __exit_signal(struct task_struct *tsk) | |||
85 | struct tty_struct *uninitialized_var(tty); | 85 | struct tty_struct *uninitialized_var(tty); |
86 | 86 | ||
87 | sighand = rcu_dereference_check(tsk->sighand, | 87 | sighand = rcu_dereference_check(tsk->sighand, |
88 | rcu_read_lock_held() || | ||
89 | lockdep_tasklist_lock_is_held()); | 88 | lockdep_tasklist_lock_is_held()); |
90 | spin_lock(&sighand->siglock); | 89 | spin_lock(&sighand->siglock); |
91 | 90 | ||
@@ -898,7 +897,6 @@ NORET_TYPE void do_exit(long code) | |||
898 | 897 | ||
899 | profile_task_exit(tsk); | 898 | profile_task_exit(tsk); |
900 | 899 | ||
901 | WARN_ON(atomic_read(&tsk->fs_excl)); | ||
902 | WARN_ON(blk_needs_flush_plug(tsk)); | 900 | WARN_ON(blk_needs_flush_plug(tsk)); |
903 | 901 | ||
904 | if (unlikely(in_interrupt())) | 902 | if (unlikely(in_interrupt())) |
@@ -982,6 +980,7 @@ NORET_TYPE void do_exit(long code) | |||
982 | trace_sched_process_exit(tsk); | 980 | trace_sched_process_exit(tsk); |
983 | 981 | ||
984 | exit_sem(tsk); | 982 | exit_sem(tsk); |
983 | exit_shm(tsk); | ||
985 | exit_files(tsk); | 984 | exit_files(tsk); |
986 | exit_fs(tsk); | 985 | exit_fs(tsk); |
987 | check_stack_usage(); | 986 | check_stack_usage(); |
diff --git a/kernel/fork.c b/kernel/fork.c index aeae5b11b62e..e7ceaca89609 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -80,7 +80,7 @@ | |||
80 | * Protected counters by write_lock_irq(&tasklist_lock) | 80 | * Protected counters by write_lock_irq(&tasklist_lock) |
81 | */ | 81 | */ |
82 | unsigned long total_forks; /* Handle normal Linux uptimes. */ | 82 | unsigned long total_forks; /* Handle normal Linux uptimes. */ |
83 | int nr_threads; /* The idle threads do not count.. */ | 83 | int nr_threads; /* The idle threads do not count.. */ |
84 | 84 | ||
85 | int max_threads; /* tunable limit on nr_threads */ | 85 | int max_threads; /* tunable limit on nr_threads */ |
86 | 86 | ||
@@ -232,7 +232,7 @@ void __init fork_init(unsigned long mempages) | |||
232 | /* | 232 | /* |
233 | * we need to allow at least 20 threads to boot a system | 233 | * we need to allow at least 20 threads to boot a system |
234 | */ | 234 | */ |
235 | if(max_threads < 20) | 235 | if (max_threads < 20) |
236 | max_threads = 20; | 236 | max_threads = 20; |
237 | 237 | ||
238 | init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2; | 238 | init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2; |
@@ -268,7 +268,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) | |||
268 | return NULL; | 268 | return NULL; |
269 | } | 269 | } |
270 | 270 | ||
271 | err = arch_dup_task_struct(tsk, orig); | 271 | err = arch_dup_task_struct(tsk, orig); |
272 | if (err) | 272 | if (err) |
273 | goto out; | 273 | goto out; |
274 | 274 | ||
@@ -288,9 +288,11 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) | |||
288 | tsk->stack_canary = get_random_int(); | 288 | tsk->stack_canary = get_random_int(); |
289 | #endif | 289 | #endif |
290 | 290 | ||
291 | /* One for us, one for whoever does the "release_task()" (usually parent) */ | 291 | /* |
292 | atomic_set(&tsk->usage,2); | 292 | * One for us, one for whoever does the "release_task()" (usually |
293 | atomic_set(&tsk->fs_excl, 0); | 293 | * parent) |
294 | */ | ||
295 | atomic_set(&tsk->usage, 2); | ||
294 | #ifdef CONFIG_BLK_DEV_IO_TRACE | 296 | #ifdef CONFIG_BLK_DEV_IO_TRACE |
295 | tsk->btrace_seq = 0; | 297 | tsk->btrace_seq = 0; |
296 | #endif | 298 | #endif |
@@ -438,7 +440,7 @@ fail_nomem: | |||
438 | goto out; | 440 | goto out; |
439 | } | 441 | } |
440 | 442 | ||
441 | static inline int mm_alloc_pgd(struct mm_struct * mm) | 443 | static inline int mm_alloc_pgd(struct mm_struct *mm) |
442 | { | 444 | { |
443 | mm->pgd = pgd_alloc(mm); | 445 | mm->pgd = pgd_alloc(mm); |
444 | if (unlikely(!mm->pgd)) | 446 | if (unlikely(!mm->pgd)) |
@@ -446,7 +448,7 @@ static inline int mm_alloc_pgd(struct mm_struct * mm) | |||
446 | return 0; | 448 | return 0; |
447 | } | 449 | } |
448 | 450 | ||
449 | static inline void mm_free_pgd(struct mm_struct * mm) | 451 | static inline void mm_free_pgd(struct mm_struct *mm) |
450 | { | 452 | { |
451 | pgd_free(mm, mm->pgd); | 453 | pgd_free(mm, mm->pgd); |
452 | } | 454 | } |
@@ -483,7 +485,7 @@ static void mm_init_aio(struct mm_struct *mm) | |||
483 | #endif | 485 | #endif |
484 | } | 486 | } |
485 | 487 | ||
486 | static struct mm_struct * mm_init(struct mm_struct * mm, struct task_struct *p) | 488 | static struct mm_struct *mm_init(struct mm_struct *mm, struct task_struct *p) |
487 | { | 489 | { |
488 | atomic_set(&mm->mm_users, 1); | 490 | atomic_set(&mm->mm_users, 1); |
489 | atomic_set(&mm->mm_count, 1); | 491 | atomic_set(&mm->mm_count, 1); |
@@ -514,9 +516,9 @@ static struct mm_struct * mm_init(struct mm_struct * mm, struct task_struct *p) | |||
514 | /* | 516 | /* |
515 | * Allocate and initialize an mm_struct. | 517 | * Allocate and initialize an mm_struct. |
516 | */ | 518 | */ |
517 | struct mm_struct * mm_alloc(void) | 519 | struct mm_struct *mm_alloc(void) |
518 | { | 520 | { |
519 | struct mm_struct * mm; | 521 | struct mm_struct *mm; |
520 | 522 | ||
521 | mm = allocate_mm(); | 523 | mm = allocate_mm(); |
522 | if (!mm) | 524 | if (!mm) |
@@ -584,7 +586,7 @@ void added_exe_file_vma(struct mm_struct *mm) | |||
584 | void removed_exe_file_vma(struct mm_struct *mm) | 586 | void removed_exe_file_vma(struct mm_struct *mm) |
585 | { | 587 | { |
586 | mm->num_exe_file_vmas--; | 588 | mm->num_exe_file_vmas--; |
587 | if ((mm->num_exe_file_vmas == 0) && mm->exe_file){ | 589 | if ((mm->num_exe_file_vmas == 0) && mm->exe_file) { |
588 | fput(mm->exe_file); | 590 | fput(mm->exe_file); |
589 | mm->exe_file = NULL; | 591 | mm->exe_file = NULL; |
590 | } | 592 | } |
@@ -776,9 +778,9 @@ fail_nocontext: | |||
776 | return NULL; | 778 | return NULL; |
777 | } | 779 | } |
778 | 780 | ||
779 | static int copy_mm(unsigned long clone_flags, struct task_struct * tsk) | 781 | static int copy_mm(unsigned long clone_flags, struct task_struct *tsk) |
780 | { | 782 | { |
781 | struct mm_struct * mm, *oldmm; | 783 | struct mm_struct *mm, *oldmm; |
782 | int retval; | 784 | int retval; |
783 | 785 | ||
784 | tsk->min_flt = tsk->maj_flt = 0; | 786 | tsk->min_flt = tsk->maj_flt = 0; |
@@ -845,7 +847,7 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk) | |||
845 | return 0; | 847 | return 0; |
846 | } | 848 | } |
847 | 849 | ||
848 | static int copy_files(unsigned long clone_flags, struct task_struct * tsk) | 850 | static int copy_files(unsigned long clone_flags, struct task_struct *tsk) |
849 | { | 851 | { |
850 | struct files_struct *oldf, *newf; | 852 | struct files_struct *oldf, *newf; |
851 | int error = 0; | 853 | int error = 0; |
@@ -1167,13 +1169,17 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1167 | cgroup_fork(p); | 1169 | cgroup_fork(p); |
1168 | #ifdef CONFIG_NUMA | 1170 | #ifdef CONFIG_NUMA |
1169 | p->mempolicy = mpol_dup(p->mempolicy); | 1171 | p->mempolicy = mpol_dup(p->mempolicy); |
1170 | if (IS_ERR(p->mempolicy)) { | 1172 | if (IS_ERR(p->mempolicy)) { |
1171 | retval = PTR_ERR(p->mempolicy); | 1173 | retval = PTR_ERR(p->mempolicy); |
1172 | p->mempolicy = NULL; | 1174 | p->mempolicy = NULL; |
1173 | goto bad_fork_cleanup_cgroup; | 1175 | goto bad_fork_cleanup_cgroup; |
1174 | } | 1176 | } |
1175 | mpol_fix_fork_child_flag(p); | 1177 | mpol_fix_fork_child_flag(p); |
1176 | #endif | 1178 | #endif |
1179 | #ifdef CONFIG_CPUSETS | ||
1180 | p->cpuset_mem_spread_rotor = NUMA_NO_NODE; | ||
1181 | p->cpuset_slab_spread_rotor = NUMA_NO_NODE; | ||
1182 | #endif | ||
1177 | #ifdef CONFIG_TRACE_IRQFLAGS | 1183 | #ifdef CONFIG_TRACE_IRQFLAGS |
1178 | p->irq_events = 0; | 1184 | p->irq_events = 0; |
1179 | #ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW | 1185 | #ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW |
@@ -1213,25 +1219,33 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1213 | retval = perf_event_init_task(p); | 1219 | retval = perf_event_init_task(p); |
1214 | if (retval) | 1220 | if (retval) |
1215 | goto bad_fork_cleanup_policy; | 1221 | goto bad_fork_cleanup_policy; |
1216 | 1222 | retval = audit_alloc(p); | |
1217 | if ((retval = audit_alloc(p))) | 1223 | if (retval) |
1218 | goto bad_fork_cleanup_policy; | 1224 | goto bad_fork_cleanup_policy; |
1219 | /* copy all the process information */ | 1225 | /* copy all the process information */ |
1220 | if ((retval = copy_semundo(clone_flags, p))) | 1226 | retval = copy_semundo(clone_flags, p); |
1227 | if (retval) | ||
1221 | goto bad_fork_cleanup_audit; | 1228 | goto bad_fork_cleanup_audit; |
1222 | if ((retval = copy_files(clone_flags, p))) | 1229 | retval = copy_files(clone_flags, p); |
1230 | if (retval) | ||
1223 | goto bad_fork_cleanup_semundo; | 1231 | goto bad_fork_cleanup_semundo; |
1224 | if ((retval = copy_fs(clone_flags, p))) | 1232 | retval = copy_fs(clone_flags, p); |
1233 | if (retval) | ||
1225 | goto bad_fork_cleanup_files; | 1234 | goto bad_fork_cleanup_files; |
1226 | if ((retval = copy_sighand(clone_flags, p))) | 1235 | retval = copy_sighand(clone_flags, p); |
1236 | if (retval) | ||
1227 | goto bad_fork_cleanup_fs; | 1237 | goto bad_fork_cleanup_fs; |
1228 | if ((retval = copy_signal(clone_flags, p))) | 1238 | retval = copy_signal(clone_flags, p); |
1239 | if (retval) | ||
1229 | goto bad_fork_cleanup_sighand; | 1240 | goto bad_fork_cleanup_sighand; |
1230 | if ((retval = copy_mm(clone_flags, p))) | 1241 | retval = copy_mm(clone_flags, p); |
1242 | if (retval) | ||
1231 | goto bad_fork_cleanup_signal; | 1243 | goto bad_fork_cleanup_signal; |
1232 | if ((retval = copy_namespaces(clone_flags, p))) | 1244 | retval = copy_namespaces(clone_flags, p); |
1245 | if (retval) | ||
1233 | goto bad_fork_cleanup_mm; | 1246 | goto bad_fork_cleanup_mm; |
1234 | if ((retval = copy_io(clone_flags, p))) | 1247 | retval = copy_io(clone_flags, p); |
1248 | if (retval) | ||
1235 | goto bad_fork_cleanup_namespaces; | 1249 | goto bad_fork_cleanup_namespaces; |
1236 | retval = copy_thread(clone_flags, stack_start, stack_size, p, regs); | 1250 | retval = copy_thread(clone_flags, stack_start, stack_size, p, regs); |
1237 | if (retval) | 1251 | if (retval) |
@@ -1253,7 +1267,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1253 | /* | 1267 | /* |
1254 | * Clear TID on mm_release()? | 1268 | * Clear TID on mm_release()? |
1255 | */ | 1269 | */ |
1256 | p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr: NULL; | 1270 | p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr : NULL; |
1257 | #ifdef CONFIG_BLOCK | 1271 | #ifdef CONFIG_BLOCK |
1258 | p->plug = NULL; | 1272 | p->plug = NULL; |
1259 | #endif | 1273 | #endif |
@@ -1321,7 +1335,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1321 | * it's process group. | 1335 | * it's process group. |
1322 | * A fatal signal pending means that current will exit, so the new | 1336 | * A fatal signal pending means that current will exit, so the new |
1323 | * thread can't slip out of an OOM kill (or normal SIGKILL). | 1337 | * thread can't slip out of an OOM kill (or normal SIGKILL). |
1324 | */ | 1338 | */ |
1325 | recalc_sigpending(); | 1339 | recalc_sigpending(); |
1326 | if (signal_pending(current)) { | 1340 | if (signal_pending(current)) { |
1327 | spin_unlock(¤t->sighand->siglock); | 1341 | spin_unlock(¤t->sighand->siglock); |
@@ -1682,12 +1696,14 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) | |||
1682 | */ | 1696 | */ |
1683 | if (unshare_flags & (CLONE_NEWIPC|CLONE_SYSVSEM)) | 1697 | if (unshare_flags & (CLONE_NEWIPC|CLONE_SYSVSEM)) |
1684 | do_sysvsem = 1; | 1698 | do_sysvsem = 1; |
1685 | if ((err = unshare_fs(unshare_flags, &new_fs))) | 1699 | err = unshare_fs(unshare_flags, &new_fs); |
1700 | if (err) | ||
1686 | goto bad_unshare_out; | 1701 | goto bad_unshare_out; |
1687 | if ((err = unshare_fd(unshare_flags, &new_fd))) | 1702 | err = unshare_fd(unshare_flags, &new_fd); |
1703 | if (err) | ||
1688 | goto bad_unshare_cleanup_fs; | 1704 | goto bad_unshare_cleanup_fs; |
1689 | if ((err = unshare_nsproxy_namespaces(unshare_flags, &new_nsproxy, | 1705 | err = unshare_nsproxy_namespaces(unshare_flags, &new_nsproxy, new_fs); |
1690 | new_fs))) | 1706 | if (err) |
1691 | goto bad_unshare_cleanup_fd; | 1707 | goto bad_unshare_cleanup_fd; |
1692 | 1708 | ||
1693 | if (new_fs || new_fd || do_sysvsem || new_nsproxy) { | 1709 | if (new_fs || new_fd || do_sysvsem || new_nsproxy) { |
diff --git a/kernel/futex.c b/kernel/futex.c index 3fbc76cbb9aa..0a308970c24a 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -355,8 +355,8 @@ static int fault_in_user_writeable(u32 __user *uaddr) | |||
355 | int ret; | 355 | int ret; |
356 | 356 | ||
357 | down_read(&mm->mmap_sem); | 357 | down_read(&mm->mmap_sem); |
358 | ret = get_user_pages(current, mm, (unsigned long)uaddr, | 358 | ret = fixup_user_fault(current, mm, (unsigned long)uaddr, |
359 | 1, 1, 0, NULL, NULL); | 359 | FAULT_FLAG_WRITE); |
360 | up_read(&mm->mmap_sem); | 360 | up_read(&mm->mmap_sem); |
361 | 361 | ||
362 | return ret < 0 ? ret : 0; | 362 | return ret < 0 ? ret : 0; |
diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig index 5bf924d80b5c..a92028196cc1 100644 --- a/kernel/gcov/Kconfig +++ b/kernel/gcov/Kconfig | |||
@@ -3,7 +3,7 @@ menu "GCOV-based kernel profiling" | |||
3 | config GCOV_KERNEL | 3 | config GCOV_KERNEL |
4 | bool "Enable gcov-based kernel profiling" | 4 | bool "Enable gcov-based kernel profiling" |
5 | depends on DEBUG_FS | 5 | depends on DEBUG_FS |
6 | select CONSTRUCTORS | 6 | select CONSTRUCTORS if !UML |
7 | default n | 7 | default n |
8 | ---help--- | 8 | ---help--- |
9 | This option enables gcov-based code profiling (e.g. for code coverage | 9 | This option enables gcov-based code profiling (e.g. for code coverage |
diff --git a/kernel/irq/devres.c b/kernel/irq/devres.c index 1ef4ffcdfa55..bd8e788d71e0 100644 --- a/kernel/irq/devres.c +++ b/kernel/irq/devres.c | |||
@@ -87,8 +87,8 @@ void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id) | |||
87 | { | 87 | { |
88 | struct irq_devres match_data = { irq, dev_id }; | 88 | struct irq_devres match_data = { irq, dev_id }; |
89 | 89 | ||
90 | free_irq(irq, dev_id); | ||
91 | WARN_ON(devres_destroy(dev, devm_irq_release, devm_irq_match, | 90 | WARN_ON(devres_destroy(dev, devm_irq_release, devm_irq_match, |
92 | &match_data)); | 91 | &match_data)); |
92 | free_irq(irq, dev_id); | ||
93 | } | 93 | } |
94 | EXPORT_SYMBOL(devm_free_irq); | 94 | EXPORT_SYMBOL(devm_free_irq); |
diff --git a/kernel/kexec.c b/kernel/kexec.c index 8d814cbc8109..296fbc84d659 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
@@ -1095,7 +1095,7 @@ size_t crash_get_memory_size(void) | |||
1095 | size_t size = 0; | 1095 | size_t size = 0; |
1096 | mutex_lock(&kexec_mutex); | 1096 | mutex_lock(&kexec_mutex); |
1097 | if (crashk_res.end != crashk_res.start) | 1097 | if (crashk_res.end != crashk_res.start) |
1098 | size = crashk_res.end - crashk_res.start + 1; | 1098 | size = resource_size(&crashk_res); |
1099 | mutex_unlock(&kexec_mutex); | 1099 | mutex_unlock(&kexec_mutex); |
1100 | return size; | 1100 | return size; |
1101 | } | 1101 | } |
diff --git a/kernel/notifier.c b/kernel/notifier.c index 2488ba7eb568..8d7b435806c9 100644 --- a/kernel/notifier.c +++ b/kernel/notifier.c | |||
@@ -525,37 +525,6 @@ void srcu_init_notifier_head(struct srcu_notifier_head *nh) | |||
525 | } | 525 | } |
526 | EXPORT_SYMBOL_GPL(srcu_init_notifier_head); | 526 | EXPORT_SYMBOL_GPL(srcu_init_notifier_head); |
527 | 527 | ||
528 | /** | ||
529 | * register_reboot_notifier - Register function to be called at reboot time | ||
530 | * @nb: Info about notifier function to be called | ||
531 | * | ||
532 | * Registers a function with the list of functions | ||
533 | * to be called at reboot time. | ||
534 | * | ||
535 | * Currently always returns zero, as blocking_notifier_chain_register() | ||
536 | * always returns zero. | ||
537 | */ | ||
538 | int register_reboot_notifier(struct notifier_block *nb) | ||
539 | { | ||
540 | return blocking_notifier_chain_register(&reboot_notifier_list, nb); | ||
541 | } | ||
542 | EXPORT_SYMBOL(register_reboot_notifier); | ||
543 | |||
544 | /** | ||
545 | * unregister_reboot_notifier - Unregister previously registered reboot notifier | ||
546 | * @nb: Hook to be unregistered | ||
547 | * | ||
548 | * Unregisters a previously registered reboot | ||
549 | * notifier function. | ||
550 | * | ||
551 | * Returns zero on success, or %-ENOENT on failure. | ||
552 | */ | ||
553 | int unregister_reboot_notifier(struct notifier_block *nb) | ||
554 | { | ||
555 | return blocking_notifier_chain_unregister(&reboot_notifier_list, nb); | ||
556 | } | ||
557 | EXPORT_SYMBOL(unregister_reboot_notifier); | ||
558 | |||
559 | static ATOMIC_NOTIFIER_HEAD(die_chain); | 528 | static ATOMIC_NOTIFIER_HEAD(die_chain); |
560 | 529 | ||
561 | int notrace __kprobes notify_die(enum die_val val, const char *str, | 530 | int notrace __kprobes notify_die(enum die_val val, const char *str, |
diff --git a/kernel/panic.c b/kernel/panic.c index 69231670eb95..d7bb6974efb5 100644 --- a/kernel/panic.c +++ b/kernel/panic.c | |||
@@ -119,6 +119,8 @@ NORET_TYPE void panic(const char * fmt, ...) | |||
119 | } | 119 | } |
120 | mdelay(PANIC_TIMER_STEP); | 120 | mdelay(PANIC_TIMER_STEP); |
121 | } | 121 | } |
122 | } | ||
123 | if (panic_timeout != 0) { | ||
122 | /* | 124 | /* |
123 | * This will not be a clean reboot, with everything | 125 | * This will not be a clean reboot, with everything |
124 | * shutting down. But if there is a chance of | 126 | * shutting down. But if there is a chance of |
diff --git a/kernel/pid.c b/kernel/pid.c index 57a8346a270e..e432057f3b21 100644 --- a/kernel/pid.c +++ b/kernel/pid.c | |||
@@ -405,7 +405,6 @@ struct task_struct *pid_task(struct pid *pid, enum pid_type type) | |||
405 | if (pid) { | 405 | if (pid) { |
406 | struct hlist_node *first; | 406 | struct hlist_node *first; |
407 | first = rcu_dereference_check(hlist_first_rcu(&pid->tasks[type]), | 407 | first = rcu_dereference_check(hlist_first_rcu(&pid->tasks[type]), |
408 | rcu_read_lock_held() || | ||
409 | lockdep_tasklist_lock_is_held()); | 408 | lockdep_tasklist_lock_is_held()); |
410 | if (first) | 409 | if (first) |
411 | result = hlist_entry(first, struct task_struct, pids[(type)].node); | 410 | result = hlist_entry(first, struct task_struct, pids[(type)].node); |
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index 7b856b3458d2..b1914cb9095c 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig | |||
@@ -193,8 +193,8 @@ config APM_EMULATION | |||
193 | notification of APM "events" (e.g. battery status change). | 193 | notification of APM "events" (e.g. battery status change). |
194 | 194 | ||
195 | In order to use APM, you will need supporting software. For location | 195 | In order to use APM, you will need supporting software. For location |
196 | and more information, read <file:Documentation/power/pm.txt> and the | 196 | and more information, read <file:Documentation/power/apm-acpi.txt> |
197 | Battery Powered Linux mini-HOWTO, available from | 197 | and the Battery Powered Linux mini-HOWTO, available from |
198 | <http://www.tldp.org/docs.html#howto>. | 198 | <http://www.tldp.org/docs.html#howto>. |
199 | 199 | ||
200 | This driver does not spin down disk drives (see the hdparm(8) | 200 | This driver does not spin down disk drives (see the hdparm(8) |
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index 7784bd216b6a..ddddb320be61 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #include <linux/smp.h> | 37 | #include <linux/smp.h> |
38 | #include <linux/interrupt.h> | 38 | #include <linux/interrupt.h> |
39 | #include <linux/sched.h> | 39 | #include <linux/sched.h> |
40 | #include <asm/atomic.h> | 40 | #include <linux/atomic.h> |
41 | #include <linux/bitops.h> | 41 | #include <linux/bitops.h> |
42 | #include <linux/percpu.h> | 42 | #include <linux/percpu.h> |
43 | #include <linux/notifier.h> | 43 | #include <linux/notifier.h> |
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c index 2e138db03382..98f51b13bb7e 100644 --- a/kernel/rcutorture.c +++ b/kernel/rcutorture.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <linux/rcupdate.h> | 33 | #include <linux/rcupdate.h> |
34 | #include <linux/interrupt.h> | 34 | #include <linux/interrupt.h> |
35 | #include <linux/sched.h> | 35 | #include <linux/sched.h> |
36 | #include <asm/atomic.h> | 36 | #include <linux/atomic.h> |
37 | #include <linux/bitops.h> | 37 | #include <linux/bitops.h> |
38 | #include <linux/completion.h> | 38 | #include <linux/completion.h> |
39 | #include <linux/moduleparam.h> | 39 | #include <linux/moduleparam.h> |
@@ -941,7 +941,6 @@ static void rcu_torture_timer(unsigned long unused) | |||
941 | idx = cur_ops->readlock(); | 941 | idx = cur_ops->readlock(); |
942 | completed = cur_ops->completed(); | 942 | completed = cur_ops->completed(); |
943 | p = rcu_dereference_check(rcu_torture_current, | 943 | p = rcu_dereference_check(rcu_torture_current, |
944 | rcu_read_lock_held() || | ||
945 | rcu_read_lock_bh_held() || | 944 | rcu_read_lock_bh_held() || |
946 | rcu_read_lock_sched_held() || | 945 | rcu_read_lock_sched_held() || |
947 | srcu_read_lock_held(&srcu_ctl)); | 946 | srcu_read_lock_held(&srcu_ctl)); |
@@ -1002,7 +1001,6 @@ rcu_torture_reader(void *arg) | |||
1002 | idx = cur_ops->readlock(); | 1001 | idx = cur_ops->readlock(); |
1003 | completed = cur_ops->completed(); | 1002 | completed = cur_ops->completed(); |
1004 | p = rcu_dereference_check(rcu_torture_current, | 1003 | p = rcu_dereference_check(rcu_torture_current, |
1005 | rcu_read_lock_held() || | ||
1006 | rcu_read_lock_bh_held() || | 1004 | rcu_read_lock_bh_held() || |
1007 | rcu_read_lock_sched_held() || | 1005 | rcu_read_lock_sched_held() || |
1008 | srcu_read_lock_held(&srcu_ctl)); | 1006 | srcu_read_lock_held(&srcu_ctl)); |
diff --git a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c index 4e144876dc68..3b0c0986afc0 100644 --- a/kernel/rcutree_trace.c +++ b/kernel/rcutree_trace.c | |||
@@ -31,7 +31,7 @@ | |||
31 | #include <linux/rcupdate.h> | 31 | #include <linux/rcupdate.h> |
32 | #include <linux/interrupt.h> | 32 | #include <linux/interrupt.h> |
33 | #include <linux/sched.h> | 33 | #include <linux/sched.h> |
34 | #include <asm/atomic.h> | 34 | #include <linux/atomic.h> |
35 | #include <linux/bitops.h> | 35 | #include <linux/bitops.h> |
36 | #include <linux/module.h> | 36 | #include <linux/module.h> |
37 | #include <linux/completion.h> | 37 | #include <linux/completion.h> |
diff --git a/kernel/rwsem.c b/kernel/rwsem.c index 176e5e56ffab..9f48f3d82e9b 100644 --- a/kernel/rwsem.c +++ b/kernel/rwsem.c | |||
@@ -11,7 +11,7 @@ | |||
11 | #include <linux/rwsem.h> | 11 | #include <linux/rwsem.h> |
12 | 12 | ||
13 | #include <asm/system.h> | 13 | #include <asm/system.h> |
14 | #include <asm/atomic.h> | 14 | #include <linux/atomic.h> |
15 | 15 | ||
16 | /* | 16 | /* |
17 | * lock for reading | 17 | * lock for reading |
diff --git a/kernel/sched.c b/kernel/sched.c index 751a7cc6a5cd..ccacdbdecf45 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -590,7 +590,6 @@ static inline int cpu_of(struct rq *rq) | |||
590 | 590 | ||
591 | #define rcu_dereference_check_sched_domain(p) \ | 591 | #define rcu_dereference_check_sched_domain(p) \ |
592 | rcu_dereference_check((p), \ | 592 | rcu_dereference_check((p), \ |
593 | rcu_read_lock_held() || \ | ||
594 | lockdep_is_held(&sched_domains_mutex)) | 593 | lockdep_is_held(&sched_domains_mutex)) |
595 | 594 | ||
596 | /* | 595 | /* |
diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c index c1124752e1d3..ba5070ce5765 100644 --- a/kernel/stop_machine.c +++ b/kernel/stop_machine.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/kallsyms.h> | 20 | #include <linux/kallsyms.h> |
21 | 21 | ||
22 | #include <asm/atomic.h> | 22 | #include <linux/atomic.h> |
23 | 23 | ||
24 | /* | 24 | /* |
25 | * Structure to determine completion condition and record errors. May | 25 | * Structure to determine completion condition and record errors. May |
diff --git a/kernel/sys.c b/kernel/sys.c index e4128b278f23..a101ba36c444 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -8,7 +8,6 @@ | |||
8 | #include <linux/mm.h> | 8 | #include <linux/mm.h> |
9 | #include <linux/utsname.h> | 9 | #include <linux/utsname.h> |
10 | #include <linux/mman.h> | 10 | #include <linux/mman.h> |
11 | #include <linux/notifier.h> | ||
12 | #include <linux/reboot.h> | 11 | #include <linux/reboot.h> |
13 | #include <linux/prctl.h> | 12 | #include <linux/prctl.h> |
14 | #include <linux/highuid.h> | 13 | #include <linux/highuid.h> |
@@ -320,6 +319,37 @@ void kernel_restart_prepare(char *cmd) | |||
320 | } | 319 | } |
321 | 320 | ||
322 | /** | 321 | /** |
322 | * register_reboot_notifier - Register function to be called at reboot time | ||
323 | * @nb: Info about notifier function to be called | ||
324 | * | ||
325 | * Registers a function with the list of functions | ||
326 | * to be called at reboot time. | ||
327 | * | ||
328 | * Currently always returns zero, as blocking_notifier_chain_register() | ||
329 | * always returns zero. | ||
330 | */ | ||
331 | int register_reboot_notifier(struct notifier_block *nb) | ||
332 | { | ||
333 | return blocking_notifier_chain_register(&reboot_notifier_list, nb); | ||
334 | } | ||
335 | EXPORT_SYMBOL(register_reboot_notifier); | ||
336 | |||
337 | /** | ||
338 | * unregister_reboot_notifier - Unregister previously registered reboot notifier | ||
339 | * @nb: Hook to be unregistered | ||
340 | * | ||
341 | * Unregisters a previously registered reboot | ||
342 | * notifier function. | ||
343 | * | ||
344 | * Returns zero on success, or %-ENOENT on failure. | ||
345 | */ | ||
346 | int unregister_reboot_notifier(struct notifier_block *nb) | ||
347 | { | ||
348 | return blocking_notifier_chain_unregister(&reboot_notifier_list, nb); | ||
349 | } | ||
350 | EXPORT_SYMBOL(unregister_reboot_notifier); | ||
351 | |||
352 | /** | ||
323 | * kernel_restart - reboot the system | 353 | * kernel_restart - reboot the system |
324 | * @cmd: pointer to buffer containing command to execute for restart | 354 | * @cmd: pointer to buffer containing command to execute for restart |
325 | * or %NULL | 355 | * or %NULL |
diff --git a/kernel/taskstats.c b/kernel/taskstats.c index fc0f22005417..d1db2880d1cf 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <linux/fs.h> | 28 | #include <linux/fs.h> |
29 | #include <linux/file.h> | 29 | #include <linux/file.h> |
30 | #include <net/genetlink.h> | 30 | #include <net/genetlink.h> |
31 | #include <asm/atomic.h> | 31 | #include <linux/atomic.h> |
32 | 32 | ||
33 | /* | 33 | /* |
34 | * Maximum length of a cpumask that can be specified in | 34 | * Maximum length of a cpumask that can be specified in |
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 3f381d0b20a8..616846bcfee5 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
@@ -2,7 +2,7 @@ | |||
2 | #define _LINUX_KERNEL_TRACE_H | 2 | #define _LINUX_KERNEL_TRACE_H |
3 | 3 | ||
4 | #include <linux/fs.h> | 4 | #include <linux/fs.h> |
5 | #include <asm/atomic.h> | 5 | #include <linux/atomic.h> |
6 | #include <linux/sched.h> | 6 | #include <linux/sched.h> |
7 | #include <linux/clocksource.h> | 7 | #include <linux/clocksource.h> |
8 | #include <linux/ring_buffer.h> | 8 | #include <linux/ring_buffer.h> |
diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c index 017fa376505d..fd3c8aae55e5 100644 --- a/kernel/trace/trace_mmiotrace.c +++ b/kernel/trace/trace_mmiotrace.c | |||
@@ -12,7 +12,7 @@ | |||
12 | #include <linux/slab.h> | 12 | #include <linux/slab.h> |
13 | #include <linux/time.h> | 13 | #include <linux/time.h> |
14 | 14 | ||
15 | #include <asm/atomic.h> | 15 | #include <linux/atomic.h> |
16 | 16 | ||
17 | #include "trace.h" | 17 | #include "trace.h" |
18 | #include "trace_output.h" | 18 | #include "trace_output.h" |