aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
Diffstat (limited to 'init')
-rw-r--r--init/Kconfig24
-rw-r--r--init/main.c32
2 files changed, 11 insertions, 45 deletions
diff --git a/init/Kconfig b/init/Kconfig
index 5cff9a980c39..cb64c5889e02 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1143,30 +1143,6 @@ config TRACEPOINTS
1143 1143
1144source "arch/Kconfig" 1144source "arch/Kconfig"
1145 1145
1146config SLOW_WORK
1147 default n
1148 bool
1149 help
1150 The slow work thread pool provides a number of dynamically allocated
1151 threads that can be used by the kernel to perform operations that
1152 take a relatively long time.
1153
1154 An example of this would be CacheFiles doing a path lookup followed
1155 by a series of mkdirs and a create call, all of which have to touch
1156 disk.
1157
1158 See Documentation/slow-work.txt.
1159
1160config SLOW_WORK_DEBUG
1161 bool "Slow work debugging through debugfs"
1162 default n
1163 depends on SLOW_WORK && DEBUG_FS
1164 help
1165 Display the contents of the slow work run queue through debugfs,
1166 including items currently executing.
1167
1168 See Documentation/slow-work.txt.
1169
1170endmenu # General setup 1146endmenu # General setup
1171 1147
1172config HAVE_GENERIC_DMA_COHERENT 1148config HAVE_GENERIC_DMA_COHERENT
diff --git a/init/main.c b/init/main.c
index 9b34c1b8d76c..b8b6effe9ff4 100644
--- a/init/main.c
+++ b/init/main.c
@@ -32,7 +32,6 @@
32#include <linux/start_kernel.h> 32#include <linux/start_kernel.h>
33#include <linux/security.h> 33#include <linux/security.h>
34#include <linux/smp.h> 34#include <linux/smp.h>
35#include <linux/workqueue.h>
36#include <linux/profile.h> 35#include <linux/profile.h>
37#include <linux/rcupdate.h> 36#include <linux/rcupdate.h>
38#include <linux/moduleparam.h> 37#include <linux/moduleparam.h>
@@ -66,11 +65,9 @@
66#include <linux/ftrace.h> 65#include <linux/ftrace.h>
67#include <linux/async.h> 66#include <linux/async.h>
68#include <linux/kmemcheck.h> 67#include <linux/kmemcheck.h>
69#include <linux/kmemtrace.h>
70#include <linux/sfi.h> 68#include <linux/sfi.h>
71#include <linux/shmem_fs.h> 69#include <linux/shmem_fs.h>
72#include <linux/slab.h> 70#include <linux/slab.h>
73#include <trace/boot.h>
74 71
75#include <asm/io.h> 72#include <asm/io.h>
76#include <asm/bugs.h> 73#include <asm/bugs.h>
@@ -531,6 +528,7 @@ static void __init mm_init(void)
531 page_cgroup_init_flatmem(); 528 page_cgroup_init_flatmem();
532 mem_init(); 529 mem_init();
533 kmem_cache_init(); 530 kmem_cache_init();
531 percpu_init_late();
534 pgtable_cache_init(); 532 pgtable_cache_init();
535 vmalloc_init(); 533 vmalloc_init();
536} 534}
@@ -661,7 +659,6 @@ asmlinkage void __init start_kernel(void)
661#endif 659#endif
662 page_cgroup_init(); 660 page_cgroup_init();
663 enable_debug_pagealloc(); 661 enable_debug_pagealloc();
664 kmemtrace_init();
665 kmemleak_init(); 662 kmemleak_init();
666 debug_objects_mem_init(); 663 debug_objects_mem_init();
667 idr_init_cache(); 664 idr_init_cache();
@@ -723,38 +720,33 @@ int initcall_debug;
723core_param(initcall_debug, initcall_debug, bool, 0644); 720core_param(initcall_debug, initcall_debug, bool, 0644);
724 721
725static char msgbuf[64]; 722static char msgbuf[64];
726static struct boot_trace_call call;
727static struct boot_trace_ret ret;
728 723
729int do_one_initcall(initcall_t fn) 724int do_one_initcall(initcall_t fn)
730{ 725{
731 int count = preempt_count(); 726 int count = preempt_count();
732 ktime_t calltime, delta, rettime; 727 ktime_t calltime, delta, rettime;
728 unsigned long long duration;
729 int ret;
733 730
734 if (initcall_debug) { 731 if (initcall_debug) {
735 call.caller = task_pid_nr(current); 732 printk("calling %pF @ %i\n", fn, task_pid_nr(current));
736 printk("calling %pF @ %i\n", fn, call.caller);
737 calltime = ktime_get(); 733 calltime = ktime_get();
738 trace_boot_call(&call, fn);
739 enable_boot_trace();
740 } 734 }
741 735
742 ret.result = fn(); 736 ret = fn();
743 737
744 if (initcall_debug) { 738 if (initcall_debug) {
745 disable_boot_trace();
746 rettime = ktime_get(); 739 rettime = ktime_get();
747 delta = ktime_sub(rettime, calltime); 740 delta = ktime_sub(rettime, calltime);
748 ret.duration = (unsigned long long) ktime_to_ns(delta) >> 10; 741 duration = (unsigned long long) ktime_to_ns(delta) >> 10;
749 trace_boot_ret(&ret, fn); 742 printk("initcall %pF returned %d after %lld usecs\n", fn,
750 printk("initcall %pF returned %d after %Ld usecs\n", fn, 743 ret, duration);
751 ret.result, ret.duration);
752 } 744 }
753 745
754 msgbuf[0] = 0; 746 msgbuf[0] = 0;
755 747
756 if (ret.result && ret.result != -ENODEV && initcall_debug) 748 if (ret && ret != -ENODEV && initcall_debug)
757 sprintf(msgbuf, "error code %d ", ret.result); 749 sprintf(msgbuf, "error code %d ", ret);
758 750
759 if (preempt_count() != count) { 751 if (preempt_count() != count) {
760 strlcat(msgbuf, "preemption imbalance ", sizeof(msgbuf)); 752 strlcat(msgbuf, "preemption imbalance ", sizeof(msgbuf));
@@ -768,7 +760,7 @@ int do_one_initcall(initcall_t fn)
768 printk("initcall %pF returned with %s\n", fn, msgbuf); 760 printk("initcall %pF returned with %s\n", fn, msgbuf);
769 } 761 }
770 762
771 return ret.result; 763 return ret;
772} 764}
773 765
774 766
@@ -794,7 +786,6 @@ static void __init do_initcalls(void)
794 */ 786 */
795static void __init do_basic_setup(void) 787static void __init do_basic_setup(void)
796{ 788{
797 init_workqueues();
798 cpuset_init_smp(); 789 cpuset_init_smp();
799 usermodehelper_init(); 790 usermodehelper_init();
800 init_tmpfs(); 791 init_tmpfs();
@@ -889,7 +880,6 @@ static int __init kernel_init(void * unused)
889 smp_prepare_cpus(setup_max_cpus); 880 smp_prepare_cpus(setup_max_cpus);
890 881
891 do_pre_smp_initcalls(); 882 do_pre_smp_initcalls();
892 start_boot_trace();
893 883
894 smp_init(); 884 smp_init();
895 sched_init_smp(); 885 sched_init_smp();