diff options
Diffstat (limited to 'init')
-rw-r--r-- | init/Kconfig | 24 | ||||
-rw-r--r-- | init/main.c | 32 |
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 | ||
1144 | source "arch/Kconfig" | 1144 | source "arch/Kconfig" |
1145 | 1145 | ||
1146 | config 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 | |||
1160 | config 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 | |||
1170 | endmenu # General setup | 1146 | endmenu # General setup |
1171 | 1147 | ||
1172 | config HAVE_GENERIC_DMA_COHERENT | 1148 | config 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; | |||
723 | core_param(initcall_debug, initcall_debug, bool, 0644); | 720 | core_param(initcall_debug, initcall_debug, bool, 0644); |
724 | 721 | ||
725 | static char msgbuf[64]; | 722 | static char msgbuf[64]; |
726 | static struct boot_trace_call call; | ||
727 | static struct boot_trace_ret ret; | ||
728 | 723 | ||
729 | int do_one_initcall(initcall_t fn) | 724 | int 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 | */ |
795 | static void __init do_basic_setup(void) | 787 | static 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(); |