diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-12-12 06:43:05 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-12 06:43:05 -0500 |
commit | 81444a799550214f549caf579cf65a0ca55e70b7 (patch) | |
tree | 3288dac0740be2e1e7d1af4ee51d792a6e91edf3 | |
parent | a64d31baed104be25305e9c71585d3ea4ee9a418 (diff) | |
parent | da485e0cb16726797e99a595a399b9fc721b91bc (diff) |
Merge branch 'tracing/fastboot' into cpus4096
185 files changed, 5800 insertions, 2970 deletions
diff --git a/Documentation/ftrace.txt b/Documentation/ftrace.txt index 35a78bc6651d..803b1318b13d 100644 --- a/Documentation/ftrace.txt +++ b/Documentation/ftrace.txt | |||
@@ -127,6 +127,8 @@ of ftrace. Here is a list of some of the key files: | |||
127 | be traced. If a function exists in both set_ftrace_filter | 127 | be traced. If a function exists in both set_ftrace_filter |
128 | and set_ftrace_notrace, the function will _not_ be traced. | 128 | and set_ftrace_notrace, the function will _not_ be traced. |
129 | 129 | ||
130 | set_ftrace_pid: Have the function tracer only trace a single thread. | ||
131 | |||
130 | available_filter_functions: This lists the functions that ftrace | 132 | available_filter_functions: This lists the functions that ftrace |
131 | has processed and can trace. These are the function | 133 | has processed and can trace. These are the function |
132 | names that you can pass to "set_ftrace_filter" or | 134 | names that you can pass to "set_ftrace_filter" or |
@@ -1073,6 +1075,83 @@ For simple one time traces, the above is sufficent. For anything else, | |||
1073 | a search through /proc/mounts may be needed to find where the debugfs | 1075 | a search through /proc/mounts may be needed to find where the debugfs |
1074 | file-system is mounted. | 1076 | file-system is mounted. |
1075 | 1077 | ||
1078 | |||
1079 | Single thread tracing | ||
1080 | --------------------- | ||
1081 | |||
1082 | By writing into /debug/tracing/set_ftrace_pid you can trace a | ||
1083 | single thread. For example: | ||
1084 | |||
1085 | # cat /debug/tracing/set_ftrace_pid | ||
1086 | no pid | ||
1087 | # echo 3111 > /debug/tracing/set_ftrace_pid | ||
1088 | # cat /debug/tracing/set_ftrace_pid | ||
1089 | 3111 | ||
1090 | # echo function > /debug/tracing/current_tracer | ||
1091 | # cat /debug/tracing/trace | head | ||
1092 | # tracer: function | ||
1093 | # | ||
1094 | # TASK-PID CPU# TIMESTAMP FUNCTION | ||
1095 | # | | | | | | ||
1096 | yum-updatesd-3111 [003] 1637.254676: finish_task_switch <-thread_return | ||
1097 | yum-updatesd-3111 [003] 1637.254681: hrtimer_cancel <-schedule_hrtimeout_range | ||
1098 | yum-updatesd-3111 [003] 1637.254682: hrtimer_try_to_cancel <-hrtimer_cancel | ||
1099 | yum-updatesd-3111 [003] 1637.254683: lock_hrtimer_base <-hrtimer_try_to_cancel | ||
1100 | yum-updatesd-3111 [003] 1637.254685: fget_light <-do_sys_poll | ||
1101 | yum-updatesd-3111 [003] 1637.254686: pipe_poll <-do_sys_poll | ||
1102 | # echo -1 > /debug/tracing/set_ftrace_pid | ||
1103 | # cat /debug/tracing/trace |head | ||
1104 | # tracer: function | ||
1105 | # | ||
1106 | # TASK-PID CPU# TIMESTAMP FUNCTION | ||
1107 | # | | | | | | ||
1108 | ##### CPU 3 buffer started #### | ||
1109 | yum-updatesd-3111 [003] 1701.957688: free_poll_entry <-poll_freewait | ||
1110 | yum-updatesd-3111 [003] 1701.957689: remove_wait_queue <-free_poll_entry | ||
1111 | yum-updatesd-3111 [003] 1701.957691: fput <-free_poll_entry | ||
1112 | yum-updatesd-3111 [003] 1701.957692: audit_syscall_exit <-sysret_audit | ||
1113 | yum-updatesd-3111 [003] 1701.957693: path_put <-audit_syscall_exit | ||
1114 | |||
1115 | If you want to trace a function when executing, you could use | ||
1116 | something like this simple program: | ||
1117 | |||
1118 | #include <stdio.h> | ||
1119 | #include <stdlib.h> | ||
1120 | #include <sys/types.h> | ||
1121 | #include <sys/stat.h> | ||
1122 | #include <fcntl.h> | ||
1123 | #include <unistd.h> | ||
1124 | |||
1125 | int main (int argc, char **argv) | ||
1126 | { | ||
1127 | if (argc < 1) | ||
1128 | exit(-1); | ||
1129 | |||
1130 | if (fork() > 0) { | ||
1131 | int fd, ffd; | ||
1132 | char line[64]; | ||
1133 | int s; | ||
1134 | |||
1135 | ffd = open("/debug/tracing/current_tracer", O_WRONLY); | ||
1136 | if (ffd < 0) | ||
1137 | exit(-1); | ||
1138 | write(ffd, "nop", 3); | ||
1139 | |||
1140 | fd = open("/debug/tracing/set_ftrace_pid", O_WRONLY); | ||
1141 | s = sprintf(line, "%d\n", getpid()); | ||
1142 | write(fd, line, s); | ||
1143 | |||
1144 | write(ffd, "function", 8); | ||
1145 | |||
1146 | close(fd); | ||
1147 | close(ffd); | ||
1148 | |||
1149 | execvp(argv[1], argv+1); | ||
1150 | } | ||
1151 | |||
1152 | return 0; | ||
1153 | } | ||
1154 | |||
1076 | dynamic ftrace | 1155 | dynamic ftrace |
1077 | -------------- | 1156 | -------------- |
1078 | 1157 | ||
@@ -1172,7 +1251,11 @@ These are the only wild cards which are supported. | |||
1172 | 1251 | ||
1173 | <match>*<match> will not work. | 1252 | <match>*<match> will not work. |
1174 | 1253 | ||
1175 | # echo hrtimer_* > /debug/tracing/set_ftrace_filter | 1254 | Note: It is better to use quotes to enclose the wild cards, otherwise |
1255 | the shell may expand the parameters into names of files in the local | ||
1256 | directory. | ||
1257 | |||
1258 | # echo 'hrtimer_*' > /debug/tracing/set_ftrace_filter | ||
1176 | 1259 | ||
1177 | Produces: | 1260 | Produces: |
1178 | 1261 | ||
@@ -1227,7 +1310,7 @@ Again, now we want to append. | |||
1227 | # echo sys_nanosleep > /debug/tracing/set_ftrace_filter | 1310 | # echo sys_nanosleep > /debug/tracing/set_ftrace_filter |
1228 | # cat /debug/tracing/set_ftrace_filter | 1311 | # cat /debug/tracing/set_ftrace_filter |
1229 | sys_nanosleep | 1312 | sys_nanosleep |
1230 | # echo hrtimer_* >> /debug/tracing/set_ftrace_filter | 1313 | # echo 'hrtimer_*' >> /debug/tracing/set_ftrace_filter |
1231 | # cat /debug/tracing/set_ftrace_filter | 1314 | # cat /debug/tracing/set_ftrace_filter |
1232 | hrtimer_run_queues | 1315 | hrtimer_run_queues |
1233 | hrtimer_run_pending | 1316 | hrtimer_run_pending |
diff --git a/Documentation/markers.txt b/Documentation/markers.txt index 6d275e4ef385..d2b3d0e91b26 100644 --- a/Documentation/markers.txt +++ b/Documentation/markers.txt | |||
@@ -51,11 +51,16 @@ to call) for the specific marker through marker_probe_register() and can be | |||
51 | activated by calling marker_arm(). Marker deactivation can be done by calling | 51 | activated by calling marker_arm(). Marker deactivation can be done by calling |
52 | marker_disarm() as many times as marker_arm() has been called. Removing a probe | 52 | marker_disarm() as many times as marker_arm() has been called. Removing a probe |
53 | is done through marker_probe_unregister(); it will disarm the probe. | 53 | is done through marker_probe_unregister(); it will disarm the probe. |
54 | marker_synchronize_unregister() must be called before the end of the module exit | 54 | |
55 | function to make sure there is no caller left using the probe. This, and the | 55 | marker_synchronize_unregister() must be called between probe unregistration and |
56 | fact that preemption is disabled around the probe call, make sure that probe | 56 | the first occurrence of |
57 | removal and module unload are safe. See the "Probe example" section below for a | 57 | - the end of module exit function, |
58 | sample probe module. | 58 | to make sure there is no caller left using the probe; |
59 | - the free of any resource used by the probes, | ||
60 | to make sure the probes wont be accessing invalid data. | ||
61 | This, and the fact that preemption is disabled around the probe call, make sure | ||
62 | that probe removal and module unload are safe. See the "Probe example" section | ||
63 | below for a sample probe module. | ||
59 | 64 | ||
60 | The marker mechanism supports inserting multiple instances of the same marker. | 65 | The marker mechanism supports inserting multiple instances of the same marker. |
61 | Markers can be put in inline functions, inlined static functions, and | 66 | Markers can be put in inline functions, inlined static functions, and |
diff --git a/Documentation/tracepoints.txt b/Documentation/tracepoints.txt index 2d42241a25c3..6f0a044f5b5e 100644 --- a/Documentation/tracepoints.txt +++ b/Documentation/tracepoints.txt | |||
@@ -45,7 +45,7 @@ In include/trace/subsys.h : | |||
45 | #include <linux/tracepoint.h> | 45 | #include <linux/tracepoint.h> |
46 | 46 | ||
47 | DECLARE_TRACE(subsys_eventname, | 47 | DECLARE_TRACE(subsys_eventname, |
48 | TPPTOTO(int firstarg, struct task_struct *p), | 48 | TPPROTO(int firstarg, struct task_struct *p), |
49 | TPARGS(firstarg, p)); | 49 | TPARGS(firstarg, p)); |
50 | 50 | ||
51 | In subsys/file.c (where the tracing statement must be added) : | 51 | In subsys/file.c (where the tracing statement must be added) : |
@@ -66,7 +66,7 @@ Where : | |||
66 | - subsys is the name of your subsystem. | 66 | - subsys is the name of your subsystem. |
67 | - eventname is the name of the event to trace. | 67 | - eventname is the name of the event to trace. |
68 | 68 | ||
69 | - TPPTOTO(int firstarg, struct task_struct *p) is the prototype of the | 69 | - TPPROTO(int firstarg, struct task_struct *p) is the prototype of the |
70 | function called by this tracepoint. | 70 | function called by this tracepoint. |
71 | 71 | ||
72 | - TPARGS(firstarg, p) are the parameters names, same as found in the | 72 | - TPARGS(firstarg, p) are the parameters names, same as found in the |
diff --git a/MAINTAINERS b/MAINTAINERS index 618c1ef4a397..8f2b67ea0549 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -779,6 +779,7 @@ ATM | |||
779 | P: Chas Williams | 779 | P: Chas Williams |
780 | M: chas@cmf.nrl.navy.mil | 780 | M: chas@cmf.nrl.navy.mil |
781 | L: linux-atm-general@lists.sourceforge.net (subscribers-only) | 781 | L: linux-atm-general@lists.sourceforge.net (subscribers-only) |
782 | L: netdev@vger.kernel.org | ||
782 | W: http://linux-atm.sourceforge.net | 783 | W: http://linux-atm.sourceforge.net |
783 | S: Maintained | 784 | S: Maintained |
784 | 785 | ||
@@ -4235,7 +4236,7 @@ M: dedekind@infradead.org | |||
4235 | P: Adrian Hunter | 4236 | P: Adrian Hunter |
4236 | M: ext-adrian.hunter@nokia.com | 4237 | M: ext-adrian.hunter@nokia.com |
4237 | L: linux-mtd@lists.infradead.org | 4238 | L: linux-mtd@lists.infradead.org |
4238 | T: git git://git.infradead.org/~dedekind/ubifs-2.6.git | 4239 | T: git git://git.infradead.org/ubifs-2.6.git |
4239 | W: http://www.linux-mtd.infradead.org/doc/ubifs.html | 4240 | W: http://www.linux-mtd.infradead.org/doc/ubifs.html |
4240 | S: Maintained | 4241 | S: Maintained |
4241 | 4242 | ||
@@ -4289,7 +4290,7 @@ P: Artem Bityutskiy | |||
4289 | M: dedekind@infradead.org | 4290 | M: dedekind@infradead.org |
4290 | W: http://www.linux-mtd.infradead.org/ | 4291 | W: http://www.linux-mtd.infradead.org/ |
4291 | L: linux-mtd@lists.infradead.org | 4292 | L: linux-mtd@lists.infradead.org |
4292 | T: git git://git.infradead.org/~dedekind/ubi-2.6.git | 4293 | T: git git://git.infradead.org/ubi-2.6.git |
4293 | S: Maintained | 4294 | S: Maintained |
4294 | 4295 | ||
4295 | USB ACM DRIVER | 4296 | USB ACM DRIVER |
diff --git a/arch/ia64/kvm/Makefile b/arch/ia64/kvm/Makefile index 3ab4d6d50704..92cef66ca268 100644 --- a/arch/ia64/kvm/Makefile +++ b/arch/ia64/kvm/Makefile | |||
@@ -58,7 +58,7 @@ endif | |||
58 | kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o | 58 | kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o |
59 | obj-$(CONFIG_KVM) += kvm.o | 59 | obj-$(CONFIG_KVM) += kvm.o |
60 | 60 | ||
61 | EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 | 61 | CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 |
62 | kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \ | 62 | kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \ |
63 | vtlb.o process.o | 63 | vtlb.o process.o |
64 | #Add link memcpy and memset to avoid possible structure assignment error | 64 | #Add link memcpy and memset to avoid possible structure assignment error |
diff --git a/arch/ia64/kvm/optvfault.S b/arch/ia64/kvm/optvfault.S index 634abad979b5..32254ce9a1bd 100644 --- a/arch/ia64/kvm/optvfault.S +++ b/arch/ia64/kvm/optvfault.S | |||
@@ -107,10 +107,10 @@ END(kvm_vps_resume_normal) | |||
107 | GLOBAL_ENTRY(kvm_vps_resume_handler) | 107 | GLOBAL_ENTRY(kvm_vps_resume_handler) |
108 | movl r30 = PAL_VPS_RESUME_HANDLER | 108 | movl r30 = PAL_VPS_RESUME_HANDLER |
109 | ;; | 109 | ;; |
110 | ld8 r27=[r25] | 110 | ld8 r26=[r25] |
111 | shr r17=r17,IA64_ISR_IR_BIT | 111 | shr r17=r17,IA64_ISR_IR_BIT |
112 | ;; | 112 | ;; |
113 | dep r27=r17,r27,63,1 // bit 63 of r27 indicate whether enable CFLE | 113 | dep r26=r17,r26,63,1 // bit 63 of r26 indicate whether enable CFLE |
114 | mov pr=r23,-2 | 114 | mov pr=r23,-2 |
115 | br.sptk.many kvm_vps_entry | 115 | br.sptk.many kvm_vps_entry |
116 | END(kvm_vps_resume_handler) | 116 | END(kvm_vps_resume_handler) |
@@ -894,12 +894,15 @@ ENTRY(kvm_resume_to_guest) | |||
894 | ;; | 894 | ;; |
895 | ld8 r19=[r19] | 895 | ld8 r19=[r19] |
896 | mov b0=r29 | 896 | mov b0=r29 |
897 | cmp.ne p6,p7 = r0,r0 | 897 | mov r27=cr.isr |
898 | ;; | 898 | ;; |
899 | tbit.z p6,p7 = r19,IA64_PSR_IC_BIT // p1=vpsr.ic | 899 | tbit.z p6,p7 = r19,IA64_PSR_IC_BIT // p7=vpsr.ic |
900 | shr r27=r27,IA64_ISR_IR_BIT | ||
900 | ;; | 901 | ;; |
901 | (p6) ld8 r26=[r25] | 902 | (p6) ld8 r26=[r25] |
902 | (p7) mov b0=r28 | 903 | (p7) mov b0=r28 |
904 | ;; | ||
905 | (p6) dep r26=r27,r26,63,1 | ||
903 | mov pr=r31,-2 | 906 | mov pr=r31,-2 |
904 | br.sptk.many b0 // call pal service | 907 | br.sptk.many b0 // call pal service |
905 | ;; | 908 | ;; |
diff --git a/arch/m68k/configs/amiga_defconfig b/arch/m68k/configs/amiga_defconfig index 8bd61a640fc9..23597beb66c1 100644 --- a/arch/m68k/configs/amiga_defconfig +++ b/arch/m68k/configs/amiga_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:00 2008 | 4 | # Tue Dec 2 20:27:42 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | CONFIG_AMIGA=y | 113 | CONFIG_AMIGA=y |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -148,19 +138,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
148 | CONFIG_DISCONTIGMEM=y | 138 | CONFIG_DISCONTIGMEM=y |
149 | CONFIG_FLAT_NODE_MEM_MAP=y | 139 | CONFIG_FLAT_NODE_MEM_MAP=y |
150 | CONFIG_NEED_MULTIPLE_NODES=y | 140 | CONFIG_NEED_MULTIPLE_NODES=y |
151 | # CONFIG_SPARSEMEM_STATIC is not set | ||
152 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
153 | CONFIG_PAGEFLAGS_EXTENDED=y | 141 | CONFIG_PAGEFLAGS_EXTENDED=y |
154 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 142 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
155 | # CONFIG_RESOURCES_64BIT is not set | 143 | # CONFIG_RESOURCES_64BIT is not set |
144 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
156 | CONFIG_ZONE_DMA_FLAG=1 | 145 | CONFIG_ZONE_DMA_FLAG=1 |
157 | CONFIG_BOUNCE=y | 146 | CONFIG_BOUNCE=y |
158 | CONFIG_VIRT_TO_BUS=y | 147 | CONFIG_VIRT_TO_BUS=y |
148 | CONFIG_UNEVICTABLE_LRU=y | ||
159 | 149 | ||
160 | # | 150 | # |
161 | # General setup | 151 | # General setup |
162 | # | 152 | # |
163 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
154 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
155 | CONFIG_HAVE_AOUT=y | ||
164 | CONFIG_BINFMT_AOUT=m | 156 | CONFIG_BINFMT_AOUT=m |
165 | CONFIG_BINFMT_MISC=m | 157 | CONFIG_BINFMT_MISC=m |
166 | CONFIG_ZORRO=y | 158 | CONFIG_ZORRO=y |
@@ -212,7 +204,6 @@ CONFIG_INET_TCP_DIAG=m | |||
212 | CONFIG_TCP_CONG_CUBIC=y | 204 | CONFIG_TCP_CONG_CUBIC=y |
213 | CONFIG_DEFAULT_TCP_CONG="cubic" | 205 | CONFIG_DEFAULT_TCP_CONG="cubic" |
214 | # CONFIG_TCP_MD5SIG is not set | 206 | # CONFIG_TCP_MD5SIG is not set |
215 | # CONFIG_IP_VS is not set | ||
216 | CONFIG_IPV6=m | 207 | CONFIG_IPV6=m |
217 | CONFIG_IPV6_PRIVACY=y | 208 | CONFIG_IPV6_PRIVACY=y |
218 | CONFIG_IPV6_ROUTER_PREF=y | 209 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -262,13 +253,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
262 | CONFIG_NF_CONNTRACK_SIP=m | 253 | CONFIG_NF_CONNTRACK_SIP=m |
263 | CONFIG_NF_CONNTRACK_TFTP=m | 254 | CONFIG_NF_CONNTRACK_TFTP=m |
264 | # CONFIG_NF_CT_NETLINK is not set | 255 | # CONFIG_NF_CT_NETLINK is not set |
256 | # CONFIG_NETFILTER_TPROXY is not set | ||
265 | CONFIG_NETFILTER_XTABLES=m | 257 | CONFIG_NETFILTER_XTABLES=m |
266 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 258 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
267 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 259 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
268 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 260 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
269 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 261 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
270 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
271 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 262 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
263 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
272 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 264 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
273 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 265 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
274 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 266 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -282,19 +274,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
282 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 274 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
283 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 275 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
284 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 276 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
277 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
285 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 278 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
286 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 279 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
287 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 280 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
288 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 281 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
289 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 282 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
290 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 283 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
284 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
291 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 285 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
292 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 286 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
293 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
294 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 287 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
295 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 288 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
296 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 289 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
297 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 290 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
291 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
292 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
298 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 293 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
299 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 294 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
300 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 295 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -302,20 +297,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
302 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 297 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
303 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 298 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
304 | CONFIG_NETFILTER_XT_MATCH_U32=m | 299 | CONFIG_NETFILTER_XT_MATCH_U32=m |
305 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 300 | # CONFIG_IP_VS is not set |
306 | 301 | ||
307 | # | 302 | # |
308 | # IP: Netfilter Configuration | 303 | # IP: Netfilter Configuration |
309 | # | 304 | # |
305 | CONFIG_NF_DEFRAG_IPV4=m | ||
310 | CONFIG_NF_CONNTRACK_IPV4=m | 306 | CONFIG_NF_CONNTRACK_IPV4=m |
311 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 307 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
312 | CONFIG_IP_NF_QUEUE=m | 308 | CONFIG_IP_NF_QUEUE=m |
313 | CONFIG_IP_NF_IPTABLES=m | 309 | CONFIG_IP_NF_IPTABLES=m |
314 | CONFIG_IP_NF_MATCH_RECENT=m | 310 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
315 | CONFIG_IP_NF_MATCH_ECN=m | ||
316 | CONFIG_IP_NF_MATCH_AH=m | 311 | CONFIG_IP_NF_MATCH_AH=m |
312 | CONFIG_IP_NF_MATCH_ECN=m | ||
317 | CONFIG_IP_NF_MATCH_TTL=m | 313 | CONFIG_IP_NF_MATCH_TTL=m |
318 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
319 | CONFIG_IP_NF_FILTER=m | 314 | CONFIG_IP_NF_FILTER=m |
320 | CONFIG_IP_NF_TARGET_REJECT=m | 315 | CONFIG_IP_NF_TARGET_REJECT=m |
321 | CONFIG_IP_NF_TARGET_LOG=m | 316 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -323,8 +318,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
323 | CONFIG_NF_NAT=m | 318 | CONFIG_NF_NAT=m |
324 | CONFIG_NF_NAT_NEEDED=y | 319 | CONFIG_NF_NAT_NEEDED=y |
325 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 320 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
326 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
327 | CONFIG_IP_NF_TARGET_NETMAP=m | 321 | CONFIG_IP_NF_TARGET_NETMAP=m |
322 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
328 | CONFIG_NF_NAT_SNMP_BASIC=m | 323 | CONFIG_NF_NAT_SNMP_BASIC=m |
329 | CONFIG_NF_NAT_PROTO_GRE=m | 324 | CONFIG_NF_NAT_PROTO_GRE=m |
330 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 325 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -337,9 +332,9 @@ CONFIG_NF_NAT_PPTP=m | |||
337 | CONFIG_NF_NAT_H323=m | 332 | CONFIG_NF_NAT_H323=m |
338 | CONFIG_NF_NAT_SIP=m | 333 | CONFIG_NF_NAT_SIP=m |
339 | CONFIG_IP_NF_MANGLE=m | 334 | CONFIG_IP_NF_MANGLE=m |
335 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
340 | CONFIG_IP_NF_TARGET_ECN=m | 336 | CONFIG_IP_NF_TARGET_ECN=m |
341 | CONFIG_IP_NF_TARGET_TTL=m | 337 | CONFIG_IP_NF_TARGET_TTL=m |
342 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
343 | CONFIG_IP_NF_RAW=m | 338 | CONFIG_IP_NF_RAW=m |
344 | CONFIG_IP_NF_ARPTABLES=m | 339 | CONFIG_IP_NF_ARPTABLES=m |
345 | CONFIG_IP_NF_ARPFILTER=m | 340 | CONFIG_IP_NF_ARPFILTER=m |
@@ -351,16 +346,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
351 | CONFIG_NF_CONNTRACK_IPV6=m | 346 | CONFIG_NF_CONNTRACK_IPV6=m |
352 | CONFIG_IP6_NF_QUEUE=m | 347 | CONFIG_IP6_NF_QUEUE=m |
353 | CONFIG_IP6_NF_IPTABLES=m | 348 | CONFIG_IP6_NF_IPTABLES=m |
354 | CONFIG_IP6_NF_MATCH_RT=m | 349 | CONFIG_IP6_NF_MATCH_AH=m |
355 | CONFIG_IP6_NF_MATCH_OPTS=m | 350 | CONFIG_IP6_NF_MATCH_EUI64=m |
356 | CONFIG_IP6_NF_MATCH_FRAG=m | 351 | CONFIG_IP6_NF_MATCH_FRAG=m |
352 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
357 | CONFIG_IP6_NF_MATCH_HL=m | 353 | CONFIG_IP6_NF_MATCH_HL=m |
358 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 354 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
359 | CONFIG_IP6_NF_MATCH_AH=m | ||
360 | CONFIG_IP6_NF_MATCH_MH=m | 355 | CONFIG_IP6_NF_MATCH_MH=m |
361 | CONFIG_IP6_NF_MATCH_EUI64=m | 356 | CONFIG_IP6_NF_MATCH_RT=m |
362 | CONFIG_IP6_NF_FILTER=m | ||
363 | CONFIG_IP6_NF_TARGET_LOG=m | 357 | CONFIG_IP6_NF_TARGET_LOG=m |
358 | CONFIG_IP6_NF_FILTER=m | ||
364 | CONFIG_IP6_NF_TARGET_REJECT=m | 359 | CONFIG_IP6_NF_TARGET_REJECT=m |
365 | CONFIG_IP6_NF_MANGLE=m | 360 | CONFIG_IP6_NF_MANGLE=m |
366 | CONFIG_IP6_NF_TARGET_HL=m | 361 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -387,6 +382,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
387 | # CONFIG_TIPC is not set | 382 | # CONFIG_TIPC is not set |
388 | # CONFIG_ATM is not set | 383 | # CONFIG_ATM is not set |
389 | # CONFIG_BRIDGE is not set | 384 | # CONFIG_BRIDGE is not set |
385 | # CONFIG_NET_DSA is not set | ||
390 | # CONFIG_VLAN_8021Q is not set | 386 | # CONFIG_VLAN_8021Q is not set |
391 | # CONFIG_DECNET is not set | 387 | # CONFIG_DECNET is not set |
392 | CONFIG_LLC=m | 388 | CONFIG_LLC=m |
@@ -410,19 +406,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
410 | # CONFIG_IRDA is not set | 406 | # CONFIG_IRDA is not set |
411 | # CONFIG_BT is not set | 407 | # CONFIG_BT is not set |
412 | # CONFIG_AF_RXRPC is not set | 408 | # CONFIG_AF_RXRPC is not set |
413 | 409 | # CONFIG_PHONET is not set | |
414 | # | 410 | # CONFIG_WIRELESS is not set |
415 | # Wireless | ||
416 | # | ||
417 | # CONFIG_CFG80211 is not set | ||
418 | CONFIG_WIRELESS_EXT=y | ||
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
420 | # CONFIG_MAC80211 is not set | ||
421 | CONFIG_IEEE80211=m | ||
422 | # CONFIG_IEEE80211_DEBUG is not set | ||
423 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
424 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
425 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
426 | # CONFIG_RFKILL is not set | 411 | # CONFIG_RFKILL is not set |
427 | # CONFIG_NET_9P is not set | 412 | # CONFIG_NET_9P is not set |
428 | 413 | ||
@@ -470,21 +455,20 @@ CONFIG_ATA_OVER_ETH=m | |||
470 | CONFIG_MISC_DEVICES=y | 455 | CONFIG_MISC_DEVICES=y |
471 | # CONFIG_EEPROM_93CX6 is not set | 456 | # CONFIG_EEPROM_93CX6 is not set |
472 | # CONFIG_ENCLOSURE_SERVICES is not set | 457 | # CONFIG_ENCLOSURE_SERVICES is not set |
458 | # CONFIG_C2PORT is not set | ||
473 | CONFIG_HAVE_IDE=y | 459 | CONFIG_HAVE_IDE=y |
474 | CONFIG_IDE=y | 460 | CONFIG_IDE=y |
475 | CONFIG_BLK_DEV_IDE=y | ||
476 | 461 | ||
477 | # | 462 | # |
478 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 463 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
479 | # | 464 | # |
480 | CONFIG_IDE_ATAPI=y | ||
481 | # CONFIG_BLK_DEV_IDE_SATA is not set | 465 | # CONFIG_BLK_DEV_IDE_SATA is not set |
482 | CONFIG_BLK_DEV_IDEDISK=y | 466 | CONFIG_IDE_GD=y |
483 | # CONFIG_IDEDISK_MULTI_MODE is not set | 467 | CONFIG_IDE_GD_ATA=y |
468 | # CONFIG_IDE_GD_ATAPI is not set | ||
484 | CONFIG_BLK_DEV_IDECD=y | 469 | CONFIG_BLK_DEV_IDECD=y |
485 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | 470 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y |
486 | # CONFIG_BLK_DEV_IDETAPE is not set | 471 | # CONFIG_BLK_DEV_IDETAPE is not set |
487 | CONFIG_BLK_DEV_IDEFLOPPY=m | ||
488 | # CONFIG_BLK_DEV_IDESCSI is not set | 472 | # CONFIG_BLK_DEV_IDESCSI is not set |
489 | # CONFIG_IDE_TASK_IOCTL is not set | 473 | # CONFIG_IDE_TASK_IOCTL is not set |
490 | CONFIG_IDE_PROC_FS=y | 474 | CONFIG_IDE_PROC_FS=y |
@@ -609,8 +593,12 @@ CONFIG_APNE=m | |||
609 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 593 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
610 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 594 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
611 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 595 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
596 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
597 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
598 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
612 | # CONFIG_NET_PCI is not set | 599 | # CONFIG_NET_PCI is not set |
613 | # CONFIG_B44 is not set | 600 | # CONFIG_B44 is not set |
601 | # CONFIG_CS89x0 is not set | ||
614 | # CONFIG_NET_POCKET is not set | 602 | # CONFIG_NET_POCKET is not set |
615 | # CONFIG_NETDEV_1000 is not set | 603 | # CONFIG_NETDEV_1000 is not set |
616 | # CONFIG_NETDEV_10000 is not set | 604 | # CONFIG_NETDEV_10000 is not set |
@@ -763,11 +751,11 @@ CONFIG_GEN_RTC_X=y | |||
763 | # CONFIG_THERMAL is not set | 751 | # CONFIG_THERMAL is not set |
764 | # CONFIG_THERMAL_HWMON is not set | 752 | # CONFIG_THERMAL_HWMON is not set |
765 | # CONFIG_WATCHDOG is not set | 753 | # CONFIG_WATCHDOG is not set |
754 | CONFIG_SSB_POSSIBLE=y | ||
766 | 755 | ||
767 | # | 756 | # |
768 | # Sonics Silicon Backplane | 757 | # Sonics Silicon Backplane |
769 | # | 758 | # |
770 | CONFIG_SSB_POSSIBLE=y | ||
771 | # CONFIG_SSB is not set | 759 | # CONFIG_SSB is not set |
772 | 760 | ||
773 | # | 761 | # |
@@ -777,6 +765,7 @@ CONFIG_SSB_POSSIBLE=y | |||
777 | # CONFIG_MFD_SM501 is not set | 765 | # CONFIG_MFD_SM501 is not set |
778 | # CONFIG_HTC_PASIC3 is not set | 766 | # CONFIG_HTC_PASIC3 is not set |
779 | # CONFIG_MFD_TMIO is not set | 767 | # CONFIG_MFD_TMIO is not set |
768 | # CONFIG_REGULATOR is not set | ||
780 | 769 | ||
781 | # | 770 | # |
782 | # Multimedia devices | 771 | # Multimedia devices |
@@ -802,6 +791,7 @@ CONFIG_SSB_POSSIBLE=y | |||
802 | CONFIG_FB=y | 791 | CONFIG_FB=y |
803 | # CONFIG_FIRMWARE_EDID is not set | 792 | # CONFIG_FIRMWARE_EDID is not set |
804 | # CONFIG_FB_DDC is not set | 793 | # CONFIG_FB_DDC is not set |
794 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
805 | CONFIG_FB_CFB_FILLRECT=y | 795 | CONFIG_FB_CFB_FILLRECT=y |
806 | CONFIG_FB_CFB_COPYAREA=y | 796 | CONFIG_FB_CFB_COPYAREA=y |
807 | CONFIG_FB_CFB_IMAGEBLIT=y | 797 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -829,6 +819,8 @@ CONFIG_FB_FM2=y | |||
829 | # CONFIG_FB_UVESA is not set | 819 | # CONFIG_FB_UVESA is not set |
830 | # CONFIG_FB_S1D13XXX is not set | 820 | # CONFIG_FB_S1D13XXX is not set |
831 | # CONFIG_FB_VIRTUAL is not set | 821 | # CONFIG_FB_VIRTUAL is not set |
822 | # CONFIG_FB_METRONOME is not set | ||
823 | # CONFIG_FB_MB862XX is not set | ||
832 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 824 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
833 | 825 | ||
834 | # | 826 | # |
@@ -852,12 +844,19 @@ CONFIG_LOGO_LINUX_MONO=y | |||
852 | CONFIG_LOGO_LINUX_VGA16=y | 844 | CONFIG_LOGO_LINUX_VGA16=y |
853 | CONFIG_LOGO_LINUX_CLUT224=y | 845 | CONFIG_LOGO_LINUX_CLUT224=y |
854 | CONFIG_SOUND=m | 846 | CONFIG_SOUND=m |
847 | CONFIG_SOUND_OSS_CORE=y | ||
855 | CONFIG_DMASOUND_PAULA=m | 848 | CONFIG_DMASOUND_PAULA=m |
856 | CONFIG_DMASOUND=m | 849 | CONFIG_DMASOUND=m |
857 | CONFIG_HID_SUPPORT=y | 850 | CONFIG_HID_SUPPORT=y |
858 | CONFIG_HID=m | 851 | CONFIG_HID=m |
859 | # CONFIG_HID_DEBUG is not set | 852 | # CONFIG_HID_DEBUG is not set |
860 | CONFIG_HIDRAW=y | 853 | CONFIG_HIDRAW=y |
854 | # CONFIG_HID_PID is not set | ||
855 | |||
856 | # | ||
857 | # Special HID drivers | ||
858 | # | ||
859 | CONFIG_HID_COMPAT=y | ||
861 | # CONFIG_USB_SUPPORT is not set | 860 | # CONFIG_USB_SUPPORT is not set |
862 | # CONFIG_MMC is not set | 861 | # CONFIG_MMC is not set |
863 | # CONFIG_MEMSTICK is not set | 862 | # CONFIG_MEMSTICK is not set |
@@ -867,6 +866,8 @@ CONFIG_HIDRAW=y | |||
867 | # CONFIG_DMADEVICES is not set | 866 | # CONFIG_DMADEVICES is not set |
868 | # CONFIG_AUXDISPLAY is not set | 867 | # CONFIG_AUXDISPLAY is not set |
869 | # CONFIG_UIO is not set | 868 | # CONFIG_UIO is not set |
869 | # CONFIG_STAGING is not set | ||
870 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
870 | 871 | ||
871 | # | 872 | # |
872 | # Character devices | 873 | # Character devices |
@@ -883,8 +884,9 @@ CONFIG_EXT2_FS=y | |||
883 | # CONFIG_EXT2_FS_XIP is not set | 884 | # CONFIG_EXT2_FS_XIP is not set |
884 | CONFIG_EXT3_FS=y | 885 | CONFIG_EXT3_FS=y |
885 | # CONFIG_EXT3_FS_XATTR is not set | 886 | # CONFIG_EXT3_FS_XATTR is not set |
886 | # CONFIG_EXT4DEV_FS is not set | 887 | # CONFIG_EXT4_FS is not set |
887 | CONFIG_JBD=y | 888 | CONFIG_JBD=y |
889 | CONFIG_JBD2=m | ||
888 | CONFIG_REISERFS_FS=m | 890 | CONFIG_REISERFS_FS=m |
889 | # CONFIG_REISERFS_CHECK is not set | 891 | # CONFIG_REISERFS_CHECK is not set |
890 | # CONFIG_REISERFS_PROC_INFO is not set | 892 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -895,6 +897,7 @@ CONFIG_JFS_FS=m | |||
895 | # CONFIG_JFS_DEBUG is not set | 897 | # CONFIG_JFS_DEBUG is not set |
896 | # CONFIG_JFS_STATISTICS is not set | 898 | # CONFIG_JFS_STATISTICS is not set |
897 | # CONFIG_FS_POSIX_ACL is not set | 899 | # CONFIG_FS_POSIX_ACL is not set |
900 | CONFIG_FILE_LOCKING=y | ||
898 | CONFIG_XFS_FS=m | 901 | CONFIG_XFS_FS=m |
899 | # CONFIG_XFS_QUOTA is not set | 902 | # CONFIG_XFS_QUOTA is not set |
900 | # CONFIG_XFS_POSIX_ACL is not set | 903 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -906,6 +909,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
906 | # CONFIG_OCFS2_FS_STATS is not set | 909 | # CONFIG_OCFS2_FS_STATS is not set |
907 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 910 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
908 | # CONFIG_OCFS2_DEBUG_FS is not set | 911 | # CONFIG_OCFS2_DEBUG_FS is not set |
912 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
909 | CONFIG_DNOTIFY=y | 913 | CONFIG_DNOTIFY=y |
910 | CONFIG_INOTIFY=y | 914 | CONFIG_INOTIFY=y |
911 | CONFIG_INOTIFY_USER=y | 915 | CONFIG_INOTIFY_USER=y |
@@ -944,6 +948,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
944 | CONFIG_PROC_FS=y | 948 | CONFIG_PROC_FS=y |
945 | CONFIG_PROC_KCORE=y | 949 | CONFIG_PROC_KCORE=y |
946 | CONFIG_PROC_SYSCTL=y | 950 | CONFIG_PROC_SYSCTL=y |
951 | CONFIG_PROC_PAGE_MONITOR=y | ||
947 | CONFIG_SYSFS=y | 952 | CONFIG_SYSFS=y |
948 | CONFIG_TMPFS=y | 953 | CONFIG_TMPFS=y |
949 | # CONFIG_TMPFS_POSIX_ACL is not set | 954 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -986,6 +991,7 @@ CONFIG_EXPORTFS=m | |||
986 | CONFIG_NFS_COMMON=y | 991 | CONFIG_NFS_COMMON=y |
987 | CONFIG_SUNRPC=m | 992 | CONFIG_SUNRPC=m |
988 | CONFIG_SUNRPC_GSS=m | 993 | CONFIG_SUNRPC_GSS=m |
994 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
989 | CONFIG_RPCSEC_GSS_KRB5=m | 995 | CONFIG_RPCSEC_GSS_KRB5=m |
990 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 996 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
991 | CONFIG_SMB_FS=m | 997 | CONFIG_SMB_FS=m |
@@ -1059,7 +1065,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
1059 | # CONFIG_DEBUG_KERNEL is not set | 1065 | # CONFIG_DEBUG_KERNEL is not set |
1060 | CONFIG_DEBUG_BUGVERBOSE=y | 1066 | CONFIG_DEBUG_BUGVERBOSE=y |
1061 | CONFIG_DEBUG_MEMORY_INIT=y | 1067 | CONFIG_DEBUG_MEMORY_INIT=y |
1068 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1062 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1069 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
1070 | |||
1071 | # | ||
1072 | # Tracers | ||
1073 | # | ||
1074 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
1063 | # CONFIG_SAMPLES is not set | 1075 | # CONFIG_SAMPLES is not set |
1064 | 1076 | ||
1065 | # | 1077 | # |
@@ -1067,6 +1079,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
1067 | # | 1079 | # |
1068 | # CONFIG_KEYS is not set | 1080 | # CONFIG_KEYS is not set |
1069 | # CONFIG_SECURITY is not set | 1081 | # CONFIG_SECURITY is not set |
1082 | # CONFIG_SECURITYFS is not set | ||
1070 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1083 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
1071 | CONFIG_XOR_BLOCKS=m | 1084 | CONFIG_XOR_BLOCKS=m |
1072 | CONFIG_ASYNC_CORE=m | 1085 | CONFIG_ASYNC_CORE=m |
@@ -1077,10 +1090,12 @@ CONFIG_CRYPTO=y | |||
1077 | # | 1090 | # |
1078 | # Crypto core or helper | 1091 | # Crypto core or helper |
1079 | # | 1092 | # |
1093 | # CONFIG_CRYPTO_FIPS is not set | ||
1080 | CONFIG_CRYPTO_ALGAPI=y | 1094 | CONFIG_CRYPTO_ALGAPI=y |
1081 | CONFIG_CRYPTO_AEAD=m | 1095 | CONFIG_CRYPTO_AEAD=y |
1082 | CONFIG_CRYPTO_BLKCIPHER=m | 1096 | CONFIG_CRYPTO_BLKCIPHER=y |
1083 | CONFIG_CRYPTO_HASH=y | 1097 | CONFIG_CRYPTO_HASH=y |
1098 | CONFIG_CRYPTO_RNG=y | ||
1084 | CONFIG_CRYPTO_MANAGER=y | 1099 | CONFIG_CRYPTO_MANAGER=y |
1085 | CONFIG_CRYPTO_GF128MUL=m | 1100 | CONFIG_CRYPTO_GF128MUL=m |
1086 | CONFIG_CRYPTO_NULL=m | 1101 | CONFIG_CRYPTO_NULL=m |
@@ -1154,14 +1169,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1154 | # | 1169 | # |
1155 | CONFIG_CRYPTO_DEFLATE=m | 1170 | CONFIG_CRYPTO_DEFLATE=m |
1156 | CONFIG_CRYPTO_LZO=m | 1171 | CONFIG_CRYPTO_LZO=m |
1172 | |||
1173 | # | ||
1174 | # Random Number Generation | ||
1175 | # | ||
1176 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1157 | # CONFIG_CRYPTO_HW is not set | 1177 | # CONFIG_CRYPTO_HW is not set |
1158 | 1178 | ||
1159 | # | 1179 | # |
1160 | # Library routines | 1180 | # Library routines |
1161 | # | 1181 | # |
1162 | CONFIG_BITREVERSE=y | 1182 | CONFIG_BITREVERSE=y |
1163 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1164 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1165 | CONFIG_CRC_CCITT=m | 1183 | CONFIG_CRC_CCITT=m |
1166 | CONFIG_CRC16=m | 1184 | CONFIG_CRC16=m |
1167 | CONFIG_CRC_T10DIF=y | 1185 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/apollo_defconfig b/arch/m68k/configs/apollo_defconfig index c41b854c0284..935108d115a0 100644 --- a/arch/m68k/configs/apollo_defconfig +++ b/arch/m68k/configs/apollo_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:01 2008 | 4 | # Tue Dec 2 20:27:43 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -148,19 +138,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
148 | CONFIG_DISCONTIGMEM=y | 138 | CONFIG_DISCONTIGMEM=y |
149 | CONFIG_FLAT_NODE_MEM_MAP=y | 139 | CONFIG_FLAT_NODE_MEM_MAP=y |
150 | CONFIG_NEED_MULTIPLE_NODES=y | 140 | CONFIG_NEED_MULTIPLE_NODES=y |
151 | # CONFIG_SPARSEMEM_STATIC is not set | ||
152 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
153 | CONFIG_PAGEFLAGS_EXTENDED=y | 141 | CONFIG_PAGEFLAGS_EXTENDED=y |
154 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 142 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
155 | # CONFIG_RESOURCES_64BIT is not set | 143 | # CONFIG_RESOURCES_64BIT is not set |
144 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
156 | CONFIG_ZONE_DMA_FLAG=1 | 145 | CONFIG_ZONE_DMA_FLAG=1 |
157 | CONFIG_BOUNCE=y | 146 | CONFIG_BOUNCE=y |
158 | CONFIG_VIRT_TO_BUS=y | 147 | CONFIG_VIRT_TO_BUS=y |
148 | CONFIG_UNEVICTABLE_LRU=y | ||
159 | 149 | ||
160 | # | 150 | # |
161 | # General setup | 151 | # General setup |
162 | # | 152 | # |
163 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
154 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
155 | CONFIG_HAVE_AOUT=y | ||
164 | CONFIG_BINFMT_AOUT=m | 156 | CONFIG_BINFMT_AOUT=m |
165 | CONFIG_BINFMT_MISC=m | 157 | CONFIG_BINFMT_MISC=m |
166 | CONFIG_HEARTBEAT=y | 158 | CONFIG_HEARTBEAT=y |
@@ -210,7 +202,6 @@ CONFIG_INET_TCP_DIAG=m | |||
210 | CONFIG_TCP_CONG_CUBIC=y | 202 | CONFIG_TCP_CONG_CUBIC=y |
211 | CONFIG_DEFAULT_TCP_CONG="cubic" | 203 | CONFIG_DEFAULT_TCP_CONG="cubic" |
212 | # CONFIG_TCP_MD5SIG is not set | 204 | # CONFIG_TCP_MD5SIG is not set |
213 | # CONFIG_IP_VS is not set | ||
214 | CONFIG_IPV6=m | 205 | CONFIG_IPV6=m |
215 | CONFIG_IPV6_PRIVACY=y | 206 | CONFIG_IPV6_PRIVACY=y |
216 | CONFIG_IPV6_ROUTER_PREF=y | 207 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -260,13 +251,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
260 | CONFIG_NF_CONNTRACK_SIP=m | 251 | CONFIG_NF_CONNTRACK_SIP=m |
261 | CONFIG_NF_CONNTRACK_TFTP=m | 252 | CONFIG_NF_CONNTRACK_TFTP=m |
262 | # CONFIG_NF_CT_NETLINK is not set | 253 | # CONFIG_NF_CT_NETLINK is not set |
254 | # CONFIG_NETFILTER_TPROXY is not set | ||
263 | CONFIG_NETFILTER_XTABLES=m | 255 | CONFIG_NETFILTER_XTABLES=m |
264 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 256 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
265 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 257 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
266 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 258 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
267 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 259 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
268 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
269 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 260 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
261 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
270 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 262 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
271 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 263 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
272 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 264 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -280,19 +272,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
280 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 272 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
281 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 273 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
282 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 274 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
275 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
283 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 276 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
284 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 277 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
285 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 278 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
286 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 279 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
287 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 280 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
288 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 281 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
282 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
289 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 283 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
290 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 284 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
291 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
292 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 285 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
293 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 286 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
294 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 287 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
295 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 288 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
289 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
290 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
296 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 291 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
297 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 292 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
298 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 293 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -300,20 +295,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
300 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 295 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
301 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 296 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
302 | CONFIG_NETFILTER_XT_MATCH_U32=m | 297 | CONFIG_NETFILTER_XT_MATCH_U32=m |
303 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 298 | # CONFIG_IP_VS is not set |
304 | 299 | ||
305 | # | 300 | # |
306 | # IP: Netfilter Configuration | 301 | # IP: Netfilter Configuration |
307 | # | 302 | # |
303 | CONFIG_NF_DEFRAG_IPV4=m | ||
308 | CONFIG_NF_CONNTRACK_IPV4=m | 304 | CONFIG_NF_CONNTRACK_IPV4=m |
309 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 305 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
310 | CONFIG_IP_NF_QUEUE=m | 306 | CONFIG_IP_NF_QUEUE=m |
311 | CONFIG_IP_NF_IPTABLES=m | 307 | CONFIG_IP_NF_IPTABLES=m |
312 | CONFIG_IP_NF_MATCH_RECENT=m | 308 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
313 | CONFIG_IP_NF_MATCH_ECN=m | ||
314 | CONFIG_IP_NF_MATCH_AH=m | 309 | CONFIG_IP_NF_MATCH_AH=m |
310 | CONFIG_IP_NF_MATCH_ECN=m | ||
315 | CONFIG_IP_NF_MATCH_TTL=m | 311 | CONFIG_IP_NF_MATCH_TTL=m |
316 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
317 | CONFIG_IP_NF_FILTER=m | 312 | CONFIG_IP_NF_FILTER=m |
318 | CONFIG_IP_NF_TARGET_REJECT=m | 313 | CONFIG_IP_NF_TARGET_REJECT=m |
319 | CONFIG_IP_NF_TARGET_LOG=m | 314 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -321,8 +316,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
321 | CONFIG_NF_NAT=m | 316 | CONFIG_NF_NAT=m |
322 | CONFIG_NF_NAT_NEEDED=y | 317 | CONFIG_NF_NAT_NEEDED=y |
323 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 318 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
324 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
325 | CONFIG_IP_NF_TARGET_NETMAP=m | 319 | CONFIG_IP_NF_TARGET_NETMAP=m |
320 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
326 | CONFIG_NF_NAT_SNMP_BASIC=m | 321 | CONFIG_NF_NAT_SNMP_BASIC=m |
327 | CONFIG_NF_NAT_PROTO_GRE=m | 322 | CONFIG_NF_NAT_PROTO_GRE=m |
328 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 323 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -335,9 +330,9 @@ CONFIG_NF_NAT_PPTP=m | |||
335 | CONFIG_NF_NAT_H323=m | 330 | CONFIG_NF_NAT_H323=m |
336 | CONFIG_NF_NAT_SIP=m | 331 | CONFIG_NF_NAT_SIP=m |
337 | CONFIG_IP_NF_MANGLE=m | 332 | CONFIG_IP_NF_MANGLE=m |
333 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
338 | CONFIG_IP_NF_TARGET_ECN=m | 334 | CONFIG_IP_NF_TARGET_ECN=m |
339 | CONFIG_IP_NF_TARGET_TTL=m | 335 | CONFIG_IP_NF_TARGET_TTL=m |
340 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
341 | CONFIG_IP_NF_RAW=m | 336 | CONFIG_IP_NF_RAW=m |
342 | CONFIG_IP_NF_ARPTABLES=m | 337 | CONFIG_IP_NF_ARPTABLES=m |
343 | CONFIG_IP_NF_ARPFILTER=m | 338 | CONFIG_IP_NF_ARPFILTER=m |
@@ -349,16 +344,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
349 | CONFIG_NF_CONNTRACK_IPV6=m | 344 | CONFIG_NF_CONNTRACK_IPV6=m |
350 | CONFIG_IP6_NF_QUEUE=m | 345 | CONFIG_IP6_NF_QUEUE=m |
351 | CONFIG_IP6_NF_IPTABLES=m | 346 | CONFIG_IP6_NF_IPTABLES=m |
352 | CONFIG_IP6_NF_MATCH_RT=m | 347 | CONFIG_IP6_NF_MATCH_AH=m |
353 | CONFIG_IP6_NF_MATCH_OPTS=m | 348 | CONFIG_IP6_NF_MATCH_EUI64=m |
354 | CONFIG_IP6_NF_MATCH_FRAG=m | 349 | CONFIG_IP6_NF_MATCH_FRAG=m |
350 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
355 | CONFIG_IP6_NF_MATCH_HL=m | 351 | CONFIG_IP6_NF_MATCH_HL=m |
356 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 352 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
357 | CONFIG_IP6_NF_MATCH_AH=m | ||
358 | CONFIG_IP6_NF_MATCH_MH=m | 353 | CONFIG_IP6_NF_MATCH_MH=m |
359 | CONFIG_IP6_NF_MATCH_EUI64=m | 354 | CONFIG_IP6_NF_MATCH_RT=m |
360 | CONFIG_IP6_NF_FILTER=m | ||
361 | CONFIG_IP6_NF_TARGET_LOG=m | 355 | CONFIG_IP6_NF_TARGET_LOG=m |
356 | CONFIG_IP6_NF_FILTER=m | ||
362 | CONFIG_IP6_NF_TARGET_REJECT=m | 357 | CONFIG_IP6_NF_TARGET_REJECT=m |
363 | CONFIG_IP6_NF_MANGLE=m | 358 | CONFIG_IP6_NF_MANGLE=m |
364 | CONFIG_IP6_NF_TARGET_HL=m | 359 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -385,6 +380,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
385 | # CONFIG_TIPC is not set | 380 | # CONFIG_TIPC is not set |
386 | # CONFIG_ATM is not set | 381 | # CONFIG_ATM is not set |
387 | # CONFIG_BRIDGE is not set | 382 | # CONFIG_BRIDGE is not set |
383 | # CONFIG_NET_DSA is not set | ||
388 | # CONFIG_VLAN_8021Q is not set | 384 | # CONFIG_VLAN_8021Q is not set |
389 | # CONFIG_DECNET is not set | 385 | # CONFIG_DECNET is not set |
390 | CONFIG_LLC=m | 386 | CONFIG_LLC=m |
@@ -408,19 +404,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
408 | # CONFIG_IRDA is not set | 404 | # CONFIG_IRDA is not set |
409 | # CONFIG_BT is not set | 405 | # CONFIG_BT is not set |
410 | # CONFIG_AF_RXRPC is not set | 406 | # CONFIG_AF_RXRPC is not set |
411 | 407 | # CONFIG_PHONET is not set | |
412 | # | 408 | # CONFIG_WIRELESS is not set |
413 | # Wireless | ||
414 | # | ||
415 | # CONFIG_CFG80211 is not set | ||
416 | CONFIG_WIRELESS_EXT=y | ||
417 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
418 | # CONFIG_MAC80211 is not set | ||
419 | CONFIG_IEEE80211=m | ||
420 | # CONFIG_IEEE80211_DEBUG is not set | ||
421 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
422 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
423 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
424 | # CONFIG_RFKILL is not set | 409 | # CONFIG_RFKILL is not set |
425 | # CONFIG_NET_9P is not set | 410 | # CONFIG_NET_9P is not set |
426 | 411 | ||
@@ -458,6 +443,7 @@ CONFIG_ATA_OVER_ETH=m | |||
458 | CONFIG_MISC_DEVICES=y | 443 | CONFIG_MISC_DEVICES=y |
459 | # CONFIG_EEPROM_93CX6 is not set | 444 | # CONFIG_EEPROM_93CX6 is not set |
460 | # CONFIG_ENCLOSURE_SERVICES is not set | 445 | # CONFIG_ENCLOSURE_SERVICES is not set |
446 | # CONFIG_C2PORT is not set | ||
461 | CONFIG_HAVE_IDE=y | 447 | CONFIG_HAVE_IDE=y |
462 | # CONFIG_IDE is not set | 448 | # CONFIG_IDE is not set |
463 | 449 | ||
@@ -540,6 +526,9 @@ CONFIG_NET_ETHERNET=y | |||
540 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 526 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
541 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 527 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
542 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 528 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
529 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
530 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
531 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
543 | # CONFIG_B44 is not set | 532 | # CONFIG_B44 is not set |
544 | # CONFIG_NETDEV_1000 is not set | 533 | # CONFIG_NETDEV_1000 is not set |
545 | # CONFIG_NETDEV_10000 is not set | 534 | # CONFIG_NETDEV_10000 is not set |
@@ -609,6 +598,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
609 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 598 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
610 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 599 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
611 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 600 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
601 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
612 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 602 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
613 | CONFIG_MOUSE_SERIAL=m | 603 | CONFIG_MOUSE_SERIAL=m |
614 | # CONFIG_MOUSE_VSXXXAA is not set | 604 | # CONFIG_MOUSE_VSXXXAA is not set |
@@ -663,11 +653,11 @@ CONFIG_GEN_RTC_X=y | |||
663 | # CONFIG_THERMAL is not set | 653 | # CONFIG_THERMAL is not set |
664 | # CONFIG_THERMAL_HWMON is not set | 654 | # CONFIG_THERMAL_HWMON is not set |
665 | # CONFIG_WATCHDOG is not set | 655 | # CONFIG_WATCHDOG is not set |
656 | CONFIG_SSB_POSSIBLE=y | ||
666 | 657 | ||
667 | # | 658 | # |
668 | # Sonics Silicon Backplane | 659 | # Sonics Silicon Backplane |
669 | # | 660 | # |
670 | CONFIG_SSB_POSSIBLE=y | ||
671 | # CONFIG_SSB is not set | 661 | # CONFIG_SSB is not set |
672 | 662 | ||
673 | # | 663 | # |
@@ -677,6 +667,7 @@ CONFIG_SSB_POSSIBLE=y | |||
677 | # CONFIG_MFD_SM501 is not set | 667 | # CONFIG_MFD_SM501 is not set |
678 | # CONFIG_HTC_PASIC3 is not set | 668 | # CONFIG_HTC_PASIC3 is not set |
679 | # CONFIG_MFD_TMIO is not set | 669 | # CONFIG_MFD_TMIO is not set |
670 | # CONFIG_REGULATOR is not set | ||
680 | 671 | ||
681 | # | 672 | # |
682 | # Multimedia devices | 673 | # Multimedia devices |
@@ -702,6 +693,7 @@ CONFIG_SSB_POSSIBLE=y | |||
702 | CONFIG_FB=y | 693 | CONFIG_FB=y |
703 | # CONFIG_FIRMWARE_EDID is not set | 694 | # CONFIG_FIRMWARE_EDID is not set |
704 | # CONFIG_FB_DDC is not set | 695 | # CONFIG_FB_DDC is not set |
696 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
705 | CONFIG_FB_CFB_FILLRECT=y | 697 | CONFIG_FB_CFB_FILLRECT=y |
706 | # CONFIG_FB_CFB_COPYAREA is not set | 698 | # CONFIG_FB_CFB_COPYAREA is not set |
707 | CONFIG_FB_CFB_IMAGEBLIT=y | 699 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -724,6 +716,8 @@ CONFIG_FB_APOLLO=y | |||
724 | # CONFIG_FB_UVESA is not set | 716 | # CONFIG_FB_UVESA is not set |
725 | # CONFIG_FB_S1D13XXX is not set | 717 | # CONFIG_FB_S1D13XXX is not set |
726 | # CONFIG_FB_VIRTUAL is not set | 718 | # CONFIG_FB_VIRTUAL is not set |
719 | # CONFIG_FB_METRONOME is not set | ||
720 | # CONFIG_FB_MB862XX is not set | ||
727 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 721 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
728 | 722 | ||
729 | # | 723 | # |
@@ -750,6 +744,12 @@ CONFIG_HID_SUPPORT=y | |||
750 | CONFIG_HID=m | 744 | CONFIG_HID=m |
751 | # CONFIG_HID_DEBUG is not set | 745 | # CONFIG_HID_DEBUG is not set |
752 | CONFIG_HIDRAW=y | 746 | CONFIG_HIDRAW=y |
747 | # CONFIG_HID_PID is not set | ||
748 | |||
749 | # | ||
750 | # Special HID drivers | ||
751 | # | ||
752 | CONFIG_HID_COMPAT=y | ||
753 | # CONFIG_USB_SUPPORT is not set | 753 | # CONFIG_USB_SUPPORT is not set |
754 | # CONFIG_MMC is not set | 754 | # CONFIG_MMC is not set |
755 | # CONFIG_MEMSTICK is not set | 755 | # CONFIG_MEMSTICK is not set |
@@ -758,6 +758,8 @@ CONFIG_HIDRAW=y | |||
758 | # CONFIG_RTC_CLASS is not set | 758 | # CONFIG_RTC_CLASS is not set |
759 | # CONFIG_DMADEVICES is not set | 759 | # CONFIG_DMADEVICES is not set |
760 | # CONFIG_UIO is not set | 760 | # CONFIG_UIO is not set |
761 | # CONFIG_STAGING is not set | ||
762 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
761 | 763 | ||
762 | # | 764 | # |
763 | # Character devices | 765 | # Character devices |
@@ -773,8 +775,9 @@ CONFIG_EXT2_FS=y | |||
773 | # CONFIG_EXT2_FS_XIP is not set | 775 | # CONFIG_EXT2_FS_XIP is not set |
774 | CONFIG_EXT3_FS=y | 776 | CONFIG_EXT3_FS=y |
775 | # CONFIG_EXT3_FS_XATTR is not set | 777 | # CONFIG_EXT3_FS_XATTR is not set |
776 | # CONFIG_EXT4DEV_FS is not set | 778 | # CONFIG_EXT4_FS is not set |
777 | CONFIG_JBD=y | 779 | CONFIG_JBD=y |
780 | CONFIG_JBD2=m | ||
778 | CONFIG_REISERFS_FS=m | 781 | CONFIG_REISERFS_FS=m |
779 | # CONFIG_REISERFS_CHECK is not set | 782 | # CONFIG_REISERFS_CHECK is not set |
780 | # CONFIG_REISERFS_PROC_INFO is not set | 783 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -785,6 +788,7 @@ CONFIG_JFS_FS=m | |||
785 | # CONFIG_JFS_DEBUG is not set | 788 | # CONFIG_JFS_DEBUG is not set |
786 | # CONFIG_JFS_STATISTICS is not set | 789 | # CONFIG_JFS_STATISTICS is not set |
787 | # CONFIG_FS_POSIX_ACL is not set | 790 | # CONFIG_FS_POSIX_ACL is not set |
791 | CONFIG_FILE_LOCKING=y | ||
788 | CONFIG_XFS_FS=m | 792 | CONFIG_XFS_FS=m |
789 | # CONFIG_XFS_QUOTA is not set | 793 | # CONFIG_XFS_QUOTA is not set |
790 | # CONFIG_XFS_POSIX_ACL is not set | 794 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -796,6 +800,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
796 | # CONFIG_OCFS2_FS_STATS is not set | 800 | # CONFIG_OCFS2_FS_STATS is not set |
797 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 801 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
798 | # CONFIG_OCFS2_DEBUG_FS is not set | 802 | # CONFIG_OCFS2_DEBUG_FS is not set |
803 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
799 | CONFIG_DNOTIFY=y | 804 | CONFIG_DNOTIFY=y |
800 | CONFIG_INOTIFY=y | 805 | CONFIG_INOTIFY=y |
801 | CONFIG_INOTIFY_USER=y | 806 | CONFIG_INOTIFY_USER=y |
@@ -834,6 +839,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
834 | CONFIG_PROC_FS=y | 839 | CONFIG_PROC_FS=y |
835 | CONFIG_PROC_KCORE=y | 840 | CONFIG_PROC_KCORE=y |
836 | CONFIG_PROC_SYSCTL=y | 841 | CONFIG_PROC_SYSCTL=y |
842 | CONFIG_PROC_PAGE_MONITOR=y | ||
837 | CONFIG_SYSFS=y | 843 | CONFIG_SYSFS=y |
838 | CONFIG_TMPFS=y | 844 | CONFIG_TMPFS=y |
839 | # CONFIG_TMPFS_POSIX_ACL is not set | 845 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -877,6 +883,7 @@ CONFIG_EXPORTFS=m | |||
877 | CONFIG_NFS_COMMON=y | 883 | CONFIG_NFS_COMMON=y |
878 | CONFIG_SUNRPC=y | 884 | CONFIG_SUNRPC=y |
879 | CONFIG_SUNRPC_GSS=y | 885 | CONFIG_SUNRPC_GSS=y |
886 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
880 | CONFIG_RPCSEC_GSS_KRB5=y | 887 | CONFIG_RPCSEC_GSS_KRB5=y |
881 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 888 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
882 | CONFIG_SMB_FS=m | 889 | CONFIG_SMB_FS=m |
@@ -949,7 +956,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
949 | # CONFIG_DEBUG_KERNEL is not set | 956 | # CONFIG_DEBUG_KERNEL is not set |
950 | CONFIG_DEBUG_BUGVERBOSE=y | 957 | CONFIG_DEBUG_BUGVERBOSE=y |
951 | CONFIG_DEBUG_MEMORY_INIT=y | 958 | CONFIG_DEBUG_MEMORY_INIT=y |
959 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
952 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 960 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
961 | |||
962 | # | ||
963 | # Tracers | ||
964 | # | ||
965 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
953 | # CONFIG_SAMPLES is not set | 966 | # CONFIG_SAMPLES is not set |
954 | 967 | ||
955 | # | 968 | # |
@@ -957,6 +970,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
957 | # | 970 | # |
958 | # CONFIG_KEYS is not set | 971 | # CONFIG_KEYS is not set |
959 | # CONFIG_SECURITY is not set | 972 | # CONFIG_SECURITY is not set |
973 | # CONFIG_SECURITYFS is not set | ||
960 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 974 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
961 | CONFIG_XOR_BLOCKS=m | 975 | CONFIG_XOR_BLOCKS=m |
962 | CONFIG_ASYNC_CORE=m | 976 | CONFIG_ASYNC_CORE=m |
@@ -967,10 +981,12 @@ CONFIG_CRYPTO=y | |||
967 | # | 981 | # |
968 | # Crypto core or helper | 982 | # Crypto core or helper |
969 | # | 983 | # |
984 | # CONFIG_CRYPTO_FIPS is not set | ||
970 | CONFIG_CRYPTO_ALGAPI=y | 985 | CONFIG_CRYPTO_ALGAPI=y |
971 | CONFIG_CRYPTO_AEAD=m | 986 | CONFIG_CRYPTO_AEAD=y |
972 | CONFIG_CRYPTO_BLKCIPHER=y | 987 | CONFIG_CRYPTO_BLKCIPHER=y |
973 | CONFIG_CRYPTO_HASH=y | 988 | CONFIG_CRYPTO_HASH=y |
989 | CONFIG_CRYPTO_RNG=y | ||
974 | CONFIG_CRYPTO_MANAGER=y | 990 | CONFIG_CRYPTO_MANAGER=y |
975 | CONFIG_CRYPTO_GF128MUL=m | 991 | CONFIG_CRYPTO_GF128MUL=m |
976 | CONFIG_CRYPTO_NULL=m | 992 | CONFIG_CRYPTO_NULL=m |
@@ -1044,14 +1060,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1044 | # | 1060 | # |
1045 | CONFIG_CRYPTO_DEFLATE=m | 1061 | CONFIG_CRYPTO_DEFLATE=m |
1046 | CONFIG_CRYPTO_LZO=m | 1062 | CONFIG_CRYPTO_LZO=m |
1063 | |||
1064 | # | ||
1065 | # Random Number Generation | ||
1066 | # | ||
1067 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1047 | # CONFIG_CRYPTO_HW is not set | 1068 | # CONFIG_CRYPTO_HW is not set |
1048 | 1069 | ||
1049 | # | 1070 | # |
1050 | # Library routines | 1071 | # Library routines |
1051 | # | 1072 | # |
1052 | CONFIG_BITREVERSE=y | 1073 | CONFIG_BITREVERSE=y |
1053 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1054 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1055 | CONFIG_CRC_CCITT=m | 1074 | CONFIG_CRC_CCITT=m |
1056 | CONFIG_CRC16=m | 1075 | CONFIG_CRC16=m |
1057 | CONFIG_CRC_T10DIF=y | 1076 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/atari_defconfig b/arch/m68k/configs/atari_defconfig index 654c5acb9e86..a594a1d47b62 100644 --- a/arch/m68k/configs/atari_defconfig +++ b/arch/m68k/configs/atari_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:02 2008 | 4 | # Tue Dec 2 20:27:44 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | CONFIG_ATARI=y | 114 | CONFIG_ATARI=y |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -148,19 +138,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
148 | CONFIG_DISCONTIGMEM=y | 138 | CONFIG_DISCONTIGMEM=y |
149 | CONFIG_FLAT_NODE_MEM_MAP=y | 139 | CONFIG_FLAT_NODE_MEM_MAP=y |
150 | CONFIG_NEED_MULTIPLE_NODES=y | 140 | CONFIG_NEED_MULTIPLE_NODES=y |
151 | # CONFIG_SPARSEMEM_STATIC is not set | ||
152 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
153 | CONFIG_PAGEFLAGS_EXTENDED=y | 141 | CONFIG_PAGEFLAGS_EXTENDED=y |
154 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 142 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
155 | # CONFIG_RESOURCES_64BIT is not set | 143 | # CONFIG_RESOURCES_64BIT is not set |
144 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
156 | CONFIG_ZONE_DMA_FLAG=1 | 145 | CONFIG_ZONE_DMA_FLAG=1 |
157 | CONFIG_BOUNCE=y | 146 | CONFIG_BOUNCE=y |
158 | CONFIG_VIRT_TO_BUS=y | 147 | CONFIG_VIRT_TO_BUS=y |
148 | CONFIG_UNEVICTABLE_LRU=y | ||
159 | 149 | ||
160 | # | 150 | # |
161 | # General setup | 151 | # General setup |
162 | # | 152 | # |
163 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
154 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
155 | CONFIG_HAVE_AOUT=y | ||
164 | CONFIG_BINFMT_AOUT=m | 156 | CONFIG_BINFMT_AOUT=m |
165 | CONFIG_BINFMT_MISC=m | 157 | CONFIG_BINFMT_MISC=m |
166 | CONFIG_STRAM_PROC=y | 158 | CONFIG_STRAM_PROC=y |
@@ -208,7 +200,6 @@ CONFIG_INET_TCP_DIAG=m | |||
208 | CONFIG_TCP_CONG_CUBIC=y | 200 | CONFIG_TCP_CONG_CUBIC=y |
209 | CONFIG_DEFAULT_TCP_CONG="cubic" | 201 | CONFIG_DEFAULT_TCP_CONG="cubic" |
210 | # CONFIG_TCP_MD5SIG is not set | 202 | # CONFIG_TCP_MD5SIG is not set |
211 | # CONFIG_IP_VS is not set | ||
212 | CONFIG_IPV6=m | 203 | CONFIG_IPV6=m |
213 | CONFIG_IPV6_PRIVACY=y | 204 | CONFIG_IPV6_PRIVACY=y |
214 | CONFIG_IPV6_ROUTER_PREF=y | 205 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -258,13 +249,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
258 | CONFIG_NF_CONNTRACK_SIP=m | 249 | CONFIG_NF_CONNTRACK_SIP=m |
259 | CONFIG_NF_CONNTRACK_TFTP=m | 250 | CONFIG_NF_CONNTRACK_TFTP=m |
260 | # CONFIG_NF_CT_NETLINK is not set | 251 | # CONFIG_NF_CT_NETLINK is not set |
252 | # CONFIG_NETFILTER_TPROXY is not set | ||
261 | CONFIG_NETFILTER_XTABLES=m | 253 | CONFIG_NETFILTER_XTABLES=m |
262 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 254 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
263 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 255 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
264 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 256 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
265 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 257 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
266 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
267 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 258 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
259 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
268 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 260 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
269 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 261 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
270 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 262 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -278,19 +270,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
278 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 270 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
279 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 271 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
280 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 272 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
273 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
281 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 274 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
282 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 275 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
283 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 276 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
284 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 277 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
285 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 278 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
286 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 279 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
280 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
287 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 281 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
288 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 282 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
289 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
290 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 283 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
291 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 284 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
292 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 285 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
293 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 286 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
287 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
288 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
294 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 289 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
295 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 290 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
296 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 291 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -298,20 +293,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
298 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 293 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
299 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 294 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
300 | CONFIG_NETFILTER_XT_MATCH_U32=m | 295 | CONFIG_NETFILTER_XT_MATCH_U32=m |
301 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 296 | # CONFIG_IP_VS is not set |
302 | 297 | ||
303 | # | 298 | # |
304 | # IP: Netfilter Configuration | 299 | # IP: Netfilter Configuration |
305 | # | 300 | # |
301 | CONFIG_NF_DEFRAG_IPV4=m | ||
306 | CONFIG_NF_CONNTRACK_IPV4=m | 302 | CONFIG_NF_CONNTRACK_IPV4=m |
307 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 303 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
308 | CONFIG_IP_NF_QUEUE=m | 304 | CONFIG_IP_NF_QUEUE=m |
309 | CONFIG_IP_NF_IPTABLES=m | 305 | CONFIG_IP_NF_IPTABLES=m |
310 | CONFIG_IP_NF_MATCH_RECENT=m | 306 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
311 | CONFIG_IP_NF_MATCH_ECN=m | ||
312 | CONFIG_IP_NF_MATCH_AH=m | 307 | CONFIG_IP_NF_MATCH_AH=m |
308 | CONFIG_IP_NF_MATCH_ECN=m | ||
313 | CONFIG_IP_NF_MATCH_TTL=m | 309 | CONFIG_IP_NF_MATCH_TTL=m |
314 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
315 | CONFIG_IP_NF_FILTER=m | 310 | CONFIG_IP_NF_FILTER=m |
316 | CONFIG_IP_NF_TARGET_REJECT=m | 311 | CONFIG_IP_NF_TARGET_REJECT=m |
317 | CONFIG_IP_NF_TARGET_LOG=m | 312 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -319,8 +314,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
319 | CONFIG_NF_NAT=m | 314 | CONFIG_NF_NAT=m |
320 | CONFIG_NF_NAT_NEEDED=y | 315 | CONFIG_NF_NAT_NEEDED=y |
321 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 316 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
322 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
323 | CONFIG_IP_NF_TARGET_NETMAP=m | 317 | CONFIG_IP_NF_TARGET_NETMAP=m |
318 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
324 | CONFIG_NF_NAT_SNMP_BASIC=m | 319 | CONFIG_NF_NAT_SNMP_BASIC=m |
325 | CONFIG_NF_NAT_PROTO_GRE=m | 320 | CONFIG_NF_NAT_PROTO_GRE=m |
326 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 321 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -333,9 +328,9 @@ CONFIG_NF_NAT_PPTP=m | |||
333 | CONFIG_NF_NAT_H323=m | 328 | CONFIG_NF_NAT_H323=m |
334 | CONFIG_NF_NAT_SIP=m | 329 | CONFIG_NF_NAT_SIP=m |
335 | CONFIG_IP_NF_MANGLE=m | 330 | CONFIG_IP_NF_MANGLE=m |
331 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
336 | CONFIG_IP_NF_TARGET_ECN=m | 332 | CONFIG_IP_NF_TARGET_ECN=m |
337 | CONFIG_IP_NF_TARGET_TTL=m | 333 | CONFIG_IP_NF_TARGET_TTL=m |
338 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
339 | CONFIG_IP_NF_RAW=m | 334 | CONFIG_IP_NF_RAW=m |
340 | CONFIG_IP_NF_ARPTABLES=m | 335 | CONFIG_IP_NF_ARPTABLES=m |
341 | CONFIG_IP_NF_ARPFILTER=m | 336 | CONFIG_IP_NF_ARPFILTER=m |
@@ -347,16 +342,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
347 | CONFIG_NF_CONNTRACK_IPV6=m | 342 | CONFIG_NF_CONNTRACK_IPV6=m |
348 | CONFIG_IP6_NF_QUEUE=m | 343 | CONFIG_IP6_NF_QUEUE=m |
349 | CONFIG_IP6_NF_IPTABLES=m | 344 | CONFIG_IP6_NF_IPTABLES=m |
350 | CONFIG_IP6_NF_MATCH_RT=m | 345 | CONFIG_IP6_NF_MATCH_AH=m |
351 | CONFIG_IP6_NF_MATCH_OPTS=m | 346 | CONFIG_IP6_NF_MATCH_EUI64=m |
352 | CONFIG_IP6_NF_MATCH_FRAG=m | 347 | CONFIG_IP6_NF_MATCH_FRAG=m |
348 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
353 | CONFIG_IP6_NF_MATCH_HL=m | 349 | CONFIG_IP6_NF_MATCH_HL=m |
354 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 350 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
355 | CONFIG_IP6_NF_MATCH_AH=m | ||
356 | CONFIG_IP6_NF_MATCH_MH=m | 351 | CONFIG_IP6_NF_MATCH_MH=m |
357 | CONFIG_IP6_NF_MATCH_EUI64=m | 352 | CONFIG_IP6_NF_MATCH_RT=m |
358 | CONFIG_IP6_NF_FILTER=m | ||
359 | CONFIG_IP6_NF_TARGET_LOG=m | 353 | CONFIG_IP6_NF_TARGET_LOG=m |
354 | CONFIG_IP6_NF_FILTER=m | ||
360 | CONFIG_IP6_NF_TARGET_REJECT=m | 355 | CONFIG_IP6_NF_TARGET_REJECT=m |
361 | CONFIG_IP6_NF_MANGLE=m | 356 | CONFIG_IP6_NF_MANGLE=m |
362 | CONFIG_IP6_NF_TARGET_HL=m | 357 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -383,6 +378,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
383 | # CONFIG_TIPC is not set | 378 | # CONFIG_TIPC is not set |
384 | # CONFIG_ATM is not set | 379 | # CONFIG_ATM is not set |
385 | # CONFIG_BRIDGE is not set | 380 | # CONFIG_BRIDGE is not set |
381 | # CONFIG_NET_DSA is not set | ||
386 | # CONFIG_VLAN_8021Q is not set | 382 | # CONFIG_VLAN_8021Q is not set |
387 | # CONFIG_DECNET is not set | 383 | # CONFIG_DECNET is not set |
388 | CONFIG_LLC=m | 384 | CONFIG_LLC=m |
@@ -406,19 +402,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
406 | # CONFIG_IRDA is not set | 402 | # CONFIG_IRDA is not set |
407 | # CONFIG_BT is not set | 403 | # CONFIG_BT is not set |
408 | # CONFIG_AF_RXRPC is not set | 404 | # CONFIG_AF_RXRPC is not set |
409 | 405 | # CONFIG_PHONET is not set | |
410 | # | 406 | # CONFIG_WIRELESS is not set |
411 | # Wireless | ||
412 | # | ||
413 | # CONFIG_CFG80211 is not set | ||
414 | CONFIG_WIRELESS_EXT=y | ||
415 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
416 | # CONFIG_MAC80211 is not set | ||
417 | CONFIG_IEEE80211=m | ||
418 | # CONFIG_IEEE80211_DEBUG is not set | ||
419 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
420 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
421 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
422 | # CONFIG_RFKILL is not set | 407 | # CONFIG_RFKILL is not set |
423 | # CONFIG_NET_9P is not set | 408 | # CONFIG_NET_9P is not set |
424 | 409 | ||
@@ -462,21 +447,20 @@ CONFIG_ATA_OVER_ETH=m | |||
462 | CONFIG_MISC_DEVICES=y | 447 | CONFIG_MISC_DEVICES=y |
463 | # CONFIG_EEPROM_93CX6 is not set | 448 | # CONFIG_EEPROM_93CX6 is not set |
464 | # CONFIG_ENCLOSURE_SERVICES is not set | 449 | # CONFIG_ENCLOSURE_SERVICES is not set |
450 | # CONFIG_C2PORT is not set | ||
465 | CONFIG_HAVE_IDE=y | 451 | CONFIG_HAVE_IDE=y |
466 | CONFIG_IDE=y | 452 | CONFIG_IDE=y |
467 | CONFIG_BLK_DEV_IDE=y | ||
468 | 453 | ||
469 | # | 454 | # |
470 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 455 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
471 | # | 456 | # |
472 | CONFIG_IDE_ATAPI=y | ||
473 | # CONFIG_BLK_DEV_IDE_SATA is not set | 457 | # CONFIG_BLK_DEV_IDE_SATA is not set |
474 | CONFIG_BLK_DEV_IDEDISK=y | 458 | CONFIG_IDE_GD=y |
475 | # CONFIG_IDEDISK_MULTI_MODE is not set | 459 | CONFIG_IDE_GD_ATA=y |
460 | # CONFIG_IDE_GD_ATAPI is not set | ||
476 | CONFIG_BLK_DEV_IDECD=y | 461 | CONFIG_BLK_DEV_IDECD=y |
477 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | 462 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y |
478 | # CONFIG_BLK_DEV_IDETAPE is not set | 463 | # CONFIG_BLK_DEV_IDETAPE is not set |
479 | CONFIG_BLK_DEV_IDEFLOPPY=m | ||
480 | # CONFIG_BLK_DEV_IDESCSI is not set | 464 | # CONFIG_BLK_DEV_IDESCSI is not set |
481 | # CONFIG_IDE_TASK_IOCTL is not set | 465 | # CONFIG_IDE_TASK_IOCTL is not set |
482 | CONFIG_IDE_PROC_FS=y | 466 | CONFIG_IDE_PROC_FS=y |
@@ -565,12 +549,15 @@ CONFIG_EQUALIZER=m | |||
565 | CONFIG_VETH=m | 549 | CONFIG_VETH=m |
566 | # CONFIG_PHYLIB is not set | 550 | # CONFIG_PHYLIB is not set |
567 | CONFIG_NET_ETHERNET=y | 551 | CONFIG_NET_ETHERNET=y |
568 | CONFIG_MII=m | 552 | CONFIG_MII=y |
569 | CONFIG_ATARILANCE=m | 553 | CONFIG_ATARILANCE=m |
570 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 554 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
571 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 555 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
572 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 556 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
573 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 557 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
558 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
559 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
560 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
574 | # CONFIG_B44 is not set | 561 | # CONFIG_B44 is not set |
575 | # CONFIG_NET_POCKET is not set | 562 | # CONFIG_NET_POCKET is not set |
576 | # CONFIG_NETDEV_1000 is not set | 563 | # CONFIG_NETDEV_1000 is not set |
@@ -644,6 +631,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
644 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 631 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
645 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 632 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
646 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 633 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
634 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
647 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 635 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
648 | # CONFIG_MOUSE_SERIAL is not set | 636 | # CONFIG_MOUSE_SERIAL is not set |
649 | CONFIG_MOUSE_ATARI=m | 637 | CONFIG_MOUSE_ATARI=m |
@@ -706,11 +694,11 @@ CONFIG_GEN_RTC_X=y | |||
706 | # CONFIG_THERMAL is not set | 694 | # CONFIG_THERMAL is not set |
707 | # CONFIG_THERMAL_HWMON is not set | 695 | # CONFIG_THERMAL_HWMON is not set |
708 | # CONFIG_WATCHDOG is not set | 696 | # CONFIG_WATCHDOG is not set |
697 | CONFIG_SSB_POSSIBLE=y | ||
709 | 698 | ||
710 | # | 699 | # |
711 | # Sonics Silicon Backplane | 700 | # Sonics Silicon Backplane |
712 | # | 701 | # |
713 | CONFIG_SSB_POSSIBLE=y | ||
714 | # CONFIG_SSB is not set | 702 | # CONFIG_SSB is not set |
715 | 703 | ||
716 | # | 704 | # |
@@ -720,6 +708,7 @@ CONFIG_SSB_POSSIBLE=y | |||
720 | # CONFIG_MFD_SM501 is not set | 708 | # CONFIG_MFD_SM501 is not set |
721 | # CONFIG_HTC_PASIC3 is not set | 709 | # CONFIG_HTC_PASIC3 is not set |
722 | # CONFIG_MFD_TMIO is not set | 710 | # CONFIG_MFD_TMIO is not set |
711 | # CONFIG_REGULATOR is not set | ||
723 | 712 | ||
724 | # | 713 | # |
725 | # Multimedia devices | 714 | # Multimedia devices |
@@ -745,6 +734,7 @@ CONFIG_SSB_POSSIBLE=y | |||
745 | CONFIG_FB=y | 734 | CONFIG_FB=y |
746 | # CONFIG_FIRMWARE_EDID is not set | 735 | # CONFIG_FIRMWARE_EDID is not set |
747 | # CONFIG_FB_DDC is not set | 736 | # CONFIG_FB_DDC is not set |
737 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
748 | CONFIG_FB_CFB_FILLRECT=y | 738 | CONFIG_FB_CFB_FILLRECT=y |
749 | CONFIG_FB_CFB_COPYAREA=y | 739 | CONFIG_FB_CFB_COPYAREA=y |
750 | CONFIG_FB_CFB_IMAGEBLIT=y | 740 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -768,6 +758,8 @@ CONFIG_FB_ATARI=y | |||
768 | # CONFIG_FB_S1D13XXX is not set | 758 | # CONFIG_FB_S1D13XXX is not set |
769 | # CONFIG_FB_ATY is not set | 759 | # CONFIG_FB_ATY is not set |
770 | # CONFIG_FB_VIRTUAL is not set | 760 | # CONFIG_FB_VIRTUAL is not set |
761 | # CONFIG_FB_METRONOME is not set | ||
762 | # CONFIG_FB_MB862XX is not set | ||
771 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 763 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
772 | 764 | ||
773 | # | 765 | # |
@@ -790,12 +782,19 @@ CONFIG_LOGO_LINUX_MONO=y | |||
790 | CONFIG_LOGO_LINUX_VGA16=y | 782 | CONFIG_LOGO_LINUX_VGA16=y |
791 | CONFIG_LOGO_LINUX_CLUT224=y | 783 | CONFIG_LOGO_LINUX_CLUT224=y |
792 | CONFIG_SOUND=m | 784 | CONFIG_SOUND=m |
785 | CONFIG_SOUND_OSS_CORE=y | ||
793 | CONFIG_DMASOUND_ATARI=m | 786 | CONFIG_DMASOUND_ATARI=m |
794 | CONFIG_DMASOUND=m | 787 | CONFIG_DMASOUND=m |
795 | CONFIG_HID_SUPPORT=y | 788 | CONFIG_HID_SUPPORT=y |
796 | CONFIG_HID=m | 789 | CONFIG_HID=m |
797 | # CONFIG_HID_DEBUG is not set | 790 | # CONFIG_HID_DEBUG is not set |
798 | CONFIG_HIDRAW=y | 791 | CONFIG_HIDRAW=y |
792 | # CONFIG_HID_PID is not set | ||
793 | |||
794 | # | ||
795 | # Special HID drivers | ||
796 | # | ||
797 | CONFIG_HID_COMPAT=y | ||
799 | # CONFIG_USB_SUPPORT is not set | 798 | # CONFIG_USB_SUPPORT is not set |
800 | # CONFIG_MMC is not set | 799 | # CONFIG_MMC is not set |
801 | # CONFIG_MEMSTICK is not set | 800 | # CONFIG_MEMSTICK is not set |
@@ -805,6 +804,8 @@ CONFIG_HIDRAW=y | |||
805 | # CONFIG_DMADEVICES is not set | 804 | # CONFIG_DMADEVICES is not set |
806 | # CONFIG_AUXDISPLAY is not set | 805 | # CONFIG_AUXDISPLAY is not set |
807 | # CONFIG_UIO is not set | 806 | # CONFIG_UIO is not set |
807 | # CONFIG_STAGING is not set | ||
808 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
808 | 809 | ||
809 | # | 810 | # |
810 | # Character devices | 811 | # Character devices |
@@ -821,10 +822,9 @@ CONFIG_EXT2_FS=y | |||
821 | # CONFIG_EXT2_FS_XIP is not set | 822 | # CONFIG_EXT2_FS_XIP is not set |
822 | CONFIG_EXT3_FS=y | 823 | CONFIG_EXT3_FS=y |
823 | # CONFIG_EXT3_FS_XATTR is not set | 824 | # CONFIG_EXT3_FS_XATTR is not set |
824 | CONFIG_EXT4DEV_FS=y | 825 | # CONFIG_EXT4_FS is not set |
825 | # CONFIG_EXT4DEV_FS_XATTR is not set | ||
826 | CONFIG_JBD=y | 826 | CONFIG_JBD=y |
827 | CONFIG_JBD2=y | 827 | CONFIG_JBD2=m |
828 | CONFIG_REISERFS_FS=m | 828 | CONFIG_REISERFS_FS=m |
829 | # CONFIG_REISERFS_CHECK is not set | 829 | # CONFIG_REISERFS_CHECK is not set |
830 | # CONFIG_REISERFS_PROC_INFO is not set | 830 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -835,6 +835,7 @@ CONFIG_JFS_FS=m | |||
835 | # CONFIG_JFS_DEBUG is not set | 835 | # CONFIG_JFS_DEBUG is not set |
836 | # CONFIG_JFS_STATISTICS is not set | 836 | # CONFIG_JFS_STATISTICS is not set |
837 | # CONFIG_FS_POSIX_ACL is not set | 837 | # CONFIG_FS_POSIX_ACL is not set |
838 | CONFIG_FILE_LOCKING=y | ||
838 | CONFIG_XFS_FS=m | 839 | CONFIG_XFS_FS=m |
839 | # CONFIG_XFS_QUOTA is not set | 840 | # CONFIG_XFS_QUOTA is not set |
840 | # CONFIG_XFS_POSIX_ACL is not set | 841 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -846,6 +847,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
846 | # CONFIG_OCFS2_FS_STATS is not set | 847 | # CONFIG_OCFS2_FS_STATS is not set |
847 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 848 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
848 | # CONFIG_OCFS2_DEBUG_FS is not set | 849 | # CONFIG_OCFS2_DEBUG_FS is not set |
850 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
849 | CONFIG_DNOTIFY=y | 851 | CONFIG_DNOTIFY=y |
850 | CONFIG_INOTIFY=y | 852 | CONFIG_INOTIFY=y |
851 | CONFIG_INOTIFY_USER=y | 853 | CONFIG_INOTIFY_USER=y |
@@ -884,6 +886,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
884 | CONFIG_PROC_FS=y | 886 | CONFIG_PROC_FS=y |
885 | CONFIG_PROC_KCORE=y | 887 | CONFIG_PROC_KCORE=y |
886 | CONFIG_PROC_SYSCTL=y | 888 | CONFIG_PROC_SYSCTL=y |
889 | CONFIG_PROC_PAGE_MONITOR=y | ||
887 | CONFIG_SYSFS=y | 890 | CONFIG_SYSFS=y |
888 | CONFIG_TMPFS=y | 891 | CONFIG_TMPFS=y |
889 | # CONFIG_TMPFS_POSIX_ACL is not set | 892 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -925,6 +928,7 @@ CONFIG_LOCKD_V4=y | |||
925 | CONFIG_EXPORTFS=m | 928 | CONFIG_EXPORTFS=m |
926 | CONFIG_NFS_COMMON=y | 929 | CONFIG_NFS_COMMON=y |
927 | CONFIG_SUNRPC=m | 930 | CONFIG_SUNRPC=m |
931 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
928 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 932 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
929 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 933 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
930 | CONFIG_SMB_FS=m | 934 | CONFIG_SMB_FS=m |
@@ -998,7 +1002,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
998 | # CONFIG_DEBUG_KERNEL is not set | 1002 | # CONFIG_DEBUG_KERNEL is not set |
999 | CONFIG_DEBUG_BUGVERBOSE=y | 1003 | CONFIG_DEBUG_BUGVERBOSE=y |
1000 | CONFIG_DEBUG_MEMORY_INIT=y | 1004 | CONFIG_DEBUG_MEMORY_INIT=y |
1005 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1001 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1006 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
1007 | |||
1008 | # | ||
1009 | # Tracers | ||
1010 | # | ||
1011 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
1002 | # CONFIG_SAMPLES is not set | 1012 | # CONFIG_SAMPLES is not set |
1003 | 1013 | ||
1004 | # | 1014 | # |
@@ -1006,6 +1016,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
1006 | # | 1016 | # |
1007 | # CONFIG_KEYS is not set | 1017 | # CONFIG_KEYS is not set |
1008 | # CONFIG_SECURITY is not set | 1018 | # CONFIG_SECURITY is not set |
1019 | # CONFIG_SECURITYFS is not set | ||
1009 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1020 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
1010 | CONFIG_XOR_BLOCKS=m | 1021 | CONFIG_XOR_BLOCKS=m |
1011 | CONFIG_ASYNC_CORE=m | 1022 | CONFIG_ASYNC_CORE=m |
@@ -1016,10 +1027,12 @@ CONFIG_CRYPTO=y | |||
1016 | # | 1027 | # |
1017 | # Crypto core or helper | 1028 | # Crypto core or helper |
1018 | # | 1029 | # |
1030 | # CONFIG_CRYPTO_FIPS is not set | ||
1019 | CONFIG_CRYPTO_ALGAPI=y | 1031 | CONFIG_CRYPTO_ALGAPI=y |
1020 | CONFIG_CRYPTO_AEAD=m | 1032 | CONFIG_CRYPTO_AEAD=y |
1021 | CONFIG_CRYPTO_BLKCIPHER=m | 1033 | CONFIG_CRYPTO_BLKCIPHER=y |
1022 | CONFIG_CRYPTO_HASH=y | 1034 | CONFIG_CRYPTO_HASH=y |
1035 | CONFIG_CRYPTO_RNG=y | ||
1023 | CONFIG_CRYPTO_MANAGER=y | 1036 | CONFIG_CRYPTO_MANAGER=y |
1024 | CONFIG_CRYPTO_GF128MUL=m | 1037 | CONFIG_CRYPTO_GF128MUL=m |
1025 | CONFIG_CRYPTO_NULL=m | 1038 | CONFIG_CRYPTO_NULL=m |
@@ -1093,14 +1106,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1093 | # | 1106 | # |
1094 | CONFIG_CRYPTO_DEFLATE=m | 1107 | CONFIG_CRYPTO_DEFLATE=m |
1095 | CONFIG_CRYPTO_LZO=m | 1108 | CONFIG_CRYPTO_LZO=m |
1109 | |||
1110 | # | ||
1111 | # Random Number Generation | ||
1112 | # | ||
1113 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1096 | # CONFIG_CRYPTO_HW is not set | 1114 | # CONFIG_CRYPTO_HW is not set |
1097 | 1115 | ||
1098 | # | 1116 | # |
1099 | # Library routines | 1117 | # Library routines |
1100 | # | 1118 | # |
1101 | CONFIG_BITREVERSE=y | 1119 | CONFIG_BITREVERSE=y |
1102 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1103 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1104 | CONFIG_CRC_CCITT=m | 1120 | CONFIG_CRC_CCITT=m |
1105 | CONFIG_CRC16=y | 1121 | CONFIG_CRC16=y |
1106 | CONFIG_CRC_T10DIF=y | 1122 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/bvme6000_defconfig b/arch/m68k/configs/bvme6000_defconfig index 2e44af0fe54a..d3d9814a91de 100644 --- a/arch/m68k/configs/bvme6000_defconfig +++ b/arch/m68k/configs/bvme6000_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:03 2008 | 4 | # Tue Dec 2 20:27:45 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -151,19 +141,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
151 | CONFIG_DISCONTIGMEM=y | 141 | CONFIG_DISCONTIGMEM=y |
152 | CONFIG_FLAT_NODE_MEM_MAP=y | 142 | CONFIG_FLAT_NODE_MEM_MAP=y |
153 | CONFIG_NEED_MULTIPLE_NODES=y | 143 | CONFIG_NEED_MULTIPLE_NODES=y |
154 | # CONFIG_SPARSEMEM_STATIC is not set | ||
155 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
156 | CONFIG_PAGEFLAGS_EXTENDED=y | 144 | CONFIG_PAGEFLAGS_EXTENDED=y |
157 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 145 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
158 | # CONFIG_RESOURCES_64BIT is not set | 146 | # CONFIG_RESOURCES_64BIT is not set |
147 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
159 | CONFIG_ZONE_DMA_FLAG=1 | 148 | CONFIG_ZONE_DMA_FLAG=1 |
160 | CONFIG_BOUNCE=y | 149 | CONFIG_BOUNCE=y |
161 | CONFIG_VIRT_TO_BUS=y | 150 | CONFIG_VIRT_TO_BUS=y |
151 | CONFIG_UNEVICTABLE_LRU=y | ||
162 | 152 | ||
163 | # | 153 | # |
164 | # General setup | 154 | # General setup |
165 | # | 155 | # |
166 | CONFIG_BINFMT_ELF=y | 156 | CONFIG_BINFMT_ELF=y |
157 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
158 | CONFIG_HAVE_AOUT=y | ||
167 | CONFIG_BINFMT_AOUT=m | 159 | CONFIG_BINFMT_AOUT=m |
168 | CONFIG_BINFMT_MISC=m | 160 | CONFIG_BINFMT_MISC=m |
169 | CONFIG_PROC_HARDWARE=y | 161 | CONFIG_PROC_HARDWARE=y |
@@ -212,7 +204,6 @@ CONFIG_INET_TCP_DIAG=m | |||
212 | CONFIG_TCP_CONG_CUBIC=y | 204 | CONFIG_TCP_CONG_CUBIC=y |
213 | CONFIG_DEFAULT_TCP_CONG="cubic" | 205 | CONFIG_DEFAULT_TCP_CONG="cubic" |
214 | # CONFIG_TCP_MD5SIG is not set | 206 | # CONFIG_TCP_MD5SIG is not set |
215 | # CONFIG_IP_VS is not set | ||
216 | CONFIG_IPV6=m | 207 | CONFIG_IPV6=m |
217 | CONFIG_IPV6_PRIVACY=y | 208 | CONFIG_IPV6_PRIVACY=y |
218 | CONFIG_IPV6_ROUTER_PREF=y | 209 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -262,13 +253,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
262 | CONFIG_NF_CONNTRACK_SIP=m | 253 | CONFIG_NF_CONNTRACK_SIP=m |
263 | CONFIG_NF_CONNTRACK_TFTP=m | 254 | CONFIG_NF_CONNTRACK_TFTP=m |
264 | # CONFIG_NF_CT_NETLINK is not set | 255 | # CONFIG_NF_CT_NETLINK is not set |
256 | # CONFIG_NETFILTER_TPROXY is not set | ||
265 | CONFIG_NETFILTER_XTABLES=m | 257 | CONFIG_NETFILTER_XTABLES=m |
266 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 258 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
267 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 259 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
268 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 260 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
269 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 261 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
270 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
271 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 262 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
263 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
272 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 264 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
273 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 265 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
274 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 266 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -282,19 +274,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
282 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 274 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
283 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 275 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
284 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 276 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
277 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
285 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 278 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
286 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 279 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
287 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 280 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
288 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 281 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
289 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 282 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
290 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 283 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
284 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
291 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 285 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
292 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 286 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
293 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
294 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 287 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
295 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 288 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
296 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 289 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
297 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 290 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
291 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
292 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
298 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 293 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
299 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 294 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
300 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 295 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -302,20 +297,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
302 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 297 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
303 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 298 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
304 | CONFIG_NETFILTER_XT_MATCH_U32=m | 299 | CONFIG_NETFILTER_XT_MATCH_U32=m |
305 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 300 | # CONFIG_IP_VS is not set |
306 | 301 | ||
307 | # | 302 | # |
308 | # IP: Netfilter Configuration | 303 | # IP: Netfilter Configuration |
309 | # | 304 | # |
305 | CONFIG_NF_DEFRAG_IPV4=m | ||
310 | CONFIG_NF_CONNTRACK_IPV4=m | 306 | CONFIG_NF_CONNTRACK_IPV4=m |
311 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 307 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
312 | CONFIG_IP_NF_QUEUE=m | 308 | CONFIG_IP_NF_QUEUE=m |
313 | CONFIG_IP_NF_IPTABLES=m | 309 | CONFIG_IP_NF_IPTABLES=m |
314 | CONFIG_IP_NF_MATCH_RECENT=m | 310 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
315 | CONFIG_IP_NF_MATCH_ECN=m | ||
316 | CONFIG_IP_NF_MATCH_AH=m | 311 | CONFIG_IP_NF_MATCH_AH=m |
312 | CONFIG_IP_NF_MATCH_ECN=m | ||
317 | CONFIG_IP_NF_MATCH_TTL=m | 313 | CONFIG_IP_NF_MATCH_TTL=m |
318 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
319 | CONFIG_IP_NF_FILTER=m | 314 | CONFIG_IP_NF_FILTER=m |
320 | CONFIG_IP_NF_TARGET_REJECT=m | 315 | CONFIG_IP_NF_TARGET_REJECT=m |
321 | CONFIG_IP_NF_TARGET_LOG=m | 316 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -323,8 +318,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
323 | CONFIG_NF_NAT=m | 318 | CONFIG_NF_NAT=m |
324 | CONFIG_NF_NAT_NEEDED=y | 319 | CONFIG_NF_NAT_NEEDED=y |
325 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 320 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
326 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
327 | CONFIG_IP_NF_TARGET_NETMAP=m | 321 | CONFIG_IP_NF_TARGET_NETMAP=m |
322 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
328 | CONFIG_NF_NAT_SNMP_BASIC=m | 323 | CONFIG_NF_NAT_SNMP_BASIC=m |
329 | CONFIG_NF_NAT_PROTO_GRE=m | 324 | CONFIG_NF_NAT_PROTO_GRE=m |
330 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 325 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -337,9 +332,9 @@ CONFIG_NF_NAT_PPTP=m | |||
337 | CONFIG_NF_NAT_H323=m | 332 | CONFIG_NF_NAT_H323=m |
338 | CONFIG_NF_NAT_SIP=m | 333 | CONFIG_NF_NAT_SIP=m |
339 | CONFIG_IP_NF_MANGLE=m | 334 | CONFIG_IP_NF_MANGLE=m |
335 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
340 | CONFIG_IP_NF_TARGET_ECN=m | 336 | CONFIG_IP_NF_TARGET_ECN=m |
341 | CONFIG_IP_NF_TARGET_TTL=m | 337 | CONFIG_IP_NF_TARGET_TTL=m |
342 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
343 | CONFIG_IP_NF_RAW=m | 338 | CONFIG_IP_NF_RAW=m |
344 | CONFIG_IP_NF_ARPTABLES=m | 339 | CONFIG_IP_NF_ARPTABLES=m |
345 | CONFIG_IP_NF_ARPFILTER=m | 340 | CONFIG_IP_NF_ARPFILTER=m |
@@ -351,16 +346,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
351 | CONFIG_NF_CONNTRACK_IPV6=m | 346 | CONFIG_NF_CONNTRACK_IPV6=m |
352 | CONFIG_IP6_NF_QUEUE=m | 347 | CONFIG_IP6_NF_QUEUE=m |
353 | CONFIG_IP6_NF_IPTABLES=m | 348 | CONFIG_IP6_NF_IPTABLES=m |
354 | CONFIG_IP6_NF_MATCH_RT=m | 349 | CONFIG_IP6_NF_MATCH_AH=m |
355 | CONFIG_IP6_NF_MATCH_OPTS=m | 350 | CONFIG_IP6_NF_MATCH_EUI64=m |
356 | CONFIG_IP6_NF_MATCH_FRAG=m | 351 | CONFIG_IP6_NF_MATCH_FRAG=m |
352 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
357 | CONFIG_IP6_NF_MATCH_HL=m | 353 | CONFIG_IP6_NF_MATCH_HL=m |
358 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 354 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
359 | CONFIG_IP6_NF_MATCH_AH=m | ||
360 | CONFIG_IP6_NF_MATCH_MH=m | 355 | CONFIG_IP6_NF_MATCH_MH=m |
361 | CONFIG_IP6_NF_MATCH_EUI64=m | 356 | CONFIG_IP6_NF_MATCH_RT=m |
362 | CONFIG_IP6_NF_FILTER=m | ||
363 | CONFIG_IP6_NF_TARGET_LOG=m | 357 | CONFIG_IP6_NF_TARGET_LOG=m |
358 | CONFIG_IP6_NF_FILTER=m | ||
364 | CONFIG_IP6_NF_TARGET_REJECT=m | 359 | CONFIG_IP6_NF_TARGET_REJECT=m |
365 | CONFIG_IP6_NF_MANGLE=m | 360 | CONFIG_IP6_NF_MANGLE=m |
366 | CONFIG_IP6_NF_TARGET_HL=m | 361 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -387,6 +382,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
387 | # CONFIG_TIPC is not set | 382 | # CONFIG_TIPC is not set |
388 | # CONFIG_ATM is not set | 383 | # CONFIG_ATM is not set |
389 | # CONFIG_BRIDGE is not set | 384 | # CONFIG_BRIDGE is not set |
385 | # CONFIG_NET_DSA is not set | ||
390 | # CONFIG_VLAN_8021Q is not set | 386 | # CONFIG_VLAN_8021Q is not set |
391 | # CONFIG_DECNET is not set | 387 | # CONFIG_DECNET is not set |
392 | CONFIG_LLC=m | 388 | CONFIG_LLC=m |
@@ -410,19 +406,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
410 | # CONFIG_IRDA is not set | 406 | # CONFIG_IRDA is not set |
411 | # CONFIG_BT is not set | 407 | # CONFIG_BT is not set |
412 | # CONFIG_AF_RXRPC is not set | 408 | # CONFIG_AF_RXRPC is not set |
413 | 409 | # CONFIG_PHONET is not set | |
414 | # | 410 | # CONFIG_WIRELESS is not set |
415 | # Wireless | ||
416 | # | ||
417 | # CONFIG_CFG80211 is not set | ||
418 | CONFIG_WIRELESS_EXT=y | ||
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
420 | # CONFIG_MAC80211 is not set | ||
421 | CONFIG_IEEE80211=m | ||
422 | # CONFIG_IEEE80211_DEBUG is not set | ||
423 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
424 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
425 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
426 | # CONFIG_RFKILL is not set | 411 | # CONFIG_RFKILL is not set |
427 | # CONFIG_NET_9P is not set | 412 | # CONFIG_NET_9P is not set |
428 | 413 | ||
@@ -460,6 +445,7 @@ CONFIG_ATA_OVER_ETH=m | |||
460 | CONFIG_MISC_DEVICES=y | 445 | CONFIG_MISC_DEVICES=y |
461 | # CONFIG_EEPROM_93CX6 is not set | 446 | # CONFIG_EEPROM_93CX6 is not set |
462 | # CONFIG_ENCLOSURE_SERVICES is not set | 447 | # CONFIG_ENCLOSURE_SERVICES is not set |
448 | # CONFIG_C2PORT is not set | ||
463 | CONFIG_HAVE_IDE=y | 449 | CONFIG_HAVE_IDE=y |
464 | # CONFIG_IDE is not set | 450 | # CONFIG_IDE is not set |
465 | 451 | ||
@@ -545,6 +531,9 @@ CONFIG_BVME6000_NET=y | |||
545 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 531 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
546 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 532 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
547 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 533 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
534 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
535 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
536 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
548 | # CONFIG_B44 is not set | 537 | # CONFIG_B44 is not set |
549 | # CONFIG_NETDEV_1000 is not set | 538 | # CONFIG_NETDEV_1000 is not set |
550 | # CONFIG_NETDEV_10000 is not set | 539 | # CONFIG_NETDEV_10000 is not set |
@@ -614,6 +603,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
614 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 603 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
615 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 604 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
616 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 605 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
606 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
617 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 607 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
618 | CONFIG_MOUSE_SERIAL=m | 608 | CONFIG_MOUSE_SERIAL=m |
619 | # CONFIG_MOUSE_VSXXXAA is not set | 609 | # CONFIG_MOUSE_VSXXXAA is not set |
@@ -668,11 +658,11 @@ CONFIG_GEN_RTC_X=y | |||
668 | # CONFIG_THERMAL is not set | 658 | # CONFIG_THERMAL is not set |
669 | # CONFIG_THERMAL_HWMON is not set | 659 | # CONFIG_THERMAL_HWMON is not set |
670 | # CONFIG_WATCHDOG is not set | 660 | # CONFIG_WATCHDOG is not set |
661 | CONFIG_SSB_POSSIBLE=y | ||
671 | 662 | ||
672 | # | 663 | # |
673 | # Sonics Silicon Backplane | 664 | # Sonics Silicon Backplane |
674 | # | 665 | # |
675 | CONFIG_SSB_POSSIBLE=y | ||
676 | # CONFIG_SSB is not set | 666 | # CONFIG_SSB is not set |
677 | 667 | ||
678 | # | 668 | # |
@@ -682,6 +672,7 @@ CONFIG_SSB_POSSIBLE=y | |||
682 | # CONFIG_MFD_SM501 is not set | 672 | # CONFIG_MFD_SM501 is not set |
683 | # CONFIG_HTC_PASIC3 is not set | 673 | # CONFIG_HTC_PASIC3 is not set |
684 | # CONFIG_MFD_TMIO is not set | 674 | # CONFIG_MFD_TMIO is not set |
675 | # CONFIG_REGULATOR is not set | ||
685 | 676 | ||
686 | # | 677 | # |
687 | # Multimedia devices | 678 | # Multimedia devices |
@@ -721,6 +712,12 @@ CONFIG_HID_SUPPORT=y | |||
721 | CONFIG_HID=m | 712 | CONFIG_HID=m |
722 | # CONFIG_HID_DEBUG is not set | 713 | # CONFIG_HID_DEBUG is not set |
723 | CONFIG_HIDRAW=y | 714 | CONFIG_HIDRAW=y |
715 | # CONFIG_HID_PID is not set | ||
716 | |||
717 | # | ||
718 | # Special HID drivers | ||
719 | # | ||
720 | CONFIG_HID_COMPAT=y | ||
724 | # CONFIG_USB_SUPPORT is not set | 721 | # CONFIG_USB_SUPPORT is not set |
725 | # CONFIG_MMC is not set | 722 | # CONFIG_MMC is not set |
726 | # CONFIG_MEMSTICK is not set | 723 | # CONFIG_MEMSTICK is not set |
@@ -729,6 +726,8 @@ CONFIG_HIDRAW=y | |||
729 | # CONFIG_RTC_CLASS is not set | 726 | # CONFIG_RTC_CLASS is not set |
730 | # CONFIG_DMADEVICES is not set | 727 | # CONFIG_DMADEVICES is not set |
731 | # CONFIG_UIO is not set | 728 | # CONFIG_UIO is not set |
729 | # CONFIG_STAGING is not set | ||
730 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
732 | 731 | ||
733 | # | 732 | # |
734 | # Character devices | 733 | # Character devices |
@@ -744,8 +743,9 @@ CONFIG_EXT2_FS=y | |||
744 | # CONFIG_EXT2_FS_XIP is not set | 743 | # CONFIG_EXT2_FS_XIP is not set |
745 | CONFIG_EXT3_FS=y | 744 | CONFIG_EXT3_FS=y |
746 | # CONFIG_EXT3_FS_XATTR is not set | 745 | # CONFIG_EXT3_FS_XATTR is not set |
747 | # CONFIG_EXT4DEV_FS is not set | 746 | # CONFIG_EXT4_FS is not set |
748 | CONFIG_JBD=y | 747 | CONFIG_JBD=y |
748 | CONFIG_JBD2=m | ||
749 | CONFIG_REISERFS_FS=m | 749 | CONFIG_REISERFS_FS=m |
750 | # CONFIG_REISERFS_CHECK is not set | 750 | # CONFIG_REISERFS_CHECK is not set |
751 | # CONFIG_REISERFS_PROC_INFO is not set | 751 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -756,6 +756,7 @@ CONFIG_JFS_FS=m | |||
756 | # CONFIG_JFS_DEBUG is not set | 756 | # CONFIG_JFS_DEBUG is not set |
757 | # CONFIG_JFS_STATISTICS is not set | 757 | # CONFIG_JFS_STATISTICS is not set |
758 | # CONFIG_FS_POSIX_ACL is not set | 758 | # CONFIG_FS_POSIX_ACL is not set |
759 | CONFIG_FILE_LOCKING=y | ||
759 | CONFIG_XFS_FS=m | 760 | CONFIG_XFS_FS=m |
760 | # CONFIG_XFS_QUOTA is not set | 761 | # CONFIG_XFS_QUOTA is not set |
761 | # CONFIG_XFS_POSIX_ACL is not set | 762 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -767,6 +768,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
767 | # CONFIG_OCFS2_FS_STATS is not set | 768 | # CONFIG_OCFS2_FS_STATS is not set |
768 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 769 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
769 | # CONFIG_OCFS2_DEBUG_FS is not set | 770 | # CONFIG_OCFS2_DEBUG_FS is not set |
771 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
770 | CONFIG_DNOTIFY=y | 772 | CONFIG_DNOTIFY=y |
771 | CONFIG_INOTIFY=y | 773 | CONFIG_INOTIFY=y |
772 | CONFIG_INOTIFY_USER=y | 774 | CONFIG_INOTIFY_USER=y |
@@ -805,6 +807,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
805 | CONFIG_PROC_FS=y | 807 | CONFIG_PROC_FS=y |
806 | CONFIG_PROC_KCORE=y | 808 | CONFIG_PROC_KCORE=y |
807 | CONFIG_PROC_SYSCTL=y | 809 | CONFIG_PROC_SYSCTL=y |
810 | CONFIG_PROC_PAGE_MONITOR=y | ||
808 | CONFIG_SYSFS=y | 811 | CONFIG_SYSFS=y |
809 | CONFIG_TMPFS=y | 812 | CONFIG_TMPFS=y |
810 | # CONFIG_TMPFS_POSIX_ACL is not set | 813 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -848,6 +851,7 @@ CONFIG_EXPORTFS=m | |||
848 | CONFIG_NFS_COMMON=y | 851 | CONFIG_NFS_COMMON=y |
849 | CONFIG_SUNRPC=y | 852 | CONFIG_SUNRPC=y |
850 | CONFIG_SUNRPC_GSS=y | 853 | CONFIG_SUNRPC_GSS=y |
854 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
851 | CONFIG_RPCSEC_GSS_KRB5=y | 855 | CONFIG_RPCSEC_GSS_KRB5=y |
852 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 856 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
853 | CONFIG_SMB_FS=m | 857 | CONFIG_SMB_FS=m |
@@ -921,7 +925,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
921 | # CONFIG_DEBUG_KERNEL is not set | 925 | # CONFIG_DEBUG_KERNEL is not set |
922 | CONFIG_DEBUG_BUGVERBOSE=y | 926 | CONFIG_DEBUG_BUGVERBOSE=y |
923 | CONFIG_DEBUG_MEMORY_INIT=y | 927 | CONFIG_DEBUG_MEMORY_INIT=y |
928 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
924 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 929 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
930 | |||
931 | # | ||
932 | # Tracers | ||
933 | # | ||
934 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
925 | # CONFIG_SAMPLES is not set | 935 | # CONFIG_SAMPLES is not set |
926 | 936 | ||
927 | # | 937 | # |
@@ -929,6 +939,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
929 | # | 939 | # |
930 | # CONFIG_KEYS is not set | 940 | # CONFIG_KEYS is not set |
931 | # CONFIG_SECURITY is not set | 941 | # CONFIG_SECURITY is not set |
942 | # CONFIG_SECURITYFS is not set | ||
932 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 943 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
933 | CONFIG_XOR_BLOCKS=m | 944 | CONFIG_XOR_BLOCKS=m |
934 | CONFIG_ASYNC_CORE=m | 945 | CONFIG_ASYNC_CORE=m |
@@ -939,10 +950,12 @@ CONFIG_CRYPTO=y | |||
939 | # | 950 | # |
940 | # Crypto core or helper | 951 | # Crypto core or helper |
941 | # | 952 | # |
953 | # CONFIG_CRYPTO_FIPS is not set | ||
942 | CONFIG_CRYPTO_ALGAPI=y | 954 | CONFIG_CRYPTO_ALGAPI=y |
943 | CONFIG_CRYPTO_AEAD=m | 955 | CONFIG_CRYPTO_AEAD=y |
944 | CONFIG_CRYPTO_BLKCIPHER=y | 956 | CONFIG_CRYPTO_BLKCIPHER=y |
945 | CONFIG_CRYPTO_HASH=y | 957 | CONFIG_CRYPTO_HASH=y |
958 | CONFIG_CRYPTO_RNG=y | ||
946 | CONFIG_CRYPTO_MANAGER=y | 959 | CONFIG_CRYPTO_MANAGER=y |
947 | CONFIG_CRYPTO_GF128MUL=m | 960 | CONFIG_CRYPTO_GF128MUL=m |
948 | CONFIG_CRYPTO_NULL=m | 961 | CONFIG_CRYPTO_NULL=m |
@@ -1016,14 +1029,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1016 | # | 1029 | # |
1017 | CONFIG_CRYPTO_DEFLATE=m | 1030 | CONFIG_CRYPTO_DEFLATE=m |
1018 | CONFIG_CRYPTO_LZO=m | 1031 | CONFIG_CRYPTO_LZO=m |
1032 | |||
1033 | # | ||
1034 | # Random Number Generation | ||
1035 | # | ||
1036 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1019 | # CONFIG_CRYPTO_HW is not set | 1037 | # CONFIG_CRYPTO_HW is not set |
1020 | 1038 | ||
1021 | # | 1039 | # |
1022 | # Library routines | 1040 | # Library routines |
1023 | # | 1041 | # |
1024 | CONFIG_BITREVERSE=m | 1042 | CONFIG_BITREVERSE=m |
1025 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1026 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1027 | CONFIG_CRC_CCITT=m | 1043 | CONFIG_CRC_CCITT=m |
1028 | CONFIG_CRC16=m | 1044 | CONFIG_CRC16=m |
1029 | CONFIG_CRC_T10DIF=y | 1045 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/hp300_defconfig b/arch/m68k/configs/hp300_defconfig index 3570fc89b089..5556ef088d04 100644 --- a/arch/m68k/configs/hp300_defconfig +++ b/arch/m68k/configs/hp300_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:04 2008 | 4 | # Tue Dec 2 20:27:46 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -149,19 +139,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
149 | CONFIG_DISCONTIGMEM=y | 139 | CONFIG_DISCONTIGMEM=y |
150 | CONFIG_FLAT_NODE_MEM_MAP=y | 140 | CONFIG_FLAT_NODE_MEM_MAP=y |
151 | CONFIG_NEED_MULTIPLE_NODES=y | 141 | CONFIG_NEED_MULTIPLE_NODES=y |
152 | # CONFIG_SPARSEMEM_STATIC is not set | ||
153 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
154 | CONFIG_PAGEFLAGS_EXTENDED=y | 142 | CONFIG_PAGEFLAGS_EXTENDED=y |
155 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 143 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
156 | # CONFIG_RESOURCES_64BIT is not set | 144 | # CONFIG_RESOURCES_64BIT is not set |
145 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
157 | CONFIG_ZONE_DMA_FLAG=1 | 146 | CONFIG_ZONE_DMA_FLAG=1 |
158 | CONFIG_BOUNCE=y | 147 | CONFIG_BOUNCE=y |
159 | CONFIG_VIRT_TO_BUS=y | 148 | CONFIG_VIRT_TO_BUS=y |
149 | CONFIG_UNEVICTABLE_LRU=y | ||
160 | 150 | ||
161 | # | 151 | # |
162 | # General setup | 152 | # General setup |
163 | # | 153 | # |
164 | CONFIG_BINFMT_ELF=y | 154 | CONFIG_BINFMT_ELF=y |
155 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
156 | CONFIG_HAVE_AOUT=y | ||
165 | CONFIG_BINFMT_AOUT=m | 157 | CONFIG_BINFMT_AOUT=m |
166 | CONFIG_BINFMT_MISC=m | 158 | CONFIG_BINFMT_MISC=m |
167 | CONFIG_HEARTBEAT=y | 159 | CONFIG_HEARTBEAT=y |
@@ -211,7 +203,6 @@ CONFIG_INET_TCP_DIAG=m | |||
211 | CONFIG_TCP_CONG_CUBIC=y | 203 | CONFIG_TCP_CONG_CUBIC=y |
212 | CONFIG_DEFAULT_TCP_CONG="cubic" | 204 | CONFIG_DEFAULT_TCP_CONG="cubic" |
213 | # CONFIG_TCP_MD5SIG is not set | 205 | # CONFIG_TCP_MD5SIG is not set |
214 | # CONFIG_IP_VS is not set | ||
215 | CONFIG_IPV6=m | 206 | CONFIG_IPV6=m |
216 | CONFIG_IPV6_PRIVACY=y | 207 | CONFIG_IPV6_PRIVACY=y |
217 | CONFIG_IPV6_ROUTER_PREF=y | 208 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -261,13 +252,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
261 | CONFIG_NF_CONNTRACK_SIP=m | 252 | CONFIG_NF_CONNTRACK_SIP=m |
262 | CONFIG_NF_CONNTRACK_TFTP=m | 253 | CONFIG_NF_CONNTRACK_TFTP=m |
263 | # CONFIG_NF_CT_NETLINK is not set | 254 | # CONFIG_NF_CT_NETLINK is not set |
255 | # CONFIG_NETFILTER_TPROXY is not set | ||
264 | CONFIG_NETFILTER_XTABLES=m | 256 | CONFIG_NETFILTER_XTABLES=m |
265 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 257 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
266 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 258 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
267 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 259 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
268 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 260 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
269 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
270 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 261 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
262 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
271 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 263 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
272 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 264 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
273 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 265 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -281,19 +273,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
281 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 273 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
282 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 274 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
283 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 275 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
276 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
284 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 277 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
285 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 278 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
286 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 279 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
287 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 280 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
288 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 281 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
289 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 282 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
283 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
290 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 284 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
291 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 285 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
292 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
293 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 286 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
294 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 287 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
295 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 288 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
296 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 289 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
290 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
291 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
297 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 292 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
298 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 293 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
299 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 294 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -301,20 +296,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
301 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 296 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
302 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 297 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
303 | CONFIG_NETFILTER_XT_MATCH_U32=m | 298 | CONFIG_NETFILTER_XT_MATCH_U32=m |
304 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 299 | # CONFIG_IP_VS is not set |
305 | 300 | ||
306 | # | 301 | # |
307 | # IP: Netfilter Configuration | 302 | # IP: Netfilter Configuration |
308 | # | 303 | # |
304 | CONFIG_NF_DEFRAG_IPV4=m | ||
309 | CONFIG_NF_CONNTRACK_IPV4=m | 305 | CONFIG_NF_CONNTRACK_IPV4=m |
310 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 306 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
311 | CONFIG_IP_NF_QUEUE=m | 307 | CONFIG_IP_NF_QUEUE=m |
312 | CONFIG_IP_NF_IPTABLES=m | 308 | CONFIG_IP_NF_IPTABLES=m |
313 | CONFIG_IP_NF_MATCH_RECENT=m | 309 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
314 | CONFIG_IP_NF_MATCH_ECN=m | ||
315 | CONFIG_IP_NF_MATCH_AH=m | 310 | CONFIG_IP_NF_MATCH_AH=m |
311 | CONFIG_IP_NF_MATCH_ECN=m | ||
316 | CONFIG_IP_NF_MATCH_TTL=m | 312 | CONFIG_IP_NF_MATCH_TTL=m |
317 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
318 | CONFIG_IP_NF_FILTER=m | 313 | CONFIG_IP_NF_FILTER=m |
319 | CONFIG_IP_NF_TARGET_REJECT=m | 314 | CONFIG_IP_NF_TARGET_REJECT=m |
320 | CONFIG_IP_NF_TARGET_LOG=m | 315 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -322,8 +317,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
322 | CONFIG_NF_NAT=m | 317 | CONFIG_NF_NAT=m |
323 | CONFIG_NF_NAT_NEEDED=y | 318 | CONFIG_NF_NAT_NEEDED=y |
324 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 319 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
325 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
326 | CONFIG_IP_NF_TARGET_NETMAP=m | 320 | CONFIG_IP_NF_TARGET_NETMAP=m |
321 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
327 | CONFIG_NF_NAT_SNMP_BASIC=m | 322 | CONFIG_NF_NAT_SNMP_BASIC=m |
328 | CONFIG_NF_NAT_PROTO_GRE=m | 323 | CONFIG_NF_NAT_PROTO_GRE=m |
329 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 324 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -336,9 +331,9 @@ CONFIG_NF_NAT_PPTP=m | |||
336 | CONFIG_NF_NAT_H323=m | 331 | CONFIG_NF_NAT_H323=m |
337 | CONFIG_NF_NAT_SIP=m | 332 | CONFIG_NF_NAT_SIP=m |
338 | CONFIG_IP_NF_MANGLE=m | 333 | CONFIG_IP_NF_MANGLE=m |
334 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
339 | CONFIG_IP_NF_TARGET_ECN=m | 335 | CONFIG_IP_NF_TARGET_ECN=m |
340 | CONFIG_IP_NF_TARGET_TTL=m | 336 | CONFIG_IP_NF_TARGET_TTL=m |
341 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
342 | CONFIG_IP_NF_RAW=m | 337 | CONFIG_IP_NF_RAW=m |
343 | CONFIG_IP_NF_ARPTABLES=m | 338 | CONFIG_IP_NF_ARPTABLES=m |
344 | CONFIG_IP_NF_ARPFILTER=m | 339 | CONFIG_IP_NF_ARPFILTER=m |
@@ -350,16 +345,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
350 | CONFIG_NF_CONNTRACK_IPV6=m | 345 | CONFIG_NF_CONNTRACK_IPV6=m |
351 | CONFIG_IP6_NF_QUEUE=m | 346 | CONFIG_IP6_NF_QUEUE=m |
352 | CONFIG_IP6_NF_IPTABLES=m | 347 | CONFIG_IP6_NF_IPTABLES=m |
353 | CONFIG_IP6_NF_MATCH_RT=m | 348 | CONFIG_IP6_NF_MATCH_AH=m |
354 | CONFIG_IP6_NF_MATCH_OPTS=m | 349 | CONFIG_IP6_NF_MATCH_EUI64=m |
355 | CONFIG_IP6_NF_MATCH_FRAG=m | 350 | CONFIG_IP6_NF_MATCH_FRAG=m |
351 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
356 | CONFIG_IP6_NF_MATCH_HL=m | 352 | CONFIG_IP6_NF_MATCH_HL=m |
357 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 353 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
358 | CONFIG_IP6_NF_MATCH_AH=m | ||
359 | CONFIG_IP6_NF_MATCH_MH=m | 354 | CONFIG_IP6_NF_MATCH_MH=m |
360 | CONFIG_IP6_NF_MATCH_EUI64=m | 355 | CONFIG_IP6_NF_MATCH_RT=m |
361 | CONFIG_IP6_NF_FILTER=m | ||
362 | CONFIG_IP6_NF_TARGET_LOG=m | 356 | CONFIG_IP6_NF_TARGET_LOG=m |
357 | CONFIG_IP6_NF_FILTER=m | ||
363 | CONFIG_IP6_NF_TARGET_REJECT=m | 358 | CONFIG_IP6_NF_TARGET_REJECT=m |
364 | CONFIG_IP6_NF_MANGLE=m | 359 | CONFIG_IP6_NF_MANGLE=m |
365 | CONFIG_IP6_NF_TARGET_HL=m | 360 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -386,6 +381,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
386 | # CONFIG_TIPC is not set | 381 | # CONFIG_TIPC is not set |
387 | # CONFIG_ATM is not set | 382 | # CONFIG_ATM is not set |
388 | # CONFIG_BRIDGE is not set | 383 | # CONFIG_BRIDGE is not set |
384 | # CONFIG_NET_DSA is not set | ||
389 | # CONFIG_VLAN_8021Q is not set | 385 | # CONFIG_VLAN_8021Q is not set |
390 | # CONFIG_DECNET is not set | 386 | # CONFIG_DECNET is not set |
391 | CONFIG_LLC=m | 387 | CONFIG_LLC=m |
@@ -409,19 +405,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
409 | # CONFIG_IRDA is not set | 405 | # CONFIG_IRDA is not set |
410 | # CONFIG_BT is not set | 406 | # CONFIG_BT is not set |
411 | # CONFIG_AF_RXRPC is not set | 407 | # CONFIG_AF_RXRPC is not set |
412 | 408 | # CONFIG_PHONET is not set | |
413 | # | 409 | # CONFIG_WIRELESS is not set |
414 | # Wireless | ||
415 | # | ||
416 | # CONFIG_CFG80211 is not set | ||
417 | CONFIG_WIRELESS_EXT=y | ||
418 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
419 | # CONFIG_MAC80211 is not set | ||
420 | CONFIG_IEEE80211=m | ||
421 | # CONFIG_IEEE80211_DEBUG is not set | ||
422 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
423 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
424 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
425 | # CONFIG_RFKILL is not set | 410 | # CONFIG_RFKILL is not set |
426 | # CONFIG_NET_9P is not set | 411 | # CONFIG_NET_9P is not set |
427 | 412 | ||
@@ -459,6 +444,7 @@ CONFIG_ATA_OVER_ETH=m | |||
459 | CONFIG_MISC_DEVICES=y | 444 | CONFIG_MISC_DEVICES=y |
460 | # CONFIG_EEPROM_93CX6 is not set | 445 | # CONFIG_EEPROM_93CX6 is not set |
461 | # CONFIG_ENCLOSURE_SERVICES is not set | 446 | # CONFIG_ENCLOSURE_SERVICES is not set |
447 | # CONFIG_C2PORT is not set | ||
462 | CONFIG_HAVE_IDE=y | 448 | CONFIG_HAVE_IDE=y |
463 | # CONFIG_IDE is not set | 449 | # CONFIG_IDE is not set |
464 | 450 | ||
@@ -542,6 +528,9 @@ CONFIG_HPLANCE=y | |||
542 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 528 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
543 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 529 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
544 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 530 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
531 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
532 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
533 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
545 | # CONFIG_B44 is not set | 534 | # CONFIG_B44 is not set |
546 | # CONFIG_NETDEV_1000 is not set | 535 | # CONFIG_NETDEV_1000 is not set |
547 | # CONFIG_NETDEV_10000 is not set | 536 | # CONFIG_NETDEV_10000 is not set |
@@ -613,6 +602,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
613 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 602 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
614 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 603 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
615 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 604 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
605 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
616 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 606 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
617 | CONFIG_MOUSE_SERIAL=m | 607 | CONFIG_MOUSE_SERIAL=m |
618 | # CONFIG_MOUSE_VSXXXAA is not set | 608 | # CONFIG_MOUSE_VSXXXAA is not set |
@@ -673,11 +663,11 @@ CONFIG_GEN_RTC_X=y | |||
673 | # CONFIG_THERMAL is not set | 663 | # CONFIG_THERMAL is not set |
674 | # CONFIG_THERMAL_HWMON is not set | 664 | # CONFIG_THERMAL_HWMON is not set |
675 | # CONFIG_WATCHDOG is not set | 665 | # CONFIG_WATCHDOG is not set |
666 | CONFIG_SSB_POSSIBLE=y | ||
676 | 667 | ||
677 | # | 668 | # |
678 | # Sonics Silicon Backplane | 669 | # Sonics Silicon Backplane |
679 | # | 670 | # |
680 | CONFIG_SSB_POSSIBLE=y | ||
681 | # CONFIG_SSB is not set | 671 | # CONFIG_SSB is not set |
682 | 672 | ||
683 | # | 673 | # |
@@ -687,6 +677,7 @@ CONFIG_SSB_POSSIBLE=y | |||
687 | # CONFIG_MFD_SM501 is not set | 677 | # CONFIG_MFD_SM501 is not set |
688 | # CONFIG_HTC_PASIC3 is not set | 678 | # CONFIG_HTC_PASIC3 is not set |
689 | # CONFIG_MFD_TMIO is not set | 679 | # CONFIG_MFD_TMIO is not set |
680 | # CONFIG_REGULATOR is not set | ||
690 | 681 | ||
691 | # | 682 | # |
692 | # Multimedia devices | 683 | # Multimedia devices |
@@ -712,6 +703,7 @@ CONFIG_SSB_POSSIBLE=y | |||
712 | CONFIG_FB=y | 703 | CONFIG_FB=y |
713 | # CONFIG_FIRMWARE_EDID is not set | 704 | # CONFIG_FIRMWARE_EDID is not set |
714 | # CONFIG_FB_DDC is not set | 705 | # CONFIG_FB_DDC is not set |
706 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
715 | # CONFIG_FB_CFB_FILLRECT is not set | 707 | # CONFIG_FB_CFB_FILLRECT is not set |
716 | # CONFIG_FB_CFB_COPYAREA is not set | 708 | # CONFIG_FB_CFB_COPYAREA is not set |
717 | CONFIG_FB_CFB_IMAGEBLIT=y | 709 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -734,6 +726,8 @@ CONFIG_FB_HP300=y | |||
734 | # CONFIG_FB_UVESA is not set | 726 | # CONFIG_FB_UVESA is not set |
735 | # CONFIG_FB_S1D13XXX is not set | 727 | # CONFIG_FB_S1D13XXX is not set |
736 | # CONFIG_FB_VIRTUAL is not set | 728 | # CONFIG_FB_VIRTUAL is not set |
729 | # CONFIG_FB_METRONOME is not set | ||
730 | # CONFIG_FB_MB862XX is not set | ||
737 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 731 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
738 | 732 | ||
739 | # | 733 | # |
@@ -760,6 +754,12 @@ CONFIG_HID_SUPPORT=y | |||
760 | CONFIG_HID=m | 754 | CONFIG_HID=m |
761 | # CONFIG_HID_DEBUG is not set | 755 | # CONFIG_HID_DEBUG is not set |
762 | CONFIG_HIDRAW=y | 756 | CONFIG_HIDRAW=y |
757 | # CONFIG_HID_PID is not set | ||
758 | |||
759 | # | ||
760 | # Special HID drivers | ||
761 | # | ||
762 | CONFIG_HID_COMPAT=y | ||
763 | # CONFIG_USB_SUPPORT is not set | 763 | # CONFIG_USB_SUPPORT is not set |
764 | # CONFIG_MMC is not set | 764 | # CONFIG_MMC is not set |
765 | # CONFIG_MEMSTICK is not set | 765 | # CONFIG_MEMSTICK is not set |
@@ -768,6 +768,8 @@ CONFIG_HIDRAW=y | |||
768 | # CONFIG_RTC_CLASS is not set | 768 | # CONFIG_RTC_CLASS is not set |
769 | # CONFIG_DMADEVICES is not set | 769 | # CONFIG_DMADEVICES is not set |
770 | # CONFIG_UIO is not set | 770 | # CONFIG_UIO is not set |
771 | # CONFIG_STAGING is not set | ||
772 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
771 | 773 | ||
772 | # | 774 | # |
773 | # Character devices | 775 | # Character devices |
@@ -781,8 +783,9 @@ CONFIG_EXT2_FS=y | |||
781 | # CONFIG_EXT2_FS_XIP is not set | 783 | # CONFIG_EXT2_FS_XIP is not set |
782 | CONFIG_EXT3_FS=y | 784 | CONFIG_EXT3_FS=y |
783 | # CONFIG_EXT3_FS_XATTR is not set | 785 | # CONFIG_EXT3_FS_XATTR is not set |
784 | # CONFIG_EXT4DEV_FS is not set | 786 | # CONFIG_EXT4_FS is not set |
785 | CONFIG_JBD=y | 787 | CONFIG_JBD=y |
788 | CONFIG_JBD2=m | ||
786 | CONFIG_REISERFS_FS=m | 789 | CONFIG_REISERFS_FS=m |
787 | # CONFIG_REISERFS_CHECK is not set | 790 | # CONFIG_REISERFS_CHECK is not set |
788 | # CONFIG_REISERFS_PROC_INFO is not set | 791 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -793,6 +796,7 @@ CONFIG_JFS_FS=m | |||
793 | # CONFIG_JFS_DEBUG is not set | 796 | # CONFIG_JFS_DEBUG is not set |
794 | # CONFIG_JFS_STATISTICS is not set | 797 | # CONFIG_JFS_STATISTICS is not set |
795 | # CONFIG_FS_POSIX_ACL is not set | 798 | # CONFIG_FS_POSIX_ACL is not set |
799 | CONFIG_FILE_LOCKING=y | ||
796 | CONFIG_XFS_FS=m | 800 | CONFIG_XFS_FS=m |
797 | # CONFIG_XFS_QUOTA is not set | 801 | # CONFIG_XFS_QUOTA is not set |
798 | # CONFIG_XFS_POSIX_ACL is not set | 802 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -804,6 +808,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
804 | # CONFIG_OCFS2_FS_STATS is not set | 808 | # CONFIG_OCFS2_FS_STATS is not set |
805 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 809 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
806 | # CONFIG_OCFS2_DEBUG_FS is not set | 810 | # CONFIG_OCFS2_DEBUG_FS is not set |
811 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
807 | CONFIG_DNOTIFY=y | 812 | CONFIG_DNOTIFY=y |
808 | CONFIG_INOTIFY=y | 813 | CONFIG_INOTIFY=y |
809 | CONFIG_INOTIFY_USER=y | 814 | CONFIG_INOTIFY_USER=y |
@@ -842,6 +847,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
842 | CONFIG_PROC_FS=y | 847 | CONFIG_PROC_FS=y |
843 | CONFIG_PROC_KCORE=y | 848 | CONFIG_PROC_KCORE=y |
844 | CONFIG_PROC_SYSCTL=y | 849 | CONFIG_PROC_SYSCTL=y |
850 | CONFIG_PROC_PAGE_MONITOR=y | ||
845 | CONFIG_SYSFS=y | 851 | CONFIG_SYSFS=y |
846 | CONFIG_TMPFS=y | 852 | CONFIG_TMPFS=y |
847 | # CONFIG_TMPFS_POSIX_ACL is not set | 853 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -885,6 +891,7 @@ CONFIG_EXPORTFS=m | |||
885 | CONFIG_NFS_COMMON=y | 891 | CONFIG_NFS_COMMON=y |
886 | CONFIG_SUNRPC=y | 892 | CONFIG_SUNRPC=y |
887 | CONFIG_SUNRPC_GSS=y | 893 | CONFIG_SUNRPC_GSS=y |
894 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
888 | CONFIG_RPCSEC_GSS_KRB5=y | 895 | CONFIG_RPCSEC_GSS_KRB5=y |
889 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 896 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
890 | CONFIG_SMB_FS=m | 897 | CONFIG_SMB_FS=m |
@@ -957,7 +964,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
957 | # CONFIG_DEBUG_KERNEL is not set | 964 | # CONFIG_DEBUG_KERNEL is not set |
958 | CONFIG_DEBUG_BUGVERBOSE=y | 965 | CONFIG_DEBUG_BUGVERBOSE=y |
959 | CONFIG_DEBUG_MEMORY_INIT=y | 966 | CONFIG_DEBUG_MEMORY_INIT=y |
967 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
960 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 968 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
969 | |||
970 | # | ||
971 | # Tracers | ||
972 | # | ||
973 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
961 | # CONFIG_SAMPLES is not set | 974 | # CONFIG_SAMPLES is not set |
962 | 975 | ||
963 | # | 976 | # |
@@ -965,6 +978,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
965 | # | 978 | # |
966 | # CONFIG_KEYS is not set | 979 | # CONFIG_KEYS is not set |
967 | # CONFIG_SECURITY is not set | 980 | # CONFIG_SECURITY is not set |
981 | # CONFIG_SECURITYFS is not set | ||
968 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 982 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
969 | CONFIG_XOR_BLOCKS=m | 983 | CONFIG_XOR_BLOCKS=m |
970 | CONFIG_ASYNC_CORE=m | 984 | CONFIG_ASYNC_CORE=m |
@@ -975,10 +989,12 @@ CONFIG_CRYPTO=y | |||
975 | # | 989 | # |
976 | # Crypto core or helper | 990 | # Crypto core or helper |
977 | # | 991 | # |
992 | # CONFIG_CRYPTO_FIPS is not set | ||
978 | CONFIG_CRYPTO_ALGAPI=y | 993 | CONFIG_CRYPTO_ALGAPI=y |
979 | CONFIG_CRYPTO_AEAD=m | 994 | CONFIG_CRYPTO_AEAD=y |
980 | CONFIG_CRYPTO_BLKCIPHER=y | 995 | CONFIG_CRYPTO_BLKCIPHER=y |
981 | CONFIG_CRYPTO_HASH=y | 996 | CONFIG_CRYPTO_HASH=y |
997 | CONFIG_CRYPTO_RNG=y | ||
982 | CONFIG_CRYPTO_MANAGER=y | 998 | CONFIG_CRYPTO_MANAGER=y |
983 | CONFIG_CRYPTO_GF128MUL=m | 999 | CONFIG_CRYPTO_GF128MUL=m |
984 | CONFIG_CRYPTO_NULL=m | 1000 | CONFIG_CRYPTO_NULL=m |
@@ -1052,14 +1068,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1052 | # | 1068 | # |
1053 | CONFIG_CRYPTO_DEFLATE=m | 1069 | CONFIG_CRYPTO_DEFLATE=m |
1054 | CONFIG_CRYPTO_LZO=m | 1070 | CONFIG_CRYPTO_LZO=m |
1071 | |||
1072 | # | ||
1073 | # Random Number Generation | ||
1074 | # | ||
1075 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1055 | # CONFIG_CRYPTO_HW is not set | 1076 | # CONFIG_CRYPTO_HW is not set |
1056 | 1077 | ||
1057 | # | 1078 | # |
1058 | # Library routines | 1079 | # Library routines |
1059 | # | 1080 | # |
1060 | CONFIG_BITREVERSE=y | 1081 | CONFIG_BITREVERSE=y |
1061 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1062 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1063 | CONFIG_CRC_CCITT=m | 1082 | CONFIG_CRC_CCITT=m |
1064 | CONFIG_CRC16=m | 1083 | CONFIG_CRC16=m |
1065 | CONFIG_CRC_T10DIF=y | 1084 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/mac_defconfig b/arch/m68k/configs/mac_defconfig index db6e8822594a..c6de25724a25 100644 --- a/arch/m68k/configs/mac_defconfig +++ b/arch/m68k/configs/mac_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:06 2008 | 4 | # Tue Dec 2 20:27:47 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | CONFIG_MAC=y | 115 | CONFIG_MAC=y |
@@ -150,19 +140,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
150 | CONFIG_DISCONTIGMEM=y | 140 | CONFIG_DISCONTIGMEM=y |
151 | CONFIG_FLAT_NODE_MEM_MAP=y | 141 | CONFIG_FLAT_NODE_MEM_MAP=y |
152 | CONFIG_NEED_MULTIPLE_NODES=y | 142 | CONFIG_NEED_MULTIPLE_NODES=y |
153 | # CONFIG_SPARSEMEM_STATIC is not set | ||
154 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
155 | CONFIG_PAGEFLAGS_EXTENDED=y | 143 | CONFIG_PAGEFLAGS_EXTENDED=y |
156 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 144 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
157 | # CONFIG_RESOURCES_64BIT is not set | 145 | # CONFIG_RESOURCES_64BIT is not set |
146 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
158 | CONFIG_ZONE_DMA_FLAG=1 | 147 | CONFIG_ZONE_DMA_FLAG=1 |
159 | CONFIG_BOUNCE=y | 148 | CONFIG_BOUNCE=y |
160 | CONFIG_VIRT_TO_BUS=y | 149 | CONFIG_VIRT_TO_BUS=y |
150 | CONFIG_UNEVICTABLE_LRU=y | ||
161 | 151 | ||
162 | # | 152 | # |
163 | # General setup | 153 | # General setup |
164 | # | 154 | # |
165 | CONFIG_BINFMT_ELF=y | 155 | CONFIG_BINFMT_ELF=y |
156 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
157 | CONFIG_HAVE_AOUT=y | ||
166 | CONFIG_BINFMT_AOUT=m | 158 | CONFIG_BINFMT_AOUT=m |
167 | CONFIG_BINFMT_MISC=m | 159 | CONFIG_BINFMT_MISC=m |
168 | # CONFIG_HEARTBEAT is not set | 160 | # CONFIG_HEARTBEAT is not set |
@@ -209,7 +201,6 @@ CONFIG_INET_TCP_DIAG=m | |||
209 | CONFIG_TCP_CONG_CUBIC=y | 201 | CONFIG_TCP_CONG_CUBIC=y |
210 | CONFIG_DEFAULT_TCP_CONG="cubic" | 202 | CONFIG_DEFAULT_TCP_CONG="cubic" |
211 | # CONFIG_TCP_MD5SIG is not set | 203 | # CONFIG_TCP_MD5SIG is not set |
212 | # CONFIG_IP_VS is not set | ||
213 | CONFIG_IPV6=m | 204 | CONFIG_IPV6=m |
214 | CONFIG_IPV6_PRIVACY=y | 205 | CONFIG_IPV6_PRIVACY=y |
215 | CONFIG_IPV6_ROUTER_PREF=y | 206 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -259,13 +250,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
259 | CONFIG_NF_CONNTRACK_SIP=m | 250 | CONFIG_NF_CONNTRACK_SIP=m |
260 | CONFIG_NF_CONNTRACK_TFTP=m | 251 | CONFIG_NF_CONNTRACK_TFTP=m |
261 | # CONFIG_NF_CT_NETLINK is not set | 252 | # CONFIG_NF_CT_NETLINK is not set |
253 | # CONFIG_NETFILTER_TPROXY is not set | ||
262 | CONFIG_NETFILTER_XTABLES=m | 254 | CONFIG_NETFILTER_XTABLES=m |
263 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 255 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
264 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 256 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
265 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 257 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
266 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 258 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
267 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
268 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 259 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
260 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
269 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 261 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
270 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 262 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
271 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 263 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -279,19 +271,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
279 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 271 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
280 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 272 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
281 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 273 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
274 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
282 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 275 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
283 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 276 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
284 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 277 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
285 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 278 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
286 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 279 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
287 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 280 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
281 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
288 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 282 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
289 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 283 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
290 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
291 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 284 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
292 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 285 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
293 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 286 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
294 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 287 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
288 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
289 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
295 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 290 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
296 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 291 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
297 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 292 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -299,20 +294,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
299 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 294 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
300 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 295 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
301 | CONFIG_NETFILTER_XT_MATCH_U32=m | 296 | CONFIG_NETFILTER_XT_MATCH_U32=m |
302 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 297 | # CONFIG_IP_VS is not set |
303 | 298 | ||
304 | # | 299 | # |
305 | # IP: Netfilter Configuration | 300 | # IP: Netfilter Configuration |
306 | # | 301 | # |
302 | CONFIG_NF_DEFRAG_IPV4=m | ||
307 | CONFIG_NF_CONNTRACK_IPV4=m | 303 | CONFIG_NF_CONNTRACK_IPV4=m |
308 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 304 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
309 | CONFIG_IP_NF_QUEUE=m | 305 | CONFIG_IP_NF_QUEUE=m |
310 | CONFIG_IP_NF_IPTABLES=m | 306 | CONFIG_IP_NF_IPTABLES=m |
311 | CONFIG_IP_NF_MATCH_RECENT=m | 307 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
312 | CONFIG_IP_NF_MATCH_ECN=m | ||
313 | CONFIG_IP_NF_MATCH_AH=m | 308 | CONFIG_IP_NF_MATCH_AH=m |
309 | CONFIG_IP_NF_MATCH_ECN=m | ||
314 | CONFIG_IP_NF_MATCH_TTL=m | 310 | CONFIG_IP_NF_MATCH_TTL=m |
315 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
316 | CONFIG_IP_NF_FILTER=m | 311 | CONFIG_IP_NF_FILTER=m |
317 | CONFIG_IP_NF_TARGET_REJECT=m | 312 | CONFIG_IP_NF_TARGET_REJECT=m |
318 | CONFIG_IP_NF_TARGET_LOG=m | 313 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -320,8 +315,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
320 | CONFIG_NF_NAT=m | 315 | CONFIG_NF_NAT=m |
321 | CONFIG_NF_NAT_NEEDED=y | 316 | CONFIG_NF_NAT_NEEDED=y |
322 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 317 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
323 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
324 | CONFIG_IP_NF_TARGET_NETMAP=m | 318 | CONFIG_IP_NF_TARGET_NETMAP=m |
319 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
325 | CONFIG_NF_NAT_SNMP_BASIC=m | 320 | CONFIG_NF_NAT_SNMP_BASIC=m |
326 | CONFIG_NF_NAT_PROTO_GRE=m | 321 | CONFIG_NF_NAT_PROTO_GRE=m |
327 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 322 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -334,9 +329,9 @@ CONFIG_NF_NAT_PPTP=m | |||
334 | CONFIG_NF_NAT_H323=m | 329 | CONFIG_NF_NAT_H323=m |
335 | CONFIG_NF_NAT_SIP=m | 330 | CONFIG_NF_NAT_SIP=m |
336 | CONFIG_IP_NF_MANGLE=m | 331 | CONFIG_IP_NF_MANGLE=m |
332 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
337 | CONFIG_IP_NF_TARGET_ECN=m | 333 | CONFIG_IP_NF_TARGET_ECN=m |
338 | CONFIG_IP_NF_TARGET_TTL=m | 334 | CONFIG_IP_NF_TARGET_TTL=m |
339 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
340 | CONFIG_IP_NF_RAW=m | 335 | CONFIG_IP_NF_RAW=m |
341 | CONFIG_IP_NF_ARPTABLES=m | 336 | CONFIG_IP_NF_ARPTABLES=m |
342 | CONFIG_IP_NF_ARPFILTER=m | 337 | CONFIG_IP_NF_ARPFILTER=m |
@@ -348,16 +343,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
348 | CONFIG_NF_CONNTRACK_IPV6=m | 343 | CONFIG_NF_CONNTRACK_IPV6=m |
349 | CONFIG_IP6_NF_QUEUE=m | 344 | CONFIG_IP6_NF_QUEUE=m |
350 | CONFIG_IP6_NF_IPTABLES=m | 345 | CONFIG_IP6_NF_IPTABLES=m |
351 | CONFIG_IP6_NF_MATCH_RT=m | 346 | CONFIG_IP6_NF_MATCH_AH=m |
352 | CONFIG_IP6_NF_MATCH_OPTS=m | 347 | CONFIG_IP6_NF_MATCH_EUI64=m |
353 | CONFIG_IP6_NF_MATCH_FRAG=m | 348 | CONFIG_IP6_NF_MATCH_FRAG=m |
349 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
354 | CONFIG_IP6_NF_MATCH_HL=m | 350 | CONFIG_IP6_NF_MATCH_HL=m |
355 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 351 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
356 | CONFIG_IP6_NF_MATCH_AH=m | ||
357 | CONFIG_IP6_NF_MATCH_MH=m | 352 | CONFIG_IP6_NF_MATCH_MH=m |
358 | CONFIG_IP6_NF_MATCH_EUI64=m | 353 | CONFIG_IP6_NF_MATCH_RT=m |
359 | CONFIG_IP6_NF_FILTER=m | ||
360 | CONFIG_IP6_NF_TARGET_LOG=m | 354 | CONFIG_IP6_NF_TARGET_LOG=m |
355 | CONFIG_IP6_NF_FILTER=m | ||
361 | CONFIG_IP6_NF_TARGET_REJECT=m | 356 | CONFIG_IP6_NF_TARGET_REJECT=m |
362 | CONFIG_IP6_NF_MANGLE=m | 357 | CONFIG_IP6_NF_MANGLE=m |
363 | CONFIG_IP6_NF_TARGET_HL=m | 358 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -384,6 +379,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
384 | # CONFIG_TIPC is not set | 379 | # CONFIG_TIPC is not set |
385 | # CONFIG_ATM is not set | 380 | # CONFIG_ATM is not set |
386 | # CONFIG_BRIDGE is not set | 381 | # CONFIG_BRIDGE is not set |
382 | # CONFIG_NET_DSA is not set | ||
387 | # CONFIG_VLAN_8021Q is not set | 383 | # CONFIG_VLAN_8021Q is not set |
388 | # CONFIG_DECNET is not set | 384 | # CONFIG_DECNET is not set |
389 | CONFIG_LLC=m | 385 | CONFIG_LLC=m |
@@ -410,19 +406,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
410 | # CONFIG_IRDA is not set | 406 | # CONFIG_IRDA is not set |
411 | # CONFIG_BT is not set | 407 | # CONFIG_BT is not set |
412 | # CONFIG_AF_RXRPC is not set | 408 | # CONFIG_AF_RXRPC is not set |
413 | 409 | # CONFIG_PHONET is not set | |
414 | # | 410 | # CONFIG_WIRELESS is not set |
415 | # Wireless | ||
416 | # | ||
417 | # CONFIG_CFG80211 is not set | ||
418 | CONFIG_WIRELESS_EXT=y | ||
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
420 | # CONFIG_MAC80211 is not set | ||
421 | CONFIG_IEEE80211=m | ||
422 | # CONFIG_IEEE80211_DEBUG is not set | ||
423 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
424 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
425 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
426 | # CONFIG_RFKILL is not set | 411 | # CONFIG_RFKILL is not set |
427 | # CONFIG_NET_9P is not set | 412 | # CONFIG_NET_9P is not set |
428 | 413 | ||
@@ -460,21 +445,20 @@ CONFIG_ATA_OVER_ETH=m | |||
460 | CONFIG_MISC_DEVICES=y | 445 | CONFIG_MISC_DEVICES=y |
461 | # CONFIG_EEPROM_93CX6 is not set | 446 | # CONFIG_EEPROM_93CX6 is not set |
462 | # CONFIG_ENCLOSURE_SERVICES is not set | 447 | # CONFIG_ENCLOSURE_SERVICES is not set |
448 | # CONFIG_C2PORT is not set | ||
463 | CONFIG_HAVE_IDE=y | 449 | CONFIG_HAVE_IDE=y |
464 | CONFIG_IDE=y | 450 | CONFIG_IDE=y |
465 | CONFIG_BLK_DEV_IDE=y | ||
466 | 451 | ||
467 | # | 452 | # |
468 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 453 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
469 | # | 454 | # |
470 | CONFIG_IDE_ATAPI=y | ||
471 | # CONFIG_BLK_DEV_IDE_SATA is not set | 455 | # CONFIG_BLK_DEV_IDE_SATA is not set |
472 | CONFIG_BLK_DEV_IDEDISK=y | 456 | CONFIG_IDE_GD=y |
473 | # CONFIG_IDEDISK_MULTI_MODE is not set | 457 | CONFIG_IDE_GD_ATA=y |
458 | # CONFIG_IDE_GD_ATAPI is not set | ||
474 | CONFIG_BLK_DEV_IDECD=y | 459 | CONFIG_BLK_DEV_IDECD=y |
475 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | 460 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y |
476 | # CONFIG_BLK_DEV_IDETAPE is not set | 461 | # CONFIG_BLK_DEV_IDETAPE is not set |
477 | CONFIG_BLK_DEV_IDEFLOPPY=m | ||
478 | # CONFIG_BLK_DEV_IDESCSI is not set | 462 | # CONFIG_BLK_DEV_IDESCSI is not set |
479 | # CONFIG_IDE_TASK_IOCTL is not set | 463 | # CONFIG_IDE_TASK_IOCTL is not set |
480 | CONFIG_IDE_PROC_FS=y | 464 | CONFIG_IDE_PROC_FS=y |
@@ -581,6 +565,9 @@ CONFIG_MACMACE=y | |||
581 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 565 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
582 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 566 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
583 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 567 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
568 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
569 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
570 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
584 | # CONFIG_B44 is not set | 571 | # CONFIG_B44 is not set |
585 | # CONFIG_NETDEV_1000 is not set | 572 | # CONFIG_NETDEV_1000 is not set |
586 | # CONFIG_NETDEV_10000 is not set | 573 | # CONFIG_NETDEV_10000 is not set |
@@ -650,6 +637,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
650 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 637 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
651 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 638 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
652 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 639 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
640 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
653 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 641 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
654 | CONFIG_MOUSE_SERIAL=m | 642 | CONFIG_MOUSE_SERIAL=m |
655 | # CONFIG_MOUSE_VSXXXAA is not set | 643 | # CONFIG_MOUSE_VSXXXAA is not set |
@@ -706,11 +694,11 @@ CONFIG_GEN_RTC_X=y | |||
706 | # CONFIG_THERMAL is not set | 694 | # CONFIG_THERMAL is not set |
707 | # CONFIG_THERMAL_HWMON is not set | 695 | # CONFIG_THERMAL_HWMON is not set |
708 | # CONFIG_WATCHDOG is not set | 696 | # CONFIG_WATCHDOG is not set |
697 | CONFIG_SSB_POSSIBLE=y | ||
709 | 698 | ||
710 | # | 699 | # |
711 | # Sonics Silicon Backplane | 700 | # Sonics Silicon Backplane |
712 | # | 701 | # |
713 | CONFIG_SSB_POSSIBLE=y | ||
714 | # CONFIG_SSB is not set | 702 | # CONFIG_SSB is not set |
715 | 703 | ||
716 | # | 704 | # |
@@ -720,6 +708,7 @@ CONFIG_SSB_POSSIBLE=y | |||
720 | # CONFIG_MFD_SM501 is not set | 708 | # CONFIG_MFD_SM501 is not set |
721 | # CONFIG_HTC_PASIC3 is not set | 709 | # CONFIG_HTC_PASIC3 is not set |
722 | # CONFIG_MFD_TMIO is not set | 710 | # CONFIG_MFD_TMIO is not set |
711 | # CONFIG_REGULATOR is not set | ||
723 | 712 | ||
724 | # | 713 | # |
725 | # Multimedia devices | 714 | # Multimedia devices |
@@ -745,6 +734,7 @@ CONFIG_SSB_POSSIBLE=y | |||
745 | CONFIG_FB=y | 734 | CONFIG_FB=y |
746 | # CONFIG_FIRMWARE_EDID is not set | 735 | # CONFIG_FIRMWARE_EDID is not set |
747 | # CONFIG_FB_DDC is not set | 736 | # CONFIG_FB_DDC is not set |
737 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
748 | CONFIG_FB_CFB_FILLRECT=y | 738 | CONFIG_FB_CFB_FILLRECT=y |
749 | CONFIG_FB_CFB_COPYAREA=y | 739 | CONFIG_FB_CFB_COPYAREA=y |
750 | CONFIG_FB_CFB_IMAGEBLIT=y | 740 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -768,6 +758,8 @@ CONFIG_FB_MAC=y | |||
768 | # CONFIG_FB_UVESA is not set | 758 | # CONFIG_FB_UVESA is not set |
769 | # CONFIG_FB_S1D13XXX is not set | 759 | # CONFIG_FB_S1D13XXX is not set |
770 | # CONFIG_FB_VIRTUAL is not set | 760 | # CONFIG_FB_VIRTUAL is not set |
761 | # CONFIG_FB_METRONOME is not set | ||
762 | # CONFIG_FB_MB862XX is not set | ||
771 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 763 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
772 | 764 | ||
773 | # | 765 | # |
@@ -796,6 +788,12 @@ CONFIG_HID_SUPPORT=y | |||
796 | CONFIG_HID=m | 788 | CONFIG_HID=m |
797 | # CONFIG_HID_DEBUG is not set | 789 | # CONFIG_HID_DEBUG is not set |
798 | CONFIG_HIDRAW=y | 790 | CONFIG_HIDRAW=y |
791 | # CONFIG_HID_PID is not set | ||
792 | |||
793 | # | ||
794 | # Special HID drivers | ||
795 | # | ||
796 | CONFIG_HID_COMPAT=y | ||
799 | # CONFIG_USB_SUPPORT is not set | 797 | # CONFIG_USB_SUPPORT is not set |
800 | # CONFIG_MMC is not set | 798 | # CONFIG_MMC is not set |
801 | # CONFIG_MEMSTICK is not set | 799 | # CONFIG_MEMSTICK is not set |
@@ -804,6 +802,8 @@ CONFIG_HIDRAW=y | |||
804 | # CONFIG_RTC_CLASS is not set | 802 | # CONFIG_RTC_CLASS is not set |
805 | # CONFIG_DMADEVICES is not set | 803 | # CONFIG_DMADEVICES is not set |
806 | # CONFIG_UIO is not set | 804 | # CONFIG_UIO is not set |
805 | # CONFIG_STAGING is not set | ||
806 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
807 | 807 | ||
808 | # | 808 | # |
809 | # Character devices | 809 | # Character devices |
@@ -820,8 +820,9 @@ CONFIG_EXT2_FS=y | |||
820 | # CONFIG_EXT2_FS_XIP is not set | 820 | # CONFIG_EXT2_FS_XIP is not set |
821 | CONFIG_EXT3_FS=y | 821 | CONFIG_EXT3_FS=y |
822 | # CONFIG_EXT3_FS_XATTR is not set | 822 | # CONFIG_EXT3_FS_XATTR is not set |
823 | # CONFIG_EXT4DEV_FS is not set | 823 | # CONFIG_EXT4_FS is not set |
824 | CONFIG_JBD=y | 824 | CONFIG_JBD=y |
825 | CONFIG_JBD2=m | ||
825 | CONFIG_REISERFS_FS=m | 826 | CONFIG_REISERFS_FS=m |
826 | # CONFIG_REISERFS_CHECK is not set | 827 | # CONFIG_REISERFS_CHECK is not set |
827 | # CONFIG_REISERFS_PROC_INFO is not set | 828 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -832,6 +833,7 @@ CONFIG_JFS_FS=m | |||
832 | # CONFIG_JFS_DEBUG is not set | 833 | # CONFIG_JFS_DEBUG is not set |
833 | # CONFIG_JFS_STATISTICS is not set | 834 | # CONFIG_JFS_STATISTICS is not set |
834 | # CONFIG_FS_POSIX_ACL is not set | 835 | # CONFIG_FS_POSIX_ACL is not set |
836 | CONFIG_FILE_LOCKING=y | ||
835 | CONFIG_XFS_FS=m | 837 | CONFIG_XFS_FS=m |
836 | # CONFIG_XFS_QUOTA is not set | 838 | # CONFIG_XFS_QUOTA is not set |
837 | # CONFIG_XFS_POSIX_ACL is not set | 839 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -843,6 +845,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
843 | # CONFIG_OCFS2_FS_STATS is not set | 845 | # CONFIG_OCFS2_FS_STATS is not set |
844 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 846 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
845 | # CONFIG_OCFS2_DEBUG_FS is not set | 847 | # CONFIG_OCFS2_DEBUG_FS is not set |
848 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
846 | CONFIG_DNOTIFY=y | 849 | CONFIG_DNOTIFY=y |
847 | CONFIG_INOTIFY=y | 850 | CONFIG_INOTIFY=y |
848 | CONFIG_INOTIFY_USER=y | 851 | CONFIG_INOTIFY_USER=y |
@@ -881,6 +884,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
881 | CONFIG_PROC_FS=y | 884 | CONFIG_PROC_FS=y |
882 | CONFIG_PROC_KCORE=y | 885 | CONFIG_PROC_KCORE=y |
883 | CONFIG_PROC_SYSCTL=y | 886 | CONFIG_PROC_SYSCTL=y |
887 | CONFIG_PROC_PAGE_MONITOR=y | ||
884 | CONFIG_SYSFS=y | 888 | CONFIG_SYSFS=y |
885 | CONFIG_TMPFS=y | 889 | CONFIG_TMPFS=y |
886 | # CONFIG_TMPFS_POSIX_ACL is not set | 890 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -923,6 +927,7 @@ CONFIG_EXPORTFS=m | |||
923 | CONFIG_NFS_COMMON=y | 927 | CONFIG_NFS_COMMON=y |
924 | CONFIG_SUNRPC=m | 928 | CONFIG_SUNRPC=m |
925 | CONFIG_SUNRPC_GSS=m | 929 | CONFIG_SUNRPC_GSS=m |
930 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
926 | CONFIG_RPCSEC_GSS_KRB5=m | 931 | CONFIG_RPCSEC_GSS_KRB5=m |
927 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 932 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
928 | CONFIG_SMB_FS=m | 933 | CONFIG_SMB_FS=m |
@@ -996,7 +1001,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
996 | # CONFIG_DEBUG_KERNEL is not set | 1001 | # CONFIG_DEBUG_KERNEL is not set |
997 | CONFIG_DEBUG_BUGVERBOSE=y | 1002 | CONFIG_DEBUG_BUGVERBOSE=y |
998 | CONFIG_DEBUG_MEMORY_INIT=y | 1003 | CONFIG_DEBUG_MEMORY_INIT=y |
1004 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
999 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1005 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
1006 | |||
1007 | # | ||
1008 | # Tracers | ||
1009 | # | ||
1010 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
1000 | # CONFIG_SAMPLES is not set | 1011 | # CONFIG_SAMPLES is not set |
1001 | 1012 | ||
1002 | # | 1013 | # |
@@ -1004,6 +1015,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
1004 | # | 1015 | # |
1005 | # CONFIG_KEYS is not set | 1016 | # CONFIG_KEYS is not set |
1006 | # CONFIG_SECURITY is not set | 1017 | # CONFIG_SECURITY is not set |
1018 | # CONFIG_SECURITYFS is not set | ||
1007 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1019 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
1008 | CONFIG_XOR_BLOCKS=m | 1020 | CONFIG_XOR_BLOCKS=m |
1009 | CONFIG_ASYNC_CORE=m | 1021 | CONFIG_ASYNC_CORE=m |
@@ -1014,10 +1026,12 @@ CONFIG_CRYPTO=y | |||
1014 | # | 1026 | # |
1015 | # Crypto core or helper | 1027 | # Crypto core or helper |
1016 | # | 1028 | # |
1029 | # CONFIG_CRYPTO_FIPS is not set | ||
1017 | CONFIG_CRYPTO_ALGAPI=y | 1030 | CONFIG_CRYPTO_ALGAPI=y |
1018 | CONFIG_CRYPTO_AEAD=m | 1031 | CONFIG_CRYPTO_AEAD=y |
1019 | CONFIG_CRYPTO_BLKCIPHER=m | 1032 | CONFIG_CRYPTO_BLKCIPHER=y |
1020 | CONFIG_CRYPTO_HASH=y | 1033 | CONFIG_CRYPTO_HASH=y |
1034 | CONFIG_CRYPTO_RNG=y | ||
1021 | CONFIG_CRYPTO_MANAGER=y | 1035 | CONFIG_CRYPTO_MANAGER=y |
1022 | CONFIG_CRYPTO_GF128MUL=m | 1036 | CONFIG_CRYPTO_GF128MUL=m |
1023 | CONFIG_CRYPTO_NULL=m | 1037 | CONFIG_CRYPTO_NULL=m |
@@ -1091,14 +1105,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1091 | # | 1105 | # |
1092 | CONFIG_CRYPTO_DEFLATE=m | 1106 | CONFIG_CRYPTO_DEFLATE=m |
1093 | CONFIG_CRYPTO_LZO=m | 1107 | CONFIG_CRYPTO_LZO=m |
1108 | |||
1109 | # | ||
1110 | # Random Number Generation | ||
1111 | # | ||
1112 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1094 | # CONFIG_CRYPTO_HW is not set | 1113 | # CONFIG_CRYPTO_HW is not set |
1095 | 1114 | ||
1096 | # | 1115 | # |
1097 | # Library routines | 1116 | # Library routines |
1098 | # | 1117 | # |
1099 | CONFIG_BITREVERSE=y | 1118 | CONFIG_BITREVERSE=y |
1100 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1101 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1102 | CONFIG_CRC_CCITT=m | 1119 | CONFIG_CRC_CCITT=m |
1103 | CONFIG_CRC16=m | 1120 | CONFIG_CRC16=m |
1104 | CONFIG_CRC_T10DIF=y | 1121 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/multi_defconfig b/arch/m68k/configs/multi_defconfig index 1a806102b999..70693588031e 100644 --- a/arch/m68k/configs/multi_defconfig +++ b/arch/m68k/configs/multi_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:07 2008 | 4 | # Tue Dec 2 20:27:48 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | CONFIG_AMIGA=y | 113 | CONFIG_AMIGA=y |
124 | CONFIG_ATARI=y | 114 | CONFIG_ATARI=y |
125 | CONFIG_MAC=y | 115 | CONFIG_MAC=y |
@@ -154,19 +144,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
154 | CONFIG_DISCONTIGMEM=y | 144 | CONFIG_DISCONTIGMEM=y |
155 | CONFIG_FLAT_NODE_MEM_MAP=y | 145 | CONFIG_FLAT_NODE_MEM_MAP=y |
156 | CONFIG_NEED_MULTIPLE_NODES=y | 146 | CONFIG_NEED_MULTIPLE_NODES=y |
157 | # CONFIG_SPARSEMEM_STATIC is not set | ||
158 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
159 | CONFIG_PAGEFLAGS_EXTENDED=y | 147 | CONFIG_PAGEFLAGS_EXTENDED=y |
160 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 148 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
161 | # CONFIG_RESOURCES_64BIT is not set | 149 | # CONFIG_RESOURCES_64BIT is not set |
150 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
162 | CONFIG_ZONE_DMA_FLAG=1 | 151 | CONFIG_ZONE_DMA_FLAG=1 |
163 | CONFIG_BOUNCE=y | 152 | CONFIG_BOUNCE=y |
164 | CONFIG_VIRT_TO_BUS=y | 153 | CONFIG_VIRT_TO_BUS=y |
154 | CONFIG_UNEVICTABLE_LRU=y | ||
165 | 155 | ||
166 | # | 156 | # |
167 | # General setup | 157 | # General setup |
168 | # | 158 | # |
169 | CONFIG_BINFMT_ELF=y | 159 | CONFIG_BINFMT_ELF=y |
160 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
161 | CONFIG_HAVE_AOUT=y | ||
170 | CONFIG_BINFMT_AOUT=m | 162 | CONFIG_BINFMT_AOUT=m |
171 | CONFIG_BINFMT_MISC=m | 163 | CONFIG_BINFMT_MISC=m |
172 | CONFIG_ZORRO=y | 164 | CONFIG_ZORRO=y |
@@ -222,7 +214,6 @@ CONFIG_INET_TCP_DIAG=m | |||
222 | CONFIG_TCP_CONG_CUBIC=y | 214 | CONFIG_TCP_CONG_CUBIC=y |
223 | CONFIG_DEFAULT_TCP_CONG="cubic" | 215 | CONFIG_DEFAULT_TCP_CONG="cubic" |
224 | # CONFIG_TCP_MD5SIG is not set | 216 | # CONFIG_TCP_MD5SIG is not set |
225 | # CONFIG_IP_VS is not set | ||
226 | CONFIG_IPV6=m | 217 | CONFIG_IPV6=m |
227 | CONFIG_IPV6_PRIVACY=y | 218 | CONFIG_IPV6_PRIVACY=y |
228 | CONFIG_IPV6_ROUTER_PREF=y | 219 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -272,13 +263,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
272 | CONFIG_NF_CONNTRACK_SIP=m | 263 | CONFIG_NF_CONNTRACK_SIP=m |
273 | CONFIG_NF_CONNTRACK_TFTP=m | 264 | CONFIG_NF_CONNTRACK_TFTP=m |
274 | # CONFIG_NF_CT_NETLINK is not set | 265 | # CONFIG_NF_CT_NETLINK is not set |
266 | # CONFIG_NETFILTER_TPROXY is not set | ||
275 | CONFIG_NETFILTER_XTABLES=m | 267 | CONFIG_NETFILTER_XTABLES=m |
276 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 268 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
277 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 269 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
278 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 270 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
279 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 271 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
280 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
281 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 272 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
273 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
282 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 274 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
283 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 275 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
284 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 276 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -292,19 +284,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
292 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 284 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
293 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 285 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
294 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 286 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
287 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
295 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 288 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
296 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 289 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
297 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 290 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
298 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 291 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
299 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 292 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
300 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 293 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
294 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
301 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 295 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
302 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 296 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
303 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
304 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 297 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
305 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 298 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
306 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 299 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
307 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 300 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
301 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
302 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
308 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 303 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
309 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 304 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
310 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 305 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -312,20 +307,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
312 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 307 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
313 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 308 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
314 | CONFIG_NETFILTER_XT_MATCH_U32=m | 309 | CONFIG_NETFILTER_XT_MATCH_U32=m |
315 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 310 | # CONFIG_IP_VS is not set |
316 | 311 | ||
317 | # | 312 | # |
318 | # IP: Netfilter Configuration | 313 | # IP: Netfilter Configuration |
319 | # | 314 | # |
315 | CONFIG_NF_DEFRAG_IPV4=m | ||
320 | CONFIG_NF_CONNTRACK_IPV4=m | 316 | CONFIG_NF_CONNTRACK_IPV4=m |
321 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 317 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
322 | CONFIG_IP_NF_QUEUE=m | 318 | CONFIG_IP_NF_QUEUE=m |
323 | CONFIG_IP_NF_IPTABLES=m | 319 | CONFIG_IP_NF_IPTABLES=m |
324 | CONFIG_IP_NF_MATCH_RECENT=m | 320 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
325 | CONFIG_IP_NF_MATCH_ECN=m | ||
326 | CONFIG_IP_NF_MATCH_AH=m | 321 | CONFIG_IP_NF_MATCH_AH=m |
322 | CONFIG_IP_NF_MATCH_ECN=m | ||
327 | CONFIG_IP_NF_MATCH_TTL=m | 323 | CONFIG_IP_NF_MATCH_TTL=m |
328 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
329 | CONFIG_IP_NF_FILTER=m | 324 | CONFIG_IP_NF_FILTER=m |
330 | CONFIG_IP_NF_TARGET_REJECT=m | 325 | CONFIG_IP_NF_TARGET_REJECT=m |
331 | CONFIG_IP_NF_TARGET_LOG=m | 326 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -333,8 +328,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
333 | CONFIG_NF_NAT=m | 328 | CONFIG_NF_NAT=m |
334 | CONFIG_NF_NAT_NEEDED=y | 329 | CONFIG_NF_NAT_NEEDED=y |
335 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 330 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
336 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
337 | CONFIG_IP_NF_TARGET_NETMAP=m | 331 | CONFIG_IP_NF_TARGET_NETMAP=m |
332 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
338 | CONFIG_NF_NAT_SNMP_BASIC=m | 333 | CONFIG_NF_NAT_SNMP_BASIC=m |
339 | CONFIG_NF_NAT_PROTO_GRE=m | 334 | CONFIG_NF_NAT_PROTO_GRE=m |
340 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 335 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -347,9 +342,9 @@ CONFIG_NF_NAT_PPTP=m | |||
347 | CONFIG_NF_NAT_H323=m | 342 | CONFIG_NF_NAT_H323=m |
348 | CONFIG_NF_NAT_SIP=m | 343 | CONFIG_NF_NAT_SIP=m |
349 | CONFIG_IP_NF_MANGLE=m | 344 | CONFIG_IP_NF_MANGLE=m |
345 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
350 | CONFIG_IP_NF_TARGET_ECN=m | 346 | CONFIG_IP_NF_TARGET_ECN=m |
351 | CONFIG_IP_NF_TARGET_TTL=m | 347 | CONFIG_IP_NF_TARGET_TTL=m |
352 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
353 | CONFIG_IP_NF_RAW=m | 348 | CONFIG_IP_NF_RAW=m |
354 | CONFIG_IP_NF_ARPTABLES=m | 349 | CONFIG_IP_NF_ARPTABLES=m |
355 | CONFIG_IP_NF_ARPFILTER=m | 350 | CONFIG_IP_NF_ARPFILTER=m |
@@ -361,16 +356,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
361 | CONFIG_NF_CONNTRACK_IPV6=m | 356 | CONFIG_NF_CONNTRACK_IPV6=m |
362 | CONFIG_IP6_NF_QUEUE=m | 357 | CONFIG_IP6_NF_QUEUE=m |
363 | CONFIG_IP6_NF_IPTABLES=m | 358 | CONFIG_IP6_NF_IPTABLES=m |
364 | CONFIG_IP6_NF_MATCH_RT=m | 359 | CONFIG_IP6_NF_MATCH_AH=m |
365 | CONFIG_IP6_NF_MATCH_OPTS=m | 360 | CONFIG_IP6_NF_MATCH_EUI64=m |
366 | CONFIG_IP6_NF_MATCH_FRAG=m | 361 | CONFIG_IP6_NF_MATCH_FRAG=m |
362 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
367 | CONFIG_IP6_NF_MATCH_HL=m | 363 | CONFIG_IP6_NF_MATCH_HL=m |
368 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 364 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
369 | CONFIG_IP6_NF_MATCH_AH=m | ||
370 | CONFIG_IP6_NF_MATCH_MH=m | 365 | CONFIG_IP6_NF_MATCH_MH=m |
371 | CONFIG_IP6_NF_MATCH_EUI64=m | 366 | CONFIG_IP6_NF_MATCH_RT=m |
372 | CONFIG_IP6_NF_FILTER=m | ||
373 | CONFIG_IP6_NF_TARGET_LOG=m | 367 | CONFIG_IP6_NF_TARGET_LOG=m |
368 | CONFIG_IP6_NF_FILTER=m | ||
374 | CONFIG_IP6_NF_TARGET_REJECT=m | 369 | CONFIG_IP6_NF_TARGET_REJECT=m |
375 | CONFIG_IP6_NF_MANGLE=m | 370 | CONFIG_IP6_NF_MANGLE=m |
376 | CONFIG_IP6_NF_TARGET_HL=m | 371 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -397,6 +392,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
397 | # CONFIG_TIPC is not set | 392 | # CONFIG_TIPC is not set |
398 | # CONFIG_ATM is not set | 393 | # CONFIG_ATM is not set |
399 | # CONFIG_BRIDGE is not set | 394 | # CONFIG_BRIDGE is not set |
395 | # CONFIG_NET_DSA is not set | ||
400 | # CONFIG_VLAN_8021Q is not set | 396 | # CONFIG_VLAN_8021Q is not set |
401 | # CONFIG_DECNET is not set | 397 | # CONFIG_DECNET is not set |
402 | CONFIG_LLC=m | 398 | CONFIG_LLC=m |
@@ -424,19 +420,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
424 | # CONFIG_IRDA is not set | 420 | # CONFIG_IRDA is not set |
425 | # CONFIG_BT is not set | 421 | # CONFIG_BT is not set |
426 | # CONFIG_AF_RXRPC is not set | 422 | # CONFIG_AF_RXRPC is not set |
427 | 423 | # CONFIG_PHONET is not set | |
428 | # | 424 | # CONFIG_WIRELESS is not set |
429 | # Wireless | ||
430 | # | ||
431 | # CONFIG_CFG80211 is not set | ||
432 | CONFIG_WIRELESS_EXT=y | ||
433 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
434 | # CONFIG_MAC80211 is not set | ||
435 | CONFIG_IEEE80211=m | ||
436 | # CONFIG_IEEE80211_DEBUG is not set | ||
437 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
438 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
439 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
440 | # CONFIG_RFKILL is not set | 425 | # CONFIG_RFKILL is not set |
441 | # CONFIG_NET_9P is not set | 426 | # CONFIG_NET_9P is not set |
442 | 427 | ||
@@ -486,21 +471,20 @@ CONFIG_ATA_OVER_ETH=m | |||
486 | CONFIG_MISC_DEVICES=y | 471 | CONFIG_MISC_DEVICES=y |
487 | # CONFIG_EEPROM_93CX6 is not set | 472 | # CONFIG_EEPROM_93CX6 is not set |
488 | # CONFIG_ENCLOSURE_SERVICES is not set | 473 | # CONFIG_ENCLOSURE_SERVICES is not set |
474 | # CONFIG_C2PORT is not set | ||
489 | CONFIG_HAVE_IDE=y | 475 | CONFIG_HAVE_IDE=y |
490 | CONFIG_IDE=y | 476 | CONFIG_IDE=y |
491 | CONFIG_BLK_DEV_IDE=y | ||
492 | 477 | ||
493 | # | 478 | # |
494 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 479 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
495 | # | 480 | # |
496 | CONFIG_IDE_ATAPI=y | ||
497 | # CONFIG_BLK_DEV_IDE_SATA is not set | 481 | # CONFIG_BLK_DEV_IDE_SATA is not set |
498 | CONFIG_BLK_DEV_IDEDISK=y | 482 | CONFIG_IDE_GD=y |
499 | # CONFIG_IDEDISK_MULTI_MODE is not set | 483 | CONFIG_IDE_GD_ATA=y |
484 | # CONFIG_IDE_GD_ATAPI is not set | ||
500 | CONFIG_BLK_DEV_IDECD=y | 485 | CONFIG_BLK_DEV_IDECD=y |
501 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | 486 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y |
502 | # CONFIG_BLK_DEV_IDETAPE is not set | 487 | # CONFIG_BLK_DEV_IDETAPE is not set |
503 | CONFIG_BLK_DEV_IDEFLOPPY=m | ||
504 | # CONFIG_BLK_DEV_IDESCSI is not set | 488 | # CONFIG_BLK_DEV_IDESCSI is not set |
505 | # CONFIG_IDE_TASK_IOCTL is not set | 489 | # CONFIG_IDE_TASK_IOCTL is not set |
506 | CONFIG_IDE_PROC_FS=y | 490 | CONFIG_IDE_PROC_FS=y |
@@ -629,7 +613,7 @@ CONFIG_VETH=m | |||
629 | # CONFIG_ARCNET is not set | 613 | # CONFIG_ARCNET is not set |
630 | # CONFIG_PHYLIB is not set | 614 | # CONFIG_PHYLIB is not set |
631 | CONFIG_NET_ETHERNET=y | 615 | CONFIG_NET_ETHERNET=y |
632 | CONFIG_MII=m | 616 | CONFIG_MII=y |
633 | CONFIG_ARIADNE=m | 617 | CONFIG_ARIADNE=m |
634 | CONFIG_A2065=m | 618 | CONFIG_A2065=m |
635 | CONFIG_HYDRA=m | 619 | CONFIG_HYDRA=m |
@@ -657,8 +641,12 @@ CONFIG_NE2000=m | |||
657 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 641 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
658 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 642 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
659 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 643 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
644 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
645 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
646 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
660 | # CONFIG_NET_PCI is not set | 647 | # CONFIG_NET_PCI is not set |
661 | # CONFIG_B44 is not set | 648 | # CONFIG_B44 is not set |
649 | # CONFIG_CS89x0 is not set | ||
662 | # CONFIG_NET_POCKET is not set | 650 | # CONFIG_NET_POCKET is not set |
663 | # CONFIG_NETDEV_1000 is not set | 651 | # CONFIG_NETDEV_1000 is not set |
664 | # CONFIG_NETDEV_10000 is not set | 652 | # CONFIG_NETDEV_10000 is not set |
@@ -735,6 +723,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
735 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 723 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
736 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 724 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
737 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 725 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
726 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
738 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 727 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
739 | CONFIG_MOUSE_SERIAL=m | 728 | CONFIG_MOUSE_SERIAL=m |
740 | # CONFIG_MOUSE_INPORT is not set | 729 | # CONFIG_MOUSE_INPORT is not set |
@@ -832,11 +821,11 @@ CONFIG_GEN_RTC_X=y | |||
832 | # CONFIG_THERMAL is not set | 821 | # CONFIG_THERMAL is not set |
833 | # CONFIG_THERMAL_HWMON is not set | 822 | # CONFIG_THERMAL_HWMON is not set |
834 | # CONFIG_WATCHDOG is not set | 823 | # CONFIG_WATCHDOG is not set |
824 | CONFIG_SSB_POSSIBLE=y | ||
835 | 825 | ||
836 | # | 826 | # |
837 | # Sonics Silicon Backplane | 827 | # Sonics Silicon Backplane |
838 | # | 828 | # |
839 | CONFIG_SSB_POSSIBLE=y | ||
840 | # CONFIG_SSB is not set | 829 | # CONFIG_SSB is not set |
841 | 830 | ||
842 | # | 831 | # |
@@ -846,6 +835,7 @@ CONFIG_SSB_POSSIBLE=y | |||
846 | # CONFIG_MFD_SM501 is not set | 835 | # CONFIG_MFD_SM501 is not set |
847 | # CONFIG_HTC_PASIC3 is not set | 836 | # CONFIG_HTC_PASIC3 is not set |
848 | # CONFIG_MFD_TMIO is not set | 837 | # CONFIG_MFD_TMIO is not set |
838 | # CONFIG_REGULATOR is not set | ||
849 | 839 | ||
850 | # | 840 | # |
851 | # Multimedia devices | 841 | # Multimedia devices |
@@ -871,6 +861,7 @@ CONFIG_SSB_POSSIBLE=y | |||
871 | CONFIG_FB=y | 861 | CONFIG_FB=y |
872 | # CONFIG_FIRMWARE_EDID is not set | 862 | # CONFIG_FIRMWARE_EDID is not set |
873 | # CONFIG_FB_DDC is not set | 863 | # CONFIG_FB_DDC is not set |
864 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
874 | CONFIG_FB_CFB_FILLRECT=y | 865 | CONFIG_FB_CFB_FILLRECT=y |
875 | CONFIG_FB_CFB_COPYAREA=y | 866 | CONFIG_FB_CFB_COPYAREA=y |
876 | CONFIG_FB_CFB_IMAGEBLIT=y | 867 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -905,6 +896,8 @@ CONFIG_FB_HP300=y | |||
905 | # CONFIG_FB_S1D13XXX is not set | 896 | # CONFIG_FB_S1D13XXX is not set |
906 | # CONFIG_FB_ATY is not set | 897 | # CONFIG_FB_ATY is not set |
907 | # CONFIG_FB_VIRTUAL is not set | 898 | # CONFIG_FB_VIRTUAL is not set |
899 | # CONFIG_FB_METRONOME is not set | ||
900 | # CONFIG_FB_MB862XX is not set | ||
908 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 901 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
909 | 902 | ||
910 | # | 903 | # |
@@ -930,6 +923,7 @@ CONFIG_LOGO_LINUX_VGA16=y | |||
930 | CONFIG_LOGO_LINUX_CLUT224=y | 923 | CONFIG_LOGO_LINUX_CLUT224=y |
931 | CONFIG_LOGO_MAC_CLUT224=y | 924 | CONFIG_LOGO_MAC_CLUT224=y |
932 | CONFIG_SOUND=m | 925 | CONFIG_SOUND=m |
926 | CONFIG_SOUND_OSS_CORE=y | ||
933 | CONFIG_DMASOUND_ATARI=m | 927 | CONFIG_DMASOUND_ATARI=m |
934 | CONFIG_DMASOUND_PAULA=m | 928 | CONFIG_DMASOUND_PAULA=m |
935 | CONFIG_DMASOUND_Q40=m | 929 | CONFIG_DMASOUND_Q40=m |
@@ -938,6 +932,12 @@ CONFIG_HID_SUPPORT=y | |||
938 | CONFIG_HID=m | 932 | CONFIG_HID=m |
939 | # CONFIG_HID_DEBUG is not set | 933 | # CONFIG_HID_DEBUG is not set |
940 | CONFIG_HIDRAW=y | 934 | CONFIG_HIDRAW=y |
935 | # CONFIG_HID_PID is not set | ||
936 | |||
937 | # | ||
938 | # Special HID drivers | ||
939 | # | ||
940 | CONFIG_HID_COMPAT=y | ||
941 | # CONFIG_USB_SUPPORT is not set | 941 | # CONFIG_USB_SUPPORT is not set |
942 | # CONFIG_MMC is not set | 942 | # CONFIG_MMC is not set |
943 | # CONFIG_MEMSTICK is not set | 943 | # CONFIG_MEMSTICK is not set |
@@ -947,6 +947,8 @@ CONFIG_HIDRAW=y | |||
947 | # CONFIG_DMADEVICES is not set | 947 | # CONFIG_DMADEVICES is not set |
948 | # CONFIG_AUXDISPLAY is not set | 948 | # CONFIG_AUXDISPLAY is not set |
949 | # CONFIG_UIO is not set | 949 | # CONFIG_UIO is not set |
950 | # CONFIG_STAGING is not set | ||
951 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
950 | 952 | ||
951 | # | 953 | # |
952 | # Character devices | 954 | # Character devices |
@@ -973,10 +975,9 @@ CONFIG_EXT2_FS=y | |||
973 | # CONFIG_EXT2_FS_XIP is not set | 975 | # CONFIG_EXT2_FS_XIP is not set |
974 | CONFIG_EXT3_FS=y | 976 | CONFIG_EXT3_FS=y |
975 | # CONFIG_EXT3_FS_XATTR is not set | 977 | # CONFIG_EXT3_FS_XATTR is not set |
976 | CONFIG_EXT4DEV_FS=y | 978 | # CONFIG_EXT4_FS is not set |
977 | # CONFIG_EXT4DEV_FS_XATTR is not set | ||
978 | CONFIG_JBD=y | 979 | CONFIG_JBD=y |
979 | CONFIG_JBD2=y | 980 | CONFIG_JBD2=m |
980 | CONFIG_REISERFS_FS=m | 981 | CONFIG_REISERFS_FS=m |
981 | # CONFIG_REISERFS_CHECK is not set | 982 | # CONFIG_REISERFS_CHECK is not set |
982 | # CONFIG_REISERFS_PROC_INFO is not set | 983 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -987,6 +988,7 @@ CONFIG_JFS_FS=m | |||
987 | # CONFIG_JFS_DEBUG is not set | 988 | # CONFIG_JFS_DEBUG is not set |
988 | # CONFIG_JFS_STATISTICS is not set | 989 | # CONFIG_JFS_STATISTICS is not set |
989 | # CONFIG_FS_POSIX_ACL is not set | 990 | # CONFIG_FS_POSIX_ACL is not set |
991 | CONFIG_FILE_LOCKING=y | ||
990 | CONFIG_XFS_FS=m | 992 | CONFIG_XFS_FS=m |
991 | # CONFIG_XFS_QUOTA is not set | 993 | # CONFIG_XFS_QUOTA is not set |
992 | # CONFIG_XFS_POSIX_ACL is not set | 994 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -998,6 +1000,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
998 | # CONFIG_OCFS2_FS_STATS is not set | 1000 | # CONFIG_OCFS2_FS_STATS is not set |
999 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 1001 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
1000 | # CONFIG_OCFS2_DEBUG_FS is not set | 1002 | # CONFIG_OCFS2_DEBUG_FS is not set |
1003 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
1001 | CONFIG_DNOTIFY=y | 1004 | CONFIG_DNOTIFY=y |
1002 | CONFIG_INOTIFY=y | 1005 | CONFIG_INOTIFY=y |
1003 | CONFIG_INOTIFY_USER=y | 1006 | CONFIG_INOTIFY_USER=y |
@@ -1036,6 +1039,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
1036 | CONFIG_PROC_FS=y | 1039 | CONFIG_PROC_FS=y |
1037 | CONFIG_PROC_KCORE=y | 1040 | CONFIG_PROC_KCORE=y |
1038 | CONFIG_PROC_SYSCTL=y | 1041 | CONFIG_PROC_SYSCTL=y |
1042 | CONFIG_PROC_PAGE_MONITOR=y | ||
1039 | CONFIG_SYSFS=y | 1043 | CONFIG_SYSFS=y |
1040 | CONFIG_TMPFS=y | 1044 | CONFIG_TMPFS=y |
1041 | # CONFIG_TMPFS_POSIX_ACL is not set | 1045 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -1079,6 +1083,7 @@ CONFIG_EXPORTFS=m | |||
1079 | CONFIG_NFS_COMMON=y | 1083 | CONFIG_NFS_COMMON=y |
1080 | CONFIG_SUNRPC=y | 1084 | CONFIG_SUNRPC=y |
1081 | CONFIG_SUNRPC_GSS=y | 1085 | CONFIG_SUNRPC_GSS=y |
1086 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
1082 | CONFIG_RPCSEC_GSS_KRB5=y | 1087 | CONFIG_RPCSEC_GSS_KRB5=y |
1083 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1088 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
1084 | CONFIG_SMB_FS=m | 1089 | CONFIG_SMB_FS=m |
@@ -1156,7 +1161,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
1156 | # CONFIG_DEBUG_KERNEL is not set | 1161 | # CONFIG_DEBUG_KERNEL is not set |
1157 | CONFIG_DEBUG_BUGVERBOSE=y | 1162 | CONFIG_DEBUG_BUGVERBOSE=y |
1158 | CONFIG_DEBUG_MEMORY_INIT=y | 1163 | CONFIG_DEBUG_MEMORY_INIT=y |
1164 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1159 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1165 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
1166 | |||
1167 | # | ||
1168 | # Tracers | ||
1169 | # | ||
1170 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
1160 | # CONFIG_SAMPLES is not set | 1171 | # CONFIG_SAMPLES is not set |
1161 | 1172 | ||
1162 | # | 1173 | # |
@@ -1164,6 +1175,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
1164 | # | 1175 | # |
1165 | # CONFIG_KEYS is not set | 1176 | # CONFIG_KEYS is not set |
1166 | # CONFIG_SECURITY is not set | 1177 | # CONFIG_SECURITY is not set |
1178 | # CONFIG_SECURITYFS is not set | ||
1167 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1179 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
1168 | CONFIG_XOR_BLOCKS=m | 1180 | CONFIG_XOR_BLOCKS=m |
1169 | CONFIG_ASYNC_CORE=m | 1181 | CONFIG_ASYNC_CORE=m |
@@ -1174,10 +1186,12 @@ CONFIG_CRYPTO=y | |||
1174 | # | 1186 | # |
1175 | # Crypto core or helper | 1187 | # Crypto core or helper |
1176 | # | 1188 | # |
1189 | # CONFIG_CRYPTO_FIPS is not set | ||
1177 | CONFIG_CRYPTO_ALGAPI=y | 1190 | CONFIG_CRYPTO_ALGAPI=y |
1178 | CONFIG_CRYPTO_AEAD=m | 1191 | CONFIG_CRYPTO_AEAD=y |
1179 | CONFIG_CRYPTO_BLKCIPHER=y | 1192 | CONFIG_CRYPTO_BLKCIPHER=y |
1180 | CONFIG_CRYPTO_HASH=y | 1193 | CONFIG_CRYPTO_HASH=y |
1194 | CONFIG_CRYPTO_RNG=y | ||
1181 | CONFIG_CRYPTO_MANAGER=y | 1195 | CONFIG_CRYPTO_MANAGER=y |
1182 | CONFIG_CRYPTO_GF128MUL=m | 1196 | CONFIG_CRYPTO_GF128MUL=m |
1183 | CONFIG_CRYPTO_NULL=m | 1197 | CONFIG_CRYPTO_NULL=m |
@@ -1251,14 +1265,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1251 | # | 1265 | # |
1252 | CONFIG_CRYPTO_DEFLATE=m | 1266 | CONFIG_CRYPTO_DEFLATE=m |
1253 | CONFIG_CRYPTO_LZO=m | 1267 | CONFIG_CRYPTO_LZO=m |
1268 | |||
1269 | # | ||
1270 | # Random Number Generation | ||
1271 | # | ||
1272 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1254 | # CONFIG_CRYPTO_HW is not set | 1273 | # CONFIG_CRYPTO_HW is not set |
1255 | 1274 | ||
1256 | # | 1275 | # |
1257 | # Library routines | 1276 | # Library routines |
1258 | # | 1277 | # |
1259 | CONFIG_BITREVERSE=y | 1278 | CONFIG_BITREVERSE=y |
1260 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1261 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1262 | CONFIG_CRC_CCITT=m | 1279 | CONFIG_CRC_CCITT=m |
1263 | CONFIG_CRC16=y | 1280 | CONFIG_CRC16=y |
1264 | CONFIG_CRC_T10DIF=y | 1281 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/mvme147_defconfig b/arch/m68k/configs/mvme147_defconfig index cacb5aef6a37..52d42715bd0b 100644 --- a/arch/m68k/configs/mvme147_defconfig +++ b/arch/m68k/configs/mvme147_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:08 2008 | 4 | # Tue Dec 2 20:27:50 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -151,19 +141,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
151 | CONFIG_DISCONTIGMEM=y | 141 | CONFIG_DISCONTIGMEM=y |
152 | CONFIG_FLAT_NODE_MEM_MAP=y | 142 | CONFIG_FLAT_NODE_MEM_MAP=y |
153 | CONFIG_NEED_MULTIPLE_NODES=y | 143 | CONFIG_NEED_MULTIPLE_NODES=y |
154 | # CONFIG_SPARSEMEM_STATIC is not set | ||
155 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
156 | CONFIG_PAGEFLAGS_EXTENDED=y | 144 | CONFIG_PAGEFLAGS_EXTENDED=y |
157 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 145 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
158 | # CONFIG_RESOURCES_64BIT is not set | 146 | # CONFIG_RESOURCES_64BIT is not set |
147 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
159 | CONFIG_ZONE_DMA_FLAG=1 | 148 | CONFIG_ZONE_DMA_FLAG=1 |
160 | CONFIG_BOUNCE=y | 149 | CONFIG_BOUNCE=y |
161 | CONFIG_VIRT_TO_BUS=y | 150 | CONFIG_VIRT_TO_BUS=y |
151 | CONFIG_UNEVICTABLE_LRU=y | ||
162 | 152 | ||
163 | # | 153 | # |
164 | # General setup | 154 | # General setup |
165 | # | 155 | # |
166 | CONFIG_BINFMT_ELF=y | 156 | CONFIG_BINFMT_ELF=y |
157 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
158 | CONFIG_HAVE_AOUT=y | ||
167 | CONFIG_BINFMT_AOUT=m | 159 | CONFIG_BINFMT_AOUT=m |
168 | CONFIG_BINFMT_MISC=m | 160 | CONFIG_BINFMT_MISC=m |
169 | CONFIG_PROC_HARDWARE=y | 161 | CONFIG_PROC_HARDWARE=y |
@@ -212,7 +204,6 @@ CONFIG_INET_TCP_DIAG=m | |||
212 | CONFIG_TCP_CONG_CUBIC=y | 204 | CONFIG_TCP_CONG_CUBIC=y |
213 | CONFIG_DEFAULT_TCP_CONG="cubic" | 205 | CONFIG_DEFAULT_TCP_CONG="cubic" |
214 | # CONFIG_TCP_MD5SIG is not set | 206 | # CONFIG_TCP_MD5SIG is not set |
215 | # CONFIG_IP_VS is not set | ||
216 | CONFIG_IPV6=m | 207 | CONFIG_IPV6=m |
217 | CONFIG_IPV6_PRIVACY=y | 208 | CONFIG_IPV6_PRIVACY=y |
218 | CONFIG_IPV6_ROUTER_PREF=y | 209 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -262,13 +253,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
262 | CONFIG_NF_CONNTRACK_SIP=m | 253 | CONFIG_NF_CONNTRACK_SIP=m |
263 | CONFIG_NF_CONNTRACK_TFTP=m | 254 | CONFIG_NF_CONNTRACK_TFTP=m |
264 | # CONFIG_NF_CT_NETLINK is not set | 255 | # CONFIG_NF_CT_NETLINK is not set |
256 | # CONFIG_NETFILTER_TPROXY is not set | ||
265 | CONFIG_NETFILTER_XTABLES=m | 257 | CONFIG_NETFILTER_XTABLES=m |
266 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 258 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
267 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 259 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
268 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 260 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
269 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 261 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
270 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
271 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 262 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
263 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
272 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 264 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
273 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 265 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
274 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 266 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -282,19 +274,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
282 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 274 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
283 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 275 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
284 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 276 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
277 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
285 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 278 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
286 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 279 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
287 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 280 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
288 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 281 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
289 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 282 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
290 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 283 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
284 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
291 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 285 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
292 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 286 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
293 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
294 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 287 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
295 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 288 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
296 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 289 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
297 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 290 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
291 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
292 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
298 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 293 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
299 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 294 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
300 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 295 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -302,20 +297,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
302 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 297 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
303 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 298 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
304 | CONFIG_NETFILTER_XT_MATCH_U32=m | 299 | CONFIG_NETFILTER_XT_MATCH_U32=m |
305 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 300 | # CONFIG_IP_VS is not set |
306 | 301 | ||
307 | # | 302 | # |
308 | # IP: Netfilter Configuration | 303 | # IP: Netfilter Configuration |
309 | # | 304 | # |
305 | CONFIG_NF_DEFRAG_IPV4=m | ||
310 | CONFIG_NF_CONNTRACK_IPV4=m | 306 | CONFIG_NF_CONNTRACK_IPV4=m |
311 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 307 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
312 | CONFIG_IP_NF_QUEUE=m | 308 | CONFIG_IP_NF_QUEUE=m |
313 | CONFIG_IP_NF_IPTABLES=m | 309 | CONFIG_IP_NF_IPTABLES=m |
314 | CONFIG_IP_NF_MATCH_RECENT=m | 310 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
315 | CONFIG_IP_NF_MATCH_ECN=m | ||
316 | CONFIG_IP_NF_MATCH_AH=m | 311 | CONFIG_IP_NF_MATCH_AH=m |
312 | CONFIG_IP_NF_MATCH_ECN=m | ||
317 | CONFIG_IP_NF_MATCH_TTL=m | 313 | CONFIG_IP_NF_MATCH_TTL=m |
318 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
319 | CONFIG_IP_NF_FILTER=m | 314 | CONFIG_IP_NF_FILTER=m |
320 | CONFIG_IP_NF_TARGET_REJECT=m | 315 | CONFIG_IP_NF_TARGET_REJECT=m |
321 | CONFIG_IP_NF_TARGET_LOG=m | 316 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -323,8 +318,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
323 | CONFIG_NF_NAT=m | 318 | CONFIG_NF_NAT=m |
324 | CONFIG_NF_NAT_NEEDED=y | 319 | CONFIG_NF_NAT_NEEDED=y |
325 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 320 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
326 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
327 | CONFIG_IP_NF_TARGET_NETMAP=m | 321 | CONFIG_IP_NF_TARGET_NETMAP=m |
322 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
328 | CONFIG_NF_NAT_SNMP_BASIC=m | 323 | CONFIG_NF_NAT_SNMP_BASIC=m |
329 | CONFIG_NF_NAT_PROTO_GRE=m | 324 | CONFIG_NF_NAT_PROTO_GRE=m |
330 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 325 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -337,9 +332,9 @@ CONFIG_NF_NAT_PPTP=m | |||
337 | CONFIG_NF_NAT_H323=m | 332 | CONFIG_NF_NAT_H323=m |
338 | CONFIG_NF_NAT_SIP=m | 333 | CONFIG_NF_NAT_SIP=m |
339 | CONFIG_IP_NF_MANGLE=m | 334 | CONFIG_IP_NF_MANGLE=m |
335 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
340 | CONFIG_IP_NF_TARGET_ECN=m | 336 | CONFIG_IP_NF_TARGET_ECN=m |
341 | CONFIG_IP_NF_TARGET_TTL=m | 337 | CONFIG_IP_NF_TARGET_TTL=m |
342 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
343 | CONFIG_IP_NF_RAW=m | 338 | CONFIG_IP_NF_RAW=m |
344 | CONFIG_IP_NF_ARPTABLES=m | 339 | CONFIG_IP_NF_ARPTABLES=m |
345 | CONFIG_IP_NF_ARPFILTER=m | 340 | CONFIG_IP_NF_ARPFILTER=m |
@@ -351,16 +346,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
351 | CONFIG_NF_CONNTRACK_IPV6=m | 346 | CONFIG_NF_CONNTRACK_IPV6=m |
352 | CONFIG_IP6_NF_QUEUE=m | 347 | CONFIG_IP6_NF_QUEUE=m |
353 | CONFIG_IP6_NF_IPTABLES=m | 348 | CONFIG_IP6_NF_IPTABLES=m |
354 | CONFIG_IP6_NF_MATCH_RT=m | 349 | CONFIG_IP6_NF_MATCH_AH=m |
355 | CONFIG_IP6_NF_MATCH_OPTS=m | 350 | CONFIG_IP6_NF_MATCH_EUI64=m |
356 | CONFIG_IP6_NF_MATCH_FRAG=m | 351 | CONFIG_IP6_NF_MATCH_FRAG=m |
352 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
357 | CONFIG_IP6_NF_MATCH_HL=m | 353 | CONFIG_IP6_NF_MATCH_HL=m |
358 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 354 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
359 | CONFIG_IP6_NF_MATCH_AH=m | ||
360 | CONFIG_IP6_NF_MATCH_MH=m | 355 | CONFIG_IP6_NF_MATCH_MH=m |
361 | CONFIG_IP6_NF_MATCH_EUI64=m | 356 | CONFIG_IP6_NF_MATCH_RT=m |
362 | CONFIG_IP6_NF_FILTER=m | ||
363 | CONFIG_IP6_NF_TARGET_LOG=m | 357 | CONFIG_IP6_NF_TARGET_LOG=m |
358 | CONFIG_IP6_NF_FILTER=m | ||
364 | CONFIG_IP6_NF_TARGET_REJECT=m | 359 | CONFIG_IP6_NF_TARGET_REJECT=m |
365 | CONFIG_IP6_NF_MANGLE=m | 360 | CONFIG_IP6_NF_MANGLE=m |
366 | CONFIG_IP6_NF_TARGET_HL=m | 361 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -387,6 +382,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
387 | # CONFIG_TIPC is not set | 382 | # CONFIG_TIPC is not set |
388 | # CONFIG_ATM is not set | 383 | # CONFIG_ATM is not set |
389 | # CONFIG_BRIDGE is not set | 384 | # CONFIG_BRIDGE is not set |
385 | # CONFIG_NET_DSA is not set | ||
390 | # CONFIG_VLAN_8021Q is not set | 386 | # CONFIG_VLAN_8021Q is not set |
391 | # CONFIG_DECNET is not set | 387 | # CONFIG_DECNET is not set |
392 | CONFIG_LLC=m | 388 | CONFIG_LLC=m |
@@ -410,19 +406,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
410 | # CONFIG_IRDA is not set | 406 | # CONFIG_IRDA is not set |
411 | # CONFIG_BT is not set | 407 | # CONFIG_BT is not set |
412 | # CONFIG_AF_RXRPC is not set | 408 | # CONFIG_AF_RXRPC is not set |
413 | 409 | # CONFIG_PHONET is not set | |
414 | # | 410 | # CONFIG_WIRELESS is not set |
415 | # Wireless | ||
416 | # | ||
417 | # CONFIG_CFG80211 is not set | ||
418 | CONFIG_WIRELESS_EXT=y | ||
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
420 | # CONFIG_MAC80211 is not set | ||
421 | CONFIG_IEEE80211=m | ||
422 | # CONFIG_IEEE80211_DEBUG is not set | ||
423 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
424 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
425 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
426 | # CONFIG_RFKILL is not set | 411 | # CONFIG_RFKILL is not set |
427 | # CONFIG_NET_9P is not set | 412 | # CONFIG_NET_9P is not set |
428 | 413 | ||
@@ -460,6 +445,7 @@ CONFIG_ATA_OVER_ETH=m | |||
460 | CONFIG_MISC_DEVICES=y | 445 | CONFIG_MISC_DEVICES=y |
461 | # CONFIG_EEPROM_93CX6 is not set | 446 | # CONFIG_EEPROM_93CX6 is not set |
462 | # CONFIG_ENCLOSURE_SERVICES is not set | 447 | # CONFIG_ENCLOSURE_SERVICES is not set |
448 | # CONFIG_C2PORT is not set | ||
463 | CONFIG_HAVE_IDE=y | 449 | CONFIG_HAVE_IDE=y |
464 | # CONFIG_IDE is not set | 450 | # CONFIG_IDE is not set |
465 | 451 | ||
@@ -544,6 +530,9 @@ CONFIG_MVME147_NET=y | |||
544 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 530 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
545 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 531 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
546 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 532 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
533 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
534 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
535 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
547 | # CONFIG_B44 is not set | 536 | # CONFIG_B44 is not set |
548 | # CONFIG_NETDEV_1000 is not set | 537 | # CONFIG_NETDEV_1000 is not set |
549 | # CONFIG_NETDEV_10000 is not set | 538 | # CONFIG_NETDEV_10000 is not set |
@@ -613,6 +602,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
613 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 602 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
614 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 603 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
615 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 604 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
605 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
616 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 606 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
617 | CONFIG_MOUSE_SERIAL=m | 607 | CONFIG_MOUSE_SERIAL=m |
618 | # CONFIG_MOUSE_VSXXXAA is not set | 608 | # CONFIG_MOUSE_VSXXXAA is not set |
@@ -667,11 +657,11 @@ CONFIG_GEN_RTC_X=y | |||
667 | # CONFIG_THERMAL is not set | 657 | # CONFIG_THERMAL is not set |
668 | # CONFIG_THERMAL_HWMON is not set | 658 | # CONFIG_THERMAL_HWMON is not set |
669 | # CONFIG_WATCHDOG is not set | 659 | # CONFIG_WATCHDOG is not set |
660 | CONFIG_SSB_POSSIBLE=y | ||
670 | 661 | ||
671 | # | 662 | # |
672 | # Sonics Silicon Backplane | 663 | # Sonics Silicon Backplane |
673 | # | 664 | # |
674 | CONFIG_SSB_POSSIBLE=y | ||
675 | # CONFIG_SSB is not set | 665 | # CONFIG_SSB is not set |
676 | 666 | ||
677 | # | 667 | # |
@@ -681,6 +671,7 @@ CONFIG_SSB_POSSIBLE=y | |||
681 | # CONFIG_MFD_SM501 is not set | 671 | # CONFIG_MFD_SM501 is not set |
682 | # CONFIG_HTC_PASIC3 is not set | 672 | # CONFIG_HTC_PASIC3 is not set |
683 | # CONFIG_MFD_TMIO is not set | 673 | # CONFIG_MFD_TMIO is not set |
674 | # CONFIG_REGULATOR is not set | ||
684 | 675 | ||
685 | # | 676 | # |
686 | # Multimedia devices | 677 | # Multimedia devices |
@@ -720,6 +711,12 @@ CONFIG_HID_SUPPORT=y | |||
720 | CONFIG_HID=m | 711 | CONFIG_HID=m |
721 | # CONFIG_HID_DEBUG is not set | 712 | # CONFIG_HID_DEBUG is not set |
722 | CONFIG_HIDRAW=y | 713 | CONFIG_HIDRAW=y |
714 | # CONFIG_HID_PID is not set | ||
715 | |||
716 | # | ||
717 | # Special HID drivers | ||
718 | # | ||
719 | CONFIG_HID_COMPAT=y | ||
723 | # CONFIG_USB_SUPPORT is not set | 720 | # CONFIG_USB_SUPPORT is not set |
724 | # CONFIG_MMC is not set | 721 | # CONFIG_MMC is not set |
725 | # CONFIG_MEMSTICK is not set | 722 | # CONFIG_MEMSTICK is not set |
@@ -728,6 +725,8 @@ CONFIG_HIDRAW=y | |||
728 | # CONFIG_RTC_CLASS is not set | 725 | # CONFIG_RTC_CLASS is not set |
729 | # CONFIG_DMADEVICES is not set | 726 | # CONFIG_DMADEVICES is not set |
730 | # CONFIG_UIO is not set | 727 | # CONFIG_UIO is not set |
728 | # CONFIG_STAGING is not set | ||
729 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
731 | 730 | ||
732 | # | 731 | # |
733 | # Character devices | 732 | # Character devices |
@@ -743,8 +742,9 @@ CONFIG_EXT2_FS=y | |||
743 | # CONFIG_EXT2_FS_XIP is not set | 742 | # CONFIG_EXT2_FS_XIP is not set |
744 | CONFIG_EXT3_FS=y | 743 | CONFIG_EXT3_FS=y |
745 | # CONFIG_EXT3_FS_XATTR is not set | 744 | # CONFIG_EXT3_FS_XATTR is not set |
746 | # CONFIG_EXT4DEV_FS is not set | 745 | # CONFIG_EXT4_FS is not set |
747 | CONFIG_JBD=y | 746 | CONFIG_JBD=y |
747 | CONFIG_JBD2=m | ||
748 | CONFIG_REISERFS_FS=m | 748 | CONFIG_REISERFS_FS=m |
749 | # CONFIG_REISERFS_CHECK is not set | 749 | # CONFIG_REISERFS_CHECK is not set |
750 | # CONFIG_REISERFS_PROC_INFO is not set | 750 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -755,6 +755,7 @@ CONFIG_JFS_FS=m | |||
755 | # CONFIG_JFS_DEBUG is not set | 755 | # CONFIG_JFS_DEBUG is not set |
756 | # CONFIG_JFS_STATISTICS is not set | 756 | # CONFIG_JFS_STATISTICS is not set |
757 | # CONFIG_FS_POSIX_ACL is not set | 757 | # CONFIG_FS_POSIX_ACL is not set |
758 | CONFIG_FILE_LOCKING=y | ||
758 | CONFIG_XFS_FS=m | 759 | CONFIG_XFS_FS=m |
759 | # CONFIG_XFS_QUOTA is not set | 760 | # CONFIG_XFS_QUOTA is not set |
760 | # CONFIG_XFS_POSIX_ACL is not set | 761 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -766,6 +767,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
766 | # CONFIG_OCFS2_FS_STATS is not set | 767 | # CONFIG_OCFS2_FS_STATS is not set |
767 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 768 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
768 | # CONFIG_OCFS2_DEBUG_FS is not set | 769 | # CONFIG_OCFS2_DEBUG_FS is not set |
770 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
769 | CONFIG_DNOTIFY=y | 771 | CONFIG_DNOTIFY=y |
770 | CONFIG_INOTIFY=y | 772 | CONFIG_INOTIFY=y |
771 | CONFIG_INOTIFY_USER=y | 773 | CONFIG_INOTIFY_USER=y |
@@ -804,6 +806,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
804 | CONFIG_PROC_FS=y | 806 | CONFIG_PROC_FS=y |
805 | CONFIG_PROC_KCORE=y | 807 | CONFIG_PROC_KCORE=y |
806 | CONFIG_PROC_SYSCTL=y | 808 | CONFIG_PROC_SYSCTL=y |
809 | CONFIG_PROC_PAGE_MONITOR=y | ||
807 | CONFIG_SYSFS=y | 810 | CONFIG_SYSFS=y |
808 | CONFIG_TMPFS=y | 811 | CONFIG_TMPFS=y |
809 | # CONFIG_TMPFS_POSIX_ACL is not set | 812 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -847,6 +850,7 @@ CONFIG_EXPORTFS=m | |||
847 | CONFIG_NFS_COMMON=y | 850 | CONFIG_NFS_COMMON=y |
848 | CONFIG_SUNRPC=y | 851 | CONFIG_SUNRPC=y |
849 | CONFIG_SUNRPC_GSS=y | 852 | CONFIG_SUNRPC_GSS=y |
853 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
850 | CONFIG_RPCSEC_GSS_KRB5=y | 854 | CONFIG_RPCSEC_GSS_KRB5=y |
851 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 855 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
852 | CONFIG_SMB_FS=m | 856 | CONFIG_SMB_FS=m |
@@ -920,7 +924,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
920 | # CONFIG_DEBUG_KERNEL is not set | 924 | # CONFIG_DEBUG_KERNEL is not set |
921 | CONFIG_DEBUG_BUGVERBOSE=y | 925 | CONFIG_DEBUG_BUGVERBOSE=y |
922 | CONFIG_DEBUG_MEMORY_INIT=y | 926 | CONFIG_DEBUG_MEMORY_INIT=y |
927 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
923 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 928 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
929 | |||
930 | # | ||
931 | # Tracers | ||
932 | # | ||
933 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
924 | # CONFIG_SAMPLES is not set | 934 | # CONFIG_SAMPLES is not set |
925 | 935 | ||
926 | # | 936 | # |
@@ -928,6 +938,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
928 | # | 938 | # |
929 | # CONFIG_KEYS is not set | 939 | # CONFIG_KEYS is not set |
930 | # CONFIG_SECURITY is not set | 940 | # CONFIG_SECURITY is not set |
941 | # CONFIG_SECURITYFS is not set | ||
931 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 942 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
932 | CONFIG_XOR_BLOCKS=m | 943 | CONFIG_XOR_BLOCKS=m |
933 | CONFIG_ASYNC_CORE=m | 944 | CONFIG_ASYNC_CORE=m |
@@ -938,10 +949,12 @@ CONFIG_CRYPTO=y | |||
938 | # | 949 | # |
939 | # Crypto core or helper | 950 | # Crypto core or helper |
940 | # | 951 | # |
952 | # CONFIG_CRYPTO_FIPS is not set | ||
941 | CONFIG_CRYPTO_ALGAPI=y | 953 | CONFIG_CRYPTO_ALGAPI=y |
942 | CONFIG_CRYPTO_AEAD=m | 954 | CONFIG_CRYPTO_AEAD=y |
943 | CONFIG_CRYPTO_BLKCIPHER=y | 955 | CONFIG_CRYPTO_BLKCIPHER=y |
944 | CONFIG_CRYPTO_HASH=y | 956 | CONFIG_CRYPTO_HASH=y |
957 | CONFIG_CRYPTO_RNG=y | ||
945 | CONFIG_CRYPTO_MANAGER=y | 958 | CONFIG_CRYPTO_MANAGER=y |
946 | CONFIG_CRYPTO_GF128MUL=m | 959 | CONFIG_CRYPTO_GF128MUL=m |
947 | CONFIG_CRYPTO_NULL=m | 960 | CONFIG_CRYPTO_NULL=m |
@@ -1015,14 +1028,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1015 | # | 1028 | # |
1016 | CONFIG_CRYPTO_DEFLATE=m | 1029 | CONFIG_CRYPTO_DEFLATE=m |
1017 | CONFIG_CRYPTO_LZO=m | 1030 | CONFIG_CRYPTO_LZO=m |
1031 | |||
1032 | # | ||
1033 | # Random Number Generation | ||
1034 | # | ||
1035 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1018 | # CONFIG_CRYPTO_HW is not set | 1036 | # CONFIG_CRYPTO_HW is not set |
1019 | 1037 | ||
1020 | # | 1038 | # |
1021 | # Library routines | 1039 | # Library routines |
1022 | # | 1040 | # |
1023 | CONFIG_BITREVERSE=y | 1041 | CONFIG_BITREVERSE=y |
1024 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1025 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1026 | CONFIG_CRC_CCITT=m | 1042 | CONFIG_CRC_CCITT=m |
1027 | CONFIG_CRC16=m | 1043 | CONFIG_CRC16=m |
1028 | CONFIG_CRC_T10DIF=y | 1044 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/mvme16x_defconfig b/arch/m68k/configs/mvme16x_defconfig index a183e25e348d..3403ed2eda79 100644 --- a/arch/m68k/configs/mvme16x_defconfig +++ b/arch/m68k/configs/mvme16x_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:09 2008 | 4 | # Tue Dec 2 20:27:51 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -151,19 +141,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
151 | CONFIG_DISCONTIGMEM=y | 141 | CONFIG_DISCONTIGMEM=y |
152 | CONFIG_FLAT_NODE_MEM_MAP=y | 142 | CONFIG_FLAT_NODE_MEM_MAP=y |
153 | CONFIG_NEED_MULTIPLE_NODES=y | 143 | CONFIG_NEED_MULTIPLE_NODES=y |
154 | # CONFIG_SPARSEMEM_STATIC is not set | ||
155 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
156 | CONFIG_PAGEFLAGS_EXTENDED=y | 144 | CONFIG_PAGEFLAGS_EXTENDED=y |
157 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 145 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
158 | # CONFIG_RESOURCES_64BIT is not set | 146 | # CONFIG_RESOURCES_64BIT is not set |
147 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
159 | CONFIG_ZONE_DMA_FLAG=1 | 148 | CONFIG_ZONE_DMA_FLAG=1 |
160 | CONFIG_BOUNCE=y | 149 | CONFIG_BOUNCE=y |
161 | CONFIG_VIRT_TO_BUS=y | 150 | CONFIG_VIRT_TO_BUS=y |
151 | CONFIG_UNEVICTABLE_LRU=y | ||
162 | 152 | ||
163 | # | 153 | # |
164 | # General setup | 154 | # General setup |
165 | # | 155 | # |
166 | CONFIG_BINFMT_ELF=y | 156 | CONFIG_BINFMT_ELF=y |
157 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
158 | CONFIG_HAVE_AOUT=y | ||
167 | CONFIG_BINFMT_AOUT=m | 159 | CONFIG_BINFMT_AOUT=m |
168 | CONFIG_BINFMT_MISC=m | 160 | CONFIG_BINFMT_MISC=m |
169 | CONFIG_PROC_HARDWARE=y | 161 | CONFIG_PROC_HARDWARE=y |
@@ -212,7 +204,6 @@ CONFIG_INET_TCP_DIAG=m | |||
212 | CONFIG_TCP_CONG_CUBIC=y | 204 | CONFIG_TCP_CONG_CUBIC=y |
213 | CONFIG_DEFAULT_TCP_CONG="cubic" | 205 | CONFIG_DEFAULT_TCP_CONG="cubic" |
214 | # CONFIG_TCP_MD5SIG is not set | 206 | # CONFIG_TCP_MD5SIG is not set |
215 | # CONFIG_IP_VS is not set | ||
216 | CONFIG_IPV6=m | 207 | CONFIG_IPV6=m |
217 | CONFIG_IPV6_PRIVACY=y | 208 | CONFIG_IPV6_PRIVACY=y |
218 | CONFIG_IPV6_ROUTER_PREF=y | 209 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -262,13 +253,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
262 | CONFIG_NF_CONNTRACK_SIP=m | 253 | CONFIG_NF_CONNTRACK_SIP=m |
263 | CONFIG_NF_CONNTRACK_TFTP=m | 254 | CONFIG_NF_CONNTRACK_TFTP=m |
264 | # CONFIG_NF_CT_NETLINK is not set | 255 | # CONFIG_NF_CT_NETLINK is not set |
256 | # CONFIG_NETFILTER_TPROXY is not set | ||
265 | CONFIG_NETFILTER_XTABLES=m | 257 | CONFIG_NETFILTER_XTABLES=m |
266 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 258 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
267 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 259 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
268 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 260 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
269 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 261 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
270 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
271 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 262 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
263 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
272 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 264 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
273 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 265 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
274 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 266 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -282,19 +274,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
282 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 274 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
283 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 275 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
284 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 276 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
277 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
285 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 278 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
286 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 279 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
287 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 280 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
288 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 281 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
289 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 282 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
290 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 283 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
284 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
291 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 285 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
292 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 286 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
293 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
294 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 287 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
295 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 288 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
296 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 289 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
297 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 290 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
291 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
292 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
298 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 293 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
299 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 294 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
300 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 295 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -302,20 +297,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
302 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 297 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
303 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 298 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
304 | CONFIG_NETFILTER_XT_MATCH_U32=m | 299 | CONFIG_NETFILTER_XT_MATCH_U32=m |
305 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 300 | # CONFIG_IP_VS is not set |
306 | 301 | ||
307 | # | 302 | # |
308 | # IP: Netfilter Configuration | 303 | # IP: Netfilter Configuration |
309 | # | 304 | # |
305 | CONFIG_NF_DEFRAG_IPV4=m | ||
310 | CONFIG_NF_CONNTRACK_IPV4=m | 306 | CONFIG_NF_CONNTRACK_IPV4=m |
311 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 307 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
312 | CONFIG_IP_NF_QUEUE=m | 308 | CONFIG_IP_NF_QUEUE=m |
313 | CONFIG_IP_NF_IPTABLES=m | 309 | CONFIG_IP_NF_IPTABLES=m |
314 | CONFIG_IP_NF_MATCH_RECENT=m | 310 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
315 | CONFIG_IP_NF_MATCH_ECN=m | ||
316 | CONFIG_IP_NF_MATCH_AH=m | 311 | CONFIG_IP_NF_MATCH_AH=m |
312 | CONFIG_IP_NF_MATCH_ECN=m | ||
317 | CONFIG_IP_NF_MATCH_TTL=m | 313 | CONFIG_IP_NF_MATCH_TTL=m |
318 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
319 | CONFIG_IP_NF_FILTER=m | 314 | CONFIG_IP_NF_FILTER=m |
320 | CONFIG_IP_NF_TARGET_REJECT=m | 315 | CONFIG_IP_NF_TARGET_REJECT=m |
321 | CONFIG_IP_NF_TARGET_LOG=m | 316 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -323,8 +318,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
323 | CONFIG_NF_NAT=m | 318 | CONFIG_NF_NAT=m |
324 | CONFIG_NF_NAT_NEEDED=y | 319 | CONFIG_NF_NAT_NEEDED=y |
325 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 320 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
326 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
327 | CONFIG_IP_NF_TARGET_NETMAP=m | 321 | CONFIG_IP_NF_TARGET_NETMAP=m |
322 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
328 | CONFIG_NF_NAT_SNMP_BASIC=m | 323 | CONFIG_NF_NAT_SNMP_BASIC=m |
329 | CONFIG_NF_NAT_PROTO_GRE=m | 324 | CONFIG_NF_NAT_PROTO_GRE=m |
330 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 325 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -337,9 +332,9 @@ CONFIG_NF_NAT_PPTP=m | |||
337 | CONFIG_NF_NAT_H323=m | 332 | CONFIG_NF_NAT_H323=m |
338 | CONFIG_NF_NAT_SIP=m | 333 | CONFIG_NF_NAT_SIP=m |
339 | CONFIG_IP_NF_MANGLE=m | 334 | CONFIG_IP_NF_MANGLE=m |
335 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
340 | CONFIG_IP_NF_TARGET_ECN=m | 336 | CONFIG_IP_NF_TARGET_ECN=m |
341 | CONFIG_IP_NF_TARGET_TTL=m | 337 | CONFIG_IP_NF_TARGET_TTL=m |
342 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
343 | CONFIG_IP_NF_RAW=m | 338 | CONFIG_IP_NF_RAW=m |
344 | CONFIG_IP_NF_ARPTABLES=m | 339 | CONFIG_IP_NF_ARPTABLES=m |
345 | CONFIG_IP_NF_ARPFILTER=m | 340 | CONFIG_IP_NF_ARPFILTER=m |
@@ -351,16 +346,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
351 | CONFIG_NF_CONNTRACK_IPV6=m | 346 | CONFIG_NF_CONNTRACK_IPV6=m |
352 | CONFIG_IP6_NF_QUEUE=m | 347 | CONFIG_IP6_NF_QUEUE=m |
353 | CONFIG_IP6_NF_IPTABLES=m | 348 | CONFIG_IP6_NF_IPTABLES=m |
354 | CONFIG_IP6_NF_MATCH_RT=m | 349 | CONFIG_IP6_NF_MATCH_AH=m |
355 | CONFIG_IP6_NF_MATCH_OPTS=m | 350 | CONFIG_IP6_NF_MATCH_EUI64=m |
356 | CONFIG_IP6_NF_MATCH_FRAG=m | 351 | CONFIG_IP6_NF_MATCH_FRAG=m |
352 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
357 | CONFIG_IP6_NF_MATCH_HL=m | 353 | CONFIG_IP6_NF_MATCH_HL=m |
358 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 354 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
359 | CONFIG_IP6_NF_MATCH_AH=m | ||
360 | CONFIG_IP6_NF_MATCH_MH=m | 355 | CONFIG_IP6_NF_MATCH_MH=m |
361 | CONFIG_IP6_NF_MATCH_EUI64=m | 356 | CONFIG_IP6_NF_MATCH_RT=m |
362 | CONFIG_IP6_NF_FILTER=m | ||
363 | CONFIG_IP6_NF_TARGET_LOG=m | 357 | CONFIG_IP6_NF_TARGET_LOG=m |
358 | CONFIG_IP6_NF_FILTER=m | ||
364 | CONFIG_IP6_NF_TARGET_REJECT=m | 359 | CONFIG_IP6_NF_TARGET_REJECT=m |
365 | CONFIG_IP6_NF_MANGLE=m | 360 | CONFIG_IP6_NF_MANGLE=m |
366 | CONFIG_IP6_NF_TARGET_HL=m | 361 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -387,6 +382,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
387 | # CONFIG_TIPC is not set | 382 | # CONFIG_TIPC is not set |
388 | # CONFIG_ATM is not set | 383 | # CONFIG_ATM is not set |
389 | # CONFIG_BRIDGE is not set | 384 | # CONFIG_BRIDGE is not set |
385 | # CONFIG_NET_DSA is not set | ||
390 | # CONFIG_VLAN_8021Q is not set | 386 | # CONFIG_VLAN_8021Q is not set |
391 | # CONFIG_DECNET is not set | 387 | # CONFIG_DECNET is not set |
392 | CONFIG_LLC=m | 388 | CONFIG_LLC=m |
@@ -410,19 +406,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
410 | # CONFIG_IRDA is not set | 406 | # CONFIG_IRDA is not set |
411 | # CONFIG_BT is not set | 407 | # CONFIG_BT is not set |
412 | # CONFIG_AF_RXRPC is not set | 408 | # CONFIG_AF_RXRPC is not set |
413 | 409 | # CONFIG_PHONET is not set | |
414 | # | 410 | # CONFIG_WIRELESS is not set |
415 | # Wireless | ||
416 | # | ||
417 | # CONFIG_CFG80211 is not set | ||
418 | CONFIG_WIRELESS_EXT=y | ||
419 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
420 | # CONFIG_MAC80211 is not set | ||
421 | CONFIG_IEEE80211=m | ||
422 | # CONFIG_IEEE80211_DEBUG is not set | ||
423 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
424 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
425 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
426 | # CONFIG_RFKILL is not set | 411 | # CONFIG_RFKILL is not set |
427 | # CONFIG_NET_9P is not set | 412 | # CONFIG_NET_9P is not set |
428 | 413 | ||
@@ -460,6 +445,7 @@ CONFIG_ATA_OVER_ETH=m | |||
460 | CONFIG_MISC_DEVICES=y | 445 | CONFIG_MISC_DEVICES=y |
461 | # CONFIG_EEPROM_93CX6 is not set | 446 | # CONFIG_EEPROM_93CX6 is not set |
462 | # CONFIG_ENCLOSURE_SERVICES is not set | 447 | # CONFIG_ENCLOSURE_SERVICES is not set |
448 | # CONFIG_C2PORT is not set | ||
463 | CONFIG_HAVE_IDE=y | 449 | CONFIG_HAVE_IDE=y |
464 | # CONFIG_IDE is not set | 450 | # CONFIG_IDE is not set |
465 | 451 | ||
@@ -545,6 +531,9 @@ CONFIG_MVME16x_NET=y | |||
545 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 531 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
546 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 532 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
547 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 533 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
534 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
535 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
536 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
548 | # CONFIG_B44 is not set | 537 | # CONFIG_B44 is not set |
549 | # CONFIG_NETDEV_1000 is not set | 538 | # CONFIG_NETDEV_1000 is not set |
550 | # CONFIG_NETDEV_10000 is not set | 539 | # CONFIG_NETDEV_10000 is not set |
@@ -614,6 +603,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
614 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 603 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
615 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 604 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
616 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 605 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
606 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
617 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 607 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
618 | CONFIG_MOUSE_SERIAL=m | 608 | CONFIG_MOUSE_SERIAL=m |
619 | # CONFIG_MOUSE_VSXXXAA is not set | 609 | # CONFIG_MOUSE_VSXXXAA is not set |
@@ -668,11 +658,11 @@ CONFIG_GEN_RTC_X=y | |||
668 | # CONFIG_THERMAL is not set | 658 | # CONFIG_THERMAL is not set |
669 | # CONFIG_THERMAL_HWMON is not set | 659 | # CONFIG_THERMAL_HWMON is not set |
670 | # CONFIG_WATCHDOG is not set | 660 | # CONFIG_WATCHDOG is not set |
661 | CONFIG_SSB_POSSIBLE=y | ||
671 | 662 | ||
672 | # | 663 | # |
673 | # Sonics Silicon Backplane | 664 | # Sonics Silicon Backplane |
674 | # | 665 | # |
675 | CONFIG_SSB_POSSIBLE=y | ||
676 | # CONFIG_SSB is not set | 666 | # CONFIG_SSB is not set |
677 | 667 | ||
678 | # | 668 | # |
@@ -682,6 +672,7 @@ CONFIG_SSB_POSSIBLE=y | |||
682 | # CONFIG_MFD_SM501 is not set | 672 | # CONFIG_MFD_SM501 is not set |
683 | # CONFIG_HTC_PASIC3 is not set | 673 | # CONFIG_HTC_PASIC3 is not set |
684 | # CONFIG_MFD_TMIO is not set | 674 | # CONFIG_MFD_TMIO is not set |
675 | # CONFIG_REGULATOR is not set | ||
685 | 676 | ||
686 | # | 677 | # |
687 | # Multimedia devices | 678 | # Multimedia devices |
@@ -721,6 +712,12 @@ CONFIG_HID_SUPPORT=y | |||
721 | CONFIG_HID=m | 712 | CONFIG_HID=m |
722 | # CONFIG_HID_DEBUG is not set | 713 | # CONFIG_HID_DEBUG is not set |
723 | CONFIG_HIDRAW=y | 714 | CONFIG_HIDRAW=y |
715 | # CONFIG_HID_PID is not set | ||
716 | |||
717 | # | ||
718 | # Special HID drivers | ||
719 | # | ||
720 | CONFIG_HID_COMPAT=y | ||
724 | # CONFIG_USB_SUPPORT is not set | 721 | # CONFIG_USB_SUPPORT is not set |
725 | # CONFIG_MMC is not set | 722 | # CONFIG_MMC is not set |
726 | # CONFIG_MEMSTICK is not set | 723 | # CONFIG_MEMSTICK is not set |
@@ -729,6 +726,8 @@ CONFIG_HIDRAW=y | |||
729 | # CONFIG_RTC_CLASS is not set | 726 | # CONFIG_RTC_CLASS is not set |
730 | # CONFIG_DMADEVICES is not set | 727 | # CONFIG_DMADEVICES is not set |
731 | # CONFIG_UIO is not set | 728 | # CONFIG_UIO is not set |
729 | # CONFIG_STAGING is not set | ||
730 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
732 | 731 | ||
733 | # | 732 | # |
734 | # Character devices | 733 | # Character devices |
@@ -745,8 +744,9 @@ CONFIG_EXT2_FS=y | |||
745 | # CONFIG_EXT2_FS_XIP is not set | 744 | # CONFIG_EXT2_FS_XIP is not set |
746 | CONFIG_EXT3_FS=y | 745 | CONFIG_EXT3_FS=y |
747 | # CONFIG_EXT3_FS_XATTR is not set | 746 | # CONFIG_EXT3_FS_XATTR is not set |
748 | # CONFIG_EXT4DEV_FS is not set | 747 | # CONFIG_EXT4_FS is not set |
749 | CONFIG_JBD=y | 748 | CONFIG_JBD=y |
749 | CONFIG_JBD2=m | ||
750 | CONFIG_REISERFS_FS=m | 750 | CONFIG_REISERFS_FS=m |
751 | # CONFIG_REISERFS_CHECK is not set | 751 | # CONFIG_REISERFS_CHECK is not set |
752 | # CONFIG_REISERFS_PROC_INFO is not set | 752 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -757,6 +757,7 @@ CONFIG_JFS_FS=m | |||
757 | # CONFIG_JFS_DEBUG is not set | 757 | # CONFIG_JFS_DEBUG is not set |
758 | # CONFIG_JFS_STATISTICS is not set | 758 | # CONFIG_JFS_STATISTICS is not set |
759 | # CONFIG_FS_POSIX_ACL is not set | 759 | # CONFIG_FS_POSIX_ACL is not set |
760 | CONFIG_FILE_LOCKING=y | ||
760 | CONFIG_XFS_FS=m | 761 | CONFIG_XFS_FS=m |
761 | # CONFIG_XFS_QUOTA is not set | 762 | # CONFIG_XFS_QUOTA is not set |
762 | # CONFIG_XFS_POSIX_ACL is not set | 763 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -768,6 +769,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
768 | # CONFIG_OCFS2_FS_STATS is not set | 769 | # CONFIG_OCFS2_FS_STATS is not set |
769 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 770 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
770 | # CONFIG_OCFS2_DEBUG_FS is not set | 771 | # CONFIG_OCFS2_DEBUG_FS is not set |
772 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
771 | CONFIG_DNOTIFY=y | 773 | CONFIG_DNOTIFY=y |
772 | CONFIG_INOTIFY=y | 774 | CONFIG_INOTIFY=y |
773 | CONFIG_INOTIFY_USER=y | 775 | CONFIG_INOTIFY_USER=y |
@@ -806,6 +808,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
806 | CONFIG_PROC_FS=y | 808 | CONFIG_PROC_FS=y |
807 | CONFIG_PROC_KCORE=y | 809 | CONFIG_PROC_KCORE=y |
808 | CONFIG_PROC_SYSCTL=y | 810 | CONFIG_PROC_SYSCTL=y |
811 | CONFIG_PROC_PAGE_MONITOR=y | ||
809 | CONFIG_SYSFS=y | 812 | CONFIG_SYSFS=y |
810 | CONFIG_TMPFS=y | 813 | CONFIG_TMPFS=y |
811 | # CONFIG_TMPFS_POSIX_ACL is not set | 814 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -849,6 +852,7 @@ CONFIG_EXPORTFS=m | |||
849 | CONFIG_NFS_COMMON=y | 852 | CONFIG_NFS_COMMON=y |
850 | CONFIG_SUNRPC=y | 853 | CONFIG_SUNRPC=y |
851 | CONFIG_SUNRPC_GSS=y | 854 | CONFIG_SUNRPC_GSS=y |
855 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
852 | CONFIG_RPCSEC_GSS_KRB5=y | 856 | CONFIG_RPCSEC_GSS_KRB5=y |
853 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 857 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
854 | CONFIG_SMB_FS=m | 858 | CONFIG_SMB_FS=m |
@@ -922,7 +926,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
922 | # CONFIG_DEBUG_KERNEL is not set | 926 | # CONFIG_DEBUG_KERNEL is not set |
923 | CONFIG_DEBUG_BUGVERBOSE=y | 927 | CONFIG_DEBUG_BUGVERBOSE=y |
924 | CONFIG_DEBUG_MEMORY_INIT=y | 928 | CONFIG_DEBUG_MEMORY_INIT=y |
929 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
925 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 930 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
931 | |||
932 | # | ||
933 | # Tracers | ||
934 | # | ||
935 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
926 | # CONFIG_SAMPLES is not set | 936 | # CONFIG_SAMPLES is not set |
927 | 937 | ||
928 | # | 938 | # |
@@ -930,6 +940,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
930 | # | 940 | # |
931 | # CONFIG_KEYS is not set | 941 | # CONFIG_KEYS is not set |
932 | # CONFIG_SECURITY is not set | 942 | # CONFIG_SECURITY is not set |
943 | # CONFIG_SECURITYFS is not set | ||
933 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 944 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
934 | CONFIG_XOR_BLOCKS=m | 945 | CONFIG_XOR_BLOCKS=m |
935 | CONFIG_ASYNC_CORE=m | 946 | CONFIG_ASYNC_CORE=m |
@@ -940,10 +951,12 @@ CONFIG_CRYPTO=y | |||
940 | # | 951 | # |
941 | # Crypto core or helper | 952 | # Crypto core or helper |
942 | # | 953 | # |
954 | # CONFIG_CRYPTO_FIPS is not set | ||
943 | CONFIG_CRYPTO_ALGAPI=y | 955 | CONFIG_CRYPTO_ALGAPI=y |
944 | CONFIG_CRYPTO_AEAD=m | 956 | CONFIG_CRYPTO_AEAD=y |
945 | CONFIG_CRYPTO_BLKCIPHER=y | 957 | CONFIG_CRYPTO_BLKCIPHER=y |
946 | CONFIG_CRYPTO_HASH=y | 958 | CONFIG_CRYPTO_HASH=y |
959 | CONFIG_CRYPTO_RNG=y | ||
947 | CONFIG_CRYPTO_MANAGER=y | 960 | CONFIG_CRYPTO_MANAGER=y |
948 | CONFIG_CRYPTO_GF128MUL=m | 961 | CONFIG_CRYPTO_GF128MUL=m |
949 | CONFIG_CRYPTO_NULL=m | 962 | CONFIG_CRYPTO_NULL=m |
@@ -1017,14 +1030,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1017 | # | 1030 | # |
1018 | CONFIG_CRYPTO_DEFLATE=m | 1031 | CONFIG_CRYPTO_DEFLATE=m |
1019 | CONFIG_CRYPTO_LZO=m | 1032 | CONFIG_CRYPTO_LZO=m |
1033 | |||
1034 | # | ||
1035 | # Random Number Generation | ||
1036 | # | ||
1037 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1020 | # CONFIG_CRYPTO_HW is not set | 1038 | # CONFIG_CRYPTO_HW is not set |
1021 | 1039 | ||
1022 | # | 1040 | # |
1023 | # Library routines | 1041 | # Library routines |
1024 | # | 1042 | # |
1025 | CONFIG_BITREVERSE=y | 1043 | CONFIG_BITREVERSE=y |
1026 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1027 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1028 | CONFIG_CRC_CCITT=m | 1044 | CONFIG_CRC_CCITT=m |
1029 | CONFIG_CRC16=m | 1045 | CONFIG_CRC16=m |
1030 | CONFIG_CRC_T10DIF=y | 1046 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/q40_defconfig b/arch/m68k/configs/q40_defconfig index 72eaff0776b8..3459c594194b 100644 --- a/arch/m68k/configs/q40_defconfig +++ b/arch/m68k/configs/q40_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:10 2008 | 4 | # Tue Dec 2 20:27:52 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -148,19 +138,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
148 | CONFIG_DISCONTIGMEM=y | 138 | CONFIG_DISCONTIGMEM=y |
149 | CONFIG_FLAT_NODE_MEM_MAP=y | 139 | CONFIG_FLAT_NODE_MEM_MAP=y |
150 | CONFIG_NEED_MULTIPLE_NODES=y | 140 | CONFIG_NEED_MULTIPLE_NODES=y |
151 | # CONFIG_SPARSEMEM_STATIC is not set | ||
152 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
153 | CONFIG_PAGEFLAGS_EXTENDED=y | 141 | CONFIG_PAGEFLAGS_EXTENDED=y |
154 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 142 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
155 | # CONFIG_RESOURCES_64BIT is not set | 143 | # CONFIG_RESOURCES_64BIT is not set |
144 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
156 | CONFIG_ZONE_DMA_FLAG=1 | 145 | CONFIG_ZONE_DMA_FLAG=1 |
157 | CONFIG_BOUNCE=y | 146 | CONFIG_BOUNCE=y |
158 | CONFIG_VIRT_TO_BUS=y | 147 | CONFIG_VIRT_TO_BUS=y |
148 | CONFIG_UNEVICTABLE_LRU=y | ||
159 | 149 | ||
160 | # | 150 | # |
161 | # General setup | 151 | # General setup |
162 | # | 152 | # |
163 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
154 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
155 | CONFIG_HAVE_AOUT=y | ||
164 | CONFIG_BINFMT_AOUT=m | 156 | CONFIG_BINFMT_AOUT=m |
165 | CONFIG_BINFMT_MISC=m | 157 | CONFIG_BINFMT_MISC=m |
166 | CONFIG_HEARTBEAT=y | 158 | CONFIG_HEARTBEAT=y |
@@ -209,7 +201,6 @@ CONFIG_INET_TCP_DIAG=m | |||
209 | CONFIG_TCP_CONG_CUBIC=y | 201 | CONFIG_TCP_CONG_CUBIC=y |
210 | CONFIG_DEFAULT_TCP_CONG="cubic" | 202 | CONFIG_DEFAULT_TCP_CONG="cubic" |
211 | # CONFIG_TCP_MD5SIG is not set | 203 | # CONFIG_TCP_MD5SIG is not set |
212 | # CONFIG_IP_VS is not set | ||
213 | CONFIG_IPV6=m | 204 | CONFIG_IPV6=m |
214 | CONFIG_IPV6_PRIVACY=y | 205 | CONFIG_IPV6_PRIVACY=y |
215 | CONFIG_IPV6_ROUTER_PREF=y | 206 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -259,13 +250,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
259 | CONFIG_NF_CONNTRACK_SIP=m | 250 | CONFIG_NF_CONNTRACK_SIP=m |
260 | CONFIG_NF_CONNTRACK_TFTP=m | 251 | CONFIG_NF_CONNTRACK_TFTP=m |
261 | # CONFIG_NF_CT_NETLINK is not set | 252 | # CONFIG_NF_CT_NETLINK is not set |
253 | # CONFIG_NETFILTER_TPROXY is not set | ||
262 | CONFIG_NETFILTER_XTABLES=m | 254 | CONFIG_NETFILTER_XTABLES=m |
263 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 255 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
264 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 256 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
265 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 257 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
266 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 258 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
267 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
268 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 259 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
260 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
269 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 261 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
270 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 262 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
271 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 263 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -279,19 +271,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
279 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 271 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
280 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 272 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
281 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 273 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
274 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
282 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 275 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
283 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 276 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
284 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 277 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
285 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 278 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
286 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 279 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
287 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 280 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
281 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
288 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 282 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
289 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 283 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
290 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
291 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 284 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
292 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 285 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
293 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 286 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
294 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 287 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
288 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
289 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
295 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 290 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
296 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 291 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
297 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 292 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -299,20 +294,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
299 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 294 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
300 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 295 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
301 | CONFIG_NETFILTER_XT_MATCH_U32=m | 296 | CONFIG_NETFILTER_XT_MATCH_U32=m |
302 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 297 | # CONFIG_IP_VS is not set |
303 | 298 | ||
304 | # | 299 | # |
305 | # IP: Netfilter Configuration | 300 | # IP: Netfilter Configuration |
306 | # | 301 | # |
302 | CONFIG_NF_DEFRAG_IPV4=m | ||
307 | CONFIG_NF_CONNTRACK_IPV4=m | 303 | CONFIG_NF_CONNTRACK_IPV4=m |
308 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 304 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
309 | CONFIG_IP_NF_QUEUE=m | 305 | CONFIG_IP_NF_QUEUE=m |
310 | CONFIG_IP_NF_IPTABLES=m | 306 | CONFIG_IP_NF_IPTABLES=m |
311 | CONFIG_IP_NF_MATCH_RECENT=m | 307 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
312 | CONFIG_IP_NF_MATCH_ECN=m | ||
313 | CONFIG_IP_NF_MATCH_AH=m | 308 | CONFIG_IP_NF_MATCH_AH=m |
309 | CONFIG_IP_NF_MATCH_ECN=m | ||
314 | CONFIG_IP_NF_MATCH_TTL=m | 310 | CONFIG_IP_NF_MATCH_TTL=m |
315 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
316 | CONFIG_IP_NF_FILTER=m | 311 | CONFIG_IP_NF_FILTER=m |
317 | CONFIG_IP_NF_TARGET_REJECT=m | 312 | CONFIG_IP_NF_TARGET_REJECT=m |
318 | CONFIG_IP_NF_TARGET_LOG=m | 313 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -320,8 +315,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
320 | CONFIG_NF_NAT=m | 315 | CONFIG_NF_NAT=m |
321 | CONFIG_NF_NAT_NEEDED=y | 316 | CONFIG_NF_NAT_NEEDED=y |
322 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 317 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
323 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
324 | CONFIG_IP_NF_TARGET_NETMAP=m | 318 | CONFIG_IP_NF_TARGET_NETMAP=m |
319 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
325 | CONFIG_NF_NAT_SNMP_BASIC=m | 320 | CONFIG_NF_NAT_SNMP_BASIC=m |
326 | CONFIG_NF_NAT_PROTO_GRE=m | 321 | CONFIG_NF_NAT_PROTO_GRE=m |
327 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 322 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -334,9 +329,9 @@ CONFIG_NF_NAT_PPTP=m | |||
334 | CONFIG_NF_NAT_H323=m | 329 | CONFIG_NF_NAT_H323=m |
335 | CONFIG_NF_NAT_SIP=m | 330 | CONFIG_NF_NAT_SIP=m |
336 | CONFIG_IP_NF_MANGLE=m | 331 | CONFIG_IP_NF_MANGLE=m |
332 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
337 | CONFIG_IP_NF_TARGET_ECN=m | 333 | CONFIG_IP_NF_TARGET_ECN=m |
338 | CONFIG_IP_NF_TARGET_TTL=m | 334 | CONFIG_IP_NF_TARGET_TTL=m |
339 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
340 | CONFIG_IP_NF_RAW=m | 335 | CONFIG_IP_NF_RAW=m |
341 | CONFIG_IP_NF_ARPTABLES=m | 336 | CONFIG_IP_NF_ARPTABLES=m |
342 | CONFIG_IP_NF_ARPFILTER=m | 337 | CONFIG_IP_NF_ARPFILTER=m |
@@ -348,16 +343,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
348 | CONFIG_NF_CONNTRACK_IPV6=m | 343 | CONFIG_NF_CONNTRACK_IPV6=m |
349 | CONFIG_IP6_NF_QUEUE=m | 344 | CONFIG_IP6_NF_QUEUE=m |
350 | CONFIG_IP6_NF_IPTABLES=m | 345 | CONFIG_IP6_NF_IPTABLES=m |
351 | CONFIG_IP6_NF_MATCH_RT=m | 346 | CONFIG_IP6_NF_MATCH_AH=m |
352 | CONFIG_IP6_NF_MATCH_OPTS=m | 347 | CONFIG_IP6_NF_MATCH_EUI64=m |
353 | CONFIG_IP6_NF_MATCH_FRAG=m | 348 | CONFIG_IP6_NF_MATCH_FRAG=m |
349 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
354 | CONFIG_IP6_NF_MATCH_HL=m | 350 | CONFIG_IP6_NF_MATCH_HL=m |
355 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 351 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
356 | CONFIG_IP6_NF_MATCH_AH=m | ||
357 | CONFIG_IP6_NF_MATCH_MH=m | 352 | CONFIG_IP6_NF_MATCH_MH=m |
358 | CONFIG_IP6_NF_MATCH_EUI64=m | 353 | CONFIG_IP6_NF_MATCH_RT=m |
359 | CONFIG_IP6_NF_FILTER=m | ||
360 | CONFIG_IP6_NF_TARGET_LOG=m | 354 | CONFIG_IP6_NF_TARGET_LOG=m |
355 | CONFIG_IP6_NF_FILTER=m | ||
361 | CONFIG_IP6_NF_TARGET_REJECT=m | 356 | CONFIG_IP6_NF_TARGET_REJECT=m |
362 | CONFIG_IP6_NF_MANGLE=m | 357 | CONFIG_IP6_NF_MANGLE=m |
363 | CONFIG_IP6_NF_TARGET_HL=m | 358 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -384,6 +379,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
384 | # CONFIG_TIPC is not set | 379 | # CONFIG_TIPC is not set |
385 | # CONFIG_ATM is not set | 380 | # CONFIG_ATM is not set |
386 | # CONFIG_BRIDGE is not set | 381 | # CONFIG_BRIDGE is not set |
382 | # CONFIG_NET_DSA is not set | ||
387 | # CONFIG_VLAN_8021Q is not set | 383 | # CONFIG_VLAN_8021Q is not set |
388 | # CONFIG_DECNET is not set | 384 | # CONFIG_DECNET is not set |
389 | CONFIG_LLC=m | 385 | CONFIG_LLC=m |
@@ -407,19 +403,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
407 | # CONFIG_IRDA is not set | 403 | # CONFIG_IRDA is not set |
408 | # CONFIG_BT is not set | 404 | # CONFIG_BT is not set |
409 | # CONFIG_AF_RXRPC is not set | 405 | # CONFIG_AF_RXRPC is not set |
410 | 406 | # CONFIG_PHONET is not set | |
411 | # | 407 | # CONFIG_WIRELESS is not set |
412 | # Wireless | ||
413 | # | ||
414 | # CONFIG_CFG80211 is not set | ||
415 | CONFIG_WIRELESS_EXT=y | ||
416 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
417 | # CONFIG_MAC80211 is not set | ||
418 | CONFIG_IEEE80211=m | ||
419 | # CONFIG_IEEE80211_DEBUG is not set | ||
420 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
421 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
422 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
423 | # CONFIG_RFKILL is not set | 408 | # CONFIG_RFKILL is not set |
424 | # CONFIG_NET_9P is not set | 409 | # CONFIG_NET_9P is not set |
425 | 410 | ||
@@ -458,21 +443,20 @@ CONFIG_ATA_OVER_ETH=m | |||
458 | CONFIG_MISC_DEVICES=y | 443 | CONFIG_MISC_DEVICES=y |
459 | # CONFIG_EEPROM_93CX6 is not set | 444 | # CONFIG_EEPROM_93CX6 is not set |
460 | # CONFIG_ENCLOSURE_SERVICES is not set | 445 | # CONFIG_ENCLOSURE_SERVICES is not set |
446 | # CONFIG_C2PORT is not set | ||
461 | CONFIG_HAVE_IDE=y | 447 | CONFIG_HAVE_IDE=y |
462 | CONFIG_IDE=y | 448 | CONFIG_IDE=y |
463 | CONFIG_BLK_DEV_IDE=y | ||
464 | 449 | ||
465 | # | 450 | # |
466 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 451 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
467 | # | 452 | # |
468 | CONFIG_IDE_ATAPI=y | ||
469 | # CONFIG_BLK_DEV_IDE_SATA is not set | 453 | # CONFIG_BLK_DEV_IDE_SATA is not set |
470 | CONFIG_BLK_DEV_IDEDISK=y | 454 | CONFIG_IDE_GD=y |
471 | # CONFIG_IDEDISK_MULTI_MODE is not set | 455 | CONFIG_IDE_GD_ATA=y |
456 | # CONFIG_IDE_GD_ATAPI is not set | ||
472 | CONFIG_BLK_DEV_IDECD=y | 457 | CONFIG_BLK_DEV_IDECD=y |
473 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | 458 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y |
474 | # CONFIG_BLK_DEV_IDETAPE is not set | 459 | # CONFIG_BLK_DEV_IDETAPE is not set |
475 | CONFIG_BLK_DEV_IDEFLOPPY=m | ||
476 | # CONFIG_BLK_DEV_IDESCSI is not set | 460 | # CONFIG_BLK_DEV_IDESCSI is not set |
477 | # CONFIG_IDE_TASK_IOCTL is not set | 461 | # CONFIG_IDE_TASK_IOCTL is not set |
478 | CONFIG_IDE_PROC_FS=y | 462 | CONFIG_IDE_PROC_FS=y |
@@ -585,8 +569,12 @@ CONFIG_NE2000=m | |||
585 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 569 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
586 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 570 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
587 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 571 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
572 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
573 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
574 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
588 | # CONFIG_NET_PCI is not set | 575 | # CONFIG_NET_PCI is not set |
589 | # CONFIG_B44 is not set | 576 | # CONFIG_B44 is not set |
577 | # CONFIG_CS89x0 is not set | ||
590 | # CONFIG_NETDEV_1000 is not set | 578 | # CONFIG_NETDEV_1000 is not set |
591 | # CONFIG_NETDEV_10000 is not set | 579 | # CONFIG_NETDEV_10000 is not set |
592 | # CONFIG_TR is not set | 580 | # CONFIG_TR is not set |
@@ -656,6 +644,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
656 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 644 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
657 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 645 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
658 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 646 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
647 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
659 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 648 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
660 | CONFIG_MOUSE_SERIAL=m | 649 | CONFIG_MOUSE_SERIAL=m |
661 | # CONFIG_MOUSE_INPORT is not set | 650 | # CONFIG_MOUSE_INPORT is not set |
@@ -717,11 +706,11 @@ CONFIG_GEN_RTC_X=y | |||
717 | # CONFIG_THERMAL is not set | 706 | # CONFIG_THERMAL is not set |
718 | # CONFIG_THERMAL_HWMON is not set | 707 | # CONFIG_THERMAL_HWMON is not set |
719 | # CONFIG_WATCHDOG is not set | 708 | # CONFIG_WATCHDOG is not set |
709 | CONFIG_SSB_POSSIBLE=y | ||
720 | 710 | ||
721 | # | 711 | # |
722 | # Sonics Silicon Backplane | 712 | # Sonics Silicon Backplane |
723 | # | 713 | # |
724 | CONFIG_SSB_POSSIBLE=y | ||
725 | # CONFIG_SSB is not set | 714 | # CONFIG_SSB is not set |
726 | 715 | ||
727 | # | 716 | # |
@@ -731,6 +720,7 @@ CONFIG_SSB_POSSIBLE=y | |||
731 | # CONFIG_MFD_SM501 is not set | 720 | # CONFIG_MFD_SM501 is not set |
732 | # CONFIG_HTC_PASIC3 is not set | 721 | # CONFIG_HTC_PASIC3 is not set |
733 | # CONFIG_MFD_TMIO is not set | 722 | # CONFIG_MFD_TMIO is not set |
723 | # CONFIG_REGULATOR is not set | ||
734 | 724 | ||
735 | # | 725 | # |
736 | # Multimedia devices | 726 | # Multimedia devices |
@@ -756,6 +746,7 @@ CONFIG_SSB_POSSIBLE=y | |||
756 | CONFIG_FB=y | 746 | CONFIG_FB=y |
757 | # CONFIG_FIRMWARE_EDID is not set | 747 | # CONFIG_FIRMWARE_EDID is not set |
758 | # CONFIG_FB_DDC is not set | 748 | # CONFIG_FB_DDC is not set |
749 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
759 | CONFIG_FB_CFB_FILLRECT=y | 750 | CONFIG_FB_CFB_FILLRECT=y |
760 | CONFIG_FB_CFB_COPYAREA=y | 751 | CONFIG_FB_CFB_COPYAREA=y |
761 | CONFIG_FB_CFB_IMAGEBLIT=y | 752 | CONFIG_FB_CFB_IMAGEBLIT=y |
@@ -778,6 +769,8 @@ CONFIG_FB_Q40=y | |||
778 | # CONFIG_FB_UVESA is not set | 769 | # CONFIG_FB_UVESA is not set |
779 | # CONFIG_FB_S1D13XXX is not set | 770 | # CONFIG_FB_S1D13XXX is not set |
780 | # CONFIG_FB_VIRTUAL is not set | 771 | # CONFIG_FB_VIRTUAL is not set |
772 | # CONFIG_FB_METRONOME is not set | ||
773 | # CONFIG_FB_MB862XX is not set | ||
781 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 774 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
782 | 775 | ||
783 | # | 776 | # |
@@ -800,12 +793,19 @@ CONFIG_LOGO_LINUX_MONO=y | |||
800 | CONFIG_LOGO_LINUX_VGA16=y | 793 | CONFIG_LOGO_LINUX_VGA16=y |
801 | CONFIG_LOGO_LINUX_CLUT224=y | 794 | CONFIG_LOGO_LINUX_CLUT224=y |
802 | CONFIG_SOUND=m | 795 | CONFIG_SOUND=m |
796 | CONFIG_SOUND_OSS_CORE=y | ||
803 | CONFIG_DMASOUND_Q40=m | 797 | CONFIG_DMASOUND_Q40=m |
804 | CONFIG_DMASOUND=m | 798 | CONFIG_DMASOUND=m |
805 | CONFIG_HID_SUPPORT=y | 799 | CONFIG_HID_SUPPORT=y |
806 | CONFIG_HID=m | 800 | CONFIG_HID=m |
807 | # CONFIG_HID_DEBUG is not set | 801 | # CONFIG_HID_DEBUG is not set |
808 | CONFIG_HIDRAW=y | 802 | CONFIG_HIDRAW=y |
803 | # CONFIG_HID_PID is not set | ||
804 | |||
805 | # | ||
806 | # Special HID drivers | ||
807 | # | ||
808 | CONFIG_HID_COMPAT=y | ||
809 | # CONFIG_USB_SUPPORT is not set | 809 | # CONFIG_USB_SUPPORT is not set |
810 | # CONFIG_MMC is not set | 810 | # CONFIG_MMC is not set |
811 | # CONFIG_MEMSTICK is not set | 811 | # CONFIG_MEMSTICK is not set |
@@ -814,6 +814,8 @@ CONFIG_HIDRAW=y | |||
814 | # CONFIG_RTC_CLASS is not set | 814 | # CONFIG_RTC_CLASS is not set |
815 | # CONFIG_DMADEVICES is not set | 815 | # CONFIG_DMADEVICES is not set |
816 | # CONFIG_UIO is not set | 816 | # CONFIG_UIO is not set |
817 | # CONFIG_STAGING is not set | ||
818 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
817 | 819 | ||
818 | # | 820 | # |
819 | # Character devices | 821 | # Character devices |
@@ -827,8 +829,9 @@ CONFIG_EXT2_FS=y | |||
827 | # CONFIG_EXT2_FS_XIP is not set | 829 | # CONFIG_EXT2_FS_XIP is not set |
828 | CONFIG_EXT3_FS=y | 830 | CONFIG_EXT3_FS=y |
829 | # CONFIG_EXT3_FS_XATTR is not set | 831 | # CONFIG_EXT3_FS_XATTR is not set |
830 | # CONFIG_EXT4DEV_FS is not set | 832 | # CONFIG_EXT4_FS is not set |
831 | CONFIG_JBD=y | 833 | CONFIG_JBD=y |
834 | CONFIG_JBD2=m | ||
832 | CONFIG_REISERFS_FS=m | 835 | CONFIG_REISERFS_FS=m |
833 | # CONFIG_REISERFS_CHECK is not set | 836 | # CONFIG_REISERFS_CHECK is not set |
834 | # CONFIG_REISERFS_PROC_INFO is not set | 837 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -839,6 +842,7 @@ CONFIG_JFS_FS=m | |||
839 | # CONFIG_JFS_DEBUG is not set | 842 | # CONFIG_JFS_DEBUG is not set |
840 | # CONFIG_JFS_STATISTICS is not set | 843 | # CONFIG_JFS_STATISTICS is not set |
841 | # CONFIG_FS_POSIX_ACL is not set | 844 | # CONFIG_FS_POSIX_ACL is not set |
845 | CONFIG_FILE_LOCKING=y | ||
842 | CONFIG_XFS_FS=m | 846 | CONFIG_XFS_FS=m |
843 | # CONFIG_XFS_QUOTA is not set | 847 | # CONFIG_XFS_QUOTA is not set |
844 | # CONFIG_XFS_POSIX_ACL is not set | 848 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -850,6 +854,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
850 | # CONFIG_OCFS2_FS_STATS is not set | 854 | # CONFIG_OCFS2_FS_STATS is not set |
851 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 855 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
852 | # CONFIG_OCFS2_DEBUG_FS is not set | 856 | # CONFIG_OCFS2_DEBUG_FS is not set |
857 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
853 | CONFIG_DNOTIFY=y | 858 | CONFIG_DNOTIFY=y |
854 | CONFIG_INOTIFY=y | 859 | CONFIG_INOTIFY=y |
855 | CONFIG_INOTIFY_USER=y | 860 | CONFIG_INOTIFY_USER=y |
@@ -888,6 +893,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
888 | CONFIG_PROC_FS=y | 893 | CONFIG_PROC_FS=y |
889 | CONFIG_PROC_KCORE=y | 894 | CONFIG_PROC_KCORE=y |
890 | CONFIG_PROC_SYSCTL=y | 895 | CONFIG_PROC_SYSCTL=y |
896 | CONFIG_PROC_PAGE_MONITOR=y | ||
891 | CONFIG_SYSFS=y | 897 | CONFIG_SYSFS=y |
892 | CONFIG_TMPFS=y | 898 | CONFIG_TMPFS=y |
893 | # CONFIG_TMPFS_POSIX_ACL is not set | 899 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -930,6 +936,7 @@ CONFIG_EXPORTFS=m | |||
930 | CONFIG_NFS_COMMON=y | 936 | CONFIG_NFS_COMMON=y |
931 | CONFIG_SUNRPC=y | 937 | CONFIG_SUNRPC=y |
932 | CONFIG_SUNRPC_GSS=y | 938 | CONFIG_SUNRPC_GSS=y |
939 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
933 | CONFIG_RPCSEC_GSS_KRB5=y | 940 | CONFIG_RPCSEC_GSS_KRB5=y |
934 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 941 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
935 | CONFIG_SMB_FS=m | 942 | CONFIG_SMB_FS=m |
@@ -1002,7 +1009,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
1002 | # CONFIG_DEBUG_KERNEL is not set | 1009 | # CONFIG_DEBUG_KERNEL is not set |
1003 | CONFIG_DEBUG_BUGVERBOSE=y | 1010 | CONFIG_DEBUG_BUGVERBOSE=y |
1004 | CONFIG_DEBUG_MEMORY_INIT=y | 1011 | CONFIG_DEBUG_MEMORY_INIT=y |
1012 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1005 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1013 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
1014 | |||
1015 | # | ||
1016 | # Tracers | ||
1017 | # | ||
1018 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
1006 | # CONFIG_SAMPLES is not set | 1019 | # CONFIG_SAMPLES is not set |
1007 | 1020 | ||
1008 | # | 1021 | # |
@@ -1010,6 +1023,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
1010 | # | 1023 | # |
1011 | # CONFIG_KEYS is not set | 1024 | # CONFIG_KEYS is not set |
1012 | # CONFIG_SECURITY is not set | 1025 | # CONFIG_SECURITY is not set |
1026 | # CONFIG_SECURITYFS is not set | ||
1013 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1027 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
1014 | CONFIG_XOR_BLOCKS=m | 1028 | CONFIG_XOR_BLOCKS=m |
1015 | CONFIG_ASYNC_CORE=m | 1029 | CONFIG_ASYNC_CORE=m |
@@ -1020,10 +1034,12 @@ CONFIG_CRYPTO=y | |||
1020 | # | 1034 | # |
1021 | # Crypto core or helper | 1035 | # Crypto core or helper |
1022 | # | 1036 | # |
1037 | # CONFIG_CRYPTO_FIPS is not set | ||
1023 | CONFIG_CRYPTO_ALGAPI=y | 1038 | CONFIG_CRYPTO_ALGAPI=y |
1024 | CONFIG_CRYPTO_AEAD=m | 1039 | CONFIG_CRYPTO_AEAD=y |
1025 | CONFIG_CRYPTO_BLKCIPHER=y | 1040 | CONFIG_CRYPTO_BLKCIPHER=y |
1026 | CONFIG_CRYPTO_HASH=y | 1041 | CONFIG_CRYPTO_HASH=y |
1042 | CONFIG_CRYPTO_RNG=y | ||
1027 | CONFIG_CRYPTO_MANAGER=y | 1043 | CONFIG_CRYPTO_MANAGER=y |
1028 | CONFIG_CRYPTO_GF128MUL=m | 1044 | CONFIG_CRYPTO_GF128MUL=m |
1029 | CONFIG_CRYPTO_NULL=m | 1045 | CONFIG_CRYPTO_NULL=m |
@@ -1097,14 +1113,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1097 | # | 1113 | # |
1098 | CONFIG_CRYPTO_DEFLATE=m | 1114 | CONFIG_CRYPTO_DEFLATE=m |
1099 | CONFIG_CRYPTO_LZO=m | 1115 | CONFIG_CRYPTO_LZO=m |
1116 | |||
1117 | # | ||
1118 | # Random Number Generation | ||
1119 | # | ||
1120 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1100 | # CONFIG_CRYPTO_HW is not set | 1121 | # CONFIG_CRYPTO_HW is not set |
1101 | 1122 | ||
1102 | # | 1123 | # |
1103 | # Library routines | 1124 | # Library routines |
1104 | # | 1125 | # |
1105 | CONFIG_BITREVERSE=y | 1126 | CONFIG_BITREVERSE=y |
1106 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1107 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1108 | CONFIG_CRC_CCITT=m | 1127 | CONFIG_CRC_CCITT=m |
1109 | CONFIG_CRC16=m | 1128 | CONFIG_CRC16=m |
1110 | CONFIG_CRC_T10DIF=y | 1129 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/sun3_defconfig b/arch/m68k/configs/sun3_defconfig index cb62b96d766e..f404917429fa 100644 --- a/arch/m68k/configs/sun3_defconfig +++ b/arch/m68k/configs/sun3_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:11 2008 | 4 | # Tue Dec 2 20:27:53 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | CONFIG_NO_DMA=y | 16 | CONFIG_NO_DMA=y |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,10 +105,19 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
113 | # CONFIG_AMIGA is not set | ||
114 | # CONFIG_ATARI is not set | ||
115 | # CONFIG_MAC is not set | ||
116 | # CONFIG_APOLLO is not set | ||
117 | # CONFIG_VME is not set | ||
118 | # CONFIG_HP300 is not set | ||
119 | # CONFIG_SUN3X is not set | ||
120 | # CONFIG_Q40 is not set | ||
122 | CONFIG_SUN3=y | 121 | CONFIG_SUN3=y |
123 | 122 | ||
124 | # | 123 | # |
@@ -137,19 +136,21 @@ CONFIG_FLATMEM_MANUAL=y | |||
137 | CONFIG_FLATMEM=y | 136 | CONFIG_FLATMEM=y |
138 | CONFIG_FLAT_NODE_MEM_MAP=y | 137 | CONFIG_FLAT_NODE_MEM_MAP=y |
139 | CONFIG_NEED_MULTIPLE_NODES=y | 138 | CONFIG_NEED_MULTIPLE_NODES=y |
140 | # CONFIG_SPARSEMEM_STATIC is not set | ||
141 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
142 | CONFIG_PAGEFLAGS_EXTENDED=y | 139 | CONFIG_PAGEFLAGS_EXTENDED=y |
143 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 140 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
144 | # CONFIG_RESOURCES_64BIT is not set | 141 | # CONFIG_RESOURCES_64BIT is not set |
142 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
145 | CONFIG_ZONE_DMA_FLAG=1 | 143 | CONFIG_ZONE_DMA_FLAG=1 |
146 | CONFIG_BOUNCE=y | 144 | CONFIG_BOUNCE=y |
147 | CONFIG_VIRT_TO_BUS=y | 145 | CONFIG_VIRT_TO_BUS=y |
146 | CONFIG_UNEVICTABLE_LRU=y | ||
148 | 147 | ||
149 | # | 148 | # |
150 | # General setup | 149 | # General setup |
151 | # | 150 | # |
152 | CONFIG_BINFMT_ELF=y | 151 | CONFIG_BINFMT_ELF=y |
152 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
153 | CONFIG_HAVE_AOUT=y | ||
153 | CONFIG_BINFMT_AOUT=m | 154 | CONFIG_BINFMT_AOUT=m |
154 | CONFIG_BINFMT_MISC=m | 155 | CONFIG_BINFMT_MISC=m |
155 | CONFIG_PROC_HARDWARE=y | 156 | CONFIG_PROC_HARDWARE=y |
@@ -198,7 +199,6 @@ CONFIG_INET_TCP_DIAG=m | |||
198 | CONFIG_TCP_CONG_CUBIC=y | 199 | CONFIG_TCP_CONG_CUBIC=y |
199 | CONFIG_DEFAULT_TCP_CONG="cubic" | 200 | CONFIG_DEFAULT_TCP_CONG="cubic" |
200 | # CONFIG_TCP_MD5SIG is not set | 201 | # CONFIG_TCP_MD5SIG is not set |
201 | # CONFIG_IP_VS is not set | ||
202 | CONFIG_IPV6=m | 202 | CONFIG_IPV6=m |
203 | CONFIG_IPV6_PRIVACY=y | 203 | CONFIG_IPV6_PRIVACY=y |
204 | CONFIG_IPV6_ROUTER_PREF=y | 204 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -248,13 +248,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
248 | CONFIG_NF_CONNTRACK_SIP=m | 248 | CONFIG_NF_CONNTRACK_SIP=m |
249 | CONFIG_NF_CONNTRACK_TFTP=m | 249 | CONFIG_NF_CONNTRACK_TFTP=m |
250 | # CONFIG_NF_CT_NETLINK is not set | 250 | # CONFIG_NF_CT_NETLINK is not set |
251 | # CONFIG_NETFILTER_TPROXY is not set | ||
251 | CONFIG_NETFILTER_XTABLES=m | 252 | CONFIG_NETFILTER_XTABLES=m |
252 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 253 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
253 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 254 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
254 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 255 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
255 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 256 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
256 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
257 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 257 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
258 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
258 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 259 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
259 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 260 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
260 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 261 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -268,19 +269,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
268 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 269 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
269 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 270 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
270 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 271 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
272 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
271 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 273 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
272 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 274 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
273 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 275 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
274 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 276 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
275 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 277 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
276 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 278 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
279 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
277 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 280 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
278 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 281 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
279 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
280 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 282 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
281 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 283 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
282 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 284 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
283 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 285 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
286 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
287 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
284 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 288 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
285 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 289 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
286 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 290 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -288,20 +292,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
288 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 292 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
289 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 293 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
290 | CONFIG_NETFILTER_XT_MATCH_U32=m | 294 | CONFIG_NETFILTER_XT_MATCH_U32=m |
291 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 295 | # CONFIG_IP_VS is not set |
292 | 296 | ||
293 | # | 297 | # |
294 | # IP: Netfilter Configuration | 298 | # IP: Netfilter Configuration |
295 | # | 299 | # |
300 | CONFIG_NF_DEFRAG_IPV4=m | ||
296 | CONFIG_NF_CONNTRACK_IPV4=m | 301 | CONFIG_NF_CONNTRACK_IPV4=m |
297 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 302 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
298 | CONFIG_IP_NF_QUEUE=m | 303 | CONFIG_IP_NF_QUEUE=m |
299 | CONFIG_IP_NF_IPTABLES=m | 304 | CONFIG_IP_NF_IPTABLES=m |
300 | CONFIG_IP_NF_MATCH_RECENT=m | 305 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
301 | CONFIG_IP_NF_MATCH_ECN=m | ||
302 | CONFIG_IP_NF_MATCH_AH=m | 306 | CONFIG_IP_NF_MATCH_AH=m |
307 | CONFIG_IP_NF_MATCH_ECN=m | ||
303 | CONFIG_IP_NF_MATCH_TTL=m | 308 | CONFIG_IP_NF_MATCH_TTL=m |
304 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
305 | CONFIG_IP_NF_FILTER=m | 309 | CONFIG_IP_NF_FILTER=m |
306 | CONFIG_IP_NF_TARGET_REJECT=m | 310 | CONFIG_IP_NF_TARGET_REJECT=m |
307 | CONFIG_IP_NF_TARGET_LOG=m | 311 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -309,8 +313,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
309 | CONFIG_NF_NAT=m | 313 | CONFIG_NF_NAT=m |
310 | CONFIG_NF_NAT_NEEDED=y | 314 | CONFIG_NF_NAT_NEEDED=y |
311 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 315 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
312 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
313 | CONFIG_IP_NF_TARGET_NETMAP=m | 316 | CONFIG_IP_NF_TARGET_NETMAP=m |
317 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
314 | CONFIG_NF_NAT_SNMP_BASIC=m | 318 | CONFIG_NF_NAT_SNMP_BASIC=m |
315 | CONFIG_NF_NAT_PROTO_GRE=m | 319 | CONFIG_NF_NAT_PROTO_GRE=m |
316 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 320 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -323,9 +327,9 @@ CONFIG_NF_NAT_PPTP=m | |||
323 | CONFIG_NF_NAT_H323=m | 327 | CONFIG_NF_NAT_H323=m |
324 | CONFIG_NF_NAT_SIP=m | 328 | CONFIG_NF_NAT_SIP=m |
325 | CONFIG_IP_NF_MANGLE=m | 329 | CONFIG_IP_NF_MANGLE=m |
330 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
326 | CONFIG_IP_NF_TARGET_ECN=m | 331 | CONFIG_IP_NF_TARGET_ECN=m |
327 | CONFIG_IP_NF_TARGET_TTL=m | 332 | CONFIG_IP_NF_TARGET_TTL=m |
328 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
329 | CONFIG_IP_NF_RAW=m | 333 | CONFIG_IP_NF_RAW=m |
330 | CONFIG_IP_NF_ARPTABLES=m | 334 | CONFIG_IP_NF_ARPTABLES=m |
331 | CONFIG_IP_NF_ARPFILTER=m | 335 | CONFIG_IP_NF_ARPFILTER=m |
@@ -337,16 +341,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
337 | CONFIG_NF_CONNTRACK_IPV6=m | 341 | CONFIG_NF_CONNTRACK_IPV6=m |
338 | CONFIG_IP6_NF_QUEUE=m | 342 | CONFIG_IP6_NF_QUEUE=m |
339 | CONFIG_IP6_NF_IPTABLES=m | 343 | CONFIG_IP6_NF_IPTABLES=m |
340 | CONFIG_IP6_NF_MATCH_RT=m | 344 | CONFIG_IP6_NF_MATCH_AH=m |
341 | CONFIG_IP6_NF_MATCH_OPTS=m | 345 | CONFIG_IP6_NF_MATCH_EUI64=m |
342 | CONFIG_IP6_NF_MATCH_FRAG=m | 346 | CONFIG_IP6_NF_MATCH_FRAG=m |
347 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
343 | CONFIG_IP6_NF_MATCH_HL=m | 348 | CONFIG_IP6_NF_MATCH_HL=m |
344 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 349 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
345 | CONFIG_IP6_NF_MATCH_AH=m | ||
346 | CONFIG_IP6_NF_MATCH_MH=m | 350 | CONFIG_IP6_NF_MATCH_MH=m |
347 | CONFIG_IP6_NF_MATCH_EUI64=m | 351 | CONFIG_IP6_NF_MATCH_RT=m |
348 | CONFIG_IP6_NF_FILTER=m | ||
349 | CONFIG_IP6_NF_TARGET_LOG=m | 352 | CONFIG_IP6_NF_TARGET_LOG=m |
353 | CONFIG_IP6_NF_FILTER=m | ||
350 | CONFIG_IP6_NF_TARGET_REJECT=m | 354 | CONFIG_IP6_NF_TARGET_REJECT=m |
351 | CONFIG_IP6_NF_MANGLE=m | 355 | CONFIG_IP6_NF_MANGLE=m |
352 | CONFIG_IP6_NF_TARGET_HL=m | 356 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -373,6 +377,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
373 | # CONFIG_TIPC is not set | 377 | # CONFIG_TIPC is not set |
374 | # CONFIG_ATM is not set | 378 | # CONFIG_ATM is not set |
375 | # CONFIG_BRIDGE is not set | 379 | # CONFIG_BRIDGE is not set |
380 | # CONFIG_NET_DSA is not set | ||
376 | # CONFIG_VLAN_8021Q is not set | 381 | # CONFIG_VLAN_8021Q is not set |
377 | # CONFIG_DECNET is not set | 382 | # CONFIG_DECNET is not set |
378 | CONFIG_LLC=m | 383 | CONFIG_LLC=m |
@@ -396,19 +401,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
396 | # CONFIG_IRDA is not set | 401 | # CONFIG_IRDA is not set |
397 | # CONFIG_BT is not set | 402 | # CONFIG_BT is not set |
398 | # CONFIG_AF_RXRPC is not set | 403 | # CONFIG_AF_RXRPC is not set |
399 | 404 | # CONFIG_PHONET is not set | |
400 | # | 405 | # CONFIG_WIRELESS is not set |
401 | # Wireless | ||
402 | # | ||
403 | # CONFIG_CFG80211 is not set | ||
404 | CONFIG_WIRELESS_EXT=y | ||
405 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
406 | # CONFIG_MAC80211 is not set | ||
407 | CONFIG_IEEE80211=m | ||
408 | # CONFIG_IEEE80211_DEBUG is not set | ||
409 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
410 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
411 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
412 | # CONFIG_RFKILL is not set | 406 | # CONFIG_RFKILL is not set |
413 | # CONFIG_NET_9P is not set | 407 | # CONFIG_NET_9P is not set |
414 | 408 | ||
@@ -446,6 +440,7 @@ CONFIG_ATA_OVER_ETH=m | |||
446 | CONFIG_MISC_DEVICES=y | 440 | CONFIG_MISC_DEVICES=y |
447 | # CONFIG_EEPROM_93CX6 is not set | 441 | # CONFIG_EEPROM_93CX6 is not set |
448 | # CONFIG_ENCLOSURE_SERVICES is not set | 442 | # CONFIG_ENCLOSURE_SERVICES is not set |
443 | # CONFIG_C2PORT is not set | ||
449 | CONFIG_HAVE_IDE=y | 444 | CONFIG_HAVE_IDE=y |
450 | # CONFIG_IDE is not set | 445 | # CONFIG_IDE is not set |
451 | 446 | ||
@@ -531,6 +526,9 @@ CONFIG_SUN3_82586=y | |||
531 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 526 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
532 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 527 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
533 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 528 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
529 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
530 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
531 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
534 | # CONFIG_NETDEV_1000 is not set | 532 | # CONFIG_NETDEV_1000 is not set |
535 | # CONFIG_NETDEV_10000 is not set | 533 | # CONFIG_NETDEV_10000 is not set |
536 | 534 | ||
@@ -599,6 +597,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
599 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 597 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
600 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 598 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
601 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 599 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
600 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
602 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 601 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
603 | CONFIG_MOUSE_SERIAL=m | 602 | CONFIG_MOUSE_SERIAL=m |
604 | # CONFIG_MOUSE_VSXXXAA is not set | 603 | # CONFIG_MOUSE_VSXXXAA is not set |
@@ -655,16 +654,13 @@ CONFIG_GEN_RTC_X=y | |||
655 | # CONFIG_WATCHDOG is not set | 654 | # CONFIG_WATCHDOG is not set |
656 | 655 | ||
657 | # | 656 | # |
658 | # Sonics Silicon Backplane | ||
659 | # | ||
660 | |||
661 | # | ||
662 | # Multifunction device drivers | 657 | # Multifunction device drivers |
663 | # | 658 | # |
664 | # CONFIG_MFD_CORE is not set | 659 | # CONFIG_MFD_CORE is not set |
665 | # CONFIG_MFD_SM501 is not set | 660 | # CONFIG_MFD_SM501 is not set |
666 | # CONFIG_HTC_PASIC3 is not set | 661 | # CONFIG_HTC_PASIC3 is not set |
667 | # CONFIG_MFD_TMIO is not set | 662 | # CONFIG_MFD_TMIO is not set |
663 | # CONFIG_REGULATOR is not set | ||
668 | 664 | ||
669 | # | 665 | # |
670 | # Multimedia devices | 666 | # Multimedia devices |
@@ -690,6 +686,7 @@ CONFIG_GEN_RTC_X=y | |||
690 | CONFIG_FB=y | 686 | CONFIG_FB=y |
691 | # CONFIG_FIRMWARE_EDID is not set | 687 | # CONFIG_FIRMWARE_EDID is not set |
692 | # CONFIG_FB_DDC is not set | 688 | # CONFIG_FB_DDC is not set |
689 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
693 | # CONFIG_FB_CFB_FILLRECT is not set | 690 | # CONFIG_FB_CFB_FILLRECT is not set |
694 | # CONFIG_FB_CFB_COPYAREA is not set | 691 | # CONFIG_FB_CFB_COPYAREA is not set |
695 | # CONFIG_FB_CFB_IMAGEBLIT is not set | 692 | # CONFIG_FB_CFB_IMAGEBLIT is not set |
@@ -711,6 +708,8 @@ CONFIG_FB=y | |||
711 | # CONFIG_FB_UVESA is not set | 708 | # CONFIG_FB_UVESA is not set |
712 | # CONFIG_FB_S1D13XXX is not set | 709 | # CONFIG_FB_S1D13XXX is not set |
713 | # CONFIG_FB_VIRTUAL is not set | 710 | # CONFIG_FB_VIRTUAL is not set |
711 | # CONFIG_FB_METRONOME is not set | ||
712 | # CONFIG_FB_MB862XX is not set | ||
714 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 713 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
715 | 714 | ||
716 | # | 715 | # |
@@ -737,6 +736,12 @@ CONFIG_HID_SUPPORT=y | |||
737 | CONFIG_HID=m | 736 | CONFIG_HID=m |
738 | # CONFIG_HID_DEBUG is not set | 737 | # CONFIG_HID_DEBUG is not set |
739 | CONFIG_HIDRAW=y | 738 | CONFIG_HIDRAW=y |
739 | # CONFIG_HID_PID is not set | ||
740 | |||
741 | # | ||
742 | # Special HID drivers | ||
743 | # | ||
744 | CONFIG_HID_COMPAT=y | ||
740 | # CONFIG_USB_SUPPORT is not set | 745 | # CONFIG_USB_SUPPORT is not set |
741 | # CONFIG_MMC is not set | 746 | # CONFIG_MMC is not set |
742 | # CONFIG_MEMSTICK is not set | 747 | # CONFIG_MEMSTICK is not set |
@@ -744,6 +749,8 @@ CONFIG_HIDRAW=y | |||
744 | # CONFIG_ACCESSIBILITY is not set | 749 | # CONFIG_ACCESSIBILITY is not set |
745 | # CONFIG_RTC_CLASS is not set | 750 | # CONFIG_RTC_CLASS is not set |
746 | # CONFIG_UIO is not set | 751 | # CONFIG_UIO is not set |
752 | # CONFIG_STAGING is not set | ||
753 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
747 | 754 | ||
748 | # | 755 | # |
749 | # Character devices | 756 | # Character devices |
@@ -757,8 +764,9 @@ CONFIG_EXT2_FS=y | |||
757 | # CONFIG_EXT2_FS_XIP is not set | 764 | # CONFIG_EXT2_FS_XIP is not set |
758 | CONFIG_EXT3_FS=y | 765 | CONFIG_EXT3_FS=y |
759 | # CONFIG_EXT3_FS_XATTR is not set | 766 | # CONFIG_EXT3_FS_XATTR is not set |
760 | # CONFIG_EXT4DEV_FS is not set | 767 | # CONFIG_EXT4_FS is not set |
761 | CONFIG_JBD=y | 768 | CONFIG_JBD=y |
769 | CONFIG_JBD2=m | ||
762 | CONFIG_REISERFS_FS=m | 770 | CONFIG_REISERFS_FS=m |
763 | # CONFIG_REISERFS_CHECK is not set | 771 | # CONFIG_REISERFS_CHECK is not set |
764 | # CONFIG_REISERFS_PROC_INFO is not set | 772 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -769,6 +777,7 @@ CONFIG_JFS_FS=m | |||
769 | # CONFIG_JFS_DEBUG is not set | 777 | # CONFIG_JFS_DEBUG is not set |
770 | # CONFIG_JFS_STATISTICS is not set | 778 | # CONFIG_JFS_STATISTICS is not set |
771 | # CONFIG_FS_POSIX_ACL is not set | 779 | # CONFIG_FS_POSIX_ACL is not set |
780 | CONFIG_FILE_LOCKING=y | ||
772 | CONFIG_XFS_FS=m | 781 | CONFIG_XFS_FS=m |
773 | # CONFIG_XFS_QUOTA is not set | 782 | # CONFIG_XFS_QUOTA is not set |
774 | # CONFIG_XFS_POSIX_ACL is not set | 783 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -780,6 +789,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
780 | # CONFIG_OCFS2_FS_STATS is not set | 789 | # CONFIG_OCFS2_FS_STATS is not set |
781 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 790 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
782 | # CONFIG_OCFS2_DEBUG_FS is not set | 791 | # CONFIG_OCFS2_DEBUG_FS is not set |
792 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
783 | CONFIG_DNOTIFY=y | 793 | CONFIG_DNOTIFY=y |
784 | CONFIG_INOTIFY=y | 794 | CONFIG_INOTIFY=y |
785 | CONFIG_INOTIFY_USER=y | 795 | CONFIG_INOTIFY_USER=y |
@@ -818,6 +828,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
818 | CONFIG_PROC_FS=y | 828 | CONFIG_PROC_FS=y |
819 | CONFIG_PROC_KCORE=y | 829 | CONFIG_PROC_KCORE=y |
820 | CONFIG_PROC_SYSCTL=y | 830 | CONFIG_PROC_SYSCTL=y |
831 | CONFIG_PROC_PAGE_MONITOR=y | ||
821 | CONFIG_SYSFS=y | 832 | CONFIG_SYSFS=y |
822 | CONFIG_TMPFS=y | 833 | CONFIG_TMPFS=y |
823 | # CONFIG_TMPFS_POSIX_ACL is not set | 834 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -861,6 +872,7 @@ CONFIG_EXPORTFS=m | |||
861 | CONFIG_NFS_COMMON=y | 872 | CONFIG_NFS_COMMON=y |
862 | CONFIG_SUNRPC=y | 873 | CONFIG_SUNRPC=y |
863 | CONFIG_SUNRPC_GSS=y | 874 | CONFIG_SUNRPC_GSS=y |
875 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
864 | CONFIG_RPCSEC_GSS_KRB5=y | 876 | CONFIG_RPCSEC_GSS_KRB5=y |
865 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 877 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
866 | CONFIG_SMB_FS=m | 878 | CONFIG_SMB_FS=m |
@@ -934,7 +946,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
934 | # CONFIG_DEBUG_KERNEL is not set | 946 | # CONFIG_DEBUG_KERNEL is not set |
935 | CONFIG_DEBUG_BUGVERBOSE=y | 947 | CONFIG_DEBUG_BUGVERBOSE=y |
936 | CONFIG_DEBUG_MEMORY_INIT=y | 948 | CONFIG_DEBUG_MEMORY_INIT=y |
949 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
937 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 950 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
951 | |||
952 | # | ||
953 | # Tracers | ||
954 | # | ||
955 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
938 | # CONFIG_SAMPLES is not set | 956 | # CONFIG_SAMPLES is not set |
939 | 957 | ||
940 | # | 958 | # |
@@ -942,6 +960,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
942 | # | 960 | # |
943 | # CONFIG_KEYS is not set | 961 | # CONFIG_KEYS is not set |
944 | # CONFIG_SECURITY is not set | 962 | # CONFIG_SECURITY is not set |
963 | # CONFIG_SECURITYFS is not set | ||
945 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 964 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
946 | CONFIG_XOR_BLOCKS=m | 965 | CONFIG_XOR_BLOCKS=m |
947 | CONFIG_ASYNC_CORE=m | 966 | CONFIG_ASYNC_CORE=m |
@@ -952,10 +971,12 @@ CONFIG_CRYPTO=y | |||
952 | # | 971 | # |
953 | # Crypto core or helper | 972 | # Crypto core or helper |
954 | # | 973 | # |
974 | # CONFIG_CRYPTO_FIPS is not set | ||
955 | CONFIG_CRYPTO_ALGAPI=y | 975 | CONFIG_CRYPTO_ALGAPI=y |
956 | CONFIG_CRYPTO_AEAD=m | 976 | CONFIG_CRYPTO_AEAD=y |
957 | CONFIG_CRYPTO_BLKCIPHER=y | 977 | CONFIG_CRYPTO_BLKCIPHER=y |
958 | CONFIG_CRYPTO_HASH=y | 978 | CONFIG_CRYPTO_HASH=y |
979 | CONFIG_CRYPTO_RNG=y | ||
959 | CONFIG_CRYPTO_MANAGER=y | 980 | CONFIG_CRYPTO_MANAGER=y |
960 | CONFIG_CRYPTO_GF128MUL=m | 981 | CONFIG_CRYPTO_GF128MUL=m |
961 | CONFIG_CRYPTO_NULL=m | 982 | CONFIG_CRYPTO_NULL=m |
@@ -1029,14 +1050,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1029 | # | 1050 | # |
1030 | CONFIG_CRYPTO_DEFLATE=m | 1051 | CONFIG_CRYPTO_DEFLATE=m |
1031 | CONFIG_CRYPTO_LZO=m | 1052 | CONFIG_CRYPTO_LZO=m |
1053 | |||
1054 | # | ||
1055 | # Random Number Generation | ||
1056 | # | ||
1057 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1032 | # CONFIG_CRYPTO_HW is not set | 1058 | # CONFIG_CRYPTO_HW is not set |
1033 | 1059 | ||
1034 | # | 1060 | # |
1035 | # Library routines | 1061 | # Library routines |
1036 | # | 1062 | # |
1037 | CONFIG_BITREVERSE=y | 1063 | CONFIG_BITREVERSE=y |
1038 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1039 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1040 | CONFIG_CRC_CCITT=m | 1064 | CONFIG_CRC_CCITT=m |
1041 | CONFIG_CRC16=m | 1065 | CONFIG_CRC16=m |
1042 | CONFIG_CRC_T10DIF=y | 1066 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/m68k/configs/sun3x_defconfig b/arch/m68k/configs/sun3x_defconfig index 04b4363a7050..4d8a1e84e39f 100644 --- a/arch/m68k/configs/sun3x_defconfig +++ b/arch/m68k/configs/sun3x_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.27-rc6 | 3 | # Linux kernel version: 2.6.28-rc7 |
4 | # Wed Sep 10 09:02:12 2008 | 4 | # Tue Dec 2 20:27:54 2008 |
5 | # | 5 | # |
6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -14,7 +14,6 @@ CONFIG_TIME_LOW_RES=y | |||
14 | CONFIG_GENERIC_IOMAP=y | 14 | CONFIG_GENERIC_IOMAP=y |
15 | CONFIG_NO_IOPORT=y | 15 | CONFIG_NO_IOPORT=y |
16 | # CONFIG_NO_DMA is not set | 16 | # CONFIG_NO_DMA is not set |
17 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
18 | CONFIG_HZ=100 | 17 | CONFIG_HZ=100 |
19 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 18 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
20 | 19 | ||
@@ -67,22 +66,13 @@ CONFIG_SIGNALFD=y | |||
67 | CONFIG_TIMERFD=y | 66 | CONFIG_TIMERFD=y |
68 | CONFIG_EVENTFD=y | 67 | CONFIG_EVENTFD=y |
69 | CONFIG_SHMEM=y | 68 | CONFIG_SHMEM=y |
69 | CONFIG_AIO=y | ||
70 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
71 | CONFIG_SLAB=y | 71 | CONFIG_SLAB=y |
72 | # CONFIG_SLUB is not set | 72 | # CONFIG_SLUB is not set |
73 | # CONFIG_SLOB is not set | 73 | # CONFIG_SLOB is not set |
74 | # CONFIG_PROFILING is not set | 74 | # CONFIG_PROFILING is not set |
75 | # CONFIG_MARKERS is not set | 75 | # CONFIG_MARKERS is not set |
76 | # CONFIG_HAVE_OPROFILE is not set | ||
77 | # CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set | ||
78 | # CONFIG_HAVE_IOREMAP_PROT is not set | ||
79 | # CONFIG_HAVE_KPROBES is not set | ||
80 | # CONFIG_HAVE_KRETPROBES is not set | ||
81 | # CONFIG_HAVE_ARCH_TRACEHOOK is not set | ||
82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
83 | # CONFIG_USE_GENERIC_SMP_HELPERS is not set | ||
84 | # CONFIG_HAVE_CLK is not set | ||
85 | CONFIG_PROC_PAGE_MONITOR=y | ||
86 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 76 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
87 | CONFIG_SLABINFO=y | 77 | CONFIG_SLABINFO=y |
88 | CONFIG_RT_MUTEXES=y | 78 | CONFIG_RT_MUTEXES=y |
@@ -115,11 +105,11 @@ CONFIG_DEFAULT_AS=y | |||
115 | # CONFIG_DEFAULT_NOOP is not set | 105 | # CONFIG_DEFAULT_NOOP is not set |
116 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
117 | CONFIG_CLASSIC_RCU=y | 107 | CONFIG_CLASSIC_RCU=y |
108 | # CONFIG_FREEZER is not set | ||
118 | 109 | ||
119 | # | 110 | # |
120 | # Platform dependent setup | 111 | # Platform dependent setup |
121 | # | 112 | # |
122 | # CONFIG_SUN3 is not set | ||
123 | # CONFIG_AMIGA is not set | 113 | # CONFIG_AMIGA is not set |
124 | # CONFIG_ATARI is not set | 114 | # CONFIG_ATARI is not set |
125 | # CONFIG_MAC is not set | 115 | # CONFIG_MAC is not set |
@@ -148,19 +138,21 @@ CONFIG_DISCONTIGMEM_MANUAL=y | |||
148 | CONFIG_DISCONTIGMEM=y | 138 | CONFIG_DISCONTIGMEM=y |
149 | CONFIG_FLAT_NODE_MEM_MAP=y | 139 | CONFIG_FLAT_NODE_MEM_MAP=y |
150 | CONFIG_NEED_MULTIPLE_NODES=y | 140 | CONFIG_NEED_MULTIPLE_NODES=y |
151 | # CONFIG_SPARSEMEM_STATIC is not set | ||
152 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
153 | CONFIG_PAGEFLAGS_EXTENDED=y | 141 | CONFIG_PAGEFLAGS_EXTENDED=y |
154 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 142 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
155 | # CONFIG_RESOURCES_64BIT is not set | 143 | # CONFIG_RESOURCES_64BIT is not set |
144 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
156 | CONFIG_ZONE_DMA_FLAG=1 | 145 | CONFIG_ZONE_DMA_FLAG=1 |
157 | CONFIG_BOUNCE=y | 146 | CONFIG_BOUNCE=y |
158 | CONFIG_VIRT_TO_BUS=y | 147 | CONFIG_VIRT_TO_BUS=y |
148 | CONFIG_UNEVICTABLE_LRU=y | ||
159 | 149 | ||
160 | # | 150 | # |
161 | # General setup | 151 | # General setup |
162 | # | 152 | # |
163 | CONFIG_BINFMT_ELF=y | 153 | CONFIG_BINFMT_ELF=y |
154 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
155 | CONFIG_HAVE_AOUT=y | ||
164 | CONFIG_BINFMT_AOUT=m | 156 | CONFIG_BINFMT_AOUT=m |
165 | CONFIG_BINFMT_MISC=m | 157 | CONFIG_BINFMT_MISC=m |
166 | CONFIG_PROC_HARDWARE=y | 158 | CONFIG_PROC_HARDWARE=y |
@@ -209,7 +201,6 @@ CONFIG_INET_TCP_DIAG=m | |||
209 | CONFIG_TCP_CONG_CUBIC=y | 201 | CONFIG_TCP_CONG_CUBIC=y |
210 | CONFIG_DEFAULT_TCP_CONG="cubic" | 202 | CONFIG_DEFAULT_TCP_CONG="cubic" |
211 | # CONFIG_TCP_MD5SIG is not set | 203 | # CONFIG_TCP_MD5SIG is not set |
212 | # CONFIG_IP_VS is not set | ||
213 | CONFIG_IPV6=m | 204 | CONFIG_IPV6=m |
214 | CONFIG_IPV6_PRIVACY=y | 205 | CONFIG_IPV6_PRIVACY=y |
215 | CONFIG_IPV6_ROUTER_PREF=y | 206 | CONFIG_IPV6_ROUTER_PREF=y |
@@ -259,13 +250,14 @@ CONFIG_NF_CONNTRACK_SANE=m | |||
259 | CONFIG_NF_CONNTRACK_SIP=m | 250 | CONFIG_NF_CONNTRACK_SIP=m |
260 | CONFIG_NF_CONNTRACK_TFTP=m | 251 | CONFIG_NF_CONNTRACK_TFTP=m |
261 | # CONFIG_NF_CT_NETLINK is not set | 252 | # CONFIG_NF_CT_NETLINK is not set |
253 | # CONFIG_NETFILTER_TPROXY is not set | ||
262 | CONFIG_NETFILTER_XTABLES=m | 254 | CONFIG_NETFILTER_XTABLES=m |
263 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 255 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
264 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | 256 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m |
265 | CONFIG_NETFILTER_XT_TARGET_DSCP=m | 257 | CONFIG_NETFILTER_XT_TARGET_DSCP=m |
266 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 258 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
267 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
268 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 259 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
260 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
269 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m | 261 | CONFIG_NETFILTER_XT_TARGET_NOTRACK=m |
270 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m | 262 | CONFIG_NETFILTER_XT_TARGET_RATEEST=m |
271 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 263 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
@@ -279,19 +271,22 @@ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | |||
279 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | 271 | CONFIG_NETFILTER_XT_MATCH_DCCP=m |
280 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | 272 | CONFIG_NETFILTER_XT_MATCH_DSCP=m |
281 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 273 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
274 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
282 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 275 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
283 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 276 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
284 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 277 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
285 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 278 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
286 | CONFIG_NETFILTER_XT_MATCH_MAC=m | 279 | CONFIG_NETFILTER_XT_MATCH_MAC=m |
287 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 280 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
281 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
288 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | 282 | CONFIG_NETFILTER_XT_MATCH_OWNER=m |
289 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 283 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
290 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
291 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | 284 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m |
292 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | 285 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m |
293 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | 286 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m |
294 | CONFIG_NETFILTER_XT_MATCH_REALM=m | 287 | CONFIG_NETFILTER_XT_MATCH_REALM=m |
288 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
289 | # CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set | ||
295 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | 290 | CONFIG_NETFILTER_XT_MATCH_SCTP=m |
296 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 291 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
297 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | 292 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m |
@@ -299,20 +294,20 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m | |||
299 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | 294 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m |
300 | CONFIG_NETFILTER_XT_MATCH_TIME=m | 295 | CONFIG_NETFILTER_XT_MATCH_TIME=m |
301 | CONFIG_NETFILTER_XT_MATCH_U32=m | 296 | CONFIG_NETFILTER_XT_MATCH_U32=m |
302 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | 297 | # CONFIG_IP_VS is not set |
303 | 298 | ||
304 | # | 299 | # |
305 | # IP: Netfilter Configuration | 300 | # IP: Netfilter Configuration |
306 | # | 301 | # |
302 | CONFIG_NF_DEFRAG_IPV4=m | ||
307 | CONFIG_NF_CONNTRACK_IPV4=m | 303 | CONFIG_NF_CONNTRACK_IPV4=m |
308 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 304 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
309 | CONFIG_IP_NF_QUEUE=m | 305 | CONFIG_IP_NF_QUEUE=m |
310 | CONFIG_IP_NF_IPTABLES=m | 306 | CONFIG_IP_NF_IPTABLES=m |
311 | CONFIG_IP_NF_MATCH_RECENT=m | 307 | CONFIG_IP_NF_MATCH_ADDRTYPE=m |
312 | CONFIG_IP_NF_MATCH_ECN=m | ||
313 | CONFIG_IP_NF_MATCH_AH=m | 308 | CONFIG_IP_NF_MATCH_AH=m |
309 | CONFIG_IP_NF_MATCH_ECN=m | ||
314 | CONFIG_IP_NF_MATCH_TTL=m | 310 | CONFIG_IP_NF_MATCH_TTL=m |
315 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
316 | CONFIG_IP_NF_FILTER=m | 311 | CONFIG_IP_NF_FILTER=m |
317 | CONFIG_IP_NF_TARGET_REJECT=m | 312 | CONFIG_IP_NF_TARGET_REJECT=m |
318 | CONFIG_IP_NF_TARGET_LOG=m | 313 | CONFIG_IP_NF_TARGET_LOG=m |
@@ -320,8 +315,8 @@ CONFIG_IP_NF_TARGET_ULOG=m | |||
320 | CONFIG_NF_NAT=m | 315 | CONFIG_NF_NAT=m |
321 | CONFIG_NF_NAT_NEEDED=y | 316 | CONFIG_NF_NAT_NEEDED=y |
322 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 317 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
323 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
324 | CONFIG_IP_NF_TARGET_NETMAP=m | 318 | CONFIG_IP_NF_TARGET_NETMAP=m |
319 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
325 | CONFIG_NF_NAT_SNMP_BASIC=m | 320 | CONFIG_NF_NAT_SNMP_BASIC=m |
326 | CONFIG_NF_NAT_PROTO_GRE=m | 321 | CONFIG_NF_NAT_PROTO_GRE=m |
327 | CONFIG_NF_NAT_PROTO_UDPLITE=m | 322 | CONFIG_NF_NAT_PROTO_UDPLITE=m |
@@ -334,9 +329,9 @@ CONFIG_NF_NAT_PPTP=m | |||
334 | CONFIG_NF_NAT_H323=m | 329 | CONFIG_NF_NAT_H323=m |
335 | CONFIG_NF_NAT_SIP=m | 330 | CONFIG_NF_NAT_SIP=m |
336 | CONFIG_IP_NF_MANGLE=m | 331 | CONFIG_IP_NF_MANGLE=m |
332 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
337 | CONFIG_IP_NF_TARGET_ECN=m | 333 | CONFIG_IP_NF_TARGET_ECN=m |
338 | CONFIG_IP_NF_TARGET_TTL=m | 334 | CONFIG_IP_NF_TARGET_TTL=m |
339 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
340 | CONFIG_IP_NF_RAW=m | 335 | CONFIG_IP_NF_RAW=m |
341 | CONFIG_IP_NF_ARPTABLES=m | 336 | CONFIG_IP_NF_ARPTABLES=m |
342 | CONFIG_IP_NF_ARPFILTER=m | 337 | CONFIG_IP_NF_ARPFILTER=m |
@@ -348,16 +343,16 @@ CONFIG_IP_NF_ARP_MANGLE=m | |||
348 | CONFIG_NF_CONNTRACK_IPV6=m | 343 | CONFIG_NF_CONNTRACK_IPV6=m |
349 | CONFIG_IP6_NF_QUEUE=m | 344 | CONFIG_IP6_NF_QUEUE=m |
350 | CONFIG_IP6_NF_IPTABLES=m | 345 | CONFIG_IP6_NF_IPTABLES=m |
351 | CONFIG_IP6_NF_MATCH_RT=m | 346 | CONFIG_IP6_NF_MATCH_AH=m |
352 | CONFIG_IP6_NF_MATCH_OPTS=m | 347 | CONFIG_IP6_NF_MATCH_EUI64=m |
353 | CONFIG_IP6_NF_MATCH_FRAG=m | 348 | CONFIG_IP6_NF_MATCH_FRAG=m |
349 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
354 | CONFIG_IP6_NF_MATCH_HL=m | 350 | CONFIG_IP6_NF_MATCH_HL=m |
355 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 351 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
356 | CONFIG_IP6_NF_MATCH_AH=m | ||
357 | CONFIG_IP6_NF_MATCH_MH=m | 352 | CONFIG_IP6_NF_MATCH_MH=m |
358 | CONFIG_IP6_NF_MATCH_EUI64=m | 353 | CONFIG_IP6_NF_MATCH_RT=m |
359 | CONFIG_IP6_NF_FILTER=m | ||
360 | CONFIG_IP6_NF_TARGET_LOG=m | 354 | CONFIG_IP6_NF_TARGET_LOG=m |
355 | CONFIG_IP6_NF_FILTER=m | ||
361 | CONFIG_IP6_NF_TARGET_REJECT=m | 356 | CONFIG_IP6_NF_TARGET_REJECT=m |
362 | CONFIG_IP6_NF_MANGLE=m | 357 | CONFIG_IP6_NF_MANGLE=m |
363 | CONFIG_IP6_NF_TARGET_HL=m | 358 | CONFIG_IP6_NF_TARGET_HL=m |
@@ -384,6 +379,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
384 | # CONFIG_TIPC is not set | 379 | # CONFIG_TIPC is not set |
385 | # CONFIG_ATM is not set | 380 | # CONFIG_ATM is not set |
386 | # CONFIG_BRIDGE is not set | 381 | # CONFIG_BRIDGE is not set |
382 | # CONFIG_NET_DSA is not set | ||
387 | # CONFIG_VLAN_8021Q is not set | 383 | # CONFIG_VLAN_8021Q is not set |
388 | # CONFIG_DECNET is not set | 384 | # CONFIG_DECNET is not set |
389 | CONFIG_LLC=m | 385 | CONFIG_LLC=m |
@@ -407,19 +403,8 @@ CONFIG_NET_CLS_ROUTE=y | |||
407 | # CONFIG_IRDA is not set | 403 | # CONFIG_IRDA is not set |
408 | # CONFIG_BT is not set | 404 | # CONFIG_BT is not set |
409 | # CONFIG_AF_RXRPC is not set | 405 | # CONFIG_AF_RXRPC is not set |
410 | 406 | # CONFIG_PHONET is not set | |
411 | # | 407 | # CONFIG_WIRELESS is not set |
412 | # Wireless | ||
413 | # | ||
414 | # CONFIG_CFG80211 is not set | ||
415 | CONFIG_WIRELESS_EXT=y | ||
416 | # CONFIG_WIRELESS_EXT_SYSFS is not set | ||
417 | # CONFIG_MAC80211 is not set | ||
418 | CONFIG_IEEE80211=m | ||
419 | # CONFIG_IEEE80211_DEBUG is not set | ||
420 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
421 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
422 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
423 | # CONFIG_RFKILL is not set | 408 | # CONFIG_RFKILL is not set |
424 | # CONFIG_NET_9P is not set | 409 | # CONFIG_NET_9P is not set |
425 | 410 | ||
@@ -457,6 +442,7 @@ CONFIG_ATA_OVER_ETH=m | |||
457 | CONFIG_MISC_DEVICES=y | 442 | CONFIG_MISC_DEVICES=y |
458 | # CONFIG_EEPROM_93CX6 is not set | 443 | # CONFIG_EEPROM_93CX6 is not set |
459 | # CONFIG_ENCLOSURE_SERVICES is not set | 444 | # CONFIG_ENCLOSURE_SERVICES is not set |
445 | # CONFIG_C2PORT is not set | ||
460 | CONFIG_HAVE_IDE=y | 446 | CONFIG_HAVE_IDE=y |
461 | # CONFIG_IDE is not set | 447 | # CONFIG_IDE is not set |
462 | 448 | ||
@@ -541,6 +527,9 @@ CONFIG_SUN3LANCE=y | |||
541 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 527 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
542 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 528 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
543 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | 529 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set |
530 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
531 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
532 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
544 | # CONFIG_B44 is not set | 533 | # CONFIG_B44 is not set |
545 | # CONFIG_NETDEV_1000 is not set | 534 | # CONFIG_NETDEV_1000 is not set |
546 | # CONFIG_NETDEV_10000 is not set | 535 | # CONFIG_NETDEV_10000 is not set |
@@ -610,6 +599,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y | |||
610 | CONFIG_MOUSE_PS2_SYNAPTICS=y | 599 | CONFIG_MOUSE_PS2_SYNAPTICS=y |
611 | CONFIG_MOUSE_PS2_LIFEBOOK=y | 600 | CONFIG_MOUSE_PS2_LIFEBOOK=y |
612 | CONFIG_MOUSE_PS2_TRACKPOINT=y | 601 | CONFIG_MOUSE_PS2_TRACKPOINT=y |
602 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
613 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | 603 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set |
614 | CONFIG_MOUSE_SERIAL=m | 604 | CONFIG_MOUSE_SERIAL=m |
615 | # CONFIG_MOUSE_VSXXXAA is not set | 605 | # CONFIG_MOUSE_VSXXXAA is not set |
@@ -664,11 +654,11 @@ CONFIG_GEN_RTC_X=y | |||
664 | # CONFIG_THERMAL is not set | 654 | # CONFIG_THERMAL is not set |
665 | # CONFIG_THERMAL_HWMON is not set | 655 | # CONFIG_THERMAL_HWMON is not set |
666 | # CONFIG_WATCHDOG is not set | 656 | # CONFIG_WATCHDOG is not set |
657 | CONFIG_SSB_POSSIBLE=y | ||
667 | 658 | ||
668 | # | 659 | # |
669 | # Sonics Silicon Backplane | 660 | # Sonics Silicon Backplane |
670 | # | 661 | # |
671 | CONFIG_SSB_POSSIBLE=y | ||
672 | # CONFIG_SSB is not set | 662 | # CONFIG_SSB is not set |
673 | 663 | ||
674 | # | 664 | # |
@@ -678,6 +668,7 @@ CONFIG_SSB_POSSIBLE=y | |||
678 | # CONFIG_MFD_SM501 is not set | 668 | # CONFIG_MFD_SM501 is not set |
679 | # CONFIG_HTC_PASIC3 is not set | 669 | # CONFIG_HTC_PASIC3 is not set |
680 | # CONFIG_MFD_TMIO is not set | 670 | # CONFIG_MFD_TMIO is not set |
671 | # CONFIG_REGULATOR is not set | ||
681 | 672 | ||
682 | # | 673 | # |
683 | # Multimedia devices | 674 | # Multimedia devices |
@@ -703,6 +694,7 @@ CONFIG_SSB_POSSIBLE=y | |||
703 | CONFIG_FB=y | 694 | CONFIG_FB=y |
704 | # CONFIG_FIRMWARE_EDID is not set | 695 | # CONFIG_FIRMWARE_EDID is not set |
705 | # CONFIG_FB_DDC is not set | 696 | # CONFIG_FB_DDC is not set |
697 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
706 | # CONFIG_FB_CFB_FILLRECT is not set | 698 | # CONFIG_FB_CFB_FILLRECT is not set |
707 | # CONFIG_FB_CFB_COPYAREA is not set | 699 | # CONFIG_FB_CFB_COPYAREA is not set |
708 | # CONFIG_FB_CFB_IMAGEBLIT is not set | 700 | # CONFIG_FB_CFB_IMAGEBLIT is not set |
@@ -724,6 +716,8 @@ CONFIG_FB=y | |||
724 | # CONFIG_FB_UVESA is not set | 716 | # CONFIG_FB_UVESA is not set |
725 | # CONFIG_FB_S1D13XXX is not set | 717 | # CONFIG_FB_S1D13XXX is not set |
726 | # CONFIG_FB_VIRTUAL is not set | 718 | # CONFIG_FB_VIRTUAL is not set |
719 | # CONFIG_FB_METRONOME is not set | ||
720 | # CONFIG_FB_MB862XX is not set | ||
727 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 721 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
728 | 722 | ||
729 | # | 723 | # |
@@ -750,6 +744,12 @@ CONFIG_HID_SUPPORT=y | |||
750 | CONFIG_HID=m | 744 | CONFIG_HID=m |
751 | # CONFIG_HID_DEBUG is not set | 745 | # CONFIG_HID_DEBUG is not set |
752 | CONFIG_HIDRAW=y | 746 | CONFIG_HIDRAW=y |
747 | # CONFIG_HID_PID is not set | ||
748 | |||
749 | # | ||
750 | # Special HID drivers | ||
751 | # | ||
752 | CONFIG_HID_COMPAT=y | ||
753 | # CONFIG_USB_SUPPORT is not set | 753 | # CONFIG_USB_SUPPORT is not set |
754 | # CONFIG_MMC is not set | 754 | # CONFIG_MMC is not set |
755 | # CONFIG_MEMSTICK is not set | 755 | # CONFIG_MEMSTICK is not set |
@@ -758,6 +758,8 @@ CONFIG_HIDRAW=y | |||
758 | # CONFIG_RTC_CLASS is not set | 758 | # CONFIG_RTC_CLASS is not set |
759 | # CONFIG_DMADEVICES is not set | 759 | # CONFIG_DMADEVICES is not set |
760 | # CONFIG_UIO is not set | 760 | # CONFIG_UIO is not set |
761 | # CONFIG_STAGING is not set | ||
762 | CONFIG_STAGING_EXCLUDE_BUILD=y | ||
761 | 763 | ||
762 | # | 764 | # |
763 | # Character devices | 765 | # Character devices |
@@ -771,8 +773,9 @@ CONFIG_EXT2_FS=y | |||
771 | # CONFIG_EXT2_FS_XIP is not set | 773 | # CONFIG_EXT2_FS_XIP is not set |
772 | CONFIG_EXT3_FS=y | 774 | CONFIG_EXT3_FS=y |
773 | # CONFIG_EXT3_FS_XATTR is not set | 775 | # CONFIG_EXT3_FS_XATTR is not set |
774 | # CONFIG_EXT4DEV_FS is not set | 776 | # CONFIG_EXT4_FS is not set |
775 | CONFIG_JBD=y | 777 | CONFIG_JBD=y |
778 | CONFIG_JBD2=m | ||
776 | CONFIG_REISERFS_FS=m | 779 | CONFIG_REISERFS_FS=m |
777 | # CONFIG_REISERFS_CHECK is not set | 780 | # CONFIG_REISERFS_CHECK is not set |
778 | # CONFIG_REISERFS_PROC_INFO is not set | 781 | # CONFIG_REISERFS_PROC_INFO is not set |
@@ -783,6 +786,7 @@ CONFIG_JFS_FS=m | |||
783 | # CONFIG_JFS_DEBUG is not set | 786 | # CONFIG_JFS_DEBUG is not set |
784 | # CONFIG_JFS_STATISTICS is not set | 787 | # CONFIG_JFS_STATISTICS is not set |
785 | # CONFIG_FS_POSIX_ACL is not set | 788 | # CONFIG_FS_POSIX_ACL is not set |
789 | CONFIG_FILE_LOCKING=y | ||
786 | CONFIG_XFS_FS=m | 790 | CONFIG_XFS_FS=m |
787 | # CONFIG_XFS_QUOTA is not set | 791 | # CONFIG_XFS_QUOTA is not set |
788 | # CONFIG_XFS_POSIX_ACL is not set | 792 | # CONFIG_XFS_POSIX_ACL is not set |
@@ -794,6 +798,7 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | |||
794 | # CONFIG_OCFS2_FS_STATS is not set | 798 | # CONFIG_OCFS2_FS_STATS is not set |
795 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set | 799 | # CONFIG_OCFS2_DEBUG_MASKLOG is not set |
796 | # CONFIG_OCFS2_DEBUG_FS is not set | 800 | # CONFIG_OCFS2_DEBUG_FS is not set |
801 | # CONFIG_OCFS2_COMPAT_JBD is not set | ||
797 | CONFIG_DNOTIFY=y | 802 | CONFIG_DNOTIFY=y |
798 | CONFIG_INOTIFY=y | 803 | CONFIG_INOTIFY=y |
799 | CONFIG_INOTIFY_USER=y | 804 | CONFIG_INOTIFY_USER=y |
@@ -832,6 +837,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
832 | CONFIG_PROC_FS=y | 837 | CONFIG_PROC_FS=y |
833 | CONFIG_PROC_KCORE=y | 838 | CONFIG_PROC_KCORE=y |
834 | CONFIG_PROC_SYSCTL=y | 839 | CONFIG_PROC_SYSCTL=y |
840 | CONFIG_PROC_PAGE_MONITOR=y | ||
835 | CONFIG_SYSFS=y | 841 | CONFIG_SYSFS=y |
836 | CONFIG_TMPFS=y | 842 | CONFIG_TMPFS=y |
837 | # CONFIG_TMPFS_POSIX_ACL is not set | 843 | # CONFIG_TMPFS_POSIX_ACL is not set |
@@ -875,6 +881,7 @@ CONFIG_EXPORTFS=m | |||
875 | CONFIG_NFS_COMMON=y | 881 | CONFIG_NFS_COMMON=y |
876 | CONFIG_SUNRPC=y | 882 | CONFIG_SUNRPC=y |
877 | CONFIG_SUNRPC_GSS=y | 883 | CONFIG_SUNRPC_GSS=y |
884 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
878 | CONFIG_RPCSEC_GSS_KRB5=y | 885 | CONFIG_RPCSEC_GSS_KRB5=y |
879 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 886 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
880 | CONFIG_SMB_FS=m | 887 | CONFIG_SMB_FS=m |
@@ -948,7 +955,13 @@ CONFIG_MAGIC_SYSRQ=y | |||
948 | # CONFIG_DEBUG_KERNEL is not set | 955 | # CONFIG_DEBUG_KERNEL is not set |
949 | CONFIG_DEBUG_BUGVERBOSE=y | 956 | CONFIG_DEBUG_BUGVERBOSE=y |
950 | CONFIG_DEBUG_MEMORY_INIT=y | 957 | CONFIG_DEBUG_MEMORY_INIT=y |
958 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
951 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 959 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
960 | |||
961 | # | ||
962 | # Tracers | ||
963 | # | ||
964 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
952 | # CONFIG_SAMPLES is not set | 965 | # CONFIG_SAMPLES is not set |
953 | 966 | ||
954 | # | 967 | # |
@@ -956,6 +969,7 @@ CONFIG_SYSCTL_SYSCALL_CHECK=y | |||
956 | # | 969 | # |
957 | # CONFIG_KEYS is not set | 970 | # CONFIG_KEYS is not set |
958 | # CONFIG_SECURITY is not set | 971 | # CONFIG_SECURITY is not set |
972 | # CONFIG_SECURITYFS is not set | ||
959 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 973 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
960 | CONFIG_XOR_BLOCKS=m | 974 | CONFIG_XOR_BLOCKS=m |
961 | CONFIG_ASYNC_CORE=m | 975 | CONFIG_ASYNC_CORE=m |
@@ -966,10 +980,12 @@ CONFIG_CRYPTO=y | |||
966 | # | 980 | # |
967 | # Crypto core or helper | 981 | # Crypto core or helper |
968 | # | 982 | # |
983 | # CONFIG_CRYPTO_FIPS is not set | ||
969 | CONFIG_CRYPTO_ALGAPI=y | 984 | CONFIG_CRYPTO_ALGAPI=y |
970 | CONFIG_CRYPTO_AEAD=m | 985 | CONFIG_CRYPTO_AEAD=y |
971 | CONFIG_CRYPTO_BLKCIPHER=y | 986 | CONFIG_CRYPTO_BLKCIPHER=y |
972 | CONFIG_CRYPTO_HASH=y | 987 | CONFIG_CRYPTO_HASH=y |
988 | CONFIG_CRYPTO_RNG=y | ||
973 | CONFIG_CRYPTO_MANAGER=y | 989 | CONFIG_CRYPTO_MANAGER=y |
974 | CONFIG_CRYPTO_GF128MUL=m | 990 | CONFIG_CRYPTO_GF128MUL=m |
975 | CONFIG_CRYPTO_NULL=m | 991 | CONFIG_CRYPTO_NULL=m |
@@ -1043,14 +1059,17 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
1043 | # | 1059 | # |
1044 | CONFIG_CRYPTO_DEFLATE=m | 1060 | CONFIG_CRYPTO_DEFLATE=m |
1045 | CONFIG_CRYPTO_LZO=m | 1061 | CONFIG_CRYPTO_LZO=m |
1062 | |||
1063 | # | ||
1064 | # Random Number Generation | ||
1065 | # | ||
1066 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1046 | # CONFIG_CRYPTO_HW is not set | 1067 | # CONFIG_CRYPTO_HW is not set |
1047 | 1068 | ||
1048 | # | 1069 | # |
1049 | # Library routines | 1070 | # Library routines |
1050 | # | 1071 | # |
1051 | CONFIG_BITREVERSE=y | 1072 | CONFIG_BITREVERSE=y |
1052 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1053 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1054 | CONFIG_CRC_CCITT=m | 1073 | CONFIG_CRC_CCITT=m |
1055 | CONFIG_CRC16=m | 1074 | CONFIG_CRC16=m |
1056 | CONFIG_CRC_T10DIF=y | 1075 | CONFIG_CRC_T10DIF=y |
diff --git a/arch/mn10300/kernel/module.c b/arch/mn10300/kernel/module.c index 8fa36893df7a..6b287f2e8e84 100644 --- a/arch/mn10300/kernel/module.c +++ b/arch/mn10300/kernel/module.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* MN10300 Kernel module helper routines | 1 | /* MN10300 Kernel module helper routines |
2 | * | 2 | * |
3 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | 3 | * Copyright (C) 2007, 2008 Red Hat, Inc. All Rights Reserved. |
4 | * Written by Mark Salter (msalter@redhat.com) | 4 | * Written by Mark Salter (msalter@redhat.com) |
5 | * - Derived from arch/i386/kernel/module.c | 5 | * - Derived from arch/i386/kernel/module.c |
6 | * | 6 | * |
@@ -64,21 +64,6 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, | |||
64 | return 0; | 64 | return 0; |
65 | } | 65 | } |
66 | 66 | ||
67 | static uint32_t reloc_get16(uint8_t *p) | ||
68 | { | ||
69 | return p[0] | (p[1] << 8); | ||
70 | } | ||
71 | |||
72 | static uint32_t reloc_get24(uint8_t *p) | ||
73 | { | ||
74 | return reloc_get16(p) | (p[2] << 16); | ||
75 | } | ||
76 | |||
77 | static uint32_t reloc_get32(uint8_t *p) | ||
78 | { | ||
79 | return reloc_get16(p) | (reloc_get16(p+2) << 16); | ||
80 | } | ||
81 | |||
82 | static void reloc_put16(uint8_t *p, uint32_t val) | 67 | static void reloc_put16(uint8_t *p, uint32_t val) |
83 | { | 68 | { |
84 | p[0] = val & 0xff; | 69 | p[0] = val & 0xff; |
@@ -144,25 +129,19 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
144 | relocation = sym->st_value + rel[i].r_addend; | 129 | relocation = sym->st_value + rel[i].r_addend; |
145 | 130 | ||
146 | switch (ELF32_R_TYPE(rel[i].r_info)) { | 131 | switch (ELF32_R_TYPE(rel[i].r_info)) { |
147 | /* for the first four relocation types, we add the | 132 | /* for the first four relocation types, we simply |
148 | * adjustment into the value at the location given */ | 133 | * store the adjustment at the location given */ |
149 | case R_MN10300_32: | 134 | case R_MN10300_32: |
150 | value = reloc_get32(location); | 135 | reloc_put32(location, relocation); |
151 | value += relocation; | ||
152 | reloc_put32(location, value); | ||
153 | break; | 136 | break; |
154 | case R_MN10300_24: | 137 | case R_MN10300_24: |
155 | value = reloc_get24(location); | 138 | reloc_put24(location, relocation); |
156 | value += relocation; | ||
157 | reloc_put24(location, value); | ||
158 | break; | 139 | break; |
159 | case R_MN10300_16: | 140 | case R_MN10300_16: |
160 | value = reloc_get16(location); | 141 | reloc_put16(location, relocation); |
161 | value += relocation; | ||
162 | reloc_put16(location, value); | ||
163 | break; | 142 | break; |
164 | case R_MN10300_8: | 143 | case R_MN10300_8: |
165 | *location += relocation; | 144 | *location = relocation; |
166 | break; | 145 | break; |
167 | 146 | ||
168 | /* for the next three relocation types, we write the | 147 | /* for the next three relocation types, we write the |
diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts index 2c9d54a35bc3..4bdbaf4993a1 100644 --- a/arch/powerpc/boot/dts/mpc8349emitx.dts +++ b/arch/powerpc/boot/dts/mpc8349emitx.dts | |||
@@ -91,6 +91,14 @@ | |||
91 | interrupts = <18 0x8>; | 91 | interrupts = <18 0x8>; |
92 | interrupt-parent = <&ipic>; | 92 | interrupt-parent = <&ipic>; |
93 | }; | 93 | }; |
94 | |||
95 | mcu_pio: mcu@a { | ||
96 | #gpio-cells = <2>; | ||
97 | compatible = "fsl,mc9s08qg8-mpc8349emitx", | ||
98 | "fsl,mcu-mpc8349emitx"; | ||
99 | reg = <0x0a>; | ||
100 | gpio-controller; | ||
101 | }; | ||
94 | }; | 102 | }; |
95 | 103 | ||
96 | spi@7000 { | 104 | spi@7000 { |
@@ -139,14 +147,6 @@ | |||
139 | interrupt-parent = <&ipic>; | 147 | interrupt-parent = <&ipic>; |
140 | interrupts = <71 8>; | 148 | interrupts = <71 8>; |
141 | }; | 149 | }; |
142 | |||
143 | mcu_pio: mcu@a { | ||
144 | #gpio-cells = <2>; | ||
145 | compatible = "fsl,mc9s08qg8-mpc8349emitx", | ||
146 | "fsl,mcu-mpc8349emitx"; | ||
147 | reg = <0x0a>; | ||
148 | gpio-controller; | ||
149 | }; | ||
150 | }; | 150 | }; |
151 | 151 | ||
152 | usb@22000 { | 152 | usb@22000 { |
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h index 8931ba729d2b..bb62ad876de3 100644 --- a/arch/powerpc/include/asm/kvm_ppc.h +++ b/arch/powerpc/include/asm/kvm_ppc.h | |||
@@ -104,4 +104,6 @@ static inline void kvmppc_set_pid(struct kvm_vcpu *vcpu, u32 new_pid) | |||
104 | } | 104 | } |
105 | } | 105 | } |
106 | 106 | ||
107 | extern void kvmppc_core_destroy_mmu(struct kvm_vcpu *vcpu); | ||
108 | |||
107 | #endif /* __POWERPC_KVM_PPC_H__ */ | 109 | #endif /* __POWERPC_KVM_PPC_H__ */ |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 92673b43858d..d17edb4a2f9d 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
@@ -17,6 +17,7 @@ ifdef CONFIG_FUNCTION_TRACER | |||
17 | CFLAGS_REMOVE_cputable.o = -pg -mno-sched-epilog | 17 | CFLAGS_REMOVE_cputable.o = -pg -mno-sched-epilog |
18 | CFLAGS_REMOVE_prom_init.o = -pg -mno-sched-epilog | 18 | CFLAGS_REMOVE_prom_init.o = -pg -mno-sched-epilog |
19 | CFLAGS_REMOVE_btext.o = -pg -mno-sched-epilog | 19 | CFLAGS_REMOVE_btext.o = -pg -mno-sched-epilog |
20 | CFLAGS_REMOVE_prom.o = -pg -mno-sched-epilog | ||
20 | 21 | ||
21 | ifdef CONFIG_DYNAMIC_FTRACE | 22 | ifdef CONFIG_DYNAMIC_FTRACE |
22 | # dynamic ftrace setup. | 23 | # dynamic ftrace setup. |
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c index 1562daf8839a..3a6eaa876ee1 100644 --- a/arch/powerpc/kernel/dma.c +++ b/arch/powerpc/kernel/dma.c | |||
@@ -75,6 +75,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, | |||
75 | for_each_sg(sgl, sg, nents, i) { | 75 | for_each_sg(sgl, sg, nents, i) { |
76 | sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); | 76 | sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); |
77 | sg->dma_length = sg->length; | 77 | sg->dma_length = sg->length; |
78 | __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction); | ||
78 | } | 79 | } |
79 | 80 | ||
80 | return nents; | 81 | return nents; |
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 7ecc0d1855c3..6f7eb7e00c79 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S | |||
@@ -1162,39 +1162,17 @@ machine_check_in_rtas: | |||
1162 | #ifdef CONFIG_DYNAMIC_FTRACE | 1162 | #ifdef CONFIG_DYNAMIC_FTRACE |
1163 | _GLOBAL(mcount) | 1163 | _GLOBAL(mcount) |
1164 | _GLOBAL(_mcount) | 1164 | _GLOBAL(_mcount) |
1165 | stwu r1,-48(r1) | 1165 | /* |
1166 | stw r3, 12(r1) | 1166 | * It is required that _mcount on PPC32 must preserve the |
1167 | stw r4, 16(r1) | 1167 | * link register. But we have r0 to play with. We use r0 |
1168 | stw r5, 20(r1) | 1168 | * to push the return address back to the caller of mcount |
1169 | stw r6, 24(r1) | 1169 | * into the ctr register, restore the link register and |
1170 | mflr r3 | 1170 | * then jump back using the ctr register. |
1171 | stw r7, 28(r1) | 1171 | */ |
1172 | mfcr r5 | 1172 | mflr r0 |
1173 | stw r8, 32(r1) | ||
1174 | stw r9, 36(r1) | ||
1175 | stw r10,40(r1) | ||
1176 | stw r3, 44(r1) | ||
1177 | stw r5, 8(r1) | ||
1178 | subi r3, r3, MCOUNT_INSN_SIZE | ||
1179 | .globl mcount_call | ||
1180 | mcount_call: | ||
1181 | bl ftrace_stub | ||
1182 | nop | ||
1183 | lwz r6, 8(r1) | ||
1184 | lwz r0, 44(r1) | ||
1185 | lwz r3, 12(r1) | ||
1186 | mtctr r0 | 1173 | mtctr r0 |
1187 | lwz r4, 16(r1) | 1174 | lwz r0, 4(r1) |
1188 | mtcr r6 | ||
1189 | lwz r5, 20(r1) | ||
1190 | lwz r6, 24(r1) | ||
1191 | lwz r0, 52(r1) | ||
1192 | lwz r7, 28(r1) | ||
1193 | lwz r8, 32(r1) | ||
1194 | mtlr r0 | 1175 | mtlr r0 |
1195 | lwz r9, 36(r1) | ||
1196 | lwz r10,40(r1) | ||
1197 | addi r1, r1, 48 | ||
1198 | bctr | 1176 | bctr |
1199 | 1177 | ||
1200 | _GLOBAL(ftrace_caller) | 1178 | _GLOBAL(ftrace_caller) |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index e0bcf9354286..383ed6eb0085 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -894,18 +894,6 @@ _GLOBAL(enter_prom) | |||
894 | #ifdef CONFIG_DYNAMIC_FTRACE | 894 | #ifdef CONFIG_DYNAMIC_FTRACE |
895 | _GLOBAL(mcount) | 895 | _GLOBAL(mcount) |
896 | _GLOBAL(_mcount) | 896 | _GLOBAL(_mcount) |
897 | /* Taken from output of objdump from lib64/glibc */ | ||
898 | mflr r3 | ||
899 | stdu r1, -112(r1) | ||
900 | std r3, 128(r1) | ||
901 | subi r3, r3, MCOUNT_INSN_SIZE | ||
902 | .globl mcount_call | ||
903 | mcount_call: | ||
904 | bl ftrace_stub | ||
905 | nop | ||
906 | ld r0, 128(r1) | ||
907 | mtlr r0 | ||
908 | addi r1, r1, 112 | ||
909 | blr | 897 | blr |
910 | 898 | ||
911 | _GLOBAL(ftrace_caller) | 899 | _GLOBAL(ftrace_caller) |
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c index 3271cd698e4c..5355244c99ff 100644 --- a/arch/powerpc/kernel/ftrace.c +++ b/arch/powerpc/kernel/ftrace.c | |||
@@ -114,19 +114,9 @@ ftrace_modify_code(unsigned long ip, unsigned char *old_code, | |||
114 | */ | 114 | */ |
115 | static int test_24bit_addr(unsigned long ip, unsigned long addr) | 115 | static int test_24bit_addr(unsigned long ip, unsigned long addr) |
116 | { | 116 | { |
117 | long diff; | ||
118 | 117 | ||
119 | /* | 118 | /* use the create_branch to verify that this offset can be branched */ |
120 | * Can we get to addr from ip in 24 bits? | 119 | return create_branch((unsigned int *)ip, addr, 0); |
121 | * (26 really, since we mulitply by 4 for 4 byte alignment) | ||
122 | */ | ||
123 | diff = addr - ip; | ||
124 | |||
125 | /* | ||
126 | * Return true if diff is less than 1 << 25 | ||
127 | * and greater than -1 << 26. | ||
128 | */ | ||
129 | return (diff < (1 << 25)) && (diff > (-1 << 26)); | ||
130 | } | 120 | } |
131 | 121 | ||
132 | static int is_bl_op(unsigned int op) | 122 | static int is_bl_op(unsigned int op) |
@@ -134,11 +124,6 @@ static int is_bl_op(unsigned int op) | |||
134 | return (op & 0xfc000003) == 0x48000001; | 124 | return (op & 0xfc000003) == 0x48000001; |
135 | } | 125 | } |
136 | 126 | ||
137 | static int test_offset(unsigned long offset) | ||
138 | { | ||
139 | return (offset + 0x2000000 > 0x3ffffff) || ((offset & 3) != 0); | ||
140 | } | ||
141 | |||
142 | static unsigned long find_bl_target(unsigned long ip, unsigned int op) | 127 | static unsigned long find_bl_target(unsigned long ip, unsigned int op) |
143 | { | 128 | { |
144 | static int offset; | 129 | static int offset; |
@@ -151,37 +136,30 @@ static unsigned long find_bl_target(unsigned long ip, unsigned int op) | |||
151 | return ip + (long)offset; | 136 | return ip + (long)offset; |
152 | } | 137 | } |
153 | 138 | ||
154 | static unsigned int branch_offset(unsigned long offset) | ||
155 | { | ||
156 | /* return "bl ip+offset" */ | ||
157 | return 0x48000001 | (offset & 0x03fffffc); | ||
158 | } | ||
159 | |||
160 | #ifdef CONFIG_PPC64 | 139 | #ifdef CONFIG_PPC64 |
161 | static int | 140 | static int |
162 | __ftrace_make_nop(struct module *mod, | 141 | __ftrace_make_nop(struct module *mod, |
163 | struct dyn_ftrace *rec, unsigned long addr) | 142 | struct dyn_ftrace *rec, unsigned long addr) |
164 | { | 143 | { |
165 | unsigned char replaced[MCOUNT_INSN_SIZE * 2]; | 144 | unsigned int op; |
166 | unsigned int *op = (unsigned *)&replaced; | 145 | unsigned int jmp[5]; |
167 | unsigned char jmp[8]; | 146 | unsigned long ptr; |
168 | unsigned long *ptr = (unsigned long *)&jmp; | ||
169 | unsigned long ip = rec->ip; | 147 | unsigned long ip = rec->ip; |
170 | unsigned long tramp; | 148 | unsigned long tramp; |
171 | int offset; | 149 | int offset; |
172 | 150 | ||
173 | /* read where this goes */ | 151 | /* read where this goes */ |
174 | if (probe_kernel_read(replaced, (void *)ip, MCOUNT_INSN_SIZE)) | 152 | if (probe_kernel_read(&op, (void *)ip, sizeof(int))) |
175 | return -EFAULT; | 153 | return -EFAULT; |
176 | 154 | ||
177 | /* Make sure that that this is still a 24bit jump */ | 155 | /* Make sure that that this is still a 24bit jump */ |
178 | if (!is_bl_op(*op)) { | 156 | if (!is_bl_op(op)) { |
179 | printk(KERN_ERR "Not expected bl: opcode is %x\n", *op); | 157 | printk(KERN_ERR "Not expected bl: opcode is %x\n", op); |
180 | return -EINVAL; | 158 | return -EINVAL; |
181 | } | 159 | } |
182 | 160 | ||
183 | /* lets find where the pointer goes */ | 161 | /* lets find where the pointer goes */ |
184 | tramp = find_bl_target(ip, *op); | 162 | tramp = find_bl_target(ip, op); |
185 | 163 | ||
186 | /* | 164 | /* |
187 | * On PPC64 the trampoline looks like: | 165 | * On PPC64 the trampoline looks like: |
@@ -200,19 +178,25 @@ __ftrace_make_nop(struct module *mod, | |||
200 | DEBUGP("ip:%lx jumps to %lx r2: %lx", ip, tramp, mod->arch.toc); | 178 | DEBUGP("ip:%lx jumps to %lx r2: %lx", ip, tramp, mod->arch.toc); |
201 | 179 | ||
202 | /* Find where the trampoline jumps to */ | 180 | /* Find where the trampoline jumps to */ |
203 | if (probe_kernel_read(jmp, (void *)tramp, 8)) { | 181 | if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) { |
204 | printk(KERN_ERR "Failed to read %lx\n", tramp); | 182 | printk(KERN_ERR "Failed to read %lx\n", tramp); |
205 | return -EFAULT; | 183 | return -EFAULT; |
206 | } | 184 | } |
207 | 185 | ||
208 | DEBUGP(" %08x %08x", | 186 | DEBUGP(" %08x %08x", jmp[0], jmp[1]); |
209 | (unsigned)(*ptr >> 32), | 187 | |
210 | (unsigned)*ptr); | 188 | /* verify that this is what we expect it to be */ |
189 | if (((jmp[0] & 0xffff0000) != 0x3d820000) || | ||
190 | ((jmp[1] & 0xffff0000) != 0x398c0000) || | ||
191 | (jmp[2] != 0xf8410028) || | ||
192 | (jmp[3] != 0xe96c0020) || | ||
193 | (jmp[4] != 0xe84c0028)) { | ||
194 | printk(KERN_ERR "Not a trampoline\n"); | ||
195 | return -EINVAL; | ||
196 | } | ||
211 | 197 | ||
212 | offset = (unsigned)jmp[2] << 24 | | 198 | offset = (unsigned)((unsigned short)jmp[0]) << 16 | |
213 | (unsigned)jmp[3] << 16 | | 199 | (unsigned)((unsigned short)jmp[1]); |
214 | (unsigned)jmp[6] << 8 | | ||
215 | (unsigned)jmp[7]; | ||
216 | 200 | ||
217 | DEBUGP(" %x ", offset); | 201 | DEBUGP(" %x ", offset); |
218 | 202 | ||
@@ -225,13 +209,13 @@ __ftrace_make_nop(struct module *mod, | |||
225 | return -EFAULT; | 209 | return -EFAULT; |
226 | } | 210 | } |
227 | 211 | ||
228 | DEBUGP(" %08x %08x\n", | 212 | DEBUGP(" %08x %08x\n", jmp[0], jmp[1]); |
229 | (unsigned)(*ptr >> 32), | 213 | |
230 | (unsigned)*ptr); | 214 | ptr = ((unsigned long)jmp[0] << 32) + jmp[1]; |
231 | 215 | ||
232 | /* This should match what was called */ | 216 | /* This should match what was called */ |
233 | if (*ptr != GET_ADDR(addr)) { | 217 | if (ptr != GET_ADDR(addr)) { |
234 | printk(KERN_ERR "addr does not match %lx\n", *ptr); | 218 | printk(KERN_ERR "addr does not match %lx\n", ptr); |
235 | return -EINVAL; | 219 | return -EINVAL; |
236 | } | 220 | } |
237 | 221 | ||
@@ -240,11 +224,11 @@ __ftrace_make_nop(struct module *mod, | |||
240 | * 0xe8, 0x41, 0x00, 0x28 ld r2,40(r1) | 224 | * 0xe8, 0x41, 0x00, 0x28 ld r2,40(r1) |
241 | * This needs to be turned to a nop too. | 225 | * This needs to be turned to a nop too. |
242 | */ | 226 | */ |
243 | if (probe_kernel_read(replaced, (void *)(ip+4), MCOUNT_INSN_SIZE)) | 227 | if (probe_kernel_read(&op, (void *)(ip+4), MCOUNT_INSN_SIZE)) |
244 | return -EFAULT; | 228 | return -EFAULT; |
245 | 229 | ||
246 | if (*op != 0xe8410028) { | 230 | if (op != 0xe8410028) { |
247 | printk(KERN_ERR "Next line is not ld! (%08x)\n", *op); | 231 | printk(KERN_ERR "Next line is not ld! (%08x)\n", op); |
248 | return -EINVAL; | 232 | return -EINVAL; |
249 | } | 233 | } |
250 | 234 | ||
@@ -261,11 +245,14 @@ __ftrace_make_nop(struct module *mod, | |||
261 | * ld r2,40(r1) | 245 | * ld r2,40(r1) |
262 | * 1: | 246 | * 1: |
263 | */ | 247 | */ |
264 | op[0] = 0x48000008; /* b +8 */ | 248 | op = 0x48000008; /* b +8 */ |
265 | 249 | ||
266 | if (probe_kernel_write((void *)ip, replaced, MCOUNT_INSN_SIZE)) | 250 | if (probe_kernel_write((void *)ip, &op, MCOUNT_INSN_SIZE)) |
267 | return -EPERM; | 251 | return -EPERM; |
268 | 252 | ||
253 | |||
254 | flush_icache_range(ip, ip + 8); | ||
255 | |||
269 | return 0; | 256 | return 0; |
270 | } | 257 | } |
271 | 258 | ||
@@ -274,46 +261,52 @@ static int | |||
274 | __ftrace_make_nop(struct module *mod, | 261 | __ftrace_make_nop(struct module *mod, |
275 | struct dyn_ftrace *rec, unsigned long addr) | 262 | struct dyn_ftrace *rec, unsigned long addr) |
276 | { | 263 | { |
277 | unsigned char replaced[MCOUNT_INSN_SIZE]; | 264 | unsigned int op; |
278 | unsigned int *op = (unsigned *)&replaced; | 265 | unsigned int jmp[4]; |
279 | unsigned char jmp[8]; | ||
280 | unsigned int *ptr = (unsigned int *)&jmp; | ||
281 | unsigned long ip = rec->ip; | 266 | unsigned long ip = rec->ip; |
282 | unsigned long tramp; | 267 | unsigned long tramp; |
283 | int offset; | ||
284 | 268 | ||
285 | if (probe_kernel_read(replaced, (void *)ip, MCOUNT_INSN_SIZE)) | 269 | if (probe_kernel_read(&op, (void *)ip, MCOUNT_INSN_SIZE)) |
286 | return -EFAULT; | 270 | return -EFAULT; |
287 | 271 | ||
288 | /* Make sure that that this is still a 24bit jump */ | 272 | /* Make sure that that this is still a 24bit jump */ |
289 | if (!is_bl_op(*op)) { | 273 | if (!is_bl_op(op)) { |
290 | printk(KERN_ERR "Not expected bl: opcode is %x\n", *op); | 274 | printk(KERN_ERR "Not expected bl: opcode is %x\n", op); |
291 | return -EINVAL; | 275 | return -EINVAL; |
292 | } | 276 | } |
293 | 277 | ||
294 | /* lets find where the pointer goes */ | 278 | /* lets find where the pointer goes */ |
295 | tramp = find_bl_target(ip, *op); | 279 | tramp = find_bl_target(ip, op); |
296 | 280 | ||
297 | /* | 281 | /* |
298 | * On PPC32 the trampoline looks like: | 282 | * On PPC32 the trampoline looks like: |
299 | * lis r11,sym@ha | 283 | * 0x3d, 0x60, 0x00, 0x00 lis r11,sym@ha |
300 | * addi r11,r11,sym@l | 284 | * 0x39, 0x6b, 0x00, 0x00 addi r11,r11,sym@l |
301 | * mtctr r11 | 285 | * 0x7d, 0x69, 0x03, 0xa6 mtctr r11 |
302 | * bctr | 286 | * 0x4e, 0x80, 0x04, 0x20 bctr |
303 | */ | 287 | */ |
304 | 288 | ||
305 | DEBUGP("ip:%lx jumps to %lx", ip, tramp); | 289 | DEBUGP("ip:%lx jumps to %lx", ip, tramp); |
306 | 290 | ||
307 | /* Find where the trampoline jumps to */ | 291 | /* Find where the trampoline jumps to */ |
308 | if (probe_kernel_read(jmp, (void *)tramp, 8)) { | 292 | if (probe_kernel_read(jmp, (void *)tramp, sizeof(jmp))) { |
309 | printk(KERN_ERR "Failed to read %lx\n", tramp); | 293 | printk(KERN_ERR "Failed to read %lx\n", tramp); |
310 | return -EFAULT; | 294 | return -EFAULT; |
311 | } | 295 | } |
312 | 296 | ||
313 | DEBUGP(" %08x %08x ", ptr[0], ptr[1]); | 297 | DEBUGP(" %08x %08x ", jmp[0], jmp[1]); |
298 | |||
299 | /* verify that this is what we expect it to be */ | ||
300 | if (((jmp[0] & 0xffff0000) != 0x3d600000) || | ||
301 | ((jmp[1] & 0xffff0000) != 0x396b0000) || | ||
302 | (jmp[2] != 0x7d6903a6) || | ||
303 | (jmp[3] != 0x4e800420)) { | ||
304 | printk(KERN_ERR "Not a trampoline\n"); | ||
305 | return -EINVAL; | ||
306 | } | ||
314 | 307 | ||
315 | tramp = (ptr[1] & 0xffff) | | 308 | tramp = (jmp[1] & 0xffff) | |
316 | ((ptr[0] & 0xffff) << 16); | 309 | ((jmp[0] & 0xffff) << 16); |
317 | if (tramp & 0x8000) | 310 | if (tramp & 0x8000) |
318 | tramp -= 0x10000; | 311 | tramp -= 0x10000; |
319 | 312 | ||
@@ -326,11 +319,13 @@ __ftrace_make_nop(struct module *mod, | |||
326 | return -EINVAL; | 319 | return -EINVAL; |
327 | } | 320 | } |
328 | 321 | ||
329 | op[0] = PPC_NOP_INSTR; | 322 | op = PPC_NOP_INSTR; |
330 | 323 | ||
331 | if (probe_kernel_write((void *)ip, replaced, MCOUNT_INSN_SIZE)) | 324 | if (probe_kernel_write((void *)ip, &op, MCOUNT_INSN_SIZE)) |
332 | return -EPERM; | 325 | return -EPERM; |
333 | 326 | ||
327 | flush_icache_range(ip, ip + 8); | ||
328 | |||
334 | return 0; | 329 | return 0; |
335 | } | 330 | } |
336 | #endif /* PPC64 */ | 331 | #endif /* PPC64 */ |
@@ -384,13 +379,11 @@ int ftrace_make_nop(struct module *mod, | |||
384 | static int | 379 | static int |
385 | __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | 380 | __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) |
386 | { | 381 | { |
387 | unsigned char replaced[MCOUNT_INSN_SIZE * 2]; | 382 | unsigned int op[2]; |
388 | unsigned int *op = (unsigned *)&replaced; | ||
389 | unsigned long ip = rec->ip; | 383 | unsigned long ip = rec->ip; |
390 | unsigned long offset; | ||
391 | 384 | ||
392 | /* read where this goes */ | 385 | /* read where this goes */ |
393 | if (probe_kernel_read(replaced, (void *)ip, MCOUNT_INSN_SIZE * 2)) | 386 | if (probe_kernel_read(op, (void *)ip, MCOUNT_INSN_SIZE * 2)) |
394 | return -EFAULT; | 387 | return -EFAULT; |
395 | 388 | ||
396 | /* | 389 | /* |
@@ -409,43 +402,40 @@ __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | |||
409 | return -EINVAL; | 402 | return -EINVAL; |
410 | } | 403 | } |
411 | 404 | ||
412 | /* now calculate a jump to the ftrace caller trampoline */ | 405 | /* create the branch to the trampoline */ |
413 | offset = rec->arch.mod->arch.tramp - ip; | 406 | op[0] = create_branch((unsigned int *)ip, |
414 | 407 | rec->arch.mod->arch.tramp, BRANCH_SET_LINK); | |
415 | if (test_offset(offset)) { | 408 | if (!op[0]) { |
416 | printk(KERN_ERR "REL24 %li out of range!\n", | 409 | printk(KERN_ERR "REL24 out of range!\n"); |
417 | (long int)offset); | ||
418 | return -EINVAL; | 410 | return -EINVAL; |
419 | } | 411 | } |
420 | 412 | ||
421 | /* Set to "bl addr" */ | ||
422 | op[0] = branch_offset(offset); | ||
423 | /* ld r2,40(r1) */ | 413 | /* ld r2,40(r1) */ |
424 | op[1] = 0xe8410028; | 414 | op[1] = 0xe8410028; |
425 | 415 | ||
426 | DEBUGP("write to %lx\n", rec->ip); | 416 | DEBUGP("write to %lx\n", rec->ip); |
427 | 417 | ||
428 | if (probe_kernel_write((void *)ip, replaced, MCOUNT_INSN_SIZE * 2)) | 418 | if (probe_kernel_write((void *)ip, op, MCOUNT_INSN_SIZE * 2)) |
429 | return -EPERM; | 419 | return -EPERM; |
430 | 420 | ||
421 | flush_icache_range(ip, ip + 8); | ||
422 | |||
431 | return 0; | 423 | return 0; |
432 | } | 424 | } |
433 | #else | 425 | #else |
434 | static int | 426 | static int |
435 | __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | 427 | __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) |
436 | { | 428 | { |
437 | unsigned char replaced[MCOUNT_INSN_SIZE]; | 429 | unsigned int op; |
438 | unsigned int *op = (unsigned *)&replaced; | ||
439 | unsigned long ip = rec->ip; | 430 | unsigned long ip = rec->ip; |
440 | unsigned long offset; | ||
441 | 431 | ||
442 | /* read where this goes */ | 432 | /* read where this goes */ |
443 | if (probe_kernel_read(replaced, (void *)ip, MCOUNT_INSN_SIZE)) | 433 | if (probe_kernel_read(&op, (void *)ip, MCOUNT_INSN_SIZE)) |
444 | return -EFAULT; | 434 | return -EFAULT; |
445 | 435 | ||
446 | /* It should be pointing to a nop */ | 436 | /* It should be pointing to a nop */ |
447 | if (op[0] != PPC_NOP_INSTR) { | 437 | if (op != PPC_NOP_INSTR) { |
448 | printk(KERN_ERR "Expected NOP but have %x\n", op[0]); | 438 | printk(KERN_ERR "Expected NOP but have %x\n", op); |
449 | return -EINVAL; | 439 | return -EINVAL; |
450 | } | 440 | } |
451 | 441 | ||
@@ -455,23 +445,21 @@ __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | |||
455 | return -EINVAL; | 445 | return -EINVAL; |
456 | } | 446 | } |
457 | 447 | ||
458 | /* now calculate a jump to the ftrace caller trampoline */ | 448 | /* create the branch to the trampoline */ |
459 | offset = rec->arch.mod->arch.tramp - ip; | 449 | op = create_branch((unsigned int *)ip, |
460 | 450 | rec->arch.mod->arch.tramp, BRANCH_SET_LINK); | |
461 | if (test_offset(offset)) { | 451 | if (!op) { |
462 | printk(KERN_ERR "REL24 %li out of range!\n", | 452 | printk(KERN_ERR "REL24 out of range!\n"); |
463 | (long int)offset); | ||
464 | return -EINVAL; | 453 | return -EINVAL; |
465 | } | 454 | } |
466 | 455 | ||
467 | /* Set to "bl addr" */ | ||
468 | op[0] = branch_offset(offset); | ||
469 | |||
470 | DEBUGP("write to %lx\n", rec->ip); | 456 | DEBUGP("write to %lx\n", rec->ip); |
471 | 457 | ||
472 | if (probe_kernel_write((void *)ip, replaced, MCOUNT_INSN_SIZE)) | 458 | if (probe_kernel_write((void *)ip, &op, MCOUNT_INSN_SIZE)) |
473 | return -EPERM; | 459 | return -EPERM; |
474 | 460 | ||
461 | flush_icache_range(ip, ip + 8); | ||
462 | |||
475 | return 0; | 463 | return 0; |
476 | } | 464 | } |
477 | #endif /* CONFIG_PPC64 */ | 465 | #endif /* CONFIG_PPC64 */ |
diff --git a/arch/powerpc/kvm/44x_tlb.c b/arch/powerpc/kvm/44x_tlb.c index 2e227a412bc2..ad72c6f9811f 100644 --- a/arch/powerpc/kvm/44x_tlb.c +++ b/arch/powerpc/kvm/44x_tlb.c | |||
@@ -124,6 +124,14 @@ static void kvmppc_44x_shadow_release(struct kvm_vcpu *vcpu, | |||
124 | } | 124 | } |
125 | } | 125 | } |
126 | 126 | ||
127 | void kvmppc_core_destroy_mmu(struct kvm_vcpu *vcpu) | ||
128 | { | ||
129 | int i; | ||
130 | |||
131 | for (i = 0; i <= tlb_44x_hwater; i++) | ||
132 | kvmppc_44x_shadow_release(vcpu, i); | ||
133 | } | ||
134 | |||
127 | void kvmppc_tlbe_set_modified(struct kvm_vcpu *vcpu, unsigned int i) | 135 | void kvmppc_tlbe_set_modified(struct kvm_vcpu *vcpu, unsigned int i) |
128 | { | 136 | { |
129 | vcpu->arch.shadow_tlb_mod[i] = 1; | 137 | vcpu->arch.shadow_tlb_mod[i] = 1; |
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 90a6fc422b23..fda9baada132 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c | |||
@@ -238,6 +238,7 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) | |||
238 | 238 | ||
239 | void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) | 239 | void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) |
240 | { | 240 | { |
241 | kvmppc_core_destroy_mmu(vcpu); | ||
241 | } | 242 | } |
242 | 243 | ||
243 | /* Note: clearing MSR[DE] just means that the debug interrupt will not be | 244 | /* Note: clearing MSR[DE] just means that the debug interrupt will not be |
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index d69912c07ce7..8db35278a4b4 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile | |||
@@ -6,6 +6,9 @@ ifeq ($(CONFIG_PPC64),y) | |||
6 | EXTRA_CFLAGS += -mno-minimal-toc | 6 | EXTRA_CFLAGS += -mno-minimal-toc |
7 | endif | 7 | endif |
8 | 8 | ||
9 | CFLAGS_REMOVE_code-patching.o = -pg | ||
10 | CFLAGS_REMOVE_feature-fixups.o = -pg | ||
11 | |||
9 | obj-y := string.o alloc.o \ | 12 | obj-y := string.o alloc.o \ |
10 | checksum_$(CONFIG_WORD_SIZE).o | 13 | checksum_$(CONFIG_WORD_SIZE).o |
11 | obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o | 14 | obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index b24e1d085557..1890fb085cde 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -600,7 +600,7 @@ static int irq_choose_cpu(unsigned int virt_irq) | |||
600 | cpuid = first_cpu(tmp); | 600 | cpuid = first_cpu(tmp); |
601 | } | 601 | } |
602 | 602 | ||
603 | return cpuid; | 603 | return get_hard_smp_processor_id(cpuid); |
604 | } | 604 | } |
605 | #else | 605 | #else |
606 | static int irq_choose_cpu(unsigned int virt_irq) | 606 | static int irq_choose_cpu(unsigned int virt_irq) |
diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c index 170392687ce0..2a01b9e02801 100644 --- a/arch/s390/kvm/sigp.c +++ b/arch/s390/kvm/sigp.c | |||
@@ -237,6 +237,11 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu) | |||
237 | u8 order_code; | 237 | u8 order_code; |
238 | int rc; | 238 | int rc; |
239 | 239 | ||
240 | /* sigp in userspace can exit */ | ||
241 | if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE) | ||
242 | return kvm_s390_inject_program_int(vcpu, | ||
243 | PGM_PRIVILEGED_OPERATION); | ||
244 | |||
240 | order_code = disp2; | 245 | order_code = disp2; |
241 | if (base2) | 246 | if (base2) |
242 | order_code += vcpu->arch.guest_gprs[base2]; | 247 | order_code += vcpu->arch.guest_gprs[base2]; |
diff --git a/arch/sparc64/lib/user_fixup.c b/arch/sparc64/lib/user_fixup.c index 19d1fdb17d0e..05a361b0a1a4 100644 --- a/arch/sparc64/lib/user_fixup.c +++ b/arch/sparc64/lib/user_fixup.c | |||
@@ -24,7 +24,7 @@ static unsigned long compute_size(unsigned long start, unsigned long size, unsig | |||
24 | if (fault_addr < start || fault_addr >= end) { | 24 | if (fault_addr < start || fault_addr >= end) { |
25 | *offset = 0; | 25 | *offset = 0; |
26 | } else { | 26 | } else { |
27 | *offset = start - fault_addr; | 27 | *offset = fault_addr - start; |
28 | size = end - fault_addr; | 28 | size = end - fault_addr; |
29 | } | 29 | } |
30 | return size; | 30 | return size; |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 352f63df1d80..c7235e643aff 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -29,7 +29,7 @@ config X86 | |||
29 | select HAVE_FTRACE_MCOUNT_RECORD | 29 | select HAVE_FTRACE_MCOUNT_RECORD |
30 | select HAVE_DYNAMIC_FTRACE | 30 | select HAVE_DYNAMIC_FTRACE |
31 | select HAVE_FUNCTION_TRACER | 31 | select HAVE_FUNCTION_TRACER |
32 | select HAVE_FUNCTION_RET_TRACER if X86_32 | 32 | select HAVE_FUNCTION_GRAPH_TRACER |
33 | select HAVE_FUNCTION_TRACE_MCOUNT_TEST | 33 | select HAVE_FUNCTION_TRACE_MCOUNT_TEST |
34 | select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64) | 34 | select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64) |
35 | select HAVE_ARCH_KGDB if !X86_VOYAGER | 35 | select HAVE_ARCH_KGDB if !X86_VOYAGER |
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu index b815664fe370..85a78575956c 100644 --- a/arch/x86/Kconfig.cpu +++ b/arch/x86/Kconfig.cpu | |||
@@ -515,6 +515,7 @@ config CPU_SUP_UMC_32 | |||
515 | config X86_DS | 515 | config X86_DS |
516 | def_bool X86_PTRACE_BTS | 516 | def_bool X86_PTRACE_BTS |
517 | depends on X86_DEBUGCTLMSR | 517 | depends on X86_DEBUGCTLMSR |
518 | select HAVE_HW_BRANCH_TRACER | ||
518 | 519 | ||
519 | config X86_PTRACE_BTS | 520 | config X86_PTRACE_BTS |
520 | bool "Branch Trace Store" | 521 | bool "Branch Trace Store" |
diff --git a/arch/x86/include/asm/ds.h b/arch/x86/include/asm/ds.h index a95008457ea4..99b6c39774a4 100644 --- a/arch/x86/include/asm/ds.h +++ b/arch/x86/include/asm/ds.h | |||
@@ -7,13 +7,12 @@ | |||
7 | * | 7 | * |
8 | * It manages: | 8 | * It manages: |
9 | * - per-thread and per-cpu allocation of BTS and PEBS | 9 | * - per-thread and per-cpu allocation of BTS and PEBS |
10 | * - buffer memory allocation (optional) | 10 | * - buffer overflow handling (to be done) |
11 | * - buffer overflow handling | ||
12 | * - buffer access | 11 | * - buffer access |
13 | * | 12 | * |
14 | * It assumes: | 13 | * It assumes: |
15 | * - get_task_struct on all parameter tasks | 14 | * - get_task_struct on all traced tasks |
16 | * - current is allowed to trace parameter tasks | 15 | * - current is allowed to trace tasks |
17 | * | 16 | * |
18 | * | 17 | * |
19 | * Copyright (C) 2007-2008 Intel Corporation. | 18 | * Copyright (C) 2007-2008 Intel Corporation. |
@@ -26,11 +25,18 @@ | |||
26 | 25 | ||
27 | #include <linux/types.h> | 26 | #include <linux/types.h> |
28 | #include <linux/init.h> | 27 | #include <linux/init.h> |
28 | #include <linux/err.h> | ||
29 | 29 | ||
30 | 30 | ||
31 | #ifdef CONFIG_X86_DS | 31 | #ifdef CONFIG_X86_DS |
32 | 32 | ||
33 | struct task_struct; | 33 | struct task_struct; |
34 | struct ds_tracer; | ||
35 | struct bts_tracer; | ||
36 | struct pebs_tracer; | ||
37 | |||
38 | typedef void (*bts_ovfl_callback_t)(struct bts_tracer *); | ||
39 | typedef void (*pebs_ovfl_callback_t)(struct pebs_tracer *); | ||
34 | 40 | ||
35 | /* | 41 | /* |
36 | * Request BTS or PEBS | 42 | * Request BTS or PEBS |
@@ -38,60 +44,62 @@ struct task_struct; | |||
38 | * Due to alignement constraints, the actual buffer may be slightly | 44 | * Due to alignement constraints, the actual buffer may be slightly |
39 | * smaller than the requested or provided buffer. | 45 | * smaller than the requested or provided buffer. |
40 | * | 46 | * |
41 | * Returns 0 on success; -Eerrno otherwise | 47 | * Returns a pointer to a tracer structure on success, or |
48 | * ERR_PTR(errcode) on failure. | ||
49 | * | ||
50 | * The interrupt threshold is independent from the overflow callback | ||
51 | * to allow users to use their own overflow interrupt handling mechanism. | ||
42 | * | 52 | * |
43 | * task: the task to request recording for; | 53 | * task: the task to request recording for; |
44 | * NULL for per-cpu recording on the current cpu | 54 | * NULL for per-cpu recording on the current cpu |
45 | * base: the base pointer for the (non-pageable) buffer; | 55 | * base: the base pointer for the (non-pageable) buffer; |
46 | * NULL if buffer allocation requested | 56 | * size: the size of the provided buffer in bytes |
47 | * size: the size of the requested or provided buffer | ||
48 | * ovfl: pointer to a function to be called on buffer overflow; | 57 | * ovfl: pointer to a function to be called on buffer overflow; |
49 | * NULL if cyclic buffer requested | 58 | * NULL if cyclic buffer requested |
59 | * th: the interrupt threshold in records from the end of the buffer; | ||
60 | * -1 if no interrupt threshold is requested. | ||
50 | */ | 61 | */ |
51 | typedef void (*ds_ovfl_callback_t)(struct task_struct *); | 62 | extern struct bts_tracer *ds_request_bts(struct task_struct *task, |
52 | extern int ds_request_bts(struct task_struct *task, void *base, size_t size, | 63 | void *base, size_t size, |
53 | ds_ovfl_callback_t ovfl); | 64 | bts_ovfl_callback_t ovfl, size_t th); |
54 | extern int ds_request_pebs(struct task_struct *task, void *base, size_t size, | 65 | extern struct pebs_tracer *ds_request_pebs(struct task_struct *task, |
55 | ds_ovfl_callback_t ovfl); | 66 | void *base, size_t size, |
67 | pebs_ovfl_callback_t ovfl, | ||
68 | size_t th); | ||
56 | 69 | ||
57 | /* | 70 | /* |
58 | * Release BTS or PEBS resources | 71 | * Release BTS or PEBS resources |
59 | * | 72 | * |
60 | * Frees buffers allocated on ds_request. | ||
61 | * | ||
62 | * Returns 0 on success; -Eerrno otherwise | 73 | * Returns 0 on success; -Eerrno otherwise |
63 | * | 74 | * |
64 | * task: the task to release resources for; | 75 | * tracer: the tracer handle returned from ds_request_~() |
65 | * NULL to release resources for the current cpu | ||
66 | */ | 76 | */ |
67 | extern int ds_release_bts(struct task_struct *task); | 77 | extern int ds_release_bts(struct bts_tracer *tracer); |
68 | extern int ds_release_pebs(struct task_struct *task); | 78 | extern int ds_release_pebs(struct pebs_tracer *tracer); |
69 | 79 | ||
70 | /* | 80 | /* |
71 | * Return the (array) index of the write pointer. | 81 | * Get the (array) index of the write pointer. |
72 | * (assuming an array of BTS/PEBS records) | 82 | * (assuming an array of BTS/PEBS records) |
73 | * | 83 | * |
74 | * Returns -Eerrno on error | 84 | * Returns 0 on success; -Eerrno on error |
75 | * | 85 | * |
76 | * task: the task to access; | 86 | * tracer: the tracer handle returned from ds_request_~() |
77 | * NULL to access the current cpu | 87 | * pos (out): will hold the result |
78 | * pos (out): if not NULL, will hold the result | ||
79 | */ | 88 | */ |
80 | extern int ds_get_bts_index(struct task_struct *task, size_t *pos); | 89 | extern int ds_get_bts_index(struct bts_tracer *tracer, size_t *pos); |
81 | extern int ds_get_pebs_index(struct task_struct *task, size_t *pos); | 90 | extern int ds_get_pebs_index(struct pebs_tracer *tracer, size_t *pos); |
82 | 91 | ||
83 | /* | 92 | /* |
84 | * Return the (array) index one record beyond the end of the array. | 93 | * Get the (array) index one record beyond the end of the array. |
85 | * (assuming an array of BTS/PEBS records) | 94 | * (assuming an array of BTS/PEBS records) |
86 | * | 95 | * |
87 | * Returns -Eerrno on error | 96 | * Returns 0 on success; -Eerrno on error |
88 | * | 97 | * |
89 | * task: the task to access; | 98 | * tracer: the tracer handle returned from ds_request_~() |
90 | * NULL to access the current cpu | 99 | * pos (out): will hold the result |
91 | * pos (out): if not NULL, will hold the result | ||
92 | */ | 100 | */ |
93 | extern int ds_get_bts_end(struct task_struct *task, size_t *pos); | 101 | extern int ds_get_bts_end(struct bts_tracer *tracer, size_t *pos); |
94 | extern int ds_get_pebs_end(struct task_struct *task, size_t *pos); | 102 | extern int ds_get_pebs_end(struct pebs_tracer *tracer, size_t *pos); |
95 | 103 | ||
96 | /* | 104 | /* |
97 | * Provide a pointer to the BTS/PEBS record at parameter index. | 105 | * Provide a pointer to the BTS/PEBS record at parameter index. |
@@ -102,14 +110,13 @@ extern int ds_get_pebs_end(struct task_struct *task, size_t *pos); | |||
102 | * | 110 | * |
103 | * Returns the size of a single record on success; -Eerrno on error | 111 | * Returns the size of a single record on success; -Eerrno on error |
104 | * | 112 | * |
105 | * task: the task to access; | 113 | * tracer: the tracer handle returned from ds_request_~() |
106 | * NULL to access the current cpu | ||
107 | * index: the index of the requested record | 114 | * index: the index of the requested record |
108 | * record (out): pointer to the requested record | 115 | * record (out): pointer to the requested record |
109 | */ | 116 | */ |
110 | extern int ds_access_bts(struct task_struct *task, | 117 | extern int ds_access_bts(struct bts_tracer *tracer, |
111 | size_t index, const void **record); | 118 | size_t index, const void **record); |
112 | extern int ds_access_pebs(struct task_struct *task, | 119 | extern int ds_access_pebs(struct pebs_tracer *tracer, |
113 | size_t index, const void **record); | 120 | size_t index, const void **record); |
114 | 121 | ||
115 | /* | 122 | /* |
@@ -129,38 +136,24 @@ extern int ds_access_pebs(struct task_struct *task, | |||
129 | * | 136 | * |
130 | * Returns the number of bytes written or -Eerrno. | 137 | * Returns the number of bytes written or -Eerrno. |
131 | * | 138 | * |
132 | * task: the task to access; | 139 | * tracer: the tracer handle returned from ds_request_~() |
133 | * NULL to access the current cpu | ||
134 | * buffer: the buffer to write | 140 | * buffer: the buffer to write |
135 | * size: the size of the buffer | 141 | * size: the size of the buffer |
136 | */ | 142 | */ |
137 | extern int ds_write_bts(struct task_struct *task, | 143 | extern int ds_write_bts(struct bts_tracer *tracer, |
138 | const void *buffer, size_t size); | 144 | const void *buffer, size_t size); |
139 | extern int ds_write_pebs(struct task_struct *task, | 145 | extern int ds_write_pebs(struct pebs_tracer *tracer, |
140 | const void *buffer, size_t size); | 146 | const void *buffer, size_t size); |
141 | 147 | ||
142 | /* | 148 | /* |
143 | * Same as ds_write_bts/pebs, but omit ownership checks. | ||
144 | * | ||
145 | * This is needed to have some other task than the owner of the | ||
146 | * BTS/PEBS buffer or the parameter task itself write into the | ||
147 | * respective buffer. | ||
148 | */ | ||
149 | extern int ds_unchecked_write_bts(struct task_struct *task, | ||
150 | const void *buffer, size_t size); | ||
151 | extern int ds_unchecked_write_pebs(struct task_struct *task, | ||
152 | const void *buffer, size_t size); | ||
153 | |||
154 | /* | ||
155 | * Reset the write pointer of the BTS/PEBS buffer. | 149 | * Reset the write pointer of the BTS/PEBS buffer. |
156 | * | 150 | * |
157 | * Returns 0 on success; -Eerrno on error | 151 | * Returns 0 on success; -Eerrno on error |
158 | * | 152 | * |
159 | * task: the task to access; | 153 | * tracer: the tracer handle returned from ds_request_~() |
160 | * NULL to access the current cpu | ||
161 | */ | 154 | */ |
162 | extern int ds_reset_bts(struct task_struct *task); | 155 | extern int ds_reset_bts(struct bts_tracer *tracer); |
163 | extern int ds_reset_pebs(struct task_struct *task); | 156 | extern int ds_reset_pebs(struct pebs_tracer *tracer); |
164 | 157 | ||
165 | /* | 158 | /* |
166 | * Clear the BTS/PEBS buffer and reset the write pointer. | 159 | * Clear the BTS/PEBS buffer and reset the write pointer. |
@@ -168,33 +161,30 @@ extern int ds_reset_pebs(struct task_struct *task); | |||
168 | * | 161 | * |
169 | * Returns 0 on success; -Eerrno on error | 162 | * Returns 0 on success; -Eerrno on error |
170 | * | 163 | * |
171 | * task: the task to access; | 164 | * tracer: the tracer handle returned from ds_request_~() |
172 | * NULL to access the current cpu | ||
173 | */ | 165 | */ |
174 | extern int ds_clear_bts(struct task_struct *task); | 166 | extern int ds_clear_bts(struct bts_tracer *tracer); |
175 | extern int ds_clear_pebs(struct task_struct *task); | 167 | extern int ds_clear_pebs(struct pebs_tracer *tracer); |
176 | 168 | ||
177 | /* | 169 | /* |
178 | * Provide the PEBS counter reset value. | 170 | * Provide the PEBS counter reset value. |
179 | * | 171 | * |
180 | * Returns 0 on success; -Eerrno on error | 172 | * Returns 0 on success; -Eerrno on error |
181 | * | 173 | * |
182 | * task: the task to access; | 174 | * tracer: the tracer handle returned from ds_request_pebs() |
183 | * NULL to access the current cpu | ||
184 | * value (out): the counter reset value | 175 | * value (out): the counter reset value |
185 | */ | 176 | */ |
186 | extern int ds_get_pebs_reset(struct task_struct *task, u64 *value); | 177 | extern int ds_get_pebs_reset(struct pebs_tracer *tracer, u64 *value); |
187 | 178 | ||
188 | /* | 179 | /* |
189 | * Set the PEBS counter reset value. | 180 | * Set the PEBS counter reset value. |
190 | * | 181 | * |
191 | * Returns 0 on success; -Eerrno on error | 182 | * Returns 0 on success; -Eerrno on error |
192 | * | 183 | * |
193 | * task: the task to access; | 184 | * tracer: the tracer handle returned from ds_request_pebs() |
194 | * NULL to access the current cpu | ||
195 | * value: the new counter reset value | 185 | * value: the new counter reset value |
196 | */ | 186 | */ |
197 | extern int ds_set_pebs_reset(struct task_struct *task, u64 value); | 187 | extern int ds_set_pebs_reset(struct pebs_tracer *tracer, u64 value); |
198 | 188 | ||
199 | /* | 189 | /* |
200 | * Initialization | 190 | * Initialization |
@@ -207,17 +197,13 @@ extern void __cpuinit ds_init_intel(struct cpuinfo_x86 *); | |||
207 | /* | 197 | /* |
208 | * The DS context - part of struct thread_struct. | 198 | * The DS context - part of struct thread_struct. |
209 | */ | 199 | */ |
200 | #define MAX_SIZEOF_DS (12 * 8) | ||
201 | |||
210 | struct ds_context { | 202 | struct ds_context { |
211 | /* pointer to the DS configuration; goes into MSR_IA32_DS_AREA */ | 203 | /* pointer to the DS configuration; goes into MSR_IA32_DS_AREA */ |
212 | unsigned char *ds; | 204 | unsigned char ds[MAX_SIZEOF_DS]; |
213 | /* the owner of the BTS and PEBS configuration, respectively */ | 205 | /* the owner of the BTS and PEBS configuration, respectively */ |
214 | struct task_struct *owner[2]; | 206 | struct ds_tracer *owner[2]; |
215 | /* buffer overflow notification function for BTS and PEBS */ | ||
216 | ds_ovfl_callback_t callback[2]; | ||
217 | /* the original buffer address */ | ||
218 | void *buffer[2]; | ||
219 | /* the number of allocated pages for on-request allocated buffers */ | ||
220 | unsigned int pages[2]; | ||
221 | /* use count */ | 207 | /* use count */ |
222 | unsigned long count; | 208 | unsigned long count; |
223 | /* a pointer to the context location inside the thread_struct | 209 | /* a pointer to the context location inside the thread_struct |
diff --git a/arch/x86/include/asm/ftrace.h b/arch/x86/include/asm/ftrace.h index 754a3e082f94..7e61b4ceb9a4 100644 --- a/arch/x86/include/asm/ftrace.h +++ b/arch/x86/include/asm/ftrace.h | |||
@@ -28,7 +28,7 @@ struct dyn_arch_ftrace { | |||
28 | #endif /* __ASSEMBLY__ */ | 28 | #endif /* __ASSEMBLY__ */ |
29 | #endif /* CONFIG_FUNCTION_TRACER */ | 29 | #endif /* CONFIG_FUNCTION_TRACER */ |
30 | 30 | ||
31 | #ifdef CONFIG_FUNCTION_RET_TRACER | 31 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
32 | 32 | ||
33 | #ifndef __ASSEMBLY__ | 33 | #ifndef __ASSEMBLY__ |
34 | 34 | ||
@@ -51,6 +51,6 @@ struct ftrace_ret_stack { | |||
51 | extern void return_to_handler(void); | 51 | extern void return_to_handler(void); |
52 | 52 | ||
53 | #endif /* __ASSEMBLY__ */ | 53 | #endif /* __ASSEMBLY__ */ |
54 | #endif /* CONFIG_FUNCTION_RET_TRACER */ | 54 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
55 | 55 | ||
56 | #endif /* _ASM_X86_FTRACE_H */ | 56 | #endif /* _ASM_X86_FTRACE_H */ |
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index af2bc36ca1c4..1cad9318d217 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile | |||
@@ -14,11 +14,6 @@ CFLAGS_REMOVE_paravirt-spinlocks.o = -pg | |||
14 | CFLAGS_REMOVE_ftrace.o = -pg | 14 | CFLAGS_REMOVE_ftrace.o = -pg |
15 | endif | 15 | endif |
16 | 16 | ||
17 | ifdef CONFIG_FUNCTION_RET_TRACER | ||
18 | # Don't trace __switch_to() but let it for function tracer | ||
19 | CFLAGS_REMOVE_process_32.o = -pg | ||
20 | endif | ||
21 | |||
22 | # | 17 | # |
23 | # vsyscalls (which work on the user stack) should have | 18 | # vsyscalls (which work on the user stack) should have |
24 | # no stack-protector checks: | 19 | # no stack-protector checks: |
@@ -30,7 +25,7 @@ CFLAGS_tsc.o := $(nostackp) | |||
30 | 25 | ||
31 | obj-y := process_$(BITS).o signal_$(BITS).o entry_$(BITS).o | 26 | obj-y := process_$(BITS).o signal_$(BITS).o entry_$(BITS).o |
32 | obj-y += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o | 27 | obj-y += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o |
33 | obj-y += time_$(BITS).o ioport.o ldt.o | 28 | obj-y += time_$(BITS).o ioport.o ldt.o dumpstack.o |
34 | obj-y += setup.o i8259.o irqinit_$(BITS).o setup_percpu.o | 29 | obj-y += setup.o i8259.o irqinit_$(BITS).o setup_percpu.o |
35 | obj-$(CONFIG_X86_VISWS) += visws_quirks.o | 30 | obj-$(CONFIG_X86_VISWS) += visws_quirks.o |
36 | obj-$(CONFIG_X86_32) += probe_roms_32.o | 31 | obj-$(CONFIG_X86_32) += probe_roms_32.o |
@@ -70,7 +65,7 @@ obj-$(CONFIG_X86_LOCAL_APIC) += apic.o nmi.o | |||
70 | obj-$(CONFIG_X86_IO_APIC) += io_apic.o | 65 | obj-$(CONFIG_X86_IO_APIC) += io_apic.o |
71 | obj-$(CONFIG_X86_REBOOTFIXUPS) += reboot_fixups_32.o | 66 | obj-$(CONFIG_X86_REBOOTFIXUPS) += reboot_fixups_32.o |
72 | obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o | 67 | obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o |
73 | obj-$(CONFIG_FUNCTION_RET_TRACER) += ftrace.o | 68 | obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o |
74 | obj-$(CONFIG_KEXEC) += machine_kexec_$(BITS).o | 69 | obj-$(CONFIG_KEXEC) += machine_kexec_$(BITS).o |
75 | obj-$(CONFIG_KEXEC) += relocate_kernel_$(BITS).o crash.o | 70 | obj-$(CONFIG_KEXEC) += relocate_kernel_$(BITS).o crash.o |
76 | obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o | 71 | obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o |
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index 8e48c5d4467d..88ea02dcb622 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/cpufreq.h> | 33 | #include <linux/cpufreq.h> |
34 | #include <linux/compiler.h> | 34 | #include <linux/compiler.h> |
35 | #include <linux/dmi.h> | 35 | #include <linux/dmi.h> |
36 | #include <linux/ftrace.h> | ||
36 | 37 | ||
37 | #include <linux/acpi.h> | 38 | #include <linux/acpi.h> |
38 | #include <acpi/processor.h> | 39 | #include <acpi/processor.h> |
@@ -391,6 +392,7 @@ static int acpi_cpufreq_target(struct cpufreq_policy *policy, | |||
391 | unsigned int next_perf_state = 0; /* Index into perf table */ | 392 | unsigned int next_perf_state = 0; /* Index into perf table */ |
392 | unsigned int i; | 393 | unsigned int i; |
393 | int result = 0; | 394 | int result = 0; |
395 | struct power_trace it; | ||
394 | 396 | ||
395 | dprintk("acpi_cpufreq_target %d (%d)\n", target_freq, policy->cpu); | 397 | dprintk("acpi_cpufreq_target %d (%d)\n", target_freq, policy->cpu); |
396 | 398 | ||
@@ -427,6 +429,8 @@ static int acpi_cpufreq_target(struct cpufreq_policy *policy, | |||
427 | } | 429 | } |
428 | } | 430 | } |
429 | 431 | ||
432 | trace_power_mark(&it, POWER_PSTATE, next_perf_state); | ||
433 | |||
430 | switch (data->cpu_feature) { | 434 | switch (data->cpu_feature) { |
431 | case SYSTEM_INTEL_MSR_CAPABLE: | 435 | case SYSTEM_INTEL_MSR_CAPABLE: |
432 | cmd.type = SYSTEM_INTEL_MSR_CAPABLE; | 436 | cmd.type = SYSTEM_INTEL_MSR_CAPABLE; |
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index cce0b6118d55..816f27f289b1 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
@@ -307,12 +307,11 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) | |||
307 | set_cpu_cap(c, X86_FEATURE_P4); | 307 | set_cpu_cap(c, X86_FEATURE_P4); |
308 | if (c->x86 == 6) | 308 | if (c->x86 == 6) |
309 | set_cpu_cap(c, X86_FEATURE_P3); | 309 | set_cpu_cap(c, X86_FEATURE_P3); |
310 | #endif | ||
310 | 311 | ||
311 | if (cpu_has_bts) | 312 | if (cpu_has_bts) |
312 | ptrace_bts_init_intel(c); | 313 | ptrace_bts_init_intel(c); |
313 | 314 | ||
314 | #endif | ||
315 | |||
316 | detect_extended_topology(c); | 315 | detect_extended_topology(c); |
317 | if (!cpu_has(c, X86_FEATURE_XTOPOLOGY)) { | 316 | if (!cpu_has(c, X86_FEATURE_XTOPOLOGY)) { |
318 | /* | 317 | /* |
diff --git a/arch/x86/kernel/ds.c b/arch/x86/kernel/ds.c index a2d1176c38ee..19a8c2c0389f 100644 --- a/arch/x86/kernel/ds.c +++ b/arch/x86/kernel/ds.c | |||
@@ -7,13 +7,12 @@ | |||
7 | * | 7 | * |
8 | * It manages: | 8 | * It manages: |
9 | * - per-thread and per-cpu allocation of BTS and PEBS | 9 | * - per-thread and per-cpu allocation of BTS and PEBS |
10 | * - buffer memory allocation (optional) | 10 | * - buffer overflow handling (to be done) |
11 | * - buffer overflow handling | ||
12 | * - buffer access | 11 | * - buffer access |
13 | * | 12 | * |
14 | * It assumes: | 13 | * It assumes: |
15 | * - get_task_struct on all parameter tasks | 14 | * - get_task_struct on all traced tasks |
16 | * - current is allowed to trace parameter tasks | 15 | * - current is allowed to trace tasks |
17 | * | 16 | * |
18 | * | 17 | * |
19 | * Copyright (C) 2007-2008 Intel Corporation. | 18 | * Copyright (C) 2007-2008 Intel Corporation. |
@@ -28,6 +27,7 @@ | |||
28 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
29 | #include <linux/sched.h> | 28 | #include <linux/sched.h> |
30 | #include <linux/mm.h> | 29 | #include <linux/mm.h> |
30 | #include <linux/kernel.h> | ||
31 | 31 | ||
32 | 32 | ||
33 | /* | 33 | /* |
@@ -44,6 +44,33 @@ struct ds_configuration { | |||
44 | }; | 44 | }; |
45 | static struct ds_configuration ds_cfg; | 45 | static struct ds_configuration ds_cfg; |
46 | 46 | ||
47 | /* | ||
48 | * A BTS or PEBS tracer. | ||
49 | * | ||
50 | * This holds the configuration of the tracer and serves as a handle | ||
51 | * to identify tracers. | ||
52 | */ | ||
53 | struct ds_tracer { | ||
54 | /* the DS context (partially) owned by this tracer */ | ||
55 | struct ds_context *context; | ||
56 | /* the buffer provided on ds_request() and its size in bytes */ | ||
57 | void *buffer; | ||
58 | size_t size; | ||
59 | }; | ||
60 | |||
61 | struct bts_tracer { | ||
62 | /* the common DS part */ | ||
63 | struct ds_tracer ds; | ||
64 | /* buffer overflow notification function */ | ||
65 | bts_ovfl_callback_t ovfl; | ||
66 | }; | ||
67 | |||
68 | struct pebs_tracer { | ||
69 | /* the common DS part */ | ||
70 | struct ds_tracer ds; | ||
71 | /* buffer overflow notification function */ | ||
72 | pebs_ovfl_callback_t ovfl; | ||
73 | }; | ||
47 | 74 | ||
48 | /* | 75 | /* |
49 | * Debug Store (DS) save area configuration (see Intel64 and IA32 | 76 | * Debug Store (DS) save area configuration (see Intel64 and IA32 |
@@ -107,34 +134,13 @@ static inline void ds_set(unsigned char *base, enum ds_qualifier qual, | |||
107 | (*(unsigned long *)base) = value; | 134 | (*(unsigned long *)base) = value; |
108 | } | 135 | } |
109 | 136 | ||
137 | #define DS_ALIGNMENT (1 << 3) /* BTS and PEBS buffer alignment */ | ||
110 | 138 | ||
111 | /* | ||
112 | * Locking is done only for allocating BTS or PEBS resources and for | ||
113 | * guarding context and buffer memory allocation. | ||
114 | * | ||
115 | * Most functions require the current task to own the ds context part | ||
116 | * they are going to access. All the locking is done when validating | ||
117 | * access to the context. | ||
118 | */ | ||
119 | static spinlock_t ds_lock = __SPIN_LOCK_UNLOCKED(ds_lock); | ||
120 | 139 | ||
121 | /* | 140 | /* |
122 | * Validate that the current task is allowed to access the BTS/PEBS | 141 | * Locking is done only for allocating BTS or PEBS resources. |
123 | * buffer of the parameter task. | ||
124 | * | ||
125 | * Returns 0, if access is granted; -Eerrno, otherwise. | ||
126 | */ | 142 | */ |
127 | static inline int ds_validate_access(struct ds_context *context, | 143 | static spinlock_t ds_lock = __SPIN_LOCK_UNLOCKED(ds_lock); |
128 | enum ds_qualifier qual) | ||
129 | { | ||
130 | if (!context) | ||
131 | return -EPERM; | ||
132 | |||
133 | if (context->owner[qual] == current) | ||
134 | return 0; | ||
135 | |||
136 | return -EPERM; | ||
137 | } | ||
138 | 144 | ||
139 | 145 | ||
140 | /* | 146 | /* |
@@ -183,51 +189,13 @@ static inline int check_tracer(struct task_struct *task) | |||
183 | * | 189 | * |
184 | * Contexts are use-counted. They are allocated on first access and | 190 | * Contexts are use-counted. They are allocated on first access and |
185 | * deallocated when the last user puts the context. | 191 | * deallocated when the last user puts the context. |
186 | * | ||
187 | * We distinguish between an allocating and a non-allocating get of a | ||
188 | * context: | ||
189 | * - the allocating get is used for requesting BTS/PEBS resources. It | ||
190 | * requires the caller to hold the global ds_lock. | ||
191 | * - the non-allocating get is used for all other cases. A | ||
192 | * non-existing context indicates an error. It acquires and releases | ||
193 | * the ds_lock itself for obtaining the context. | ||
194 | * | ||
195 | * A context and its DS configuration are allocated and deallocated | ||
196 | * together. A context always has a DS configuration of the | ||
197 | * appropriate size. | ||
198 | */ | 192 | */ |
199 | static DEFINE_PER_CPU(struct ds_context *, system_context); | 193 | static DEFINE_PER_CPU(struct ds_context *, system_context); |
200 | 194 | ||
201 | #define this_system_context per_cpu(system_context, smp_processor_id()) | 195 | #define this_system_context per_cpu(system_context, smp_processor_id()) |
202 | 196 | ||
203 | /* | ||
204 | * Returns the pointer to the parameter task's context or to the | ||
205 | * system-wide context, if task is NULL. | ||
206 | * | ||
207 | * Increases the use count of the returned context, if not NULL. | ||
208 | */ | ||
209 | static inline struct ds_context *ds_get_context(struct task_struct *task) | 197 | static inline struct ds_context *ds_get_context(struct task_struct *task) |
210 | { | 198 | { |
211 | struct ds_context *context; | ||
212 | unsigned long irq; | ||
213 | |||
214 | spin_lock_irqsave(&ds_lock, irq); | ||
215 | |||
216 | context = (task ? task->thread.ds_ctx : this_system_context); | ||
217 | if (context) | ||
218 | context->count++; | ||
219 | |||
220 | spin_unlock_irqrestore(&ds_lock, irq); | ||
221 | |||
222 | return context; | ||
223 | } | ||
224 | |||
225 | /* | ||
226 | * Same as ds_get_context, but allocates the context and it's DS | ||
227 | * structure, if necessary; returns NULL; if out of memory. | ||
228 | */ | ||
229 | static inline struct ds_context *ds_alloc_context(struct task_struct *task) | ||
230 | { | ||
231 | struct ds_context **p_context = | 199 | struct ds_context **p_context = |
232 | (task ? &task->thread.ds_ctx : &this_system_context); | 200 | (task ? &task->thread.ds_ctx : &this_system_context); |
233 | struct ds_context *context = *p_context; | 201 | struct ds_context *context = *p_context; |
@@ -238,16 +206,9 @@ static inline struct ds_context *ds_alloc_context(struct task_struct *task) | |||
238 | if (!context) | 206 | if (!context) |
239 | return NULL; | 207 | return NULL; |
240 | 208 | ||
241 | context->ds = kzalloc(ds_cfg.sizeof_ds, GFP_KERNEL); | ||
242 | if (!context->ds) { | ||
243 | kfree(context); | ||
244 | return NULL; | ||
245 | } | ||
246 | |||
247 | spin_lock_irqsave(&ds_lock, irq); | 209 | spin_lock_irqsave(&ds_lock, irq); |
248 | 210 | ||
249 | if (*p_context) { | 211 | if (*p_context) { |
250 | kfree(context->ds); | ||
251 | kfree(context); | 212 | kfree(context); |
252 | 213 | ||
253 | context = *p_context; | 214 | context = *p_context; |
@@ -272,10 +233,6 @@ static inline struct ds_context *ds_alloc_context(struct task_struct *task) | |||
272 | return context; | 233 | return context; |
273 | } | 234 | } |
274 | 235 | ||
275 | /* | ||
276 | * Decreases the use count of the parameter context, if not NULL. | ||
277 | * Deallocates the context, if the use count reaches zero. | ||
278 | */ | ||
279 | static inline void ds_put_context(struct ds_context *context) | 236 | static inline void ds_put_context(struct ds_context *context) |
280 | { | 237 | { |
281 | unsigned long irq; | 238 | unsigned long irq; |
@@ -296,13 +253,6 @@ static inline void ds_put_context(struct ds_context *context) | |||
296 | if (!context->task || (context->task == current)) | 253 | if (!context->task || (context->task == current)) |
297 | wrmsrl(MSR_IA32_DS_AREA, 0); | 254 | wrmsrl(MSR_IA32_DS_AREA, 0); |
298 | 255 | ||
299 | put_tracer(context->task); | ||
300 | |||
301 | /* free any leftover buffers from tracers that did not | ||
302 | * deallocate them properly. */ | ||
303 | kfree(context->buffer[ds_bts]); | ||
304 | kfree(context->buffer[ds_pebs]); | ||
305 | kfree(context->ds); | ||
306 | kfree(context); | 256 | kfree(context); |
307 | out: | 257 | out: |
308 | spin_unlock_irqrestore(&ds_lock, irq); | 258 | spin_unlock_irqrestore(&ds_lock, irq); |
@@ -312,345 +262,342 @@ static inline void ds_put_context(struct ds_context *context) | |||
312 | /* | 262 | /* |
313 | * Handle a buffer overflow | 263 | * Handle a buffer overflow |
314 | * | 264 | * |
315 | * task: the task whose buffers are overflowing; | ||
316 | * NULL for a buffer overflow on the current cpu | ||
317 | * context: the ds context | 265 | * context: the ds context |
318 | * qual: the buffer type | 266 | * qual: the buffer type |
319 | */ | 267 | */ |
320 | static void ds_overflow(struct task_struct *task, struct ds_context *context, | 268 | static void ds_overflow(struct ds_context *context, enum ds_qualifier qual) |
321 | enum ds_qualifier qual) | 269 | { |
322 | { | 270 | switch (qual) { |
323 | if (!context) | 271 | case ds_bts: { |
324 | return; | 272 | struct bts_tracer *tracer = |
325 | 273 | container_of(context->owner[qual], | |
326 | if (context->callback[qual]) | 274 | struct bts_tracer, ds); |
327 | (*context->callback[qual])(task); | 275 | if (tracer->ovfl) |
328 | 276 | tracer->ovfl(tracer); | |
329 | /* todo: do some more overflow handling */ | 277 | } |
278 | break; | ||
279 | case ds_pebs: { | ||
280 | struct pebs_tracer *tracer = | ||
281 | container_of(context->owner[qual], | ||
282 | struct pebs_tracer, ds); | ||
283 | if (tracer->ovfl) | ||
284 | tracer->ovfl(tracer); | ||
285 | } | ||
286 | break; | ||
287 | } | ||
330 | } | 288 | } |
331 | 289 | ||
332 | 290 | ||
333 | /* | 291 | static void ds_install_ds_config(struct ds_context *context, |
334 | * Allocate a non-pageable buffer of the parameter size. | 292 | enum ds_qualifier qual, |
335 | * Checks the memory and the locked memory rlimit. | 293 | void *base, size_t size, size_t ith) |
336 | * | ||
337 | * Returns the buffer, if successful; | ||
338 | * NULL, if out of memory or rlimit exceeded. | ||
339 | * | ||
340 | * size: the requested buffer size in bytes | ||
341 | * pages (out): if not NULL, contains the number of pages reserved | ||
342 | */ | ||
343 | static inline void *ds_allocate_buffer(size_t size, unsigned int *pages) | ||
344 | { | 294 | { |
345 | unsigned long rlim, vm, pgsz; | 295 | unsigned long buffer, adj; |
346 | void *buffer; | ||
347 | |||
348 | pgsz = PAGE_ALIGN(size) >> PAGE_SHIFT; | ||
349 | |||
350 | rlim = current->signal->rlim[RLIMIT_AS].rlim_cur >> PAGE_SHIFT; | ||
351 | vm = current->mm->total_vm + pgsz; | ||
352 | if (rlim < vm) | ||
353 | return NULL; | ||
354 | 296 | ||
355 | rlim = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT; | 297 | /* adjust the buffer address and size to meet alignment |
356 | vm = current->mm->locked_vm + pgsz; | 298 | * constraints: |
357 | if (rlim < vm) | 299 | * - buffer is double-word aligned |
358 | return NULL; | 300 | * - size is multiple of record size |
301 | * | ||
302 | * We checked the size at the very beginning; we have enough | ||
303 | * space to do the adjustment. | ||
304 | */ | ||
305 | buffer = (unsigned long)base; | ||
359 | 306 | ||
360 | buffer = kzalloc(size, GFP_KERNEL); | 307 | adj = ALIGN(buffer, DS_ALIGNMENT) - buffer; |
361 | if (!buffer) | 308 | buffer += adj; |
362 | return NULL; | 309 | size -= adj; |
363 | 310 | ||
364 | current->mm->total_vm += pgsz; | 311 | size /= ds_cfg.sizeof_rec[qual]; |
365 | current->mm->locked_vm += pgsz; | 312 | size *= ds_cfg.sizeof_rec[qual]; |
366 | 313 | ||
367 | if (pages) | 314 | ds_set(context->ds, qual, ds_buffer_base, buffer); |
368 | *pages = pgsz; | 315 | ds_set(context->ds, qual, ds_index, buffer); |
316 | ds_set(context->ds, qual, ds_absolute_maximum, buffer + size); | ||
369 | 317 | ||
370 | return buffer; | 318 | /* The value for 'no threshold' is -1, which will set the |
319 | * threshold outside of the buffer, just like we want it. | ||
320 | */ | ||
321 | ds_set(context->ds, qual, | ||
322 | ds_interrupt_threshold, buffer + size - ith); | ||
371 | } | 323 | } |
372 | 324 | ||
373 | static int ds_request(struct task_struct *task, void *base, size_t size, | 325 | static int ds_request(struct ds_tracer *tracer, enum ds_qualifier qual, |
374 | ds_ovfl_callback_t ovfl, enum ds_qualifier qual) | 326 | struct task_struct *task, |
327 | void *base, size_t size, size_t th) | ||
375 | { | 328 | { |
376 | struct ds_context *context; | 329 | struct ds_context *context; |
377 | unsigned long buffer, adj; | ||
378 | const unsigned long alignment = (1 << 3); | ||
379 | unsigned long irq; | 330 | unsigned long irq; |
380 | int error = 0; | 331 | int error; |
381 | 332 | ||
333 | error = -EOPNOTSUPP; | ||
382 | if (!ds_cfg.sizeof_ds) | 334 | if (!ds_cfg.sizeof_ds) |
383 | return -EOPNOTSUPP; | 335 | goto out; |
336 | |||
337 | error = -EINVAL; | ||
338 | if (!base) | ||
339 | goto out; | ||
384 | 340 | ||
385 | /* we require some space to do alignment adjustments below */ | 341 | /* we require some space to do alignment adjustments below */ |
386 | if (size < (alignment + ds_cfg.sizeof_rec[qual])) | 342 | error = -EINVAL; |
387 | return -EINVAL; | 343 | if (size < (DS_ALIGNMENT + ds_cfg.sizeof_rec[qual])) |
344 | goto out; | ||
388 | 345 | ||
389 | /* buffer overflow notification is not yet implemented */ | 346 | if (th != (size_t)-1) { |
390 | if (ovfl) | 347 | th *= ds_cfg.sizeof_rec[qual]; |
391 | return -EOPNOTSUPP; | 348 | |
349 | error = -EINVAL; | ||
350 | if (size <= th) | ||
351 | goto out; | ||
352 | } | ||
392 | 353 | ||
354 | tracer->buffer = base; | ||
355 | tracer->size = size; | ||
393 | 356 | ||
394 | context = ds_alloc_context(task); | 357 | error = -ENOMEM; |
358 | context = ds_get_context(task); | ||
395 | if (!context) | 359 | if (!context) |
396 | return -ENOMEM; | 360 | goto out; |
361 | tracer->context = context; | ||
362 | |||
397 | 363 | ||
398 | spin_lock_irqsave(&ds_lock, irq); | 364 | spin_lock_irqsave(&ds_lock, irq); |
399 | 365 | ||
400 | error = -EPERM; | 366 | error = -EPERM; |
401 | if (!check_tracer(task)) | 367 | if (!check_tracer(task)) |
402 | goto out_unlock; | 368 | goto out_unlock; |
403 | |||
404 | get_tracer(task); | 369 | get_tracer(task); |
405 | 370 | ||
406 | error = -EALREADY; | ||
407 | if (context->owner[qual] == current) | ||
408 | goto out_put_tracer; | ||
409 | error = -EPERM; | 371 | error = -EPERM; |
410 | if (context->owner[qual] != NULL) | 372 | if (context->owner[qual]) |
411 | goto out_put_tracer; | 373 | goto out_put_tracer; |
412 | context->owner[qual] = current; | 374 | context->owner[qual] = tracer; |
413 | 375 | ||
414 | spin_unlock_irqrestore(&ds_lock, irq); | 376 | spin_unlock_irqrestore(&ds_lock, irq); |
415 | 377 | ||
416 | 378 | ||
417 | error = -ENOMEM; | 379 | ds_install_ds_config(context, qual, base, size, th); |
418 | if (!base) { | ||
419 | base = ds_allocate_buffer(size, &context->pages[qual]); | ||
420 | if (!base) | ||
421 | goto out_release; | ||
422 | |||
423 | context->buffer[qual] = base; | ||
424 | } | ||
425 | error = 0; | ||
426 | 380 | ||
427 | context->callback[qual] = ovfl; | 381 | return 0; |
428 | |||
429 | /* adjust the buffer address and size to meet alignment | ||
430 | * constraints: | ||
431 | * - buffer is double-word aligned | ||
432 | * - size is multiple of record size | ||
433 | * | ||
434 | * We checked the size at the very beginning; we have enough | ||
435 | * space to do the adjustment. | ||
436 | */ | ||
437 | buffer = (unsigned long)base; | ||
438 | |||
439 | adj = ALIGN(buffer, alignment) - buffer; | ||
440 | buffer += adj; | ||
441 | size -= adj; | ||
442 | |||
443 | size /= ds_cfg.sizeof_rec[qual]; | ||
444 | size *= ds_cfg.sizeof_rec[qual]; | ||
445 | |||
446 | ds_set(context->ds, qual, ds_buffer_base, buffer); | ||
447 | ds_set(context->ds, qual, ds_index, buffer); | ||
448 | ds_set(context->ds, qual, ds_absolute_maximum, buffer + size); | ||
449 | |||
450 | if (ovfl) { | ||
451 | /* todo: select a suitable interrupt threshold */ | ||
452 | } else | ||
453 | ds_set(context->ds, qual, | ||
454 | ds_interrupt_threshold, buffer + size + 1); | ||
455 | |||
456 | /* we keep the context until ds_release */ | ||
457 | return error; | ||
458 | |||
459 | out_release: | ||
460 | context->owner[qual] = NULL; | ||
461 | ds_put_context(context); | ||
462 | put_tracer(task); | ||
463 | return error; | ||
464 | 382 | ||
465 | out_put_tracer: | 383 | out_put_tracer: |
466 | spin_unlock_irqrestore(&ds_lock, irq); | ||
467 | ds_put_context(context); | ||
468 | put_tracer(task); | 384 | put_tracer(task); |
469 | return error; | ||
470 | |||
471 | out_unlock: | 385 | out_unlock: |
472 | spin_unlock_irqrestore(&ds_lock, irq); | 386 | spin_unlock_irqrestore(&ds_lock, irq); |
473 | ds_put_context(context); | 387 | ds_put_context(context); |
388 | tracer->context = NULL; | ||
389 | out: | ||
474 | return error; | 390 | return error; |
475 | } | 391 | } |
476 | 392 | ||
477 | int ds_request_bts(struct task_struct *task, void *base, size_t size, | 393 | struct bts_tracer *ds_request_bts(struct task_struct *task, |
478 | ds_ovfl_callback_t ovfl) | 394 | void *base, size_t size, |
395 | bts_ovfl_callback_t ovfl, size_t th) | ||
479 | { | 396 | { |
480 | return ds_request(task, base, size, ovfl, ds_bts); | 397 | struct bts_tracer *tracer; |
481 | } | 398 | int error; |
482 | 399 | ||
483 | int ds_request_pebs(struct task_struct *task, void *base, size_t size, | 400 | /* buffer overflow notification is not yet implemented */ |
484 | ds_ovfl_callback_t ovfl) | 401 | error = -EOPNOTSUPP; |
485 | { | 402 | if (ovfl) |
486 | return ds_request(task, base, size, ovfl, ds_pebs); | 403 | goto out; |
404 | |||
405 | error = -ENOMEM; | ||
406 | tracer = kzalloc(sizeof(*tracer), GFP_KERNEL); | ||
407 | if (!tracer) | ||
408 | goto out; | ||
409 | tracer->ovfl = ovfl; | ||
410 | |||
411 | error = ds_request(&tracer->ds, ds_bts, task, base, size, th); | ||
412 | if (error < 0) | ||
413 | goto out_tracer; | ||
414 | |||
415 | return tracer; | ||
416 | |||
417 | out_tracer: | ||
418 | kfree(tracer); | ||
419 | out: | ||
420 | return ERR_PTR(error); | ||
487 | } | 421 | } |
488 | 422 | ||
489 | static int ds_release(struct task_struct *task, enum ds_qualifier qual) | 423 | struct pebs_tracer *ds_request_pebs(struct task_struct *task, |
424 | void *base, size_t size, | ||
425 | pebs_ovfl_callback_t ovfl, size_t th) | ||
490 | { | 426 | { |
491 | struct ds_context *context; | 427 | struct pebs_tracer *tracer; |
492 | int error; | 428 | int error; |
493 | 429 | ||
494 | context = ds_get_context(task); | 430 | /* buffer overflow notification is not yet implemented */ |
495 | error = ds_validate_access(context, qual); | 431 | error = -EOPNOTSUPP; |
496 | if (error < 0) | 432 | if (ovfl) |
497 | goto out; | 433 | goto out; |
498 | 434 | ||
499 | kfree(context->buffer[qual]); | 435 | error = -ENOMEM; |
500 | context->buffer[qual] = NULL; | 436 | tracer = kzalloc(sizeof(*tracer), GFP_KERNEL); |
437 | if (!tracer) | ||
438 | goto out; | ||
439 | tracer->ovfl = ovfl; | ||
501 | 440 | ||
502 | current->mm->total_vm -= context->pages[qual]; | 441 | error = ds_request(&tracer->ds, ds_pebs, task, base, size, th); |
503 | current->mm->locked_vm -= context->pages[qual]; | 442 | if (error < 0) |
504 | context->pages[qual] = 0; | 443 | goto out_tracer; |
505 | context->owner[qual] = NULL; | ||
506 | 444 | ||
507 | /* | 445 | return tracer; |
508 | * we put the context twice: | 446 | |
509 | * once for the ds_get_context | 447 | out_tracer: |
510 | * once for the corresponding ds_request | 448 | kfree(tracer); |
511 | */ | ||
512 | ds_put_context(context); | ||
513 | out: | 449 | out: |
514 | ds_put_context(context); | 450 | return ERR_PTR(error); |
515 | return error; | ||
516 | } | 451 | } |
517 | 452 | ||
518 | int ds_release_bts(struct task_struct *task) | 453 | static void ds_release(struct ds_tracer *tracer, enum ds_qualifier qual) |
519 | { | 454 | { |
520 | return ds_release(task, ds_bts); | 455 | BUG_ON(tracer->context->owner[qual] != tracer); |
456 | tracer->context->owner[qual] = NULL; | ||
457 | |||
458 | put_tracer(tracer->context->task); | ||
459 | ds_put_context(tracer->context); | ||
521 | } | 460 | } |
522 | 461 | ||
523 | int ds_release_pebs(struct task_struct *task) | 462 | int ds_release_bts(struct bts_tracer *tracer) |
524 | { | 463 | { |
525 | return ds_release(task, ds_pebs); | 464 | if (!tracer) |
465 | return -EINVAL; | ||
466 | |||
467 | ds_release(&tracer->ds, ds_bts); | ||
468 | kfree(tracer); | ||
469 | |||
470 | return 0; | ||
526 | } | 471 | } |
527 | 472 | ||
528 | static int ds_get_index(struct task_struct *task, size_t *pos, | 473 | int ds_release_pebs(struct pebs_tracer *tracer) |
529 | enum ds_qualifier qual) | ||
530 | { | 474 | { |
531 | struct ds_context *context; | 475 | if (!tracer) |
532 | unsigned long base, index; | 476 | return -EINVAL; |
533 | int error; | ||
534 | 477 | ||
535 | context = ds_get_context(task); | 478 | ds_release(&tracer->ds, ds_pebs); |
536 | error = ds_validate_access(context, qual); | 479 | kfree(tracer); |
537 | if (error < 0) | 480 | |
538 | goto out; | 481 | return 0; |
482 | } | ||
483 | |||
484 | static size_t ds_get_index(struct ds_context *context, enum ds_qualifier qual) | ||
485 | { | ||
486 | unsigned long base, index; | ||
539 | 487 | ||
540 | base = ds_get(context->ds, qual, ds_buffer_base); | 488 | base = ds_get(context->ds, qual, ds_buffer_base); |
541 | index = ds_get(context->ds, qual, ds_index); | 489 | index = ds_get(context->ds, qual, ds_index); |
542 | 490 | ||
543 | error = ((index - base) / ds_cfg.sizeof_rec[qual]); | 491 | return (index - base) / ds_cfg.sizeof_rec[qual]; |
544 | if (pos) | ||
545 | *pos = error; | ||
546 | out: | ||
547 | ds_put_context(context); | ||
548 | return error; | ||
549 | } | 492 | } |
550 | 493 | ||
551 | int ds_get_bts_index(struct task_struct *task, size_t *pos) | 494 | int ds_get_bts_index(struct bts_tracer *tracer, size_t *pos) |
552 | { | 495 | { |
553 | return ds_get_index(task, pos, ds_bts); | 496 | if (!tracer) |
497 | return -EINVAL; | ||
498 | |||
499 | if (!pos) | ||
500 | return -EINVAL; | ||
501 | |||
502 | *pos = ds_get_index(tracer->ds.context, ds_bts); | ||
503 | |||
504 | return 0; | ||
554 | } | 505 | } |
555 | 506 | ||
556 | int ds_get_pebs_index(struct task_struct *task, size_t *pos) | 507 | int ds_get_pebs_index(struct pebs_tracer *tracer, size_t *pos) |
557 | { | 508 | { |
558 | return ds_get_index(task, pos, ds_pebs); | 509 | if (!tracer) |
510 | return -EINVAL; | ||
511 | |||
512 | if (!pos) | ||
513 | return -EINVAL; | ||
514 | |||
515 | *pos = ds_get_index(tracer->ds.context, ds_pebs); | ||
516 | |||
517 | return 0; | ||
559 | } | 518 | } |
560 | 519 | ||
561 | static int ds_get_end(struct task_struct *task, size_t *pos, | 520 | static size_t ds_get_end(struct ds_context *context, enum ds_qualifier qual) |
562 | enum ds_qualifier qual) | ||
563 | { | 521 | { |
564 | struct ds_context *context; | 522 | unsigned long base, max; |
565 | unsigned long base, end; | ||
566 | int error; | ||
567 | |||
568 | context = ds_get_context(task); | ||
569 | error = ds_validate_access(context, qual); | ||
570 | if (error < 0) | ||
571 | goto out; | ||
572 | 523 | ||
573 | base = ds_get(context->ds, qual, ds_buffer_base); | 524 | base = ds_get(context->ds, qual, ds_buffer_base); |
574 | end = ds_get(context->ds, qual, ds_absolute_maximum); | 525 | max = ds_get(context->ds, qual, ds_absolute_maximum); |
575 | 526 | ||
576 | error = ((end - base) / ds_cfg.sizeof_rec[qual]); | 527 | return (max - base) / ds_cfg.sizeof_rec[qual]; |
577 | if (pos) | ||
578 | *pos = error; | ||
579 | out: | ||
580 | ds_put_context(context); | ||
581 | return error; | ||
582 | } | 528 | } |
583 | 529 | ||
584 | int ds_get_bts_end(struct task_struct *task, size_t *pos) | 530 | int ds_get_bts_end(struct bts_tracer *tracer, size_t *pos) |
585 | { | 531 | { |
586 | return ds_get_end(task, pos, ds_bts); | 532 | if (!tracer) |
533 | return -EINVAL; | ||
534 | |||
535 | if (!pos) | ||
536 | return -EINVAL; | ||
537 | |||
538 | *pos = ds_get_end(tracer->ds.context, ds_bts); | ||
539 | |||
540 | return 0; | ||
587 | } | 541 | } |
588 | 542 | ||
589 | int ds_get_pebs_end(struct task_struct *task, size_t *pos) | 543 | int ds_get_pebs_end(struct pebs_tracer *tracer, size_t *pos) |
590 | { | 544 | { |
591 | return ds_get_end(task, pos, ds_pebs); | 545 | if (!tracer) |
546 | return -EINVAL; | ||
547 | |||
548 | if (!pos) | ||
549 | return -EINVAL; | ||
550 | |||
551 | *pos = ds_get_end(tracer->ds.context, ds_pebs); | ||
552 | |||
553 | return 0; | ||
592 | } | 554 | } |
593 | 555 | ||
594 | static int ds_access(struct task_struct *task, size_t index, | 556 | static int ds_access(struct ds_context *context, enum ds_qualifier qual, |
595 | const void **record, enum ds_qualifier qual) | 557 | size_t index, const void **record) |
596 | { | 558 | { |
597 | struct ds_context *context; | ||
598 | unsigned long base, idx; | 559 | unsigned long base, idx; |
599 | int error; | ||
600 | 560 | ||
601 | if (!record) | 561 | if (!record) |
602 | return -EINVAL; | 562 | return -EINVAL; |
603 | 563 | ||
604 | context = ds_get_context(task); | ||
605 | error = ds_validate_access(context, qual); | ||
606 | if (error < 0) | ||
607 | goto out; | ||
608 | |||
609 | base = ds_get(context->ds, qual, ds_buffer_base); | 564 | base = ds_get(context->ds, qual, ds_buffer_base); |
610 | idx = base + (index * ds_cfg.sizeof_rec[qual]); | 565 | idx = base + (index * ds_cfg.sizeof_rec[qual]); |
611 | 566 | ||
612 | error = -EINVAL; | ||
613 | if (idx > ds_get(context->ds, qual, ds_absolute_maximum)) | 567 | if (idx > ds_get(context->ds, qual, ds_absolute_maximum)) |
614 | goto out; | 568 | return -EINVAL; |
615 | 569 | ||
616 | *record = (const void *)idx; | 570 | *record = (const void *)idx; |
617 | error = ds_cfg.sizeof_rec[qual]; | 571 | |
618 | out: | 572 | return ds_cfg.sizeof_rec[qual]; |
619 | ds_put_context(context); | ||
620 | return error; | ||
621 | } | 573 | } |
622 | 574 | ||
623 | int ds_access_bts(struct task_struct *task, size_t index, const void **record) | 575 | int ds_access_bts(struct bts_tracer *tracer, size_t index, |
576 | const void **record) | ||
624 | { | 577 | { |
625 | return ds_access(task, index, record, ds_bts); | 578 | if (!tracer) |
579 | return -EINVAL; | ||
580 | |||
581 | return ds_access(tracer->ds.context, ds_bts, index, record); | ||
626 | } | 582 | } |
627 | 583 | ||
628 | int ds_access_pebs(struct task_struct *task, size_t index, const void **record) | 584 | int ds_access_pebs(struct pebs_tracer *tracer, size_t index, |
585 | const void **record) | ||
629 | { | 586 | { |
630 | return ds_access(task, index, record, ds_pebs); | 587 | if (!tracer) |
588 | return -EINVAL; | ||
589 | |||
590 | return ds_access(tracer->ds.context, ds_pebs, index, record); | ||
631 | } | 591 | } |
632 | 592 | ||
633 | static int ds_write(struct task_struct *task, const void *record, size_t size, | 593 | static int ds_write(struct ds_context *context, enum ds_qualifier qual, |
634 | enum ds_qualifier qual, int force) | 594 | const void *record, size_t size) |
635 | { | 595 | { |
636 | struct ds_context *context; | 596 | int bytes_written = 0; |
637 | int error; | ||
638 | 597 | ||
639 | if (!record) | 598 | if (!record) |
640 | return -EINVAL; | 599 | return -EINVAL; |
641 | 600 | ||
642 | error = -EPERM; | ||
643 | context = ds_get_context(task); | ||
644 | if (!context) | ||
645 | goto out; | ||
646 | |||
647 | if (!force) { | ||
648 | error = ds_validate_access(context, qual); | ||
649 | if (error < 0) | ||
650 | goto out; | ||
651 | } | ||
652 | |||
653 | error = 0; | ||
654 | while (size) { | 601 | while (size) { |
655 | unsigned long base, index, end, write_end, int_th; | 602 | unsigned long base, index, end, write_end, int_th; |
656 | unsigned long write_size, adj_write_size; | 603 | unsigned long write_size, adj_write_size; |
@@ -678,14 +625,14 @@ static int ds_write(struct task_struct *task, const void *record, size_t size, | |||
678 | write_end = end; | 625 | write_end = end; |
679 | 626 | ||
680 | if (write_end <= index) | 627 | if (write_end <= index) |
681 | goto out; | 628 | break; |
682 | 629 | ||
683 | write_size = min((unsigned long) size, write_end - index); | 630 | write_size = min((unsigned long) size, write_end - index); |
684 | memcpy((void *)index, record, write_size); | 631 | memcpy((void *)index, record, write_size); |
685 | 632 | ||
686 | record = (const char *)record + write_size; | 633 | record = (const char *)record + write_size; |
687 | size -= write_size; | 634 | size -= write_size; |
688 | error += write_size; | 635 | bytes_written += write_size; |
689 | 636 | ||
690 | adj_write_size = write_size / ds_cfg.sizeof_rec[qual]; | 637 | adj_write_size = write_size / ds_cfg.sizeof_rec[qual]; |
691 | adj_write_size *= ds_cfg.sizeof_rec[qual]; | 638 | adj_write_size *= ds_cfg.sizeof_rec[qual]; |
@@ -700,47 +647,32 @@ static int ds_write(struct task_struct *task, const void *record, size_t size, | |||
700 | ds_set(context->ds, qual, ds_index, index); | 647 | ds_set(context->ds, qual, ds_index, index); |
701 | 648 | ||
702 | if (index >= int_th) | 649 | if (index >= int_th) |
703 | ds_overflow(task, context, qual); | 650 | ds_overflow(context, qual); |
704 | } | 651 | } |
705 | 652 | ||
706 | out: | 653 | return bytes_written; |
707 | ds_put_context(context); | ||
708 | return error; | ||
709 | } | 654 | } |
710 | 655 | ||
711 | int ds_write_bts(struct task_struct *task, const void *record, size_t size) | 656 | int ds_write_bts(struct bts_tracer *tracer, const void *record, size_t size) |
712 | { | 657 | { |
713 | return ds_write(task, record, size, ds_bts, /* force = */ 0); | 658 | if (!tracer) |
714 | } | 659 | return -EINVAL; |
715 | 660 | ||
716 | int ds_write_pebs(struct task_struct *task, const void *record, size_t size) | 661 | return ds_write(tracer->ds.context, ds_bts, record, size); |
717 | { | ||
718 | return ds_write(task, record, size, ds_pebs, /* force = */ 0); | ||
719 | } | 662 | } |
720 | 663 | ||
721 | int ds_unchecked_write_bts(struct task_struct *task, | 664 | int ds_write_pebs(struct pebs_tracer *tracer, const void *record, size_t size) |
722 | const void *record, size_t size) | ||
723 | { | 665 | { |
724 | return ds_write(task, record, size, ds_bts, /* force = */ 1); | 666 | if (!tracer) |
725 | } | 667 | return -EINVAL; |
726 | 668 | ||
727 | int ds_unchecked_write_pebs(struct task_struct *task, | 669 | return ds_write(tracer->ds.context, ds_pebs, record, size); |
728 | const void *record, size_t size) | ||
729 | { | ||
730 | return ds_write(task, record, size, ds_pebs, /* force = */ 1); | ||
731 | } | 670 | } |
732 | 671 | ||
733 | static int ds_reset_or_clear(struct task_struct *task, | 672 | static void ds_reset_or_clear(struct ds_context *context, |
734 | enum ds_qualifier qual, int clear) | 673 | enum ds_qualifier qual, int clear) |
735 | { | 674 | { |
736 | struct ds_context *context; | ||
737 | unsigned long base, end; | 675 | unsigned long base, end; |
738 | int error; | ||
739 | |||
740 | context = ds_get_context(task); | ||
741 | error = ds_validate_access(context, qual); | ||
742 | if (error < 0) | ||
743 | goto out; | ||
744 | 676 | ||
745 | base = ds_get(context->ds, qual, ds_buffer_base); | 677 | base = ds_get(context->ds, qual, ds_buffer_base); |
746 | end = ds_get(context->ds, qual, ds_absolute_maximum); | 678 | end = ds_get(context->ds, qual, ds_absolute_maximum); |
@@ -749,70 +681,69 @@ static int ds_reset_or_clear(struct task_struct *task, | |||
749 | memset((void *)base, 0, end - base); | 681 | memset((void *)base, 0, end - base); |
750 | 682 | ||
751 | ds_set(context->ds, qual, ds_index, base); | 683 | ds_set(context->ds, qual, ds_index, base); |
752 | |||
753 | error = 0; | ||
754 | out: | ||
755 | ds_put_context(context); | ||
756 | return error; | ||
757 | } | 684 | } |
758 | 685 | ||
759 | int ds_reset_bts(struct task_struct *task) | 686 | int ds_reset_bts(struct bts_tracer *tracer) |
760 | { | 687 | { |
761 | return ds_reset_or_clear(task, ds_bts, /* clear = */ 0); | 688 | if (!tracer) |
689 | return -EINVAL; | ||
690 | |||
691 | ds_reset_or_clear(tracer->ds.context, ds_bts, /* clear = */ 0); | ||
692 | |||
693 | return 0; | ||
762 | } | 694 | } |
763 | 695 | ||
764 | int ds_reset_pebs(struct task_struct *task) | 696 | int ds_reset_pebs(struct pebs_tracer *tracer) |
765 | { | 697 | { |
766 | return ds_reset_or_clear(task, ds_pebs, /* clear = */ 0); | 698 | if (!tracer) |
699 | return -EINVAL; | ||
700 | |||
701 | ds_reset_or_clear(tracer->ds.context, ds_pebs, /* clear = */ 0); | ||
702 | |||
703 | return 0; | ||
767 | } | 704 | } |
768 | 705 | ||
769 | int ds_clear_bts(struct task_struct *task) | 706 | int ds_clear_bts(struct bts_tracer *tracer) |
770 | { | 707 | { |
771 | return ds_reset_or_clear(task, ds_bts, /* clear = */ 1); | 708 | if (!tracer) |
709 | return -EINVAL; | ||
710 | |||
711 | ds_reset_or_clear(tracer->ds.context, ds_bts, /* clear = */ 1); | ||
712 | |||
713 | return 0; | ||
772 | } | 714 | } |
773 | 715 | ||
774 | int ds_clear_pebs(struct task_struct *task) | 716 | int ds_clear_pebs(struct pebs_tracer *tracer) |
775 | { | 717 | { |
776 | return ds_reset_or_clear(task, ds_pebs, /* clear = */ 1); | 718 | if (!tracer) |
719 | return -EINVAL; | ||
720 | |||
721 | ds_reset_or_clear(tracer->ds.context, ds_pebs, /* clear = */ 1); | ||
722 | |||
723 | return 0; | ||
777 | } | 724 | } |
778 | 725 | ||
779 | int ds_get_pebs_reset(struct task_struct *task, u64 *value) | 726 | int ds_get_pebs_reset(struct pebs_tracer *tracer, u64 *value) |
780 | { | 727 | { |
781 | struct ds_context *context; | 728 | if (!tracer) |
782 | int error; | 729 | return -EINVAL; |
783 | 730 | ||
784 | if (!value) | 731 | if (!value) |
785 | return -EINVAL; | 732 | return -EINVAL; |
786 | 733 | ||
787 | context = ds_get_context(task); | 734 | *value = *(u64 *)(tracer->ds.context->ds + (ds_cfg.sizeof_field * 8)); |
788 | error = ds_validate_access(context, ds_pebs); | ||
789 | if (error < 0) | ||
790 | goto out; | ||
791 | 735 | ||
792 | *value = *(u64 *)(context->ds + (ds_cfg.sizeof_field * 8)); | 736 | return 0; |
793 | |||
794 | error = 0; | ||
795 | out: | ||
796 | ds_put_context(context); | ||
797 | return error; | ||
798 | } | 737 | } |
799 | 738 | ||
800 | int ds_set_pebs_reset(struct task_struct *task, u64 value) | 739 | int ds_set_pebs_reset(struct pebs_tracer *tracer, u64 value) |
801 | { | 740 | { |
802 | struct ds_context *context; | 741 | if (!tracer) |
803 | int error; | 742 | return -EINVAL; |
804 | |||
805 | context = ds_get_context(task); | ||
806 | error = ds_validate_access(context, ds_pebs); | ||
807 | if (error < 0) | ||
808 | goto out; | ||
809 | 743 | ||
810 | *(u64 *)(context->ds + (ds_cfg.sizeof_field * 8)) = value; | 744 | *(u64 *)(tracer->ds.context->ds + (ds_cfg.sizeof_field * 8)) = value; |
811 | 745 | ||
812 | error = 0; | 746 | return 0; |
813 | out: | ||
814 | ds_put_context(context); | ||
815 | return error; | ||
816 | } | 747 | } |
817 | 748 | ||
818 | static const struct ds_configuration ds_cfg_var = { | 749 | static const struct ds_configuration ds_cfg_var = { |
@@ -840,6 +771,10 @@ static inline void | |||
840 | ds_configure(const struct ds_configuration *cfg) | 771 | ds_configure(const struct ds_configuration *cfg) |
841 | { | 772 | { |
842 | ds_cfg = *cfg; | 773 | ds_cfg = *cfg; |
774 | |||
775 | printk(KERN_INFO "DS available\n"); | ||
776 | |||
777 | BUG_ON(MAX_SIZEOF_DS < ds_cfg.sizeof_ds); | ||
843 | } | 778 | } |
844 | 779 | ||
845 | void __cpuinit ds_init_intel(struct cpuinfo_x86 *c) | 780 | void __cpuinit ds_init_intel(struct cpuinfo_x86 *c) |
@@ -847,17 +782,16 @@ void __cpuinit ds_init_intel(struct cpuinfo_x86 *c) | |||
847 | switch (c->x86) { | 782 | switch (c->x86) { |
848 | case 0x6: | 783 | case 0x6: |
849 | switch (c->x86_model) { | 784 | switch (c->x86_model) { |
785 | case 0 ... 0xC: | ||
786 | /* sorry, don't know about them */ | ||
787 | break; | ||
850 | case 0xD: | 788 | case 0xD: |
851 | case 0xE: /* Pentium M */ | 789 | case 0xE: /* Pentium M */ |
852 | ds_configure(&ds_cfg_var); | 790 | ds_configure(&ds_cfg_var); |
853 | break; | 791 | break; |
854 | case 0xF: /* Core2 */ | 792 | default: /* Core2, Atom, ... */ |
855 | case 0x1C: /* Atom */ | ||
856 | ds_configure(&ds_cfg_64); | 793 | ds_configure(&ds_cfg_64); |
857 | break; | 794 | break; |
858 | default: | ||
859 | /* sorry, don't know about them */ | ||
860 | break; | ||
861 | } | 795 | } |
862 | break; | 796 | break; |
863 | case 0xF: | 797 | case 0xF: |
@@ -884,6 +818,8 @@ void ds_free(struct ds_context *context) | |||
884 | * is dying. There should not be any user of that context left | 818 | * is dying. There should not be any user of that context left |
885 | * to disturb us, anymore. */ | 819 | * to disturb us, anymore. */ |
886 | unsigned long leftovers = context->count; | 820 | unsigned long leftovers = context->count; |
887 | while (leftovers--) | 821 | while (leftovers--) { |
822 | put_tracer(context->task); | ||
888 | ds_put_context(context); | 823 | ds_put_context(context); |
824 | } | ||
889 | } | 825 | } |
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c new file mode 100644 index 000000000000..6b1f6f6f8661 --- /dev/null +++ b/arch/x86/kernel/dumpstack.c | |||
@@ -0,0 +1,351 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
3 | * Copyright (C) 2000, 2001, 2002 Andi Kleen, SuSE Labs | ||
4 | */ | ||
5 | #include <linux/kallsyms.h> | ||
6 | #include <linux/kprobes.h> | ||
7 | #include <linux/uaccess.h> | ||
8 | #include <linux/utsname.h> | ||
9 | #include <linux/hardirq.h> | ||
10 | #include <linux/kdebug.h> | ||
11 | #include <linux/module.h> | ||
12 | #include <linux/ptrace.h> | ||
13 | #include <linux/kexec.h> | ||
14 | #include <linux/bug.h> | ||
15 | #include <linux/nmi.h> | ||
16 | #include <linux/sysfs.h> | ||
17 | |||
18 | #include <asm/stacktrace.h> | ||
19 | |||
20 | #include "dumpstack.h" | ||
21 | |||
22 | int panic_on_unrecovered_nmi; | ||
23 | unsigned int code_bytes = 64; | ||
24 | int kstack_depth_to_print = 3 * STACKSLOTS_PER_LINE; | ||
25 | static int die_counter; | ||
26 | |||
27 | void printk_address(unsigned long address, int reliable) | ||
28 | { | ||
29 | printk(" [<%p>] %s%pS\n", (void *) address, | ||
30 | reliable ? "" : "? ", (void *) address); | ||
31 | } | ||
32 | |||
33 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
34 | static void | ||
35 | print_ftrace_graph_addr(unsigned long addr, void *data, | ||
36 | const struct stacktrace_ops *ops, | ||
37 | struct thread_info *tinfo, int *graph) | ||
38 | { | ||
39 | struct task_struct *task = tinfo->task; | ||
40 | unsigned long ret_addr; | ||
41 | int index = task->curr_ret_stack; | ||
42 | |||
43 | if (addr != (unsigned long)return_to_handler) | ||
44 | return; | ||
45 | |||
46 | if (!task->ret_stack || index < *graph) | ||
47 | return; | ||
48 | |||
49 | index -= *graph; | ||
50 | ret_addr = task->ret_stack[index].ret; | ||
51 | |||
52 | ops->address(data, ret_addr, 1); | ||
53 | |||
54 | (*graph)++; | ||
55 | } | ||
56 | #else | ||
57 | static inline void | ||
58 | print_ftrace_graph_addr(unsigned long addr, void *data, | ||
59 | const struct stacktrace_ops *ops, | ||
60 | struct thread_info *tinfo, int *graph) | ||
61 | { } | ||
62 | #endif | ||
63 | |||
64 | /* | ||
65 | * x86-64 can have up to three kernel stacks: | ||
66 | * process stack | ||
67 | * interrupt stack | ||
68 | * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack | ||
69 | */ | ||
70 | |||
71 | static inline int valid_stack_ptr(struct thread_info *tinfo, | ||
72 | void *p, unsigned int size, void *end) | ||
73 | { | ||
74 | void *t = tinfo; | ||
75 | if (end) { | ||
76 | if (p < end && p >= (end-THREAD_SIZE)) | ||
77 | return 1; | ||
78 | else | ||
79 | return 0; | ||
80 | } | ||
81 | return p > t && p < t + THREAD_SIZE - size; | ||
82 | } | ||
83 | |||
84 | unsigned long | ||
85 | print_context_stack(struct thread_info *tinfo, | ||
86 | unsigned long *stack, unsigned long bp, | ||
87 | const struct stacktrace_ops *ops, void *data, | ||
88 | unsigned long *end, int *graph) | ||
89 | { | ||
90 | struct stack_frame *frame = (struct stack_frame *)bp; | ||
91 | |||
92 | while (valid_stack_ptr(tinfo, stack, sizeof(*stack), end)) { | ||
93 | unsigned long addr; | ||
94 | |||
95 | addr = *stack; | ||
96 | if (__kernel_text_address(addr)) { | ||
97 | if ((unsigned long) stack == bp + sizeof(long)) { | ||
98 | ops->address(data, addr, 1); | ||
99 | frame = frame->next_frame; | ||
100 | bp = (unsigned long) frame; | ||
101 | } else { | ||
102 | ops->address(data, addr, bp == 0); | ||
103 | } | ||
104 | print_ftrace_graph_addr(addr, data, ops, tinfo, graph); | ||
105 | } | ||
106 | stack++; | ||
107 | } | ||
108 | return bp; | ||
109 | } | ||
110 | |||
111 | |||
112 | static void | ||
113 | print_trace_warning_symbol(void *data, char *msg, unsigned long symbol) | ||
114 | { | ||
115 | printk(data); | ||
116 | print_symbol(msg, symbol); | ||
117 | printk("\n"); | ||
118 | } | ||
119 | |||
120 | static void print_trace_warning(void *data, char *msg) | ||
121 | { | ||
122 | printk("%s%s\n", (char *)data, msg); | ||
123 | } | ||
124 | |||
125 | static int print_trace_stack(void *data, char *name) | ||
126 | { | ||
127 | printk("%s <%s> ", (char *)data, name); | ||
128 | return 0; | ||
129 | } | ||
130 | |||
131 | /* | ||
132 | * Print one address/symbol entries per line. | ||
133 | */ | ||
134 | static void print_trace_address(void *data, unsigned long addr, int reliable) | ||
135 | { | ||
136 | touch_nmi_watchdog(); | ||
137 | printk(data); | ||
138 | printk_address(addr, reliable); | ||
139 | } | ||
140 | |||
141 | static const struct stacktrace_ops print_trace_ops = { | ||
142 | .warning = print_trace_warning, | ||
143 | .warning_symbol = print_trace_warning_symbol, | ||
144 | .stack = print_trace_stack, | ||
145 | .address = print_trace_address, | ||
146 | }; | ||
147 | |||
148 | void | ||
149 | show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
150 | unsigned long *stack, unsigned long bp, char *log_lvl) | ||
151 | { | ||
152 | printk("%sCall Trace:\n", log_lvl); | ||
153 | dump_trace(task, regs, stack, bp, &print_trace_ops, log_lvl); | ||
154 | } | ||
155 | |||
156 | void show_trace(struct task_struct *task, struct pt_regs *regs, | ||
157 | unsigned long *stack, unsigned long bp) | ||
158 | { | ||
159 | show_trace_log_lvl(task, regs, stack, bp, ""); | ||
160 | } | ||
161 | |||
162 | void show_stack(struct task_struct *task, unsigned long *sp) | ||
163 | { | ||
164 | show_stack_log_lvl(task, NULL, sp, 0, ""); | ||
165 | } | ||
166 | |||
167 | /* | ||
168 | * The architecture-independent dump_stack generator | ||
169 | */ | ||
170 | void dump_stack(void) | ||
171 | { | ||
172 | unsigned long bp = 0; | ||
173 | unsigned long stack; | ||
174 | |||
175 | #ifdef CONFIG_FRAME_POINTER | ||
176 | if (!bp) | ||
177 | get_bp(bp); | ||
178 | #endif | ||
179 | |||
180 | printk("Pid: %d, comm: %.20s %s %s %.*s\n", | ||
181 | current->pid, current->comm, print_tainted(), | ||
182 | init_utsname()->release, | ||
183 | (int)strcspn(init_utsname()->version, " "), | ||
184 | init_utsname()->version); | ||
185 | show_trace(NULL, NULL, &stack, bp); | ||
186 | } | ||
187 | EXPORT_SYMBOL(dump_stack); | ||
188 | |||
189 | static raw_spinlock_t die_lock = __RAW_SPIN_LOCK_UNLOCKED; | ||
190 | static int die_owner = -1; | ||
191 | static unsigned int die_nest_count; | ||
192 | |||
193 | unsigned __kprobes long oops_begin(void) | ||
194 | { | ||
195 | int cpu; | ||
196 | unsigned long flags; | ||
197 | |||
198 | oops_enter(); | ||
199 | |||
200 | /* racy, but better than risking deadlock. */ | ||
201 | raw_local_irq_save(flags); | ||
202 | cpu = smp_processor_id(); | ||
203 | if (!__raw_spin_trylock(&die_lock)) { | ||
204 | if (cpu == die_owner) | ||
205 | /* nested oops. should stop eventually */; | ||
206 | else | ||
207 | __raw_spin_lock(&die_lock); | ||
208 | } | ||
209 | die_nest_count++; | ||
210 | die_owner = cpu; | ||
211 | console_verbose(); | ||
212 | bust_spinlocks(1); | ||
213 | return flags; | ||
214 | } | ||
215 | |||
216 | void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr) | ||
217 | { | ||
218 | if (regs && kexec_should_crash(current)) | ||
219 | crash_kexec(regs); | ||
220 | |||
221 | bust_spinlocks(0); | ||
222 | die_owner = -1; | ||
223 | add_taint(TAINT_DIE); | ||
224 | die_nest_count--; | ||
225 | if (!die_nest_count) | ||
226 | /* Nest count reaches zero, release the lock. */ | ||
227 | __raw_spin_unlock(&die_lock); | ||
228 | raw_local_irq_restore(flags); | ||
229 | oops_exit(); | ||
230 | |||
231 | if (!signr) | ||
232 | return; | ||
233 | if (in_interrupt()) | ||
234 | panic("Fatal exception in interrupt"); | ||
235 | if (panic_on_oops) | ||
236 | panic("Fatal exception"); | ||
237 | do_exit(signr); | ||
238 | } | ||
239 | |||
240 | int __kprobes __die(const char *str, struct pt_regs *regs, long err) | ||
241 | { | ||
242 | #ifdef CONFIG_X86_32 | ||
243 | unsigned short ss; | ||
244 | unsigned long sp; | ||
245 | #endif | ||
246 | printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff, ++die_counter); | ||
247 | #ifdef CONFIG_PREEMPT | ||
248 | printk("PREEMPT "); | ||
249 | #endif | ||
250 | #ifdef CONFIG_SMP | ||
251 | printk("SMP "); | ||
252 | #endif | ||
253 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
254 | printk("DEBUG_PAGEALLOC"); | ||
255 | #endif | ||
256 | printk("\n"); | ||
257 | sysfs_printk_last_file(); | ||
258 | if (notify_die(DIE_OOPS, str, regs, err, | ||
259 | current->thread.trap_no, SIGSEGV) == NOTIFY_STOP) | ||
260 | return 1; | ||
261 | |||
262 | show_registers(regs); | ||
263 | #ifdef CONFIG_X86_32 | ||
264 | sp = (unsigned long) (®s->sp); | ||
265 | savesegment(ss, ss); | ||
266 | if (user_mode(regs)) { | ||
267 | sp = regs->sp; | ||
268 | ss = regs->ss & 0xffff; | ||
269 | } | ||
270 | printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip); | ||
271 | print_symbol("%s", regs->ip); | ||
272 | printk(" SS:ESP %04x:%08lx\n", ss, sp); | ||
273 | #else | ||
274 | /* Executive summary in case the oops scrolled away */ | ||
275 | printk(KERN_ALERT "RIP "); | ||
276 | printk_address(regs->ip, 1); | ||
277 | printk(" RSP <%016lx>\n", regs->sp); | ||
278 | #endif | ||
279 | return 0; | ||
280 | } | ||
281 | |||
282 | /* | ||
283 | * This is gone through when something in the kernel has done something bad | ||
284 | * and is about to be terminated: | ||
285 | */ | ||
286 | void die(const char *str, struct pt_regs *regs, long err) | ||
287 | { | ||
288 | unsigned long flags = oops_begin(); | ||
289 | int sig = SIGSEGV; | ||
290 | |||
291 | if (!user_mode_vm(regs)) | ||
292 | report_bug(regs->ip, regs); | ||
293 | |||
294 | if (__die(str, regs, err)) | ||
295 | sig = 0; | ||
296 | oops_end(flags, regs, sig); | ||
297 | } | ||
298 | |||
299 | void notrace __kprobes | ||
300 | die_nmi(char *str, struct pt_regs *regs, int do_panic) | ||
301 | { | ||
302 | unsigned long flags; | ||
303 | |||
304 | if (notify_die(DIE_NMIWATCHDOG, str, regs, 0, 2, SIGINT) == NOTIFY_STOP) | ||
305 | return; | ||
306 | |||
307 | /* | ||
308 | * We are in trouble anyway, lets at least try | ||
309 | * to get a message out. | ||
310 | */ | ||
311 | flags = oops_begin(); | ||
312 | printk(KERN_EMERG "%s", str); | ||
313 | printk(" on CPU%d, ip %08lx, registers:\n", | ||
314 | smp_processor_id(), regs->ip); | ||
315 | show_registers(regs); | ||
316 | oops_end(flags, regs, 0); | ||
317 | if (do_panic || panic_on_oops) | ||
318 | panic("Non maskable interrupt"); | ||
319 | nmi_exit(); | ||
320 | local_irq_enable(); | ||
321 | do_exit(SIGBUS); | ||
322 | } | ||
323 | |||
324 | static int __init oops_setup(char *s) | ||
325 | { | ||
326 | if (!s) | ||
327 | return -EINVAL; | ||
328 | if (!strcmp(s, "panic")) | ||
329 | panic_on_oops = 1; | ||
330 | return 0; | ||
331 | } | ||
332 | early_param("oops", oops_setup); | ||
333 | |||
334 | static int __init kstack_setup(char *s) | ||
335 | { | ||
336 | if (!s) | ||
337 | return -EINVAL; | ||
338 | kstack_depth_to_print = simple_strtoul(s, NULL, 0); | ||
339 | return 0; | ||
340 | } | ||
341 | early_param("kstack", kstack_setup); | ||
342 | |||
343 | static int __init code_bytes_setup(char *s) | ||
344 | { | ||
345 | code_bytes = simple_strtoul(s, NULL, 0); | ||
346 | if (code_bytes > 8192) | ||
347 | code_bytes = 8192; | ||
348 | |||
349 | return 1; | ||
350 | } | ||
351 | __setup("code_bytes=", code_bytes_setup); | ||
diff --git a/arch/x86/kernel/dumpstack.h b/arch/x86/kernel/dumpstack.h new file mode 100644 index 000000000000..da87590b8698 --- /dev/null +++ b/arch/x86/kernel/dumpstack.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
3 | * Copyright (C) 2000, 2001, 2002 Andi Kleen, SuSE Labs | ||
4 | */ | ||
5 | |||
6 | #ifndef DUMPSTACK_H | ||
7 | #define DUMPSTACK_H | ||
8 | |||
9 | #ifdef CONFIG_X86_32 | ||
10 | #define STACKSLOTS_PER_LINE 8 | ||
11 | #define get_bp(bp) asm("movl %%ebp, %0" : "=r" (bp) :) | ||
12 | #else | ||
13 | #define STACKSLOTS_PER_LINE 4 | ||
14 | #define get_bp(bp) asm("movq %%rbp, %0" : "=r" (bp) :) | ||
15 | #endif | ||
16 | |||
17 | extern unsigned long | ||
18 | print_context_stack(struct thread_info *tinfo, | ||
19 | unsigned long *stack, unsigned long bp, | ||
20 | const struct stacktrace_ops *ops, void *data, | ||
21 | unsigned long *end, int *graph); | ||
22 | |||
23 | extern void | ||
24 | show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
25 | unsigned long *stack, unsigned long bp, char *log_lvl); | ||
26 | |||
27 | extern void | ||
28 | show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
29 | unsigned long *sp, unsigned long bp, char *log_lvl); | ||
30 | |||
31 | extern unsigned int code_bytes; | ||
32 | extern int kstack_depth_to_print; | ||
33 | |||
34 | /* The form of the top of the frame on the stack */ | ||
35 | struct stack_frame { | ||
36 | struct stack_frame *next_frame; | ||
37 | unsigned long return_address; | ||
38 | }; | ||
39 | #endif | ||
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c index b3614752197b..d593cd1f58dc 100644 --- a/arch/x86/kernel/dumpstack_32.c +++ b/arch/x86/kernel/dumpstack_32.c | |||
@@ -17,69 +17,14 @@ | |||
17 | 17 | ||
18 | #include <asm/stacktrace.h> | 18 | #include <asm/stacktrace.h> |
19 | 19 | ||
20 | #define STACKSLOTS_PER_LINE 8 | 20 | #include "dumpstack.h" |
21 | #define get_bp(bp) asm("movl %%ebp, %0" : "=r" (bp) :) | ||
22 | |||
23 | int panic_on_unrecovered_nmi; | ||
24 | int kstack_depth_to_print = 3 * STACKSLOTS_PER_LINE; | ||
25 | static unsigned int code_bytes = 64; | ||
26 | static int die_counter; | ||
27 | |||
28 | void printk_address(unsigned long address, int reliable) | ||
29 | { | ||
30 | printk(" [<%p>] %s%pS\n", (void *) address, | ||
31 | reliable ? "" : "? ", (void *) address); | ||
32 | } | ||
33 | |||
34 | static inline int valid_stack_ptr(struct thread_info *tinfo, | ||
35 | void *p, unsigned int size, void *end) | ||
36 | { | ||
37 | void *t = tinfo; | ||
38 | if (end) { | ||
39 | if (p < end && p >= (end-THREAD_SIZE)) | ||
40 | return 1; | ||
41 | else | ||
42 | return 0; | ||
43 | } | ||
44 | return p > t && p < t + THREAD_SIZE - size; | ||
45 | } | ||
46 | |||
47 | /* The form of the top of the frame on the stack */ | ||
48 | struct stack_frame { | ||
49 | struct stack_frame *next_frame; | ||
50 | unsigned long return_address; | ||
51 | }; | ||
52 | |||
53 | static inline unsigned long | ||
54 | print_context_stack(struct thread_info *tinfo, | ||
55 | unsigned long *stack, unsigned long bp, | ||
56 | const struct stacktrace_ops *ops, void *data, | ||
57 | unsigned long *end) | ||
58 | { | ||
59 | struct stack_frame *frame = (struct stack_frame *)bp; | ||
60 | |||
61 | while (valid_stack_ptr(tinfo, stack, sizeof(*stack), end)) { | ||
62 | unsigned long addr; | ||
63 | |||
64 | addr = *stack; | ||
65 | if (__kernel_text_address(addr)) { | ||
66 | if ((unsigned long) stack == bp + sizeof(long)) { | ||
67 | ops->address(data, addr, 1); | ||
68 | frame = frame->next_frame; | ||
69 | bp = (unsigned long) frame; | ||
70 | } else { | ||
71 | ops->address(data, addr, bp == 0); | ||
72 | } | ||
73 | } | ||
74 | stack++; | ||
75 | } | ||
76 | return bp; | ||
77 | } | ||
78 | 21 | ||
79 | void dump_trace(struct task_struct *task, struct pt_regs *regs, | 22 | void dump_trace(struct task_struct *task, struct pt_regs *regs, |
80 | unsigned long *stack, unsigned long bp, | 23 | unsigned long *stack, unsigned long bp, |
81 | const struct stacktrace_ops *ops, void *data) | 24 | const struct stacktrace_ops *ops, void *data) |
82 | { | 25 | { |
26 | int graph = 0; | ||
27 | |||
83 | if (!task) | 28 | if (!task) |
84 | task = current; | 29 | task = current; |
85 | 30 | ||
@@ -107,7 +52,8 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, | |||
107 | 52 | ||
108 | context = (struct thread_info *) | 53 | context = (struct thread_info *) |
109 | ((unsigned long)stack & (~(THREAD_SIZE - 1))); | 54 | ((unsigned long)stack & (~(THREAD_SIZE - 1))); |
110 | bp = print_context_stack(context, stack, bp, ops, data, NULL); | 55 | bp = print_context_stack(context, stack, bp, ops, |
56 | data, NULL, &graph); | ||
111 | 57 | ||
112 | stack = (unsigned long *)context->previous_esp; | 58 | stack = (unsigned long *)context->previous_esp; |
113 | if (!stack) | 59 | if (!stack) |
@@ -119,57 +65,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, | |||
119 | } | 65 | } |
120 | EXPORT_SYMBOL(dump_trace); | 66 | EXPORT_SYMBOL(dump_trace); |
121 | 67 | ||
122 | static void | 68 | void |
123 | print_trace_warning_symbol(void *data, char *msg, unsigned long symbol) | ||
124 | { | ||
125 | printk(data); | ||
126 | print_symbol(msg, symbol); | ||
127 | printk("\n"); | ||
128 | } | ||
129 | |||
130 | static void print_trace_warning(void *data, char *msg) | ||
131 | { | ||
132 | printk("%s%s\n", (char *)data, msg); | ||
133 | } | ||
134 | |||
135 | static int print_trace_stack(void *data, char *name) | ||
136 | { | ||
137 | printk("%s <%s> ", (char *)data, name); | ||
138 | return 0; | ||
139 | } | ||
140 | |||
141 | /* | ||
142 | * Print one address/symbol entries per line. | ||
143 | */ | ||
144 | static void print_trace_address(void *data, unsigned long addr, int reliable) | ||
145 | { | ||
146 | touch_nmi_watchdog(); | ||
147 | printk(data); | ||
148 | printk_address(addr, reliable); | ||
149 | } | ||
150 | |||
151 | static const struct stacktrace_ops print_trace_ops = { | ||
152 | .warning = print_trace_warning, | ||
153 | .warning_symbol = print_trace_warning_symbol, | ||
154 | .stack = print_trace_stack, | ||
155 | .address = print_trace_address, | ||
156 | }; | ||
157 | |||
158 | static void | ||
159 | show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
160 | unsigned long *stack, unsigned long bp, char *log_lvl) | ||
161 | { | ||
162 | printk("%sCall Trace:\n", log_lvl); | ||
163 | dump_trace(task, regs, stack, bp, &print_trace_ops, log_lvl); | ||
164 | } | ||
165 | |||
166 | void show_trace(struct task_struct *task, struct pt_regs *regs, | ||
167 | unsigned long *stack, unsigned long bp) | ||
168 | { | ||
169 | show_trace_log_lvl(task, regs, stack, bp, ""); | ||
170 | } | ||
171 | |||
172 | static void | ||
173 | show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | 69 | show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, |
174 | unsigned long *sp, unsigned long bp, char *log_lvl) | 70 | unsigned long *sp, unsigned long bp, char *log_lvl) |
175 | { | 71 | { |
@@ -196,33 +92,6 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | |||
196 | show_trace_log_lvl(task, regs, sp, bp, log_lvl); | 92 | show_trace_log_lvl(task, regs, sp, bp, log_lvl); |
197 | } | 93 | } |
198 | 94 | ||
199 | void show_stack(struct task_struct *task, unsigned long *sp) | ||
200 | { | ||
201 | show_stack_log_lvl(task, NULL, sp, 0, ""); | ||
202 | } | ||
203 | |||
204 | /* | ||
205 | * The architecture-independent dump_stack generator | ||
206 | */ | ||
207 | void dump_stack(void) | ||
208 | { | ||
209 | unsigned long bp = 0; | ||
210 | unsigned long stack; | ||
211 | |||
212 | #ifdef CONFIG_FRAME_POINTER | ||
213 | if (!bp) | ||
214 | get_bp(bp); | ||
215 | #endif | ||
216 | |||
217 | printk("Pid: %d, comm: %.20s %s %s %.*s\n", | ||
218 | current->pid, current->comm, print_tainted(), | ||
219 | init_utsname()->release, | ||
220 | (int)strcspn(init_utsname()->version, " "), | ||
221 | init_utsname()->version); | ||
222 | show_trace(NULL, NULL, &stack, bp); | ||
223 | } | ||
224 | |||
225 | EXPORT_SYMBOL(dump_stack); | ||
226 | 95 | ||
227 | void show_registers(struct pt_regs *regs) | 96 | void show_registers(struct pt_regs *regs) |
228 | { | 97 | { |
@@ -283,167 +152,3 @@ int is_valid_bugaddr(unsigned long ip) | |||
283 | return ud2 == 0x0b0f; | 152 | return ud2 == 0x0b0f; |
284 | } | 153 | } |
285 | 154 | ||
286 | static raw_spinlock_t die_lock = __RAW_SPIN_LOCK_UNLOCKED; | ||
287 | static int die_owner = -1; | ||
288 | static unsigned int die_nest_count; | ||
289 | |||
290 | unsigned __kprobes long oops_begin(void) | ||
291 | { | ||
292 | unsigned long flags; | ||
293 | |||
294 | oops_enter(); | ||
295 | |||
296 | if (die_owner != raw_smp_processor_id()) { | ||
297 | console_verbose(); | ||
298 | raw_local_irq_save(flags); | ||
299 | __raw_spin_lock(&die_lock); | ||
300 | die_owner = smp_processor_id(); | ||
301 | die_nest_count = 0; | ||
302 | bust_spinlocks(1); | ||
303 | } else { | ||
304 | raw_local_irq_save(flags); | ||
305 | } | ||
306 | die_nest_count++; | ||
307 | return flags; | ||
308 | } | ||
309 | |||
310 | void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr) | ||
311 | { | ||
312 | bust_spinlocks(0); | ||
313 | die_owner = -1; | ||
314 | add_taint(TAINT_DIE); | ||
315 | __raw_spin_unlock(&die_lock); | ||
316 | raw_local_irq_restore(flags); | ||
317 | |||
318 | if (!regs) | ||
319 | return; | ||
320 | |||
321 | if (kexec_should_crash(current)) | ||
322 | crash_kexec(regs); | ||
323 | if (in_interrupt()) | ||
324 | panic("Fatal exception in interrupt"); | ||
325 | if (panic_on_oops) | ||
326 | panic("Fatal exception"); | ||
327 | oops_exit(); | ||
328 | do_exit(signr); | ||
329 | } | ||
330 | |||
331 | int __kprobes __die(const char *str, struct pt_regs *regs, long err) | ||
332 | { | ||
333 | unsigned short ss; | ||
334 | unsigned long sp; | ||
335 | |||
336 | printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff, ++die_counter); | ||
337 | #ifdef CONFIG_PREEMPT | ||
338 | printk("PREEMPT "); | ||
339 | #endif | ||
340 | #ifdef CONFIG_SMP | ||
341 | printk("SMP "); | ||
342 | #endif | ||
343 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
344 | printk("DEBUG_PAGEALLOC"); | ||
345 | #endif | ||
346 | printk("\n"); | ||
347 | sysfs_printk_last_file(); | ||
348 | if (notify_die(DIE_OOPS, str, regs, err, | ||
349 | current->thread.trap_no, SIGSEGV) == NOTIFY_STOP) | ||
350 | return 1; | ||
351 | |||
352 | show_registers(regs); | ||
353 | /* Executive summary in case the oops scrolled away */ | ||
354 | sp = (unsigned long) (®s->sp); | ||
355 | savesegment(ss, ss); | ||
356 | if (user_mode(regs)) { | ||
357 | sp = regs->sp; | ||
358 | ss = regs->ss & 0xffff; | ||
359 | } | ||
360 | printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip); | ||
361 | print_symbol("%s", regs->ip); | ||
362 | printk(" SS:ESP %04x:%08lx\n", ss, sp); | ||
363 | return 0; | ||
364 | } | ||
365 | |||
366 | /* | ||
367 | * This is gone through when something in the kernel has done something bad | ||
368 | * and is about to be terminated: | ||
369 | */ | ||
370 | void die(const char *str, struct pt_regs *regs, long err) | ||
371 | { | ||
372 | unsigned long flags = oops_begin(); | ||
373 | |||
374 | if (die_nest_count < 3) { | ||
375 | report_bug(regs->ip, regs); | ||
376 | |||
377 | if (__die(str, regs, err)) | ||
378 | regs = NULL; | ||
379 | } else { | ||
380 | printk(KERN_EMERG "Recursive die() failure, output suppressed\n"); | ||
381 | } | ||
382 | |||
383 | oops_end(flags, regs, SIGSEGV); | ||
384 | } | ||
385 | |||
386 | static DEFINE_SPINLOCK(nmi_print_lock); | ||
387 | |||
388 | void notrace __kprobes | ||
389 | die_nmi(char *str, struct pt_regs *regs, int do_panic) | ||
390 | { | ||
391 | if (notify_die(DIE_NMIWATCHDOG, str, regs, 0, 2, SIGINT) == NOTIFY_STOP) | ||
392 | return; | ||
393 | |||
394 | spin_lock(&nmi_print_lock); | ||
395 | /* | ||
396 | * We are in trouble anyway, lets at least try | ||
397 | * to get a message out: | ||
398 | */ | ||
399 | bust_spinlocks(1); | ||
400 | printk(KERN_EMERG "%s", str); | ||
401 | printk(" on CPU%d, ip %08lx, registers:\n", | ||
402 | smp_processor_id(), regs->ip); | ||
403 | show_registers(regs); | ||
404 | if (do_panic) | ||
405 | panic("Non maskable interrupt"); | ||
406 | console_silent(); | ||
407 | spin_unlock(&nmi_print_lock); | ||
408 | |||
409 | /* | ||
410 | * If we are in kernel we are probably nested up pretty bad | ||
411 | * and might aswell get out now while we still can: | ||
412 | */ | ||
413 | if (!user_mode_vm(regs)) { | ||
414 | current->thread.trap_no = 2; | ||
415 | crash_kexec(regs); | ||
416 | } | ||
417 | |||
418 | bust_spinlocks(0); | ||
419 | do_exit(SIGSEGV); | ||
420 | } | ||
421 | |||
422 | static int __init oops_setup(char *s) | ||
423 | { | ||
424 | if (!s) | ||
425 | return -EINVAL; | ||
426 | if (!strcmp(s, "panic")) | ||
427 | panic_on_oops = 1; | ||
428 | return 0; | ||
429 | } | ||
430 | early_param("oops", oops_setup); | ||
431 | |||
432 | static int __init kstack_setup(char *s) | ||
433 | { | ||
434 | if (!s) | ||
435 | return -EINVAL; | ||
436 | kstack_depth_to_print = simple_strtoul(s, NULL, 0); | ||
437 | return 0; | ||
438 | } | ||
439 | early_param("kstack", kstack_setup); | ||
440 | |||
441 | static int __init code_bytes_setup(char *s) | ||
442 | { | ||
443 | code_bytes = simple_strtoul(s, NULL, 0); | ||
444 | if (code_bytes > 8192) | ||
445 | code_bytes = 8192; | ||
446 | |||
447 | return 1; | ||
448 | } | ||
449 | __setup("code_bytes=", code_bytes_setup); | ||
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index 96a5db7da8a7..c302d0707048 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
@@ -17,19 +17,7 @@ | |||
17 | 17 | ||
18 | #include <asm/stacktrace.h> | 18 | #include <asm/stacktrace.h> |
19 | 19 | ||
20 | #define STACKSLOTS_PER_LINE 4 | 20 | #include "dumpstack.h" |
21 | #define get_bp(bp) asm("movq %%rbp, %0" : "=r" (bp) :) | ||
22 | |||
23 | int panic_on_unrecovered_nmi; | ||
24 | int kstack_depth_to_print = 3 * STACKSLOTS_PER_LINE; | ||
25 | static unsigned int code_bytes = 64; | ||
26 | static int die_counter; | ||
27 | |||
28 | void printk_address(unsigned long address, int reliable) | ||
29 | { | ||
30 | printk(" [<%p>] %s%pS\n", (void *) address, | ||
31 | reliable ? "" : "? ", (void *) address); | ||
32 | } | ||
33 | 21 | ||
34 | static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | 22 | static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, |
35 | unsigned *usedp, char **idp) | 23 | unsigned *usedp, char **idp) |
@@ -113,51 +101,6 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
113 | * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack | 101 | * severe exception (double fault, nmi, stack fault, debug, mce) hardware stack |
114 | */ | 102 | */ |
115 | 103 | ||
116 | static inline int valid_stack_ptr(struct thread_info *tinfo, | ||
117 | void *p, unsigned int size, void *end) | ||
118 | { | ||
119 | void *t = tinfo; | ||
120 | if (end) { | ||
121 | if (p < end && p >= (end-THREAD_SIZE)) | ||
122 | return 1; | ||
123 | else | ||
124 | return 0; | ||
125 | } | ||
126 | return p > t && p < t + THREAD_SIZE - size; | ||
127 | } | ||
128 | |||
129 | /* The form of the top of the frame on the stack */ | ||
130 | struct stack_frame { | ||
131 | struct stack_frame *next_frame; | ||
132 | unsigned long return_address; | ||
133 | }; | ||
134 | |||
135 | static inline unsigned long | ||
136 | print_context_stack(struct thread_info *tinfo, | ||
137 | unsigned long *stack, unsigned long bp, | ||
138 | const struct stacktrace_ops *ops, void *data, | ||
139 | unsigned long *end) | ||
140 | { | ||
141 | struct stack_frame *frame = (struct stack_frame *)bp; | ||
142 | |||
143 | while (valid_stack_ptr(tinfo, stack, sizeof(*stack), end)) { | ||
144 | unsigned long addr; | ||
145 | |||
146 | addr = *stack; | ||
147 | if (__kernel_text_address(addr)) { | ||
148 | if ((unsigned long) stack == bp + sizeof(long)) { | ||
149 | ops->address(data, addr, 1); | ||
150 | frame = frame->next_frame; | ||
151 | bp = (unsigned long) frame; | ||
152 | } else { | ||
153 | ops->address(data, addr, bp == 0); | ||
154 | } | ||
155 | } | ||
156 | stack++; | ||
157 | } | ||
158 | return bp; | ||
159 | } | ||
160 | |||
161 | void dump_trace(struct task_struct *task, struct pt_regs *regs, | 104 | void dump_trace(struct task_struct *task, struct pt_regs *regs, |
162 | unsigned long *stack, unsigned long bp, | 105 | unsigned long *stack, unsigned long bp, |
163 | const struct stacktrace_ops *ops, void *data) | 106 | const struct stacktrace_ops *ops, void *data) |
@@ -166,6 +109,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, | |||
166 | unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr; | 109 | unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr; |
167 | unsigned used = 0; | 110 | unsigned used = 0; |
168 | struct thread_info *tinfo; | 111 | struct thread_info *tinfo; |
112 | int graph = 0; | ||
169 | 113 | ||
170 | if (!task) | 114 | if (!task) |
171 | task = current; | 115 | task = current; |
@@ -206,7 +150,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, | |||
206 | break; | 150 | break; |
207 | 151 | ||
208 | bp = print_context_stack(tinfo, stack, bp, ops, | 152 | bp = print_context_stack(tinfo, stack, bp, ops, |
209 | data, estack_end); | 153 | data, estack_end, &graph); |
210 | ops->stack(data, "<EOE>"); | 154 | ops->stack(data, "<EOE>"); |
211 | /* | 155 | /* |
212 | * We link to the next stack via the | 156 | * We link to the next stack via the |
@@ -225,7 +169,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, | |||
225 | if (ops->stack(data, "IRQ") < 0) | 169 | if (ops->stack(data, "IRQ") < 0) |
226 | break; | 170 | break; |
227 | bp = print_context_stack(tinfo, stack, bp, | 171 | bp = print_context_stack(tinfo, stack, bp, |
228 | ops, data, irqstack_end); | 172 | ops, data, irqstack_end, &graph); |
229 | /* | 173 | /* |
230 | * We link to the next stack (which would be | 174 | * We link to the next stack (which would be |
231 | * the process stack normally) the last | 175 | * the process stack normally) the last |
@@ -243,62 +187,12 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, | |||
243 | /* | 187 | /* |
244 | * This handles the process stack: | 188 | * This handles the process stack: |
245 | */ | 189 | */ |
246 | bp = print_context_stack(tinfo, stack, bp, ops, data, NULL); | 190 | bp = print_context_stack(tinfo, stack, bp, ops, data, NULL, &graph); |
247 | put_cpu(); | 191 | put_cpu(); |
248 | } | 192 | } |
249 | EXPORT_SYMBOL(dump_trace); | 193 | EXPORT_SYMBOL(dump_trace); |
250 | 194 | ||
251 | static void | 195 | void |
252 | print_trace_warning_symbol(void *data, char *msg, unsigned long symbol) | ||
253 | { | ||
254 | printk(data); | ||
255 | print_symbol(msg, symbol); | ||
256 | printk("\n"); | ||
257 | } | ||
258 | |||
259 | static void print_trace_warning(void *data, char *msg) | ||
260 | { | ||
261 | printk("%s%s\n", (char *)data, msg); | ||
262 | } | ||
263 | |||
264 | static int print_trace_stack(void *data, char *name) | ||
265 | { | ||
266 | printk("%s <%s> ", (char *)data, name); | ||
267 | return 0; | ||
268 | } | ||
269 | |||
270 | /* | ||
271 | * Print one address/symbol entries per line. | ||
272 | */ | ||
273 | static void print_trace_address(void *data, unsigned long addr, int reliable) | ||
274 | { | ||
275 | touch_nmi_watchdog(); | ||
276 | printk(data); | ||
277 | printk_address(addr, reliable); | ||
278 | } | ||
279 | |||
280 | static const struct stacktrace_ops print_trace_ops = { | ||
281 | .warning = print_trace_warning, | ||
282 | .warning_symbol = print_trace_warning_symbol, | ||
283 | .stack = print_trace_stack, | ||
284 | .address = print_trace_address, | ||
285 | }; | ||
286 | |||
287 | static void | ||
288 | show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
289 | unsigned long *stack, unsigned long bp, char *log_lvl) | ||
290 | { | ||
291 | printk("%sCall Trace:\n", log_lvl); | ||
292 | dump_trace(task, regs, stack, bp, &print_trace_ops, log_lvl); | ||
293 | } | ||
294 | |||
295 | void show_trace(struct task_struct *task, struct pt_regs *regs, | ||
296 | unsigned long *stack, unsigned long bp) | ||
297 | { | ||
298 | show_trace_log_lvl(task, regs, stack, bp, ""); | ||
299 | } | ||
300 | |||
301 | static void | ||
302 | show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | 196 | show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, |
303 | unsigned long *sp, unsigned long bp, char *log_lvl) | 197 | unsigned long *sp, unsigned long bp, char *log_lvl) |
304 | { | 198 | { |
@@ -342,33 +236,6 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | |||
342 | show_trace_log_lvl(task, regs, sp, bp, log_lvl); | 236 | show_trace_log_lvl(task, regs, sp, bp, log_lvl); |
343 | } | 237 | } |
344 | 238 | ||
345 | void show_stack(struct task_struct *task, unsigned long *sp) | ||
346 | { | ||
347 | show_stack_log_lvl(task, NULL, sp, 0, ""); | ||
348 | } | ||
349 | |||
350 | /* | ||
351 | * The architecture-independent dump_stack generator | ||
352 | */ | ||
353 | void dump_stack(void) | ||
354 | { | ||
355 | unsigned long bp = 0; | ||
356 | unsigned long stack; | ||
357 | |||
358 | #ifdef CONFIG_FRAME_POINTER | ||
359 | if (!bp) | ||
360 | get_bp(bp); | ||
361 | #endif | ||
362 | |||
363 | printk("Pid: %d, comm: %.20s %s %s %.*s\n", | ||
364 | current->pid, current->comm, print_tainted(), | ||
365 | init_utsname()->release, | ||
366 | (int)strcspn(init_utsname()->version, " "), | ||
367 | init_utsname()->version); | ||
368 | show_trace(NULL, NULL, &stack, bp); | ||
369 | } | ||
370 | EXPORT_SYMBOL(dump_stack); | ||
371 | |||
372 | void show_registers(struct pt_regs *regs) | 239 | void show_registers(struct pt_regs *regs) |
373 | { | 240 | { |
374 | int i; | 241 | int i; |
@@ -429,147 +296,3 @@ int is_valid_bugaddr(unsigned long ip) | |||
429 | return ud2 == 0x0b0f; | 296 | return ud2 == 0x0b0f; |
430 | } | 297 | } |
431 | 298 | ||
432 | static raw_spinlock_t die_lock = __RAW_SPIN_LOCK_UNLOCKED; | ||
433 | static int die_owner = -1; | ||
434 | static unsigned int die_nest_count; | ||
435 | |||
436 | unsigned __kprobes long oops_begin(void) | ||
437 | { | ||
438 | int cpu; | ||
439 | unsigned long flags; | ||
440 | |||
441 | oops_enter(); | ||
442 | |||
443 | /* racy, but better than risking deadlock. */ | ||
444 | raw_local_irq_save(flags); | ||
445 | cpu = smp_processor_id(); | ||
446 | if (!__raw_spin_trylock(&die_lock)) { | ||
447 | if (cpu == die_owner) | ||
448 | /* nested oops. should stop eventually */; | ||
449 | else | ||
450 | __raw_spin_lock(&die_lock); | ||
451 | } | ||
452 | die_nest_count++; | ||
453 | die_owner = cpu; | ||
454 | console_verbose(); | ||
455 | bust_spinlocks(1); | ||
456 | return flags; | ||
457 | } | ||
458 | |||
459 | void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr) | ||
460 | { | ||
461 | die_owner = -1; | ||
462 | bust_spinlocks(0); | ||
463 | die_nest_count--; | ||
464 | if (!die_nest_count) | ||
465 | /* Nest count reaches zero, release the lock. */ | ||
466 | __raw_spin_unlock(&die_lock); | ||
467 | raw_local_irq_restore(flags); | ||
468 | if (!regs) { | ||
469 | oops_exit(); | ||
470 | return; | ||
471 | } | ||
472 | if (in_interrupt()) | ||
473 | panic("Fatal exception in interrupt"); | ||
474 | if (panic_on_oops) | ||
475 | panic("Fatal exception"); | ||
476 | oops_exit(); | ||
477 | do_exit(signr); | ||
478 | } | ||
479 | |||
480 | int __kprobes __die(const char *str, struct pt_regs *regs, long err) | ||
481 | { | ||
482 | printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff, ++die_counter); | ||
483 | #ifdef CONFIG_PREEMPT | ||
484 | printk("PREEMPT "); | ||
485 | #endif | ||
486 | #ifdef CONFIG_SMP | ||
487 | printk("SMP "); | ||
488 | #endif | ||
489 | #ifdef CONFIG_DEBUG_PAGEALLOC | ||
490 | printk("DEBUG_PAGEALLOC"); | ||
491 | #endif | ||
492 | printk("\n"); | ||
493 | sysfs_printk_last_file(); | ||
494 | if (notify_die(DIE_OOPS, str, regs, err, | ||
495 | current->thread.trap_no, SIGSEGV) == NOTIFY_STOP) | ||
496 | return 1; | ||
497 | |||
498 | show_registers(regs); | ||
499 | add_taint(TAINT_DIE); | ||
500 | /* Executive summary in case the oops scrolled away */ | ||
501 | printk(KERN_ALERT "RIP "); | ||
502 | printk_address(regs->ip, 1); | ||
503 | printk(" RSP <%016lx>\n", regs->sp); | ||
504 | if (kexec_should_crash(current)) | ||
505 | crash_kexec(regs); | ||
506 | return 0; | ||
507 | } | ||
508 | |||
509 | void die(const char *str, struct pt_regs *regs, long err) | ||
510 | { | ||
511 | unsigned long flags = oops_begin(); | ||
512 | |||
513 | if (!user_mode(regs)) | ||
514 | report_bug(regs->ip, regs); | ||
515 | |||
516 | if (__die(str, regs, err)) | ||
517 | regs = NULL; | ||
518 | oops_end(flags, regs, SIGSEGV); | ||
519 | } | ||
520 | |||
521 | notrace __kprobes void | ||
522 | die_nmi(char *str, struct pt_regs *regs, int do_panic) | ||
523 | { | ||
524 | unsigned long flags; | ||
525 | |||
526 | if (notify_die(DIE_NMIWATCHDOG, str, regs, 0, 2, SIGINT) == NOTIFY_STOP) | ||
527 | return; | ||
528 | |||
529 | flags = oops_begin(); | ||
530 | /* | ||
531 | * We are in trouble anyway, lets at least try | ||
532 | * to get a message out. | ||
533 | */ | ||
534 | printk(KERN_EMERG "%s", str); | ||
535 | printk(" on CPU%d, ip %08lx, registers:\n", | ||
536 | smp_processor_id(), regs->ip); | ||
537 | show_registers(regs); | ||
538 | if (kexec_should_crash(current)) | ||
539 | crash_kexec(regs); | ||
540 | if (do_panic || panic_on_oops) | ||
541 | panic("Non maskable interrupt"); | ||
542 | oops_end(flags, NULL, SIGBUS); | ||
543 | nmi_exit(); | ||
544 | local_irq_enable(); | ||
545 | do_exit(SIGBUS); | ||
546 | } | ||
547 | |||
548 | static int __init oops_setup(char *s) | ||
549 | { | ||
550 | if (!s) | ||
551 | return -EINVAL; | ||
552 | if (!strcmp(s, "panic")) | ||
553 | panic_on_oops = 1; | ||
554 | return 0; | ||
555 | } | ||
556 | early_param("oops", oops_setup); | ||
557 | |||
558 | static int __init kstack_setup(char *s) | ||
559 | { | ||
560 | if (!s) | ||
561 | return -EINVAL; | ||
562 | kstack_depth_to_print = simple_strtoul(s, NULL, 0); | ||
563 | return 0; | ||
564 | } | ||
565 | early_param("kstack", kstack_setup); | ||
566 | |||
567 | static int __init code_bytes_setup(char *s) | ||
568 | { | ||
569 | code_bytes = simple_strtoul(s, NULL, 0); | ||
570 | if (code_bytes > 8192) | ||
571 | code_bytes = 8192; | ||
572 | |||
573 | return 1; | ||
574 | } | ||
575 | __setup("code_bytes=", code_bytes_setup); | ||
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 74defe21ba42..43ceb3f454bf 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
@@ -1174,6 +1174,11 @@ ftrace_call: | |||
1174 | popl %edx | 1174 | popl %edx |
1175 | popl %ecx | 1175 | popl %ecx |
1176 | popl %eax | 1176 | popl %eax |
1177 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
1178 | .globl ftrace_graph_call | ||
1179 | ftrace_graph_call: | ||
1180 | jmp ftrace_stub | ||
1181 | #endif | ||
1177 | 1182 | ||
1178 | .globl ftrace_stub | 1183 | .globl ftrace_stub |
1179 | ftrace_stub: | 1184 | ftrace_stub: |
@@ -1188,9 +1193,12 @@ ENTRY(mcount) | |||
1188 | 1193 | ||
1189 | cmpl $ftrace_stub, ftrace_trace_function | 1194 | cmpl $ftrace_stub, ftrace_trace_function |
1190 | jnz trace | 1195 | jnz trace |
1191 | #ifdef CONFIG_FUNCTION_RET_TRACER | 1196 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
1192 | cmpl $ftrace_stub, ftrace_function_return | 1197 | cmpl $ftrace_stub, ftrace_graph_return |
1193 | jnz ftrace_return_caller | 1198 | jnz ftrace_graph_caller |
1199 | |||
1200 | cmpl $ftrace_graph_entry_stub, ftrace_graph_entry | ||
1201 | jnz ftrace_graph_caller | ||
1194 | #endif | 1202 | #endif |
1195 | .globl ftrace_stub | 1203 | .globl ftrace_stub |
1196 | ftrace_stub: | 1204 | ftrace_stub: |
@@ -1215,8 +1223,8 @@ END(mcount) | |||
1215 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 1223 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
1216 | #endif /* CONFIG_FUNCTION_TRACER */ | 1224 | #endif /* CONFIG_FUNCTION_TRACER */ |
1217 | 1225 | ||
1218 | #ifdef CONFIG_FUNCTION_RET_TRACER | 1226 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
1219 | ENTRY(ftrace_return_caller) | 1227 | ENTRY(ftrace_graph_caller) |
1220 | cmpl $0, function_trace_stop | 1228 | cmpl $0, function_trace_stop |
1221 | jne ftrace_stub | 1229 | jne ftrace_stub |
1222 | 1230 | ||
@@ -1225,12 +1233,13 @@ ENTRY(ftrace_return_caller) | |||
1225 | pushl %edx | 1233 | pushl %edx |
1226 | movl 0xc(%esp), %edx | 1234 | movl 0xc(%esp), %edx |
1227 | lea 0x4(%ebp), %eax | 1235 | lea 0x4(%ebp), %eax |
1236 | subl $MCOUNT_INSN_SIZE, %edx | ||
1228 | call prepare_ftrace_return | 1237 | call prepare_ftrace_return |
1229 | popl %edx | 1238 | popl %edx |
1230 | popl %ecx | 1239 | popl %ecx |
1231 | popl %eax | 1240 | popl %eax |
1232 | ret | 1241 | ret |
1233 | END(ftrace_return_caller) | 1242 | END(ftrace_graph_caller) |
1234 | 1243 | ||
1235 | .globl return_to_handler | 1244 | .globl return_to_handler |
1236 | return_to_handler: | 1245 | return_to_handler: |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 08aa6b10933c..54e0bbdccb99 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -98,6 +98,12 @@ ftrace_call: | |||
98 | movq (%rsp), %rax | 98 | movq (%rsp), %rax |
99 | addq $0x38, %rsp | 99 | addq $0x38, %rsp |
100 | 100 | ||
101 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
102 | .globl ftrace_graph_call | ||
103 | ftrace_graph_call: | ||
104 | jmp ftrace_stub | ||
105 | #endif | ||
106 | |||
101 | .globl ftrace_stub | 107 | .globl ftrace_stub |
102 | ftrace_stub: | 108 | ftrace_stub: |
103 | retq | 109 | retq |
@@ -110,6 +116,15 @@ ENTRY(mcount) | |||
110 | 116 | ||
111 | cmpq $ftrace_stub, ftrace_trace_function | 117 | cmpq $ftrace_stub, ftrace_trace_function |
112 | jnz trace | 118 | jnz trace |
119 | |||
120 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
121 | cmpq $ftrace_stub, ftrace_graph_return | ||
122 | jnz ftrace_graph_caller | ||
123 | |||
124 | cmpq $ftrace_graph_entry_stub, ftrace_graph_entry | ||
125 | jnz ftrace_graph_caller | ||
126 | #endif | ||
127 | |||
113 | .globl ftrace_stub | 128 | .globl ftrace_stub |
114 | ftrace_stub: | 129 | ftrace_stub: |
115 | retq | 130 | retq |
@@ -145,6 +160,69 @@ END(mcount) | |||
145 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 160 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
146 | #endif /* CONFIG_FUNCTION_TRACER */ | 161 | #endif /* CONFIG_FUNCTION_TRACER */ |
147 | 162 | ||
163 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
164 | ENTRY(ftrace_graph_caller) | ||
165 | cmpl $0, function_trace_stop | ||
166 | jne ftrace_stub | ||
167 | |||
168 | subq $0x38, %rsp | ||
169 | movq %rax, (%rsp) | ||
170 | movq %rcx, 8(%rsp) | ||
171 | movq %rdx, 16(%rsp) | ||
172 | movq %rsi, 24(%rsp) | ||
173 | movq %rdi, 32(%rsp) | ||
174 | movq %r8, 40(%rsp) | ||
175 | movq %r9, 48(%rsp) | ||
176 | |||
177 | leaq 8(%rbp), %rdi | ||
178 | movq 0x38(%rsp), %rsi | ||
179 | subq $MCOUNT_INSN_SIZE, %rsi | ||
180 | |||
181 | call prepare_ftrace_return | ||
182 | |||
183 | movq 48(%rsp), %r9 | ||
184 | movq 40(%rsp), %r8 | ||
185 | movq 32(%rsp), %rdi | ||
186 | movq 24(%rsp), %rsi | ||
187 | movq 16(%rsp), %rdx | ||
188 | movq 8(%rsp), %rcx | ||
189 | movq (%rsp), %rax | ||
190 | addq $0x38, %rsp | ||
191 | retq | ||
192 | END(ftrace_graph_caller) | ||
193 | |||
194 | |||
195 | .globl return_to_handler | ||
196 | return_to_handler: | ||
197 | subq $80, %rsp | ||
198 | |||
199 | movq %rax, (%rsp) | ||
200 | movq %rcx, 8(%rsp) | ||
201 | movq %rdx, 16(%rsp) | ||
202 | movq %rsi, 24(%rsp) | ||
203 | movq %rdi, 32(%rsp) | ||
204 | movq %r8, 40(%rsp) | ||
205 | movq %r9, 48(%rsp) | ||
206 | movq %r10, 56(%rsp) | ||
207 | movq %r11, 64(%rsp) | ||
208 | |||
209 | call ftrace_return_to_handler | ||
210 | |||
211 | movq %rax, 72(%rsp) | ||
212 | movq 64(%rsp), %r11 | ||
213 | movq 56(%rsp), %r10 | ||
214 | movq 48(%rsp), %r9 | ||
215 | movq 40(%rsp), %r8 | ||
216 | movq 32(%rsp), %rdi | ||
217 | movq 24(%rsp), %rsi | ||
218 | movq 16(%rsp), %rdx | ||
219 | movq 8(%rsp), %rcx | ||
220 | movq (%rsp), %rax | ||
221 | addq $72, %rsp | ||
222 | retq | ||
223 | #endif | ||
224 | |||
225 | |||
148 | #ifndef CONFIG_PREEMPT | 226 | #ifndef CONFIG_PREEMPT |
149 | #define retint_kernel retint_restore_args | 227 | #define retint_kernel retint_restore_args |
150 | #endif | 228 | #endif |
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c index bb137f7297ed..1b43086b097a 100644 --- a/arch/x86/kernel/ftrace.c +++ b/arch/x86/kernel/ftrace.c | |||
@@ -111,7 +111,6 @@ static void ftrace_mod_code(void) | |||
111 | */ | 111 | */ |
112 | mod_code_status = probe_kernel_write(mod_code_ip, mod_code_newcode, | 112 | mod_code_status = probe_kernel_write(mod_code_ip, mod_code_newcode, |
113 | MCOUNT_INSN_SIZE); | 113 | MCOUNT_INSN_SIZE); |
114 | |||
115 | } | 114 | } |
116 | 115 | ||
117 | void ftrace_nmi_enter(void) | 116 | void ftrace_nmi_enter(void) |
@@ -323,9 +322,53 @@ int __init ftrace_dyn_arch_init(void *data) | |||
323 | } | 322 | } |
324 | #endif | 323 | #endif |
325 | 324 | ||
326 | #ifdef CONFIG_FUNCTION_RET_TRACER | 325 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
326 | |||
327 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
328 | extern void ftrace_graph_call(void); | ||
329 | |||
330 | static int ftrace_mod_jmp(unsigned long ip, | ||
331 | int old_offset, int new_offset) | ||
332 | { | ||
333 | unsigned char code[MCOUNT_INSN_SIZE]; | ||
334 | |||
335 | if (probe_kernel_read(code, (void *)ip, MCOUNT_INSN_SIZE)) | ||
336 | return -EFAULT; | ||
337 | |||
338 | if (code[0] != 0xe9 || old_offset != *(int *)(&code[1])) | ||
339 | return -EINVAL; | ||
340 | |||
341 | *(int *)(&code[1]) = new_offset; | ||
342 | |||
343 | if (do_ftrace_mod_code(ip, &code)) | ||
344 | return -EPERM; | ||
345 | |||
346 | return 0; | ||
347 | } | ||
348 | |||
349 | int ftrace_enable_ftrace_graph_caller(void) | ||
350 | { | ||
351 | unsigned long ip = (unsigned long)(&ftrace_graph_call); | ||
352 | int old_offset, new_offset; | ||
353 | |||
354 | old_offset = (unsigned long)(&ftrace_stub) - (ip + MCOUNT_INSN_SIZE); | ||
355 | new_offset = (unsigned long)(&ftrace_graph_caller) - (ip + MCOUNT_INSN_SIZE); | ||
356 | |||
357 | return ftrace_mod_jmp(ip, old_offset, new_offset); | ||
358 | } | ||
359 | |||
360 | int ftrace_disable_ftrace_graph_caller(void) | ||
361 | { | ||
362 | unsigned long ip = (unsigned long)(&ftrace_graph_call); | ||
363 | int old_offset, new_offset; | ||
364 | |||
365 | old_offset = (unsigned long)(&ftrace_graph_caller) - (ip + MCOUNT_INSN_SIZE); | ||
366 | new_offset = (unsigned long)(&ftrace_stub) - (ip + MCOUNT_INSN_SIZE); | ||
327 | 367 | ||
328 | #ifndef CONFIG_DYNAMIC_FTRACE | 368 | return ftrace_mod_jmp(ip, old_offset, new_offset); |
369 | } | ||
370 | |||
371 | #else /* CONFIG_DYNAMIC_FTRACE */ | ||
329 | 372 | ||
330 | /* | 373 | /* |
331 | * These functions are picked from those used on | 374 | * These functions are picked from those used on |
@@ -343,11 +386,12 @@ void ftrace_nmi_exit(void) | |||
343 | { | 386 | { |
344 | atomic_dec(&in_nmi); | 387 | atomic_dec(&in_nmi); |
345 | } | 388 | } |
389 | |||
346 | #endif /* !CONFIG_DYNAMIC_FTRACE */ | 390 | #endif /* !CONFIG_DYNAMIC_FTRACE */ |
347 | 391 | ||
348 | /* Add a function return address to the trace stack on thread info.*/ | 392 | /* Add a function return address to the trace stack on thread info.*/ |
349 | static int push_return_trace(unsigned long ret, unsigned long long time, | 393 | static int push_return_trace(unsigned long ret, unsigned long long time, |
350 | unsigned long func) | 394 | unsigned long func, int *depth) |
351 | { | 395 | { |
352 | int index; | 396 | int index; |
353 | 397 | ||
@@ -365,22 +409,34 @@ static int push_return_trace(unsigned long ret, unsigned long long time, | |||
365 | current->ret_stack[index].ret = ret; | 409 | current->ret_stack[index].ret = ret; |
366 | current->ret_stack[index].func = func; | 410 | current->ret_stack[index].func = func; |
367 | current->ret_stack[index].calltime = time; | 411 | current->ret_stack[index].calltime = time; |
412 | *depth = index; | ||
368 | 413 | ||
369 | return 0; | 414 | return 0; |
370 | } | 415 | } |
371 | 416 | ||
372 | /* Retrieve a function return address to the trace stack on thread info.*/ | 417 | /* Retrieve a function return address to the trace stack on thread info.*/ |
373 | static void pop_return_trace(unsigned long *ret, unsigned long long *time, | 418 | static void pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret) |
374 | unsigned long *func, unsigned long *overrun) | ||
375 | { | 419 | { |
376 | int index; | 420 | int index; |
377 | 421 | ||
378 | index = current->curr_ret_stack; | 422 | index = current->curr_ret_stack; |
423 | |||
424 | if (unlikely(index < 0)) { | ||
425 | ftrace_graph_stop(); | ||
426 | WARN_ON(1); | ||
427 | /* Might as well panic, otherwise we have no where to go */ | ||
428 | *ret = (unsigned long)panic; | ||
429 | return; | ||
430 | } | ||
431 | |||
379 | *ret = current->ret_stack[index].ret; | 432 | *ret = current->ret_stack[index].ret; |
380 | *func = current->ret_stack[index].func; | 433 | trace->func = current->ret_stack[index].func; |
381 | *time = current->ret_stack[index].calltime; | 434 | trace->calltime = current->ret_stack[index].calltime; |
382 | *overrun = atomic_read(¤t->trace_overrun); | 435 | trace->overrun = atomic_read(¤t->trace_overrun); |
436 | trace->depth = index; | ||
437 | barrier(); | ||
383 | current->curr_ret_stack--; | 438 | current->curr_ret_stack--; |
439 | |||
384 | } | 440 | } |
385 | 441 | ||
386 | /* | 442 | /* |
@@ -389,13 +445,21 @@ static void pop_return_trace(unsigned long *ret, unsigned long long *time, | |||
389 | */ | 445 | */ |
390 | unsigned long ftrace_return_to_handler(void) | 446 | unsigned long ftrace_return_to_handler(void) |
391 | { | 447 | { |
392 | struct ftrace_retfunc trace; | 448 | struct ftrace_graph_ret trace; |
393 | pop_return_trace(&trace.ret, &trace.calltime, &trace.func, | 449 | unsigned long ret; |
394 | &trace.overrun); | 450 | |
451 | pop_return_trace(&trace, &ret); | ||
395 | trace.rettime = cpu_clock(raw_smp_processor_id()); | 452 | trace.rettime = cpu_clock(raw_smp_processor_id()); |
396 | ftrace_function_return(&trace); | 453 | ftrace_graph_return(&trace); |
454 | |||
455 | if (unlikely(!ret)) { | ||
456 | ftrace_graph_stop(); | ||
457 | WARN_ON(1); | ||
458 | /* Might as well panic. What else to do? */ | ||
459 | ret = (unsigned long)panic; | ||
460 | } | ||
397 | 461 | ||
398 | return trace.ret; | 462 | return ret; |
399 | } | 463 | } |
400 | 464 | ||
401 | /* | 465 | /* |
@@ -407,11 +471,15 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) | |||
407 | unsigned long old; | 471 | unsigned long old; |
408 | unsigned long long calltime; | 472 | unsigned long long calltime; |
409 | int faulted; | 473 | int faulted; |
474 | struct ftrace_graph_ent trace; | ||
410 | unsigned long return_hooker = (unsigned long) | 475 | unsigned long return_hooker = (unsigned long) |
411 | &return_to_handler; | 476 | &return_to_handler; |
412 | 477 | ||
413 | /* Nmi's are currently unsupported */ | 478 | /* Nmi's are currently unsupported */ |
414 | if (atomic_read(&in_nmi)) | 479 | if (unlikely(atomic_read(&in_nmi))) |
480 | return; | ||
481 | |||
482 | if (unlikely(atomic_read(¤t->tracing_graph_pause))) | ||
415 | return; | 483 | return; |
416 | 484 | ||
417 | /* | 485 | /* |
@@ -420,18 +488,16 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) | |||
420 | * ignore such a protection. | 488 | * ignore such a protection. |
421 | */ | 489 | */ |
422 | asm volatile( | 490 | asm volatile( |
423 | "1: movl (%[parent_old]), %[old]\n" | 491 | "1: " _ASM_MOV " (%[parent_old]), %[old]\n" |
424 | "2: movl %[return_hooker], (%[parent_replaced])\n" | 492 | "2: " _ASM_MOV " %[return_hooker], (%[parent_replaced])\n" |
425 | " movl $0, %[faulted]\n" | 493 | " movl $0, %[faulted]\n" |
426 | 494 | ||
427 | ".section .fixup, \"ax\"\n" | 495 | ".section .fixup, \"ax\"\n" |
428 | "3: movl $1, %[faulted]\n" | 496 | "3: movl $1, %[faulted]\n" |
429 | ".previous\n" | 497 | ".previous\n" |
430 | 498 | ||
431 | ".section __ex_table, \"a\"\n" | 499 | _ASM_EXTABLE(1b, 3b) |
432 | " .long 1b, 3b\n" | 500 | _ASM_EXTABLE(2b, 3b) |
433 | " .long 2b, 3b\n" | ||
434 | ".previous\n" | ||
435 | 501 | ||
436 | : [parent_replaced] "=r" (parent), [old] "=r" (old), | 502 | : [parent_replaced] "=r" (parent), [old] "=r" (old), |
437 | [faulted] "=r" (faulted) | 503 | [faulted] "=r" (faulted) |
@@ -439,21 +505,33 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr) | |||
439 | : "memory" | 505 | : "memory" |
440 | ); | 506 | ); |
441 | 507 | ||
442 | if (WARN_ON(faulted)) { | 508 | if (unlikely(faulted)) { |
443 | unregister_ftrace_return(); | 509 | ftrace_graph_stop(); |
510 | WARN_ON(1); | ||
444 | return; | 511 | return; |
445 | } | 512 | } |
446 | 513 | ||
447 | if (WARN_ON(!__kernel_text_address(old))) { | 514 | if (unlikely(!__kernel_text_address(old))) { |
448 | unregister_ftrace_return(); | 515 | ftrace_graph_stop(); |
449 | *parent = old; | 516 | *parent = old; |
517 | WARN_ON(1); | ||
450 | return; | 518 | return; |
451 | } | 519 | } |
452 | 520 | ||
453 | calltime = cpu_clock(raw_smp_processor_id()); | 521 | calltime = cpu_clock(raw_smp_processor_id()); |
454 | 522 | ||
455 | if (push_return_trace(old, calltime, self_addr) == -EBUSY) | 523 | if (push_return_trace(old, calltime, |
524 | self_addr, &trace.depth) == -EBUSY) { | ||
456 | *parent = old; | 525 | *parent = old; |
457 | } | 526 | return; |
527 | } | ||
528 | |||
529 | trace.func = self_addr; | ||
458 | 530 | ||
459 | #endif /* CONFIG_FUNCTION_RET_TRACER */ | 531 | /* Only trace if the calling function expects to */ |
532 | if (!ftrace_graph_entry(&trace)) { | ||
533 | current->curr_ret_stack--; | ||
534 | *parent = old; | ||
535 | } | ||
536 | } | ||
537 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | ||
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index c622772744d8..c27af49a4ede 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/module.h> | 7 | #include <linux/module.h> |
8 | #include <linux/pm.h> | 8 | #include <linux/pm.h> |
9 | #include <linux/clockchips.h> | 9 | #include <linux/clockchips.h> |
10 | #include <linux/ftrace.h> | ||
10 | #include <asm/system.h> | 11 | #include <asm/system.h> |
11 | 12 | ||
12 | unsigned long idle_halt; | 13 | unsigned long idle_halt; |
@@ -100,6 +101,9 @@ static inline int hlt_use_halt(void) | |||
100 | void default_idle(void) | 101 | void default_idle(void) |
101 | { | 102 | { |
102 | if (hlt_use_halt()) { | 103 | if (hlt_use_halt()) { |
104 | struct power_trace it; | ||
105 | |||
106 | trace_power_start(&it, POWER_CSTATE, 1); | ||
103 | current_thread_info()->status &= ~TS_POLLING; | 107 | current_thread_info()->status &= ~TS_POLLING; |
104 | /* | 108 | /* |
105 | * TS_POLLING-cleared state must be visible before we | 109 | * TS_POLLING-cleared state must be visible before we |
@@ -112,6 +116,7 @@ void default_idle(void) | |||
112 | else | 116 | else |
113 | local_irq_enable(); | 117 | local_irq_enable(); |
114 | current_thread_info()->status |= TS_POLLING; | 118 | current_thread_info()->status |= TS_POLLING; |
119 | trace_power_end(&it); | ||
115 | } else { | 120 | } else { |
116 | local_irq_enable(); | 121 | local_irq_enable(); |
117 | /* loop is done by the caller */ | 122 | /* loop is done by the caller */ |
@@ -154,24 +159,31 @@ EXPORT_SYMBOL_GPL(cpu_idle_wait); | |||
154 | */ | 159 | */ |
155 | void mwait_idle_with_hints(unsigned long ax, unsigned long cx) | 160 | void mwait_idle_with_hints(unsigned long ax, unsigned long cx) |
156 | { | 161 | { |
162 | struct power_trace it; | ||
163 | |||
164 | trace_power_start(&it, POWER_CSTATE, (ax>>4)+1); | ||
157 | if (!need_resched()) { | 165 | if (!need_resched()) { |
158 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 166 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
159 | smp_mb(); | 167 | smp_mb(); |
160 | if (!need_resched()) | 168 | if (!need_resched()) |
161 | __mwait(ax, cx); | 169 | __mwait(ax, cx); |
162 | } | 170 | } |
171 | trace_power_end(&it); | ||
163 | } | 172 | } |
164 | 173 | ||
165 | /* Default MONITOR/MWAIT with no hints, used for default C1 state */ | 174 | /* Default MONITOR/MWAIT with no hints, used for default C1 state */ |
166 | static void mwait_idle(void) | 175 | static void mwait_idle(void) |
167 | { | 176 | { |
177 | struct power_trace it; | ||
168 | if (!need_resched()) { | 178 | if (!need_resched()) { |
179 | trace_power_start(&it, POWER_CSTATE, 1); | ||
169 | __monitor((void *)¤t_thread_info()->flags, 0, 0); | 180 | __monitor((void *)¤t_thread_info()->flags, 0, 0); |
170 | smp_mb(); | 181 | smp_mb(); |
171 | if (!need_resched()) | 182 | if (!need_resched()) |
172 | __sti_mwait(0, 0); | 183 | __sti_mwait(0, 0); |
173 | else | 184 | else |
174 | local_irq_enable(); | 185 | local_irq_enable(); |
186 | trace_power_end(&it); | ||
175 | } else | 187 | } else |
176 | local_irq_enable(); | 188 | local_irq_enable(); |
177 | } | 189 | } |
@@ -183,9 +195,13 @@ static void mwait_idle(void) | |||
183 | */ | 195 | */ |
184 | static void poll_idle(void) | 196 | static void poll_idle(void) |
185 | { | 197 | { |
198 | struct power_trace it; | ||
199 | |||
200 | trace_power_start(&it, POWER_CSTATE, 0); | ||
186 | local_irq_enable(); | 201 | local_irq_enable(); |
187 | while (!need_resched()) | 202 | while (!need_resched()) |
188 | cpu_relax(); | 203 | cpu_relax(); |
204 | trace_power_end(&it); | ||
189 | } | 205 | } |
190 | 206 | ||
191 | /* | 207 | /* |
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 0a1302fe6d45..24c2276aa453 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/percpu.h> | 38 | #include <linux/percpu.h> |
39 | #include <linux/prctl.h> | 39 | #include <linux/prctl.h> |
40 | #include <linux/dmi.h> | 40 | #include <linux/dmi.h> |
41 | #include <linux/ftrace.h> | ||
41 | 42 | ||
42 | #include <asm/uaccess.h> | 43 | #include <asm/uaccess.h> |
43 | #include <asm/pgtable.h> | 44 | #include <asm/pgtable.h> |
@@ -548,7 +549,8 @@ __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p, | |||
548 | * the task-switch, and shows up in ret_from_fork in entry.S, | 549 | * the task-switch, and shows up in ret_from_fork in entry.S, |
549 | * for example. | 550 | * for example. |
550 | */ | 551 | */ |
551 | struct task_struct * __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | 552 | __notrace_funcgraph struct task_struct * |
553 | __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | ||
552 | { | 554 | { |
553 | struct thread_struct *prev = &prev_p->thread, | 555 | struct thread_struct *prev = &prev_p->thread, |
554 | *next = &next_p->thread; | 556 | *next = &next_p->thread; |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index c958120fb1b6..fbb321d53d34 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/prctl.h> | 39 | #include <linux/prctl.h> |
40 | #include <linux/uaccess.h> | 40 | #include <linux/uaccess.h> |
41 | #include <linux/io.h> | 41 | #include <linux/io.h> |
42 | #include <linux/ftrace.h> | ||
42 | 43 | ||
43 | #include <asm/pgtable.h> | 44 | #include <asm/pgtable.h> |
44 | #include <asm/system.h> | 45 | #include <asm/system.h> |
@@ -551,8 +552,9 @@ static inline void __switch_to_xtra(struct task_struct *prev_p, | |||
551 | * - could test fs/gs bitsliced | 552 | * - could test fs/gs bitsliced |
552 | * | 553 | * |
553 | * Kprobes not supported here. Set the probe on schedule instead. | 554 | * Kprobes not supported here. Set the probe on schedule instead. |
555 | * Function graph tracer not supported too. | ||
554 | */ | 556 | */ |
555 | struct task_struct * | 557 | __notrace_funcgraph struct task_struct * |
556 | __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | 558 | __switch_to(struct task_struct *prev_p, struct task_struct *next_p) |
557 | { | 559 | { |
558 | struct thread_struct *prev = &prev_p->thread; | 560 | struct thread_struct *prev = &prev_p->thread; |
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index 0a6d8c12e10d..2c8ec1ba75e6 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c | |||
@@ -668,14 +668,14 @@ static int ptrace_bts_read_record(struct task_struct *child, size_t index, | |||
668 | size_t bts_index, bts_end; | 668 | size_t bts_index, bts_end; |
669 | int error; | 669 | int error; |
670 | 670 | ||
671 | error = ds_get_bts_end(child, &bts_end); | 671 | error = ds_get_bts_end(child->bts, &bts_end); |
672 | if (error < 0) | 672 | if (error < 0) |
673 | return error; | 673 | return error; |
674 | 674 | ||
675 | if (bts_end <= index) | 675 | if (bts_end <= index) |
676 | return -EINVAL; | 676 | return -EINVAL; |
677 | 677 | ||
678 | error = ds_get_bts_index(child, &bts_index); | 678 | error = ds_get_bts_index(child->bts, &bts_index); |
679 | if (error < 0) | 679 | if (error < 0) |
680 | return error; | 680 | return error; |
681 | 681 | ||
@@ -684,7 +684,7 @@ static int ptrace_bts_read_record(struct task_struct *child, size_t index, | |||
684 | if (bts_end <= bts_index) | 684 | if (bts_end <= bts_index) |
685 | bts_index -= bts_end; | 685 | bts_index -= bts_end; |
686 | 686 | ||
687 | error = ds_access_bts(child, bts_index, &bts_record); | 687 | error = ds_access_bts(child->bts, bts_index, &bts_record); |
688 | if (error < 0) | 688 | if (error < 0) |
689 | return error; | 689 | return error; |
690 | 690 | ||
@@ -705,14 +705,14 @@ static int ptrace_bts_drain(struct task_struct *child, | |||
705 | size_t end, i; | 705 | size_t end, i; |
706 | int error; | 706 | int error; |
707 | 707 | ||
708 | error = ds_get_bts_index(child, &end); | 708 | error = ds_get_bts_index(child->bts, &end); |
709 | if (error < 0) | 709 | if (error < 0) |
710 | return error; | 710 | return error; |
711 | 711 | ||
712 | if (size < (end * sizeof(struct bts_struct))) | 712 | if (size < (end * sizeof(struct bts_struct))) |
713 | return -EIO; | 713 | return -EIO; |
714 | 714 | ||
715 | error = ds_access_bts(child, 0, (const void **)&raw); | 715 | error = ds_access_bts(child->bts, 0, (const void **)&raw); |
716 | if (error < 0) | 716 | if (error < 0) |
717 | return error; | 717 | return error; |
718 | 718 | ||
@@ -723,18 +723,13 @@ static int ptrace_bts_drain(struct task_struct *child, | |||
723 | return -EFAULT; | 723 | return -EFAULT; |
724 | } | 724 | } |
725 | 725 | ||
726 | error = ds_clear_bts(child); | 726 | error = ds_clear_bts(child->bts); |
727 | if (error < 0) | 727 | if (error < 0) |
728 | return error; | 728 | return error; |
729 | 729 | ||
730 | return end; | 730 | return end; |
731 | } | 731 | } |
732 | 732 | ||
733 | static void ptrace_bts_ovfl(struct task_struct *child) | ||
734 | { | ||
735 | send_sig(child->thread.bts_ovfl_signal, child, 0); | ||
736 | } | ||
737 | |||
738 | static int ptrace_bts_config(struct task_struct *child, | 733 | static int ptrace_bts_config(struct task_struct *child, |
739 | long cfg_size, | 734 | long cfg_size, |
740 | const struct ptrace_bts_config __user *ucfg) | 735 | const struct ptrace_bts_config __user *ucfg) |
@@ -760,23 +755,45 @@ static int ptrace_bts_config(struct task_struct *child, | |||
760 | goto errout; | 755 | goto errout; |
761 | 756 | ||
762 | if (cfg.flags & PTRACE_BTS_O_ALLOC) { | 757 | if (cfg.flags & PTRACE_BTS_O_ALLOC) { |
763 | ds_ovfl_callback_t ovfl = NULL; | 758 | bts_ovfl_callback_t ovfl = NULL; |
764 | unsigned int sig = 0; | 759 | unsigned int sig = 0; |
765 | 760 | ||
766 | /* we ignore the error in case we were not tracing child */ | 761 | error = -EINVAL; |
767 | (void)ds_release_bts(child); | 762 | if (cfg.size < (10 * bts_cfg.sizeof_bts)) |
763 | goto errout; | ||
768 | 764 | ||
769 | if (cfg.flags & PTRACE_BTS_O_SIGNAL) { | 765 | if (cfg.flags & PTRACE_BTS_O_SIGNAL) { |
770 | if (!cfg.signal) | 766 | if (!cfg.signal) |
771 | goto errout; | 767 | goto errout; |
772 | 768 | ||
769 | error = -EOPNOTSUPP; | ||
770 | goto errout; | ||
771 | |||
773 | sig = cfg.signal; | 772 | sig = cfg.signal; |
774 | ovfl = ptrace_bts_ovfl; | ||
775 | } | 773 | } |
776 | 774 | ||
777 | error = ds_request_bts(child, /* base = */ NULL, cfg.size, ovfl); | 775 | if (child->bts) { |
778 | if (error < 0) | 776 | (void)ds_release_bts(child->bts); |
777 | kfree(child->bts_buffer); | ||
778 | |||
779 | child->bts = NULL; | ||
780 | child->bts_buffer = NULL; | ||
781 | } | ||
782 | |||
783 | error = -ENOMEM; | ||
784 | child->bts_buffer = kzalloc(cfg.size, GFP_KERNEL); | ||
785 | if (!child->bts_buffer) | ||
786 | goto errout; | ||
787 | |||
788 | child->bts = ds_request_bts(child, child->bts_buffer, cfg.size, | ||
789 | ovfl, /* th = */ (size_t)-1); | ||
790 | if (IS_ERR(child->bts)) { | ||
791 | error = PTR_ERR(child->bts); | ||
792 | kfree(child->bts_buffer); | ||
793 | child->bts = NULL; | ||
794 | child->bts_buffer = NULL; | ||
779 | goto errout; | 795 | goto errout; |
796 | } | ||
780 | 797 | ||
781 | child->thread.bts_ovfl_signal = sig; | 798 | child->thread.bts_ovfl_signal = sig; |
782 | } | 799 | } |
@@ -823,15 +840,15 @@ static int ptrace_bts_status(struct task_struct *child, | |||
823 | if (cfg_size < sizeof(cfg)) | 840 | if (cfg_size < sizeof(cfg)) |
824 | return -EIO; | 841 | return -EIO; |
825 | 842 | ||
826 | error = ds_get_bts_end(child, &end); | 843 | error = ds_get_bts_end(child->bts, &end); |
827 | if (error < 0) | 844 | if (error < 0) |
828 | return error; | 845 | return error; |
829 | 846 | ||
830 | error = ds_access_bts(child, /* index = */ 0, &base); | 847 | error = ds_access_bts(child->bts, /* index = */ 0, &base); |
831 | if (error < 0) | 848 | if (error < 0) |
832 | return error; | 849 | return error; |
833 | 850 | ||
834 | error = ds_access_bts(child, /* index = */ end, &max); | 851 | error = ds_access_bts(child->bts, /* index = */ end, &max); |
835 | if (error < 0) | 852 | if (error < 0) |
836 | return error; | 853 | return error; |
837 | 854 | ||
@@ -884,10 +901,7 @@ static int ptrace_bts_write_record(struct task_struct *child, | |||
884 | return -EINVAL; | 901 | return -EINVAL; |
885 | } | 902 | } |
886 | 903 | ||
887 | /* The writing task will be the switched-to task on a context | 904 | return ds_write_bts(child->bts, bts_record, bts_cfg.sizeof_bts); |
888 | * switch. It needs to write into the switched-from task's BTS | ||
889 | * buffer. */ | ||
890 | return ds_unchecked_write_bts(child, bts_record, bts_cfg.sizeof_bts); | ||
891 | } | 905 | } |
892 | 906 | ||
893 | void ptrace_bts_take_timestamp(struct task_struct *tsk, | 907 | void ptrace_bts_take_timestamp(struct task_struct *tsk, |
@@ -929,17 +943,16 @@ void __cpuinit ptrace_bts_init_intel(struct cpuinfo_x86 *c) | |||
929 | switch (c->x86) { | 943 | switch (c->x86) { |
930 | case 0x6: | 944 | case 0x6: |
931 | switch (c->x86_model) { | 945 | switch (c->x86_model) { |
946 | case 0 ... 0xC: | ||
947 | /* sorry, don't know about them */ | ||
948 | break; | ||
932 | case 0xD: | 949 | case 0xD: |
933 | case 0xE: /* Pentium M */ | 950 | case 0xE: /* Pentium M */ |
934 | bts_configure(&bts_cfg_pentium_m); | 951 | bts_configure(&bts_cfg_pentium_m); |
935 | break; | 952 | break; |
936 | case 0xF: /* Core2 */ | 953 | default: /* Core2, Atom, ... */ |
937 | case 0x1C: /* Atom */ | ||
938 | bts_configure(&bts_cfg_core2); | 954 | bts_configure(&bts_cfg_core2); |
939 | break; | 955 | break; |
940 | default: | ||
941 | /* sorry, don't know about them */ | ||
942 | break; | ||
943 | } | 956 | } |
944 | break; | 957 | break; |
945 | case 0xF: | 958 | case 0xF: |
@@ -973,13 +986,17 @@ void ptrace_disable(struct task_struct *child) | |||
973 | clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); | 986 | clear_tsk_thread_flag(child, TIF_SYSCALL_EMU); |
974 | #endif | 987 | #endif |
975 | #ifdef CONFIG_X86_PTRACE_BTS | 988 | #ifdef CONFIG_X86_PTRACE_BTS |
976 | (void)ds_release_bts(child); | 989 | if (child->bts) { |
990 | (void)ds_release_bts(child->bts); | ||
991 | kfree(child->bts_buffer); | ||
992 | child->bts_buffer = NULL; | ||
977 | 993 | ||
978 | child->thread.debugctlmsr &= ~bts_cfg.debugctl_mask; | 994 | child->thread.debugctlmsr &= ~bts_cfg.debugctl_mask; |
979 | if (!child->thread.debugctlmsr) | 995 | if (!child->thread.debugctlmsr) |
980 | clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR); | 996 | clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR); |
981 | 997 | ||
982 | clear_tsk_thread_flag(child, TIF_BTS_TRACE_TS); | 998 | clear_tsk_thread_flag(child, TIF_BTS_TRACE_TS); |
999 | } | ||
983 | #endif /* CONFIG_X86_PTRACE_BTS */ | 1000 | #endif /* CONFIG_X86_PTRACE_BTS */ |
984 | } | 1001 | } |
985 | 1002 | ||
@@ -1111,9 +1128,16 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
1111 | (child, data, (struct ptrace_bts_config __user *)addr); | 1128 | (child, data, (struct ptrace_bts_config __user *)addr); |
1112 | break; | 1129 | break; |
1113 | 1130 | ||
1114 | case PTRACE_BTS_SIZE: | 1131 | case PTRACE_BTS_SIZE: { |
1115 | ret = ds_get_bts_index(child, /* pos = */ NULL); | 1132 | size_t size; |
1133 | |||
1134 | ret = ds_get_bts_index(child->bts, &size); | ||
1135 | if (ret == 0) { | ||
1136 | BUG_ON(size != (int) size); | ||
1137 | ret = (int) size; | ||
1138 | } | ||
1116 | break; | 1139 | break; |
1140 | } | ||
1117 | 1141 | ||
1118 | case PTRACE_BTS_GET: | 1142 | case PTRACE_BTS_GET: |
1119 | ret = ptrace_bts_read_record | 1143 | ret = ptrace_bts_read_record |
@@ -1121,7 +1145,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
1121 | break; | 1145 | break; |
1122 | 1146 | ||
1123 | case PTRACE_BTS_CLEAR: | 1147 | case PTRACE_BTS_CLEAR: |
1124 | ret = ds_clear_bts(child); | 1148 | ret = ds_clear_bts(child->bts); |
1125 | break; | 1149 | break; |
1126 | 1150 | ||
1127 | case PTRACE_BTS_DRAIN: | 1151 | case PTRACE_BTS_DRAIN: |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index f1983d9477cd..410ddbc1aa2e 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -1038,13 +1038,13 @@ static int kvm_sync_page(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp) | |||
1038 | } | 1038 | } |
1039 | 1039 | ||
1040 | rmap_write_protect(vcpu->kvm, sp->gfn); | 1040 | rmap_write_protect(vcpu->kvm, sp->gfn); |
1041 | kvm_unlink_unsync_page(vcpu->kvm, sp); | ||
1041 | if (vcpu->arch.mmu.sync_page(vcpu, sp)) { | 1042 | if (vcpu->arch.mmu.sync_page(vcpu, sp)) { |
1042 | kvm_mmu_zap_page(vcpu->kvm, sp); | 1043 | kvm_mmu_zap_page(vcpu->kvm, sp); |
1043 | return 1; | 1044 | return 1; |
1044 | } | 1045 | } |
1045 | 1046 | ||
1046 | kvm_mmu_flush_tlb(vcpu); | 1047 | kvm_mmu_flush_tlb(vcpu); |
1047 | kvm_unlink_unsync_page(vcpu->kvm, sp); | ||
1048 | return 0; | 1048 | return 0; |
1049 | } | 1049 | } |
1050 | 1050 | ||
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h index 613ec9aa674a..84eee43bbe74 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h | |||
@@ -331,6 +331,7 @@ static int FNAME(shadow_walk_entry)(struct kvm_shadow_walk *_sw, | |||
331 | r = kvm_read_guest_atomic(vcpu->kvm, gw->pte_gpa[level - 2], | 331 | r = kvm_read_guest_atomic(vcpu->kvm, gw->pte_gpa[level - 2], |
332 | &curr_pte, sizeof(curr_pte)); | 332 | &curr_pte, sizeof(curr_pte)); |
333 | if (r || curr_pte != gw->ptes[level - 2]) { | 333 | if (r || curr_pte != gw->ptes[level - 2]) { |
334 | kvm_mmu_put_page(shadow_page, sptep); | ||
334 | kvm_release_pfn_clean(sw->pfn); | 335 | kvm_release_pfn_clean(sw->pfn); |
335 | sw->sptep = NULL; | 336 | sw->sptep = NULL; |
336 | return 1; | 337 | return 1; |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index d06b4dc0e2ea..a4018b01e1f9 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -3149,7 +3149,9 @@ static void vmx_intr_assist(struct kvm_vcpu *vcpu) | |||
3149 | 3149 | ||
3150 | if (cpu_has_virtual_nmis()) { | 3150 | if (cpu_has_virtual_nmis()) { |
3151 | if (vcpu->arch.nmi_pending && !vcpu->arch.nmi_injected) { | 3151 | if (vcpu->arch.nmi_pending && !vcpu->arch.nmi_injected) { |
3152 | if (vmx_nmi_enabled(vcpu)) { | 3152 | if (vcpu->arch.interrupt.pending) { |
3153 | enable_nmi_window(vcpu); | ||
3154 | } else if (vmx_nmi_enabled(vcpu)) { | ||
3153 | vcpu->arch.nmi_pending = false; | 3155 | vcpu->arch.nmi_pending = false; |
3154 | vcpu->arch.nmi_injected = true; | 3156 | vcpu->arch.nmi_injected = true; |
3155 | } else { | 3157 | } else { |
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 4152d3c3b138..21e996a70d68 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -413,6 +413,7 @@ static noinline void pgtable_bad(unsigned long address, struct pt_regs *regs, | |||
413 | unsigned long error_code) | 413 | unsigned long error_code) |
414 | { | 414 | { |
415 | unsigned long flags = oops_begin(); | 415 | unsigned long flags = oops_begin(); |
416 | int sig = SIGKILL; | ||
416 | struct task_struct *tsk; | 417 | struct task_struct *tsk; |
417 | 418 | ||
418 | printk(KERN_ALERT "%s: Corrupted page table at address %lx\n", | 419 | printk(KERN_ALERT "%s: Corrupted page table at address %lx\n", |
@@ -423,8 +424,8 @@ static noinline void pgtable_bad(unsigned long address, struct pt_regs *regs, | |||
423 | tsk->thread.trap_no = 14; | 424 | tsk->thread.trap_no = 14; |
424 | tsk->thread.error_code = error_code; | 425 | tsk->thread.error_code = error_code; |
425 | if (__die("Bad pagetable", regs, error_code)) | 426 | if (__die("Bad pagetable", regs, error_code)) |
426 | regs = NULL; | 427 | sig = 0; |
427 | oops_end(flags, regs, SIGKILL); | 428 | oops_end(flags, regs, sig); |
428 | } | 429 | } |
429 | #endif | 430 | #endif |
430 | 431 | ||
@@ -590,6 +591,7 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code) | |||
590 | int fault; | 591 | int fault; |
591 | #ifdef CONFIG_X86_64 | 592 | #ifdef CONFIG_X86_64 |
592 | unsigned long flags; | 593 | unsigned long flags; |
594 | int sig; | ||
593 | #endif | 595 | #endif |
594 | 596 | ||
595 | tsk = current; | 597 | tsk = current; |
@@ -849,11 +851,12 @@ no_context: | |||
849 | bust_spinlocks(0); | 851 | bust_spinlocks(0); |
850 | do_exit(SIGKILL); | 852 | do_exit(SIGKILL); |
851 | #else | 853 | #else |
854 | sig = SIGKILL; | ||
852 | if (__die("Oops", regs, error_code)) | 855 | if (__die("Oops", regs, error_code)) |
853 | regs = NULL; | 856 | sig = 0; |
854 | /* Executive summary in case the body of the oops scrolled away */ | 857 | /* Executive summary in case the body of the oops scrolled away */ |
855 | printk(KERN_EMERG "CR2: %016lx\n", address); | 858 | printk(KERN_EMERG "CR2: %016lx\n", address); |
856 | oops_end(flags, regs, SIGKILL); | 859 | oops_end(flags, regs, sig); |
857 | #endif | 860 | #endif |
858 | 861 | ||
859 | /* | 862 | /* |
diff --git a/block/Kconfig b/block/Kconfig index 1ab7c15c8d7a..290b219fad9c 100644 --- a/block/Kconfig +++ b/block/Kconfig | |||
@@ -47,6 +47,7 @@ config BLK_DEV_IO_TRACE | |||
47 | depends on SYSFS | 47 | depends on SYSFS |
48 | select RELAY | 48 | select RELAY |
49 | select DEBUG_FS | 49 | select DEBUG_FS |
50 | select TRACEPOINTS | ||
50 | help | 51 | help |
51 | Say Y here if you want to be able to trace the block layer actions | 52 | Say Y here if you want to be able to trace the block layer actions |
52 | on a given queue. Tracing allows you to see any traffic happening | 53 | on a given queue. Tracing allows you to see any traffic happening |
diff --git a/block/blk-barrier.c b/block/blk-barrier.c index 5c99ff8d2db8..6e72d661ae42 100644 --- a/block/blk-barrier.c +++ b/block/blk-barrier.c | |||
@@ -161,7 +161,7 @@ static inline struct request *start_ordered(struct request_queue *q, | |||
161 | /* | 161 | /* |
162 | * Prep proxy barrier request. | 162 | * Prep proxy barrier request. |
163 | */ | 163 | */ |
164 | blkdev_dequeue_request(rq); | 164 | elv_dequeue_request(q, rq); |
165 | q->orig_bar_rq = rq; | 165 | q->orig_bar_rq = rq; |
166 | rq = &q->bar_rq; | 166 | rq = &q->bar_rq; |
167 | blk_rq_init(q, rq); | 167 | blk_rq_init(q, rq); |
@@ -219,7 +219,7 @@ int blk_do_ordered(struct request_queue *q, struct request **rqp) | |||
219 | * This can happen when the queue switches to | 219 | * This can happen when the queue switches to |
220 | * ORDERED_NONE while this request is on it. | 220 | * ORDERED_NONE while this request is on it. |
221 | */ | 221 | */ |
222 | blkdev_dequeue_request(rq); | 222 | elv_dequeue_request(q, rq); |
223 | if (__blk_end_request(rq, -EOPNOTSUPP, | 223 | if (__blk_end_request(rq, -EOPNOTSUPP, |
224 | blk_rq_bytes(rq))) | 224 | blk_rq_bytes(rq))) |
225 | BUG(); | 225 | BUG(); |
diff --git a/block/blk-core.c b/block/blk-core.c index 10e8a64a5a5b..561e8a1b43a4 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
@@ -28,9 +28,23 @@ | |||
28 | #include <linux/task_io_accounting_ops.h> | 28 | #include <linux/task_io_accounting_ops.h> |
29 | #include <linux/blktrace_api.h> | 29 | #include <linux/blktrace_api.h> |
30 | #include <linux/fault-inject.h> | 30 | #include <linux/fault-inject.h> |
31 | #include <trace/block.h> | ||
31 | 32 | ||
32 | #include "blk.h" | 33 | #include "blk.h" |
33 | 34 | ||
35 | DEFINE_TRACE(block_plug); | ||
36 | DEFINE_TRACE(block_unplug_io); | ||
37 | DEFINE_TRACE(block_unplug_timer); | ||
38 | DEFINE_TRACE(block_getrq); | ||
39 | DEFINE_TRACE(block_sleeprq); | ||
40 | DEFINE_TRACE(block_rq_requeue); | ||
41 | DEFINE_TRACE(block_bio_backmerge); | ||
42 | DEFINE_TRACE(block_bio_frontmerge); | ||
43 | DEFINE_TRACE(block_bio_queue); | ||
44 | DEFINE_TRACE(block_rq_complete); | ||
45 | DEFINE_TRACE(block_remap); /* Also used in drivers/md/dm.c */ | ||
46 | EXPORT_TRACEPOINT_SYMBOL_GPL(block_remap); | ||
47 | |||
34 | static int __make_request(struct request_queue *q, struct bio *bio); | 48 | static int __make_request(struct request_queue *q, struct bio *bio); |
35 | 49 | ||
36 | /* | 50 | /* |
@@ -205,7 +219,7 @@ void blk_plug_device(struct request_queue *q) | |||
205 | 219 | ||
206 | if (!queue_flag_test_and_set(QUEUE_FLAG_PLUGGED, q)) { | 220 | if (!queue_flag_test_and_set(QUEUE_FLAG_PLUGGED, q)) { |
207 | mod_timer(&q->unplug_timer, jiffies + q->unplug_delay); | 221 | mod_timer(&q->unplug_timer, jiffies + q->unplug_delay); |
208 | blk_add_trace_generic(q, NULL, 0, BLK_TA_PLUG); | 222 | trace_block_plug(q); |
209 | } | 223 | } |
210 | } | 224 | } |
211 | EXPORT_SYMBOL(blk_plug_device); | 225 | EXPORT_SYMBOL(blk_plug_device); |
@@ -292,9 +306,7 @@ void blk_unplug_work(struct work_struct *work) | |||
292 | struct request_queue *q = | 306 | struct request_queue *q = |
293 | container_of(work, struct request_queue, unplug_work); | 307 | container_of(work, struct request_queue, unplug_work); |
294 | 308 | ||
295 | blk_add_trace_pdu_int(q, BLK_TA_UNPLUG_IO, NULL, | 309 | trace_block_unplug_io(q); |
296 | q->rq.count[READ] + q->rq.count[WRITE]); | ||
297 | |||
298 | q->unplug_fn(q); | 310 | q->unplug_fn(q); |
299 | } | 311 | } |
300 | 312 | ||
@@ -302,9 +314,7 @@ void blk_unplug_timeout(unsigned long data) | |||
302 | { | 314 | { |
303 | struct request_queue *q = (struct request_queue *)data; | 315 | struct request_queue *q = (struct request_queue *)data; |
304 | 316 | ||
305 | blk_add_trace_pdu_int(q, BLK_TA_UNPLUG_TIMER, NULL, | 317 | trace_block_unplug_timer(q); |
306 | q->rq.count[READ] + q->rq.count[WRITE]); | ||
307 | |||
308 | kblockd_schedule_work(q, &q->unplug_work); | 318 | kblockd_schedule_work(q, &q->unplug_work); |
309 | } | 319 | } |
310 | 320 | ||
@@ -314,9 +324,7 @@ void blk_unplug(struct request_queue *q) | |||
314 | * devices don't necessarily have an ->unplug_fn defined | 324 | * devices don't necessarily have an ->unplug_fn defined |
315 | */ | 325 | */ |
316 | if (q->unplug_fn) { | 326 | if (q->unplug_fn) { |
317 | blk_add_trace_pdu_int(q, BLK_TA_UNPLUG_IO, NULL, | 327 | trace_block_unplug_io(q); |
318 | q->rq.count[READ] + q->rq.count[WRITE]); | ||
319 | |||
320 | q->unplug_fn(q); | 328 | q->unplug_fn(q); |
321 | } | 329 | } |
322 | } | 330 | } |
@@ -592,7 +600,7 @@ blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id) | |||
592 | 1 << QUEUE_FLAG_STACKABLE); | 600 | 1 << QUEUE_FLAG_STACKABLE); |
593 | q->queue_lock = lock; | 601 | q->queue_lock = lock; |
594 | 602 | ||
595 | blk_queue_segment_boundary(q, 0xffffffff); | 603 | blk_queue_segment_boundary(q, BLK_SEG_BOUNDARY_MASK); |
596 | 604 | ||
597 | blk_queue_make_request(q, __make_request); | 605 | blk_queue_make_request(q, __make_request); |
598 | blk_queue_max_segment_size(q, MAX_SEGMENT_SIZE); | 606 | blk_queue_max_segment_size(q, MAX_SEGMENT_SIZE); |
@@ -822,7 +830,7 @@ rq_starved: | |||
822 | if (ioc_batching(q, ioc)) | 830 | if (ioc_batching(q, ioc)) |
823 | ioc->nr_batch_requests--; | 831 | ioc->nr_batch_requests--; |
824 | 832 | ||
825 | blk_add_trace_generic(q, bio, rw, BLK_TA_GETRQ); | 833 | trace_block_getrq(q, bio, rw); |
826 | out: | 834 | out: |
827 | return rq; | 835 | return rq; |
828 | } | 836 | } |
@@ -848,7 +856,7 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags, | |||
848 | prepare_to_wait_exclusive(&rl->wait[rw], &wait, | 856 | prepare_to_wait_exclusive(&rl->wait[rw], &wait, |
849 | TASK_UNINTERRUPTIBLE); | 857 | TASK_UNINTERRUPTIBLE); |
850 | 858 | ||
851 | blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ); | 859 | trace_block_sleeprq(q, bio, rw); |
852 | 860 | ||
853 | __generic_unplug_device(q); | 861 | __generic_unplug_device(q); |
854 | spin_unlock_irq(q->queue_lock); | 862 | spin_unlock_irq(q->queue_lock); |
@@ -928,7 +936,7 @@ void blk_requeue_request(struct request_queue *q, struct request *rq) | |||
928 | { | 936 | { |
929 | blk_delete_timer(rq); | 937 | blk_delete_timer(rq); |
930 | blk_clear_rq_complete(rq); | 938 | blk_clear_rq_complete(rq); |
931 | blk_add_trace_rq(q, rq, BLK_TA_REQUEUE); | 939 | trace_block_rq_requeue(q, rq); |
932 | 940 | ||
933 | if (blk_rq_tagged(rq)) | 941 | if (blk_rq_tagged(rq)) |
934 | blk_queue_end_tag(q, rq); | 942 | blk_queue_end_tag(q, rq); |
@@ -1167,7 +1175,7 @@ static int __make_request(struct request_queue *q, struct bio *bio) | |||
1167 | if (!ll_back_merge_fn(q, req, bio)) | 1175 | if (!ll_back_merge_fn(q, req, bio)) |
1168 | break; | 1176 | break; |
1169 | 1177 | ||
1170 | blk_add_trace_bio(q, bio, BLK_TA_BACKMERGE); | 1178 | trace_block_bio_backmerge(q, bio); |
1171 | 1179 | ||
1172 | req->biotail->bi_next = bio; | 1180 | req->biotail->bi_next = bio; |
1173 | req->biotail = bio; | 1181 | req->biotail = bio; |
@@ -1186,7 +1194,7 @@ static int __make_request(struct request_queue *q, struct bio *bio) | |||
1186 | if (!ll_front_merge_fn(q, req, bio)) | 1194 | if (!ll_front_merge_fn(q, req, bio)) |
1187 | break; | 1195 | break; |
1188 | 1196 | ||
1189 | blk_add_trace_bio(q, bio, BLK_TA_FRONTMERGE); | 1197 | trace_block_bio_frontmerge(q, bio); |
1190 | 1198 | ||
1191 | bio->bi_next = req->bio; | 1199 | bio->bi_next = req->bio; |
1192 | req->bio = bio; | 1200 | req->bio = bio; |
@@ -1269,7 +1277,7 @@ static inline void blk_partition_remap(struct bio *bio) | |||
1269 | bio->bi_sector += p->start_sect; | 1277 | bio->bi_sector += p->start_sect; |
1270 | bio->bi_bdev = bdev->bd_contains; | 1278 | bio->bi_bdev = bdev->bd_contains; |
1271 | 1279 | ||
1272 | blk_add_trace_remap(bdev_get_queue(bio->bi_bdev), bio, | 1280 | trace_block_remap(bdev_get_queue(bio->bi_bdev), bio, |
1273 | bdev->bd_dev, bio->bi_sector, | 1281 | bdev->bd_dev, bio->bi_sector, |
1274 | bio->bi_sector - p->start_sect); | 1282 | bio->bi_sector - p->start_sect); |
1275 | } | 1283 | } |
@@ -1441,10 +1449,10 @@ end_io: | |||
1441 | goto end_io; | 1449 | goto end_io; |
1442 | 1450 | ||
1443 | if (old_sector != -1) | 1451 | if (old_sector != -1) |
1444 | blk_add_trace_remap(q, bio, old_dev, bio->bi_sector, | 1452 | trace_block_remap(q, bio, old_dev, bio->bi_sector, |
1445 | old_sector); | 1453 | old_sector); |
1446 | 1454 | ||
1447 | blk_add_trace_bio(q, bio, BLK_TA_QUEUE); | 1455 | trace_block_bio_queue(q, bio); |
1448 | 1456 | ||
1449 | old_sector = bio->bi_sector; | 1457 | old_sector = bio->bi_sector; |
1450 | old_dev = bio->bi_bdev->bd_dev; | 1458 | old_dev = bio->bi_bdev->bd_dev; |
@@ -1637,6 +1645,28 @@ int blk_insert_cloned_request(struct request_queue *q, struct request *rq) | |||
1637 | EXPORT_SYMBOL_GPL(blk_insert_cloned_request); | 1645 | EXPORT_SYMBOL_GPL(blk_insert_cloned_request); |
1638 | 1646 | ||
1639 | /** | 1647 | /** |
1648 | * blkdev_dequeue_request - dequeue request and start timeout timer | ||
1649 | * @req: request to dequeue | ||
1650 | * | ||
1651 | * Dequeue @req and start timeout timer on it. This hands off the | ||
1652 | * request to the driver. | ||
1653 | * | ||
1654 | * Block internal functions which don't want to start timer should | ||
1655 | * call elv_dequeue_request(). | ||
1656 | */ | ||
1657 | void blkdev_dequeue_request(struct request *req) | ||
1658 | { | ||
1659 | elv_dequeue_request(req->q, req); | ||
1660 | |||
1661 | /* | ||
1662 | * We are now handing the request to the hardware, add the | ||
1663 | * timeout handler. | ||
1664 | */ | ||
1665 | blk_add_timer(req); | ||
1666 | } | ||
1667 | EXPORT_SYMBOL(blkdev_dequeue_request); | ||
1668 | |||
1669 | /** | ||
1640 | * __end_that_request_first - end I/O on a request | 1670 | * __end_that_request_first - end I/O on a request |
1641 | * @req: the request being processed | 1671 | * @req: the request being processed |
1642 | * @error: %0 for success, < %0 for error | 1672 | * @error: %0 for success, < %0 for error |
@@ -1656,7 +1686,7 @@ static int __end_that_request_first(struct request *req, int error, | |||
1656 | int total_bytes, bio_nbytes, next_idx = 0; | 1686 | int total_bytes, bio_nbytes, next_idx = 0; |
1657 | struct bio *bio; | 1687 | struct bio *bio; |
1658 | 1688 | ||
1659 | blk_add_trace_rq(req->q, req, BLK_TA_COMPLETE); | 1689 | trace_block_rq_complete(req->q, req); |
1660 | 1690 | ||
1661 | /* | 1691 | /* |
1662 | * for a REQ_TYPE_BLOCK_PC request, we want to carry any eventual | 1692 | * for a REQ_TYPE_BLOCK_PC request, we want to carry any eventual |
@@ -1774,7 +1804,7 @@ static void end_that_request_last(struct request *req, int error) | |||
1774 | blk_queue_end_tag(req->q, req); | 1804 | blk_queue_end_tag(req->q, req); |
1775 | 1805 | ||
1776 | if (blk_queued_rq(req)) | 1806 | if (blk_queued_rq(req)) |
1777 | blkdev_dequeue_request(req); | 1807 | elv_dequeue_request(req->q, req); |
1778 | 1808 | ||
1779 | if (unlikely(laptop_mode) && blk_fs_request(req)) | 1809 | if (unlikely(laptop_mode) && blk_fs_request(req)) |
1780 | laptop_io_completion(); | 1810 | laptop_io_completion(); |
diff --git a/block/blk-map.c b/block/blk-map.c index 0f4b4b881811..2990447f45e9 100644 --- a/block/blk-map.c +++ b/block/blk-map.c | |||
@@ -224,7 +224,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, | |||
224 | */ | 224 | */ |
225 | bio_get(bio); | 225 | bio_get(bio); |
226 | bio_endio(bio, 0); | 226 | bio_endio(bio, 0); |
227 | bio_unmap_user(bio); | 227 | __blk_rq_unmap_user(bio); |
228 | return -EINVAL; | 228 | return -EINVAL; |
229 | } | 229 | } |
230 | 230 | ||
diff --git a/block/blk-settings.c b/block/blk-settings.c index 41392fbe19ff..afa55e14e278 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c | |||
@@ -125,6 +125,9 @@ void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn) | |||
125 | q->nr_requests = BLKDEV_MAX_RQ; | 125 | q->nr_requests = BLKDEV_MAX_RQ; |
126 | blk_queue_max_phys_segments(q, MAX_PHYS_SEGMENTS); | 126 | blk_queue_max_phys_segments(q, MAX_PHYS_SEGMENTS); |
127 | blk_queue_max_hw_segments(q, MAX_HW_SEGMENTS); | 127 | blk_queue_max_hw_segments(q, MAX_HW_SEGMENTS); |
128 | blk_queue_segment_boundary(q, BLK_SEG_BOUNDARY_MASK); | ||
129 | blk_queue_max_segment_size(q, MAX_SEGMENT_SIZE); | ||
130 | |||
128 | q->make_request_fn = mfn; | 131 | q->make_request_fn = mfn; |
129 | q->backing_dev_info.ra_pages = | 132 | q->backing_dev_info.ra_pages = |
130 | (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE; | 133 | (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE; |
@@ -314,6 +317,7 @@ void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b) | |||
314 | /* zero is "infinity" */ | 317 | /* zero is "infinity" */ |
315 | t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors); | 318 | t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors); |
316 | t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors); | 319 | t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors); |
320 | t->seg_boundary_mask = min_not_zero(t->seg_boundary_mask, b->seg_boundary_mask); | ||
317 | 321 | ||
318 | t->max_phys_segments = min(t->max_phys_segments, b->max_phys_segments); | 322 | t->max_phys_segments = min(t->max_phys_segments, b->max_phys_segments); |
319 | t->max_hw_segments = min(t->max_hw_segments, b->max_hw_segments); | 323 | t->max_hw_segments = min(t->max_hw_segments, b->max_hw_segments); |
diff --git a/block/blktrace.c b/block/blktrace.c index 85049a7e7a17..b0a2cae886db 100644 --- a/block/blktrace.c +++ b/block/blktrace.c | |||
@@ -23,10 +23,18 @@ | |||
23 | #include <linux/mutex.h> | 23 | #include <linux/mutex.h> |
24 | #include <linux/debugfs.h> | 24 | #include <linux/debugfs.h> |
25 | #include <linux/time.h> | 25 | #include <linux/time.h> |
26 | #include <trace/block.h> | ||
26 | #include <asm/uaccess.h> | 27 | #include <asm/uaccess.h> |
27 | 28 | ||
28 | static unsigned int blktrace_seq __read_mostly = 1; | 29 | static unsigned int blktrace_seq __read_mostly = 1; |
29 | 30 | ||
31 | /* Global reference count of probes */ | ||
32 | static DEFINE_MUTEX(blk_probe_mutex); | ||
33 | static atomic_t blk_probes_ref = ATOMIC_INIT(0); | ||
34 | |||
35 | static int blk_register_tracepoints(void); | ||
36 | static void blk_unregister_tracepoints(void); | ||
37 | |||
30 | /* | 38 | /* |
31 | * Send out a notify message. | 39 | * Send out a notify message. |
32 | */ | 40 | */ |
@@ -119,7 +127,7 @@ static u32 ddir_act[2] __read_mostly = { BLK_TC_ACT(BLK_TC_READ), BLK_TC_ACT(BLK | |||
119 | * The worker for the various blk_add_trace*() types. Fills out a | 127 | * The worker for the various blk_add_trace*() types. Fills out a |
120 | * blk_io_trace structure and places it in a per-cpu subbuffer. | 128 | * blk_io_trace structure and places it in a per-cpu subbuffer. |
121 | */ | 129 | */ |
122 | void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, | 130 | static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, |
123 | int rw, u32 what, int error, int pdu_len, void *pdu_data) | 131 | int rw, u32 what, int error, int pdu_len, void *pdu_data) |
124 | { | 132 | { |
125 | struct task_struct *tsk = current; | 133 | struct task_struct *tsk = current; |
@@ -177,8 +185,6 @@ void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, | |||
177 | local_irq_restore(flags); | 185 | local_irq_restore(flags); |
178 | } | 186 | } |
179 | 187 | ||
180 | EXPORT_SYMBOL_GPL(__blk_add_trace); | ||
181 | |||
182 | static struct dentry *blk_tree_root; | 188 | static struct dentry *blk_tree_root; |
183 | static DEFINE_MUTEX(blk_tree_mutex); | 189 | static DEFINE_MUTEX(blk_tree_mutex); |
184 | static unsigned int root_users; | 190 | static unsigned int root_users; |
@@ -237,6 +243,10 @@ static void blk_trace_cleanup(struct blk_trace *bt) | |||
237 | free_percpu(bt->sequence); | 243 | free_percpu(bt->sequence); |
238 | free_percpu(bt->msg_data); | 244 | free_percpu(bt->msg_data); |
239 | kfree(bt); | 245 | kfree(bt); |
246 | mutex_lock(&blk_probe_mutex); | ||
247 | if (atomic_dec_and_test(&blk_probes_ref)) | ||
248 | blk_unregister_tracepoints(); | ||
249 | mutex_unlock(&blk_probe_mutex); | ||
240 | } | 250 | } |
241 | 251 | ||
242 | int blk_trace_remove(struct request_queue *q) | 252 | int blk_trace_remove(struct request_queue *q) |
@@ -428,6 +438,14 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, | |||
428 | bt->pid = buts->pid; | 438 | bt->pid = buts->pid; |
429 | bt->trace_state = Blktrace_setup; | 439 | bt->trace_state = Blktrace_setup; |
430 | 440 | ||
441 | mutex_lock(&blk_probe_mutex); | ||
442 | if (atomic_add_return(1, &blk_probes_ref) == 1) { | ||
443 | ret = blk_register_tracepoints(); | ||
444 | if (ret) | ||
445 | goto probe_err; | ||
446 | } | ||
447 | mutex_unlock(&blk_probe_mutex); | ||
448 | |||
431 | ret = -EBUSY; | 449 | ret = -EBUSY; |
432 | old_bt = xchg(&q->blk_trace, bt); | 450 | old_bt = xchg(&q->blk_trace, bt); |
433 | if (old_bt) { | 451 | if (old_bt) { |
@@ -436,6 +454,9 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, | |||
436 | } | 454 | } |
437 | 455 | ||
438 | return 0; | 456 | return 0; |
457 | probe_err: | ||
458 | atomic_dec(&blk_probes_ref); | ||
459 | mutex_unlock(&blk_probe_mutex); | ||
439 | err: | 460 | err: |
440 | if (dir) | 461 | if (dir) |
441 | blk_remove_tree(dir); | 462 | blk_remove_tree(dir); |
@@ -562,3 +583,308 @@ void blk_trace_shutdown(struct request_queue *q) | |||
562 | blk_trace_remove(q); | 583 | blk_trace_remove(q); |
563 | } | 584 | } |
564 | } | 585 | } |
586 | |||
587 | /* | ||
588 | * blktrace probes | ||
589 | */ | ||
590 | |||
591 | /** | ||
592 | * blk_add_trace_rq - Add a trace for a request oriented action | ||
593 | * @q: queue the io is for | ||
594 | * @rq: the source request | ||
595 | * @what: the action | ||
596 | * | ||
597 | * Description: | ||
598 | * Records an action against a request. Will log the bio offset + size. | ||
599 | * | ||
600 | **/ | ||
601 | static void blk_add_trace_rq(struct request_queue *q, struct request *rq, | ||
602 | u32 what) | ||
603 | { | ||
604 | struct blk_trace *bt = q->blk_trace; | ||
605 | int rw = rq->cmd_flags & 0x03; | ||
606 | |||
607 | if (likely(!bt)) | ||
608 | return; | ||
609 | |||
610 | if (blk_discard_rq(rq)) | ||
611 | rw |= (1 << BIO_RW_DISCARD); | ||
612 | |||
613 | if (blk_pc_request(rq)) { | ||
614 | what |= BLK_TC_ACT(BLK_TC_PC); | ||
615 | __blk_add_trace(bt, 0, rq->data_len, rw, what, rq->errors, | ||
616 | sizeof(rq->cmd), rq->cmd); | ||
617 | } else { | ||
618 | what |= BLK_TC_ACT(BLK_TC_FS); | ||
619 | __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, | ||
620 | rw, what, rq->errors, 0, NULL); | ||
621 | } | ||
622 | } | ||
623 | |||
624 | static void blk_add_trace_rq_abort(struct request_queue *q, struct request *rq) | ||
625 | { | ||
626 | blk_add_trace_rq(q, rq, BLK_TA_ABORT); | ||
627 | } | ||
628 | |||
629 | static void blk_add_trace_rq_insert(struct request_queue *q, struct request *rq) | ||
630 | { | ||
631 | blk_add_trace_rq(q, rq, BLK_TA_INSERT); | ||
632 | } | ||
633 | |||
634 | static void blk_add_trace_rq_issue(struct request_queue *q, struct request *rq) | ||
635 | { | ||
636 | blk_add_trace_rq(q, rq, BLK_TA_ISSUE); | ||
637 | } | ||
638 | |||
639 | static void blk_add_trace_rq_requeue(struct request_queue *q, struct request *rq) | ||
640 | { | ||
641 | blk_add_trace_rq(q, rq, BLK_TA_REQUEUE); | ||
642 | } | ||
643 | |||
644 | static void blk_add_trace_rq_complete(struct request_queue *q, struct request *rq) | ||
645 | { | ||
646 | blk_add_trace_rq(q, rq, BLK_TA_COMPLETE); | ||
647 | } | ||
648 | |||
649 | /** | ||
650 | * blk_add_trace_bio - Add a trace for a bio oriented action | ||
651 | * @q: queue the io is for | ||
652 | * @bio: the source bio | ||
653 | * @what: the action | ||
654 | * | ||
655 | * Description: | ||
656 | * Records an action against a bio. Will log the bio offset + size. | ||
657 | * | ||
658 | **/ | ||
659 | static void blk_add_trace_bio(struct request_queue *q, struct bio *bio, | ||
660 | u32 what) | ||
661 | { | ||
662 | struct blk_trace *bt = q->blk_trace; | ||
663 | |||
664 | if (likely(!bt)) | ||
665 | return; | ||
666 | |||
667 | __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, | ||
668 | !bio_flagged(bio, BIO_UPTODATE), 0, NULL); | ||
669 | } | ||
670 | |||
671 | static void blk_add_trace_bio_bounce(struct request_queue *q, struct bio *bio) | ||
672 | { | ||
673 | blk_add_trace_bio(q, bio, BLK_TA_BOUNCE); | ||
674 | } | ||
675 | |||
676 | static void blk_add_trace_bio_complete(struct request_queue *q, struct bio *bio) | ||
677 | { | ||
678 | blk_add_trace_bio(q, bio, BLK_TA_COMPLETE); | ||
679 | } | ||
680 | |||
681 | static void blk_add_trace_bio_backmerge(struct request_queue *q, struct bio *bio) | ||
682 | { | ||
683 | blk_add_trace_bio(q, bio, BLK_TA_BACKMERGE); | ||
684 | } | ||
685 | |||
686 | static void blk_add_trace_bio_frontmerge(struct request_queue *q, struct bio *bio) | ||
687 | { | ||
688 | blk_add_trace_bio(q, bio, BLK_TA_FRONTMERGE); | ||
689 | } | ||
690 | |||
691 | static void blk_add_trace_bio_queue(struct request_queue *q, struct bio *bio) | ||
692 | { | ||
693 | blk_add_trace_bio(q, bio, BLK_TA_QUEUE); | ||
694 | } | ||
695 | |||
696 | static void blk_add_trace_getrq(struct request_queue *q, struct bio *bio, int rw) | ||
697 | { | ||
698 | if (bio) | ||
699 | blk_add_trace_bio(q, bio, BLK_TA_GETRQ); | ||
700 | else { | ||
701 | struct blk_trace *bt = q->blk_trace; | ||
702 | |||
703 | if (bt) | ||
704 | __blk_add_trace(bt, 0, 0, rw, BLK_TA_GETRQ, 0, 0, NULL); | ||
705 | } | ||
706 | } | ||
707 | |||
708 | |||
709 | static void blk_add_trace_sleeprq(struct request_queue *q, struct bio *bio, int rw) | ||
710 | { | ||
711 | if (bio) | ||
712 | blk_add_trace_bio(q, bio, BLK_TA_SLEEPRQ); | ||
713 | else { | ||
714 | struct blk_trace *bt = q->blk_trace; | ||
715 | |||
716 | if (bt) | ||
717 | __blk_add_trace(bt, 0, 0, rw, BLK_TA_SLEEPRQ, 0, 0, NULL); | ||
718 | } | ||
719 | } | ||
720 | |||
721 | static void blk_add_trace_plug(struct request_queue *q) | ||
722 | { | ||
723 | struct blk_trace *bt = q->blk_trace; | ||
724 | |||
725 | if (bt) | ||
726 | __blk_add_trace(bt, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL); | ||
727 | } | ||
728 | |||
729 | static void blk_add_trace_unplug_io(struct request_queue *q) | ||
730 | { | ||
731 | struct blk_trace *bt = q->blk_trace; | ||
732 | |||
733 | if (bt) { | ||
734 | unsigned int pdu = q->rq.count[READ] + q->rq.count[WRITE]; | ||
735 | __be64 rpdu = cpu_to_be64(pdu); | ||
736 | |||
737 | __blk_add_trace(bt, 0, 0, 0, BLK_TA_UNPLUG_IO, 0, | ||
738 | sizeof(rpdu), &rpdu); | ||
739 | } | ||
740 | } | ||
741 | |||
742 | static void blk_add_trace_unplug_timer(struct request_queue *q) | ||
743 | { | ||
744 | struct blk_trace *bt = q->blk_trace; | ||
745 | |||
746 | if (bt) { | ||
747 | unsigned int pdu = q->rq.count[READ] + q->rq.count[WRITE]; | ||
748 | __be64 rpdu = cpu_to_be64(pdu); | ||
749 | |||
750 | __blk_add_trace(bt, 0, 0, 0, BLK_TA_UNPLUG_TIMER, 0, | ||
751 | sizeof(rpdu), &rpdu); | ||
752 | } | ||
753 | } | ||
754 | |||
755 | static void blk_add_trace_split(struct request_queue *q, struct bio *bio, | ||
756 | unsigned int pdu) | ||
757 | { | ||
758 | struct blk_trace *bt = q->blk_trace; | ||
759 | |||
760 | if (bt) { | ||
761 | __be64 rpdu = cpu_to_be64(pdu); | ||
762 | |||
763 | __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, | ||
764 | BLK_TA_SPLIT, !bio_flagged(bio, BIO_UPTODATE), | ||
765 | sizeof(rpdu), &rpdu); | ||
766 | } | ||
767 | } | ||
768 | |||
769 | /** | ||
770 | * blk_add_trace_remap - Add a trace for a remap operation | ||
771 | * @q: queue the io is for | ||
772 | * @bio: the source bio | ||
773 | * @dev: target device | ||
774 | * @from: source sector | ||
775 | * @to: target sector | ||
776 | * | ||
777 | * Description: | ||
778 | * Device mapper or raid target sometimes need to split a bio because | ||
779 | * it spans a stripe (or similar). Add a trace for that action. | ||
780 | * | ||
781 | **/ | ||
782 | static void blk_add_trace_remap(struct request_queue *q, struct bio *bio, | ||
783 | dev_t dev, sector_t from, sector_t to) | ||
784 | { | ||
785 | struct blk_trace *bt = q->blk_trace; | ||
786 | struct blk_io_trace_remap r; | ||
787 | |||
788 | if (likely(!bt)) | ||
789 | return; | ||
790 | |||
791 | r.device = cpu_to_be32(dev); | ||
792 | r.device_from = cpu_to_be32(bio->bi_bdev->bd_dev); | ||
793 | r.sector = cpu_to_be64(to); | ||
794 | |||
795 | __blk_add_trace(bt, from, bio->bi_size, bio->bi_rw, BLK_TA_REMAP, | ||
796 | !bio_flagged(bio, BIO_UPTODATE), sizeof(r), &r); | ||
797 | } | ||
798 | |||
799 | /** | ||
800 | * blk_add_driver_data - Add binary message with driver-specific data | ||
801 | * @q: queue the io is for | ||
802 | * @rq: io request | ||
803 | * @data: driver-specific data | ||
804 | * @len: length of driver-specific data | ||
805 | * | ||
806 | * Description: | ||
807 | * Some drivers might want to write driver-specific data per request. | ||
808 | * | ||
809 | **/ | ||
810 | void blk_add_driver_data(struct request_queue *q, | ||
811 | struct request *rq, | ||
812 | void *data, size_t len) | ||
813 | { | ||
814 | struct blk_trace *bt = q->blk_trace; | ||
815 | |||
816 | if (likely(!bt)) | ||
817 | return; | ||
818 | |||
819 | if (blk_pc_request(rq)) | ||
820 | __blk_add_trace(bt, 0, rq->data_len, 0, BLK_TA_DRV_DATA, | ||
821 | rq->errors, len, data); | ||
822 | else | ||
823 | __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, | ||
824 | 0, BLK_TA_DRV_DATA, rq->errors, len, data); | ||
825 | } | ||
826 | EXPORT_SYMBOL_GPL(blk_add_driver_data); | ||
827 | |||
828 | static int blk_register_tracepoints(void) | ||
829 | { | ||
830 | int ret; | ||
831 | |||
832 | ret = register_trace_block_rq_abort(blk_add_trace_rq_abort); | ||
833 | WARN_ON(ret); | ||
834 | ret = register_trace_block_rq_insert(blk_add_trace_rq_insert); | ||
835 | WARN_ON(ret); | ||
836 | ret = register_trace_block_rq_issue(blk_add_trace_rq_issue); | ||
837 | WARN_ON(ret); | ||
838 | ret = register_trace_block_rq_requeue(blk_add_trace_rq_requeue); | ||
839 | WARN_ON(ret); | ||
840 | ret = register_trace_block_rq_complete(blk_add_trace_rq_complete); | ||
841 | WARN_ON(ret); | ||
842 | ret = register_trace_block_bio_bounce(blk_add_trace_bio_bounce); | ||
843 | WARN_ON(ret); | ||
844 | ret = register_trace_block_bio_complete(blk_add_trace_bio_complete); | ||
845 | WARN_ON(ret); | ||
846 | ret = register_trace_block_bio_backmerge(blk_add_trace_bio_backmerge); | ||
847 | WARN_ON(ret); | ||
848 | ret = register_trace_block_bio_frontmerge(blk_add_trace_bio_frontmerge); | ||
849 | WARN_ON(ret); | ||
850 | ret = register_trace_block_bio_queue(blk_add_trace_bio_queue); | ||
851 | WARN_ON(ret); | ||
852 | ret = register_trace_block_getrq(blk_add_trace_getrq); | ||
853 | WARN_ON(ret); | ||
854 | ret = register_trace_block_sleeprq(blk_add_trace_sleeprq); | ||
855 | WARN_ON(ret); | ||
856 | ret = register_trace_block_plug(blk_add_trace_plug); | ||
857 | WARN_ON(ret); | ||
858 | ret = register_trace_block_unplug_timer(blk_add_trace_unplug_timer); | ||
859 | WARN_ON(ret); | ||
860 | ret = register_trace_block_unplug_io(blk_add_trace_unplug_io); | ||
861 | WARN_ON(ret); | ||
862 | ret = register_trace_block_split(blk_add_trace_split); | ||
863 | WARN_ON(ret); | ||
864 | ret = register_trace_block_remap(blk_add_trace_remap); | ||
865 | WARN_ON(ret); | ||
866 | return 0; | ||
867 | } | ||
868 | |||
869 | static void blk_unregister_tracepoints(void) | ||
870 | { | ||
871 | unregister_trace_block_remap(blk_add_trace_remap); | ||
872 | unregister_trace_block_split(blk_add_trace_split); | ||
873 | unregister_trace_block_unplug_io(blk_add_trace_unplug_io); | ||
874 | unregister_trace_block_unplug_timer(blk_add_trace_unplug_timer); | ||
875 | unregister_trace_block_plug(blk_add_trace_plug); | ||
876 | unregister_trace_block_sleeprq(blk_add_trace_sleeprq); | ||
877 | unregister_trace_block_getrq(blk_add_trace_getrq); | ||
878 | unregister_trace_block_bio_queue(blk_add_trace_bio_queue); | ||
879 | unregister_trace_block_bio_frontmerge(blk_add_trace_bio_frontmerge); | ||
880 | unregister_trace_block_bio_backmerge(blk_add_trace_bio_backmerge); | ||
881 | unregister_trace_block_bio_complete(blk_add_trace_bio_complete); | ||
882 | unregister_trace_block_bio_bounce(blk_add_trace_bio_bounce); | ||
883 | unregister_trace_block_rq_complete(blk_add_trace_rq_complete); | ||
884 | unregister_trace_block_rq_requeue(blk_add_trace_rq_requeue); | ||
885 | unregister_trace_block_rq_issue(blk_add_trace_rq_issue); | ||
886 | unregister_trace_block_rq_insert(blk_add_trace_rq_insert); | ||
887 | unregister_trace_block_rq_abort(blk_add_trace_rq_abort); | ||
888 | |||
889 | tracepoint_synchronize_unregister(); | ||
890 | } | ||
diff --git a/block/elevator.c b/block/elevator.c index 9ac82dde99dd..86836dd179c0 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/compiler.h> | 33 | #include <linux/compiler.h> |
34 | #include <linux/delay.h> | 34 | #include <linux/delay.h> |
35 | #include <linux/blktrace_api.h> | 35 | #include <linux/blktrace_api.h> |
36 | #include <trace/block.h> | ||
36 | #include <linux/hash.h> | 37 | #include <linux/hash.h> |
37 | #include <linux/uaccess.h> | 38 | #include <linux/uaccess.h> |
38 | 39 | ||
@@ -41,6 +42,8 @@ | |||
41 | static DEFINE_SPINLOCK(elv_list_lock); | 42 | static DEFINE_SPINLOCK(elv_list_lock); |
42 | static LIST_HEAD(elv_list); | 43 | static LIST_HEAD(elv_list); |
43 | 44 | ||
45 | DEFINE_TRACE(block_rq_abort); | ||
46 | |||
44 | /* | 47 | /* |
45 | * Merge hash stuff. | 48 | * Merge hash stuff. |
46 | */ | 49 | */ |
@@ -52,6 +55,9 @@ static const int elv_hash_shift = 6; | |||
52 | #define rq_hash_key(rq) ((rq)->sector + (rq)->nr_sectors) | 55 | #define rq_hash_key(rq) ((rq)->sector + (rq)->nr_sectors) |
53 | #define ELV_ON_HASH(rq) (!hlist_unhashed(&(rq)->hash)) | 56 | #define ELV_ON_HASH(rq) (!hlist_unhashed(&(rq)->hash)) |
54 | 57 | ||
58 | DEFINE_TRACE(block_rq_insert); | ||
59 | DEFINE_TRACE(block_rq_issue); | ||
60 | |||
55 | /* | 61 | /* |
56 | * Query io scheduler to see if the current process issuing bio may be | 62 | * Query io scheduler to see if the current process issuing bio may be |
57 | * merged with rq. | 63 | * merged with rq. |
@@ -586,7 +592,7 @@ void elv_insert(struct request_queue *q, struct request *rq, int where) | |||
586 | unsigned ordseq; | 592 | unsigned ordseq; |
587 | int unplug_it = 1; | 593 | int unplug_it = 1; |
588 | 594 | ||
589 | blk_add_trace_rq(q, rq, BLK_TA_INSERT); | 595 | trace_block_rq_insert(q, rq); |
590 | 596 | ||
591 | rq->q = q; | 597 | rq->q = q; |
592 | 598 | ||
@@ -772,7 +778,7 @@ struct request *elv_next_request(struct request_queue *q) | |||
772 | * not be passed by new incoming requests | 778 | * not be passed by new incoming requests |
773 | */ | 779 | */ |
774 | rq->cmd_flags |= REQ_STARTED; | 780 | rq->cmd_flags |= REQ_STARTED; |
775 | blk_add_trace_rq(q, rq, BLK_TA_ISSUE); | 781 | trace_block_rq_issue(q, rq); |
776 | } | 782 | } |
777 | 783 | ||
778 | if (!q->boundary_rq || q->boundary_rq == rq) { | 784 | if (!q->boundary_rq || q->boundary_rq == rq) { |
@@ -844,14 +850,7 @@ void elv_dequeue_request(struct request_queue *q, struct request *rq) | |||
844 | */ | 850 | */ |
845 | if (blk_account_rq(rq)) | 851 | if (blk_account_rq(rq)) |
846 | q->in_flight++; | 852 | q->in_flight++; |
847 | |||
848 | /* | ||
849 | * We are now handing the request to the hardware, add the | ||
850 | * timeout handler. | ||
851 | */ | ||
852 | blk_add_timer(rq); | ||
853 | } | 853 | } |
854 | EXPORT_SYMBOL(elv_dequeue_request); | ||
855 | 854 | ||
856 | int elv_queue_empty(struct request_queue *q) | 855 | int elv_queue_empty(struct request_queue *q) |
857 | { | 856 | { |
@@ -921,7 +920,7 @@ void elv_abort_queue(struct request_queue *q) | |||
921 | while (!list_empty(&q->queue_head)) { | 920 | while (!list_empty(&q->queue_head)) { |
922 | rq = list_entry_rq(q->queue_head.next); | 921 | rq = list_entry_rq(q->queue_head.next); |
923 | rq->cmd_flags |= REQ_QUIET; | 922 | rq->cmd_flags |= REQ_QUIET; |
924 | blk_add_trace_rq(q, rq, BLK_TA_ABORT); | 923 | trace_block_rq_abort(q, rq); |
925 | __blk_end_request(rq, -EIO, blk_rq_bytes(rq)); | 924 | __blk_end_request(rq, -EIO, blk_rq_bytes(rq)); |
926 | } | 925 | } |
927 | } | 926 | } |
diff --git a/block/genhd.c b/block/genhd.c index 27549e470da5..2f7feda61e35 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
@@ -1102,6 +1102,7 @@ struct gendisk *alloc_disk_node(int minors, int node_id) | |||
1102 | kfree(disk); | 1102 | kfree(disk); |
1103 | return NULL; | 1103 | return NULL; |
1104 | } | 1104 | } |
1105 | disk->node_id = node_id; | ||
1105 | if (disk_expand_part_tbl(disk, 0)) { | 1106 | if (disk_expand_part_tbl(disk, 0)) { |
1106 | free_part_stats(&disk->part0); | 1107 | free_part_stats(&disk->part0); |
1107 | kfree(disk); | 1108 | kfree(disk); |
@@ -1116,7 +1117,6 @@ struct gendisk *alloc_disk_node(int minors, int node_id) | |||
1116 | device_initialize(disk_to_dev(disk)); | 1117 | device_initialize(disk_to_dev(disk)); |
1117 | INIT_WORK(&disk->async_notify, | 1118 | INIT_WORK(&disk->async_notify, |
1118 | media_change_notify_thread); | 1119 | media_change_notify_thread); |
1119 | disk->node_id = node_id; | ||
1120 | } | 1120 | } |
1121 | return disk; | 1121 | return disk; |
1122 | } | 1122 | } |
diff --git a/drivers/atm/horizon.c b/drivers/atm/horizon.c index 615412364e99..6b969f8c684f 100644 --- a/drivers/atm/horizon.c +++ b/drivers/atm/horizon.c | |||
@@ -2705,7 +2705,7 @@ static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_ | |||
2705 | 2705 | ||
2706 | /* XXX DEV_LABEL is a guess */ | 2706 | /* XXX DEV_LABEL is a guess */ |
2707 | if (!request_region(iobase, HRZ_IO_EXTENT, DEV_LABEL)) { | 2707 | if (!request_region(iobase, HRZ_IO_EXTENT, DEV_LABEL)) { |
2708 | return -EINVAL; | 2708 | err = -EINVAL; |
2709 | goto out_disable; | 2709 | goto out_disable; |
2710 | } | 2710 | } |
2711 | 2711 | ||
diff --git a/drivers/ide/alim15x3.c b/drivers/ide/alim15x3.c index e56c7b72f9e2..45d2356bb725 100644 --- a/drivers/ide/alim15x3.c +++ b/drivers/ide/alim15x3.c | |||
@@ -591,7 +591,7 @@ static int __init ali15x3_ide_init(void) | |||
591 | 591 | ||
592 | static void __exit ali15x3_ide_exit(void) | 592 | static void __exit ali15x3_ide_exit(void) |
593 | { | 593 | { |
594 | return pci_unregister_driver(&alim15x3_pci_driver); | 594 | pci_unregister_driver(&alim15x3_pci_driver); |
595 | } | 595 | } |
596 | 596 | ||
597 | module_init(ali15x3_ide_init); | 597 | module_init(ali15x3_ide_init); |
diff --git a/drivers/ide/amd74xx.c b/drivers/ide/amd74xx.c index 81ec73134eda..c6bcd3014a29 100644 --- a/drivers/ide/amd74xx.c +++ b/drivers/ide/amd74xx.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * IDE driver for Linux. | 3 | * IDE driver for Linux. |
4 | * | 4 | * |
5 | * Copyright (c) 2000-2002 Vojtech Pavlik | 5 | * Copyright (c) 2000-2002 Vojtech Pavlik |
6 | * Copyright (c) 2007 Bartlomiej Zolnierkiewicz | 6 | * Copyright (c) 2007-2008 Bartlomiej Zolnierkiewicz |
7 | * | 7 | * |
8 | * Based on the work of: | 8 | * Based on the work of: |
9 | * Andre Hedrick | 9 | * Andre Hedrick |
@@ -263,6 +263,15 @@ static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_ | |||
263 | d.udma_mask = ATA_UDMA5; | 263 | d.udma_mask = ATA_UDMA5; |
264 | } | 264 | } |
265 | 265 | ||
266 | /* | ||
267 | * It seems that on some nVidia controllers using AltStatus | ||
268 | * register can be unreliable so default to Status register | ||
269 | * if the device is in Compatibility Mode. | ||
270 | */ | ||
271 | if (dev->vendor == PCI_VENDOR_ID_NVIDIA && | ||
272 | ide_pci_is_in_compatibility_mode(dev)) | ||
273 | d.host_flags |= IDE_HFLAG_BROKEN_ALTSTATUS; | ||
274 | |||
266 | printk(KERN_INFO "%s %s: UDMA%s controller\n", | 275 | printk(KERN_INFO "%s %s: UDMA%s controller\n", |
267 | d.name, pci_name(dev), amd_dma[fls(d.udma_mask) - 1]); | 276 | d.name, pci_name(dev), amd_dma[fls(d.udma_mask) - 1]); |
268 | 277 | ||
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 7162d67562af..7d275b2af3eb 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -132,10 +132,14 @@ int ide_end_request (ide_drive_t *drive, int uptodate, int nr_sectors) | |||
132 | } | 132 | } |
133 | EXPORT_SYMBOL(ide_end_request); | 133 | EXPORT_SYMBOL(ide_end_request); |
134 | 134 | ||
135 | static void ide_complete_power_step(ide_drive_t *drive, struct request *rq, u8 stat, u8 error) | 135 | static void ide_complete_power_step(ide_drive_t *drive, struct request *rq) |
136 | { | 136 | { |
137 | struct request_pm_state *pm = rq->data; | 137 | struct request_pm_state *pm = rq->data; |
138 | 138 | ||
139 | #ifdef DEBUG_PM | ||
140 | printk(KERN_INFO "%s: complete_power_step(step: %d)\n", | ||
141 | drive->name, pm->pm_step); | ||
142 | #endif | ||
139 | if (drive->media != ide_disk) | 143 | if (drive->media != ide_disk) |
140 | return; | 144 | return; |
141 | 145 | ||
@@ -172,7 +176,7 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request * | |||
172 | /* Not supported? Switch to next step now. */ | 176 | /* Not supported? Switch to next step now. */ |
173 | if (ata_id_flush_enabled(drive->id) == 0 || | 177 | if (ata_id_flush_enabled(drive->id) == 0 || |
174 | (drive->dev_flags & IDE_DFLAG_WCACHE) == 0) { | 178 | (drive->dev_flags & IDE_DFLAG_WCACHE) == 0) { |
175 | ide_complete_power_step(drive, rq, 0, 0); | 179 | ide_complete_power_step(drive, rq); |
176 | return ide_stopped; | 180 | return ide_stopped; |
177 | } | 181 | } |
178 | if (ata_id_flush_ext_enabled(drive->id)) | 182 | if (ata_id_flush_ext_enabled(drive->id)) |
@@ -191,7 +195,7 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request * | |||
191 | if (drive->media != ide_disk) | 195 | if (drive->media != ide_disk) |
192 | pm->pm_step = IDE_PM_RESTORE_DMA; | 196 | pm->pm_step = IDE_PM_RESTORE_DMA; |
193 | else | 197 | else |
194 | ide_complete_power_step(drive, rq, 0, 0); | 198 | ide_complete_power_step(drive, rq); |
195 | return ide_stopped; | 199 | return ide_stopped; |
196 | case IDE_PM_IDLE: /* Resume step 2 (idle) */ | 200 | case IDE_PM_IDLE: /* Resume step 2 (idle) */ |
197 | args->tf.command = ATA_CMD_IDLEIMMEDIATE; | 201 | args->tf.command = ATA_CMD_IDLEIMMEDIATE; |
@@ -204,10 +208,8 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request * | |||
204 | */ | 208 | */ |
205 | if (drive->hwif->dma_ops == NULL) | 209 | if (drive->hwif->dma_ops == NULL) |
206 | break; | 210 | break; |
207 | /* | 211 | if (drive->dev_flags & IDE_DFLAG_USING_DMA) |
208 | * TODO: respect IDE_DFLAG_USING_DMA | 212 | ide_set_dma(drive); |
209 | */ | ||
210 | ide_set_dma(drive); | ||
211 | break; | 213 | break; |
212 | } | 214 | } |
213 | 215 | ||
@@ -322,11 +324,8 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err) | |||
322 | } | 324 | } |
323 | } else if (blk_pm_request(rq)) { | 325 | } else if (blk_pm_request(rq)) { |
324 | struct request_pm_state *pm = rq->data; | 326 | struct request_pm_state *pm = rq->data; |
325 | #ifdef DEBUG_PM | 327 | |
326 | printk("%s: complete_power_step(step: %d, stat: %x, err: %x)\n", | 328 | ide_complete_power_step(drive, rq); |
327 | drive->name, rq->pm->pm_step, stat, err); | ||
328 | #endif | ||
329 | ide_complete_power_step(drive, rq, stat, err); | ||
330 | if (pm->pm_step == IDE_PM_COMPLETED) | 329 | if (pm->pm_step == IDE_PM_COMPLETED) |
331 | ide_complete_pm_request(drive, rq); | 330 | ide_complete_pm_request(drive, rq); |
332 | return; | 331 | return; |
@@ -804,7 +803,7 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq) | |||
804 | struct request_pm_state *pm = rq->data; | 803 | struct request_pm_state *pm = rq->data; |
805 | #ifdef DEBUG_PM | 804 | #ifdef DEBUG_PM |
806 | printk("%s: start_power_step(step: %d)\n", | 805 | printk("%s: start_power_step(step: %d)\n", |
807 | drive->name, rq->pm->pm_step); | 806 | drive->name, pm->pm_step); |
808 | #endif | 807 | #endif |
809 | startstop = ide_start_power_step(drive, rq); | 808 | startstop = ide_start_power_step(drive, rq); |
810 | if (startstop == ide_stopped && | 809 | if (startstop == ide_stopped && |
@@ -967,14 +966,13 @@ static void ide_do_request (ide_hwgroup_t *hwgroup, int masked_irq) | |||
967 | ide_startstop_t startstop; | 966 | ide_startstop_t startstop; |
968 | int loops = 0; | 967 | int loops = 0; |
969 | 968 | ||
970 | /* for atari only: POSSIBLY BROKEN HERE(?) */ | ||
971 | ide_get_lock(ide_intr, hwgroup); | ||
972 | |||
973 | /* caller must own ide_lock */ | 969 | /* caller must own ide_lock */ |
974 | BUG_ON(!irqs_disabled()); | 970 | BUG_ON(!irqs_disabled()); |
975 | 971 | ||
976 | while (!hwgroup->busy) { | 972 | while (!hwgroup->busy) { |
977 | hwgroup->busy = 1; | 973 | hwgroup->busy = 1; |
974 | /* for atari only */ | ||
975 | ide_get_lock(ide_intr, hwgroup); | ||
978 | drive = choose_drive(hwgroup); | 976 | drive = choose_drive(hwgroup); |
979 | if (drive == NULL) { | 977 | if (drive == NULL) { |
980 | int sleeping = 0; | 978 | int sleeping = 0; |
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index 5d6ba14e211d..c41c3b9b6f02 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
@@ -457,18 +457,14 @@ int drive_is_ready (ide_drive_t *drive) | |||
457 | if (drive->waiting_for_dma) | 457 | if (drive->waiting_for_dma) |
458 | return hwif->dma_ops->dma_test_irq(drive); | 458 | return hwif->dma_ops->dma_test_irq(drive); |
459 | 459 | ||
460 | #if 0 | ||
461 | /* need to guarantee 400ns since last command was issued */ | ||
462 | udelay(1); | ||
463 | #endif | ||
464 | |||
465 | /* | 460 | /* |
466 | * We do a passive status test under shared PCI interrupts on | 461 | * We do a passive status test under shared PCI interrupts on |
467 | * cards that truly share the ATA side interrupt, but may also share | 462 | * cards that truly share the ATA side interrupt, but may also share |
468 | * an interrupt with another pci card/device. We make no assumptions | 463 | * an interrupt with another pci card/device. We make no assumptions |
469 | * about possible isa-pnp and pci-pnp issues yet. | 464 | * about possible isa-pnp and pci-pnp issues yet. |
470 | */ | 465 | */ |
471 | if (hwif->io_ports.ctl_addr) | 466 | if (hwif->io_ports.ctl_addr && |
467 | (hwif->host_flags & IDE_HFLAG_BROKEN_ALTSTATUS) == 0) | ||
472 | stat = hwif->tp_ops->read_altstatus(hwif); | 468 | stat = hwif->tp_ops->read_altstatus(hwif); |
473 | else | 469 | else |
474 | /* Note: this may clear a pending IRQ!! */ | 470 | /* Note: this may clear a pending IRQ!! */ |
@@ -610,6 +606,7 @@ static const struct drive_list_entry ivb_list[] = { | |||
610 | { "TSSTcorp CDDVDW SH-S202N" , "SB01" }, | 606 | { "TSSTcorp CDDVDW SH-S202N" , "SB01" }, |
611 | { "TSSTcorp CDDVDW SH-S202H" , "SB00" }, | 607 | { "TSSTcorp CDDVDW SH-S202H" , "SB00" }, |
612 | { "TSSTcorp CDDVDW SH-S202H" , "SB01" }, | 608 | { "TSSTcorp CDDVDW SH-S202H" , "SB01" }, |
609 | { "SAMSUNG SP0822N" , "WA100-10" }, | ||
613 | { NULL , NULL } | 610 | { NULL , NULL } |
614 | }; | 611 | }; |
615 | 612 | ||
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 1649ea54f76c..c55bdbd22314 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
@@ -266,7 +266,8 @@ static int actual_try_to_identify (ide_drive_t *drive, u8 cmd) | |||
266 | /* take a deep breath */ | 266 | /* take a deep breath */ |
267 | msleep(50); | 267 | msleep(50); |
268 | 268 | ||
269 | if (io_ports->ctl_addr) { | 269 | if (io_ports->ctl_addr && |
270 | (hwif->host_flags & IDE_HFLAG_BROKEN_ALTSTATUS) == 0) { | ||
270 | a = tp_ops->read_altstatus(hwif); | 271 | a = tp_ops->read_altstatus(hwif); |
271 | s = tp_ops->read_status(hwif); | 272 | s = tp_ops->read_status(hwif); |
272 | if ((a ^ s) & ~ATA_IDX) | 273 | if ((a ^ s) & ~ATA_IDX) |
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index a63161aec487..04e5fd742c2c 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c | |||
@@ -668,7 +668,7 @@ static void check_for_valid_limits(struct io_restrictions *rs) | |||
668 | if (!rs->max_segment_size) | 668 | if (!rs->max_segment_size) |
669 | rs->max_segment_size = MAX_SEGMENT_SIZE; | 669 | rs->max_segment_size = MAX_SEGMENT_SIZE; |
670 | if (!rs->seg_boundary_mask) | 670 | if (!rs->seg_boundary_mask) |
671 | rs->seg_boundary_mask = -1; | 671 | rs->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK; |
672 | if (!rs->bounce_pfn) | 672 | if (!rs->bounce_pfn) |
673 | rs->bounce_pfn = -1; | 673 | rs->bounce_pfn = -1; |
674 | } | 674 | } |
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index c99e4728ff41..343094c3feeb 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/idr.h> | 21 | #include <linux/idr.h> |
22 | #include <linux/hdreg.h> | 22 | #include <linux/hdreg.h> |
23 | #include <linux/blktrace_api.h> | 23 | #include <linux/blktrace_api.h> |
24 | #include <trace/block.h> | ||
24 | 25 | ||
25 | #define DM_MSG_PREFIX "core" | 26 | #define DM_MSG_PREFIX "core" |
26 | 27 | ||
@@ -51,6 +52,8 @@ struct dm_target_io { | |||
51 | union map_info info; | 52 | union map_info info; |
52 | }; | 53 | }; |
53 | 54 | ||
55 | DEFINE_TRACE(block_bio_complete); | ||
56 | |||
54 | union map_info *dm_get_mapinfo(struct bio *bio) | 57 | union map_info *dm_get_mapinfo(struct bio *bio) |
55 | { | 58 | { |
56 | if (bio && bio->bi_private) | 59 | if (bio && bio->bi_private) |
@@ -504,8 +507,7 @@ static void dec_pending(struct dm_io *io, int error) | |||
504 | end_io_acct(io); | 507 | end_io_acct(io); |
505 | 508 | ||
506 | if (io->error != DM_ENDIO_REQUEUE) { | 509 | if (io->error != DM_ENDIO_REQUEUE) { |
507 | blk_add_trace_bio(io->md->queue, io->bio, | 510 | trace_block_bio_complete(io->md->queue, io->bio); |
508 | BLK_TA_COMPLETE); | ||
509 | 511 | ||
510 | bio_endio(io->bio, io->error); | 512 | bio_endio(io->bio, io->error); |
511 | } | 513 | } |
@@ -598,7 +600,7 @@ static void __map_bio(struct dm_target *ti, struct bio *clone, | |||
598 | if (r == DM_MAPIO_REMAPPED) { | 600 | if (r == DM_MAPIO_REMAPPED) { |
599 | /* the bio has been remapped so dispatch it */ | 601 | /* the bio has been remapped so dispatch it */ |
600 | 602 | ||
601 | blk_add_trace_remap(bdev_get_queue(clone->bi_bdev), clone, | 603 | trace_block_remap(bdev_get_queue(clone->bi_bdev), clone, |
602 | tio->io->bio->bi_bdev->bd_dev, | 604 | tio->io->bio->bi_bdev->bd_dev, |
603 | clone->bi_sector, sector); | 605 | clone->bi_sector, sector); |
604 | 606 | ||
diff --git a/drivers/misc/sgi-gru/grufile.c b/drivers/misc/sgi-gru/grufile.c index 5c027b6b4e5a..650983806392 100644 --- a/drivers/misc/sgi-gru/grufile.c +++ b/drivers/misc/sgi-gru/grufile.c | |||
@@ -481,7 +481,7 @@ struct vm_operations_struct gru_vm_ops = { | |||
481 | .fault = gru_fault, | 481 | .fault = gru_fault, |
482 | }; | 482 | }; |
483 | 483 | ||
484 | module_init(gru_init); | 484 | fs_initcall(gru_init); |
485 | module_exit(gru_exit); | 485 | module_exit(gru_exit); |
486 | 486 | ||
487 | module_param(gru_options, ulong, 0644); | 487 | module_param(gru_options, ulong, 0644); |
diff --git a/drivers/net/Makefile b/drivers/net/Makefile index f19acf8b9220..017383ad5ec6 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile | |||
@@ -114,7 +114,7 @@ obj-$(CONFIG_EL2) += 3c503.o 8390p.o | |||
114 | obj-$(CONFIG_NE2000) += ne.o 8390p.o | 114 | obj-$(CONFIG_NE2000) += ne.o 8390p.o |
115 | obj-$(CONFIG_NE2_MCA) += ne2.o 8390p.o | 115 | obj-$(CONFIG_NE2_MCA) += ne2.o 8390p.o |
116 | obj-$(CONFIG_HPLAN) += hp.o 8390p.o | 116 | obj-$(CONFIG_HPLAN) += hp.o 8390p.o |
117 | obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390.o | 117 | obj-$(CONFIG_HPLAN_PLUS) += hp-plus.o 8390p.o |
118 | obj-$(CONFIG_ULTRA) += smc-ultra.o 8390.o | 118 | obj-$(CONFIG_ULTRA) += smc-ultra.o 8390.o |
119 | obj-$(CONFIG_ULTRAMCA) += smc-mca.o 8390.o | 119 | obj-$(CONFIG_ULTRAMCA) += smc-mca.o 8390.o |
120 | obj-$(CONFIG_ULTRA32) += smc-ultra32.o 8390.o | 120 | obj-$(CONFIG_ULTRA32) += smc-ultra32.o 8390.o |
diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c index d6c7d2aa761b..7092df50ff78 100644 --- a/drivers/net/chelsio/sge.c +++ b/drivers/net/chelsio/sge.c | |||
@@ -1035,10 +1035,6 @@ MODULE_PARM_DESC(copybreak, "Receive copy threshold"); | |||
1035 | * @pdev: the PCI device that received the packet | 1035 | * @pdev: the PCI device that received the packet |
1036 | * @fl: the SGE free list holding the packet | 1036 | * @fl: the SGE free list holding the packet |
1037 | * @len: the actual packet length, excluding any SGE padding | 1037 | * @len: the actual packet length, excluding any SGE padding |
1038 | * @dma_pad: padding at beginning of buffer left by SGE DMA | ||
1039 | * @skb_pad: padding to be used if the packet is copied | ||
1040 | * @copy_thres: length threshold under which a packet should be copied | ||
1041 | * @drop_thres: # of remaining buffers before we start dropping packets | ||
1042 | * | 1038 | * |
1043 | * Get the next packet from a free list and complete setup of the | 1039 | * Get the next packet from a free list and complete setup of the |
1044 | * sk_buff. If the packet is small we make a copy and recycle the | 1040 | * sk_buff. If the packet is small we make a copy and recycle the |
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 91795f78c3e4..122539a0e1fe 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -345,7 +345,6 @@ no_buffers: | |||
345 | /** | 345 | /** |
346 | * e1000_alloc_jumbo_rx_buffers - Replace used jumbo receive buffers | 346 | * e1000_alloc_jumbo_rx_buffers - Replace used jumbo receive buffers |
347 | * @adapter: address of board private structure | 347 | * @adapter: address of board private structure |
348 | * @rx_ring: pointer to receive ring structure | ||
349 | * @cleaned_count: number of buffers to allocate this pass | 348 | * @cleaned_count: number of buffers to allocate this pass |
350 | **/ | 349 | **/ |
351 | 350 | ||
diff --git a/drivers/net/hp-plus.c b/drivers/net/hp-plus.c index fbbd3e660c27..c01e290d09d2 100644 --- a/drivers/net/hp-plus.c +++ b/drivers/net/hp-plus.c | |||
@@ -230,7 +230,7 @@ static int __init hpp_probe1(struct net_device *dev, int ioaddr) | |||
230 | dev->open = &hpp_open; | 230 | dev->open = &hpp_open; |
231 | dev->stop = &hpp_close; | 231 | dev->stop = &hpp_close; |
232 | #ifdef CONFIG_NET_POLL_CONTROLLER | 232 | #ifdef CONFIG_NET_POLL_CONTROLLER |
233 | dev->poll_controller = ei_poll; | 233 | dev->poll_controller = eip_poll; |
234 | #endif | 234 | #endif |
235 | 235 | ||
236 | ei_status.name = name; | 236 | ei_status.name = name; |
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 1cbae85b1426..20d27e622ec1 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -1980,7 +1980,6 @@ static void igb_configure_rx(struct igb_adapter *adapter) | |||
1980 | 1980 | ||
1981 | /** | 1981 | /** |
1982 | * igb_free_tx_resources - Free Tx Resources per Queue | 1982 | * igb_free_tx_resources - Free Tx Resources per Queue |
1983 | * @adapter: board private structure | ||
1984 | * @tx_ring: Tx descriptor ring for a specific queue | 1983 | * @tx_ring: Tx descriptor ring for a specific queue |
1985 | * | 1984 | * |
1986 | * Free all transmit software resources | 1985 | * Free all transmit software resources |
@@ -2033,7 +2032,6 @@ static void igb_unmap_and_free_tx_resource(struct igb_adapter *adapter, | |||
2033 | 2032 | ||
2034 | /** | 2033 | /** |
2035 | * igb_clean_tx_ring - Free Tx Buffers | 2034 | * igb_clean_tx_ring - Free Tx Buffers |
2036 | * @adapter: board private structure | ||
2037 | * @tx_ring: ring to be cleaned | 2035 | * @tx_ring: ring to be cleaned |
2038 | **/ | 2036 | **/ |
2039 | static void igb_clean_tx_ring(struct igb_ring *tx_ring) | 2037 | static void igb_clean_tx_ring(struct igb_ring *tx_ring) |
@@ -2080,7 +2078,6 @@ static void igb_clean_all_tx_rings(struct igb_adapter *adapter) | |||
2080 | 2078 | ||
2081 | /** | 2079 | /** |
2082 | * igb_free_rx_resources - Free Rx Resources | 2080 | * igb_free_rx_resources - Free Rx Resources |
2083 | * @adapter: board private structure | ||
2084 | * @rx_ring: ring to clean the resources from | 2081 | * @rx_ring: ring to clean the resources from |
2085 | * | 2082 | * |
2086 | * Free all receive software resources | 2083 | * Free all receive software resources |
@@ -2120,7 +2117,6 @@ static void igb_free_all_rx_resources(struct igb_adapter *adapter) | |||
2120 | 2117 | ||
2121 | /** | 2118 | /** |
2122 | * igb_clean_rx_ring - Free Rx Buffers per Queue | 2119 | * igb_clean_rx_ring - Free Rx Buffers per Queue |
2123 | * @adapter: board private structure | ||
2124 | * @rx_ring: ring to free buffers from | 2120 | * @rx_ring: ring to free buffers from |
2125 | **/ | 2121 | **/ |
2126 | static void igb_clean_rx_ring(struct igb_ring *rx_ring) | 2122 | static void igb_clean_rx_ring(struct igb_ring *rx_ring) |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 8ed823ae639e..5236f633ee36 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
@@ -1320,7 +1320,6 @@ static inline void ixgbe_irq_enable(struct ixgbe_adapter *adapter) | |||
1320 | * ixgbe_intr - legacy mode Interrupt Handler | 1320 | * ixgbe_intr - legacy mode Interrupt Handler |
1321 | * @irq: interrupt number | 1321 | * @irq: interrupt number |
1322 | * @data: pointer to a network interface device structure | 1322 | * @data: pointer to a network interface device structure |
1323 | * @pt_regs: CPU registers structure | ||
1324 | **/ | 1323 | **/ |
1325 | static irqreturn_t ixgbe_intr(int irq, void *data) | 1324 | static irqreturn_t ixgbe_intr(int irq, void *data) |
1326 | { | 1325 | { |
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 42394505bb50..590039cbb146 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -70,6 +70,9 @@ static void macvlan_broadcast(struct sk_buff *skb, | |||
70 | struct sk_buff *nskb; | 70 | struct sk_buff *nskb; |
71 | unsigned int i; | 71 | unsigned int i; |
72 | 72 | ||
73 | if (skb->protocol == htons(ETH_P_PAUSE)) | ||
74 | return; | ||
75 | |||
73 | for (i = 0; i < MACVLAN_HASH_SIZE; i++) { | 76 | for (i = 0; i < MACVLAN_HASH_SIZE; i++) { |
74 | hlist_for_each_entry_rcu(vlan, n, &port->vlan_hash[i], hlist) { | 77 | hlist_for_each_entry_rcu(vlan, n, &port->vlan_hash[i], hlist) { |
75 | dev = vlan->dev; | 78 | dev = vlan->dev; |
diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c index b37a498939ae..0418045166c3 100644 --- a/drivers/net/pcmcia/axnet_cs.c +++ b/drivers/net/pcmcia/axnet_cs.c | |||
@@ -779,6 +779,7 @@ static struct pcmcia_device_id axnet_ids[] = { | |||
779 | PCMCIA_DEVICE_PROD_ID12("IO DATA", "ETXPCM", 0x547e66dc, 0x233adac2), | 779 | PCMCIA_DEVICE_PROD_ID12("IO DATA", "ETXPCM", 0x547e66dc, 0x233adac2), |
780 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8), | 780 | PCMCIA_DEVICE_PROD_ID12("Linksys", "EtherFast 10/100 PC Card (PCMPC100 V3)", 0x0733cc81, 0x232019a8), |
781 | PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609), | 781 | PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC3-TX", 0x481e0094, 0xf91af609), |
782 | PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA411", 0x9aa79dc3, 0x40fad875), | ||
782 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04), | 783 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "100BASE", 0x281f1c5d, 0x7c2add04), |
783 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116), | 784 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FastEtherCard", 0x281f1c5d, 0x7ef26116), |
784 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058), | 785 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "FEP501", 0x281f1c5d, 0x2e272058), |
@@ -1174,7 +1175,6 @@ static int ei_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1174 | * ax_interrupt - handle the interrupts from an 8390 | 1175 | * ax_interrupt - handle the interrupts from an 8390 |
1175 | * @irq: interrupt number | 1176 | * @irq: interrupt number |
1176 | * @dev_id: a pointer to the net_device | 1177 | * @dev_id: a pointer to the net_device |
1177 | * @regs: unused | ||
1178 | * | 1178 | * |
1179 | * Handle the ether interface interrupts. We pull packets from | 1179 | * Handle the ether interface interrupts. We pull packets from |
1180 | * the 8390 via the card specific functions and fire them at the networking | 1180 | * the 8390 via the card specific functions and fire them at the networking |
diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c index e40d6301aa7a..ce486f094492 100644 --- a/drivers/net/pcmcia/pcnet_cs.c +++ b/drivers/net/pcmcia/pcnet_cs.c | |||
@@ -1693,7 +1693,6 @@ static struct pcmcia_device_id pcnet_ids[] = { | |||
1693 | PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover NE4100", 0x36e1191f, 0xa6617ec8), | 1693 | PCMCIA_DEVICE_PROD_ID12("National Semiconductor", "InfoMover NE4100", 0x36e1191f, 0xa6617ec8), |
1694 | PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J12", 0x18df0ba0, 0xbc912d76), | 1694 | PCMCIA_DEVICE_PROD_ID12("NEC", "PC-9801N-J12", 0x18df0ba0, 0xbc912d76), |
1695 | PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA410TX", 0x9aa79dc3, 0x60e5bc0e), | 1695 | PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA410TX", 0x9aa79dc3, 0x60e5bc0e), |
1696 | PCMCIA_DEVICE_PROD_ID12("NETGEAR", "FA411", 0x9aa79dc3, 0x40fad875), | ||
1697 | PCMCIA_DEVICE_PROD_ID12("Network Everywhere", "Fast Ethernet 10/100 PC Card", 0x820a67b6, 0x31ed1a5f), | 1696 | PCMCIA_DEVICE_PROD_ID12("Network Everywhere", "Fast Ethernet 10/100 PC Card", 0x820a67b6, 0x31ed1a5f), |
1698 | PCMCIA_DEVICE_PROD_ID12("NextCom K.K.", "Next Hawk", 0xaedaec74, 0xad050ef1), | 1697 | PCMCIA_DEVICE_PROD_ID12("NextCom K.K.", "Next Hawk", 0xaedaec74, 0xad050ef1), |
1699 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100Mbps Ethernet Card", 0x281f1c5d, 0x6e41773b), | 1698 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "10/100Mbps Ethernet Card", 0x281f1c5d, 0x6e41773b), |
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 55bc24b234e3..25acbbde4a60 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
@@ -227,8 +227,17 @@ struct phy_device * get_phy_device(struct mii_bus *bus, int addr) | |||
227 | if (r) | 227 | if (r) |
228 | return ERR_PTR(r); | 228 | return ERR_PTR(r); |
229 | 229 | ||
230 | /* If the phy_id is all Fs or all 0s, there is no device there */ | 230 | /* If the phy_id is mostly Fs, there is no device there */ |
231 | if ((0xffff == phy_id) || (0x00 == phy_id)) | 231 | if ((phy_id & 0x1fffffff) == 0x1fffffff) |
232 | return NULL; | ||
233 | |||
234 | /* | ||
235 | * Broken hardware is sometimes missing the pull down resistor on the | ||
236 | * MDIO line, which results in reads to non-existent devices returning | ||
237 | * 0 rather than 0xffff. Catch this here and treat 0 as a non-existent | ||
238 | * device as well. | ||
239 | */ | ||
240 | if (phy_id == 0) | ||
232 | return NULL; | 241 | return NULL; |
233 | 242 | ||
234 | dev = phy_device_create(bus, addr, phy_id); | 243 | dev = phy_device_create(bus, addr, phy_id); |
diff --git a/drivers/net/phy/vitesse.c b/drivers/net/phy/vitesse.c index 8874497b6bbf..dd3b2447e85a 100644 --- a/drivers/net/phy/vitesse.c +++ b/drivers/net/phy/vitesse.c | |||
@@ -34,6 +34,8 @@ | |||
34 | #define MII_VSC8244_IMASK_DUPLEX 0x1000 | 34 | #define MII_VSC8244_IMASK_DUPLEX 0x1000 |
35 | #define MII_VSC8244_IMASK_MASK 0xf000 | 35 | #define MII_VSC8244_IMASK_MASK 0xf000 |
36 | 36 | ||
37 | #define MII_VSC8221_IMASK_MASK 0xa000 | ||
38 | |||
37 | /* Vitesse Interrupt Status Register */ | 39 | /* Vitesse Interrupt Status Register */ |
38 | #define MII_VSC8244_ISTAT 0x1a | 40 | #define MII_VSC8244_ISTAT 0x1a |
39 | #define MII_VSC8244_ISTAT_STATUS 0x8000 | 41 | #define MII_VSC8244_ISTAT_STATUS 0x8000 |
@@ -49,6 +51,12 @@ | |||
49 | #define MII_VSC8244_AUXCONSTAT_GBIT 0x0010 | 51 | #define MII_VSC8244_AUXCONSTAT_GBIT 0x0010 |
50 | #define MII_VSC8244_AUXCONSTAT_100 0x0008 | 52 | #define MII_VSC8244_AUXCONSTAT_100 0x0008 |
51 | 53 | ||
54 | #define MII_VSC8221_AUXCONSTAT_INIT 0x0004 /* need to set this bit? */ | ||
55 | #define MII_VSC8221_AUXCONSTAT_RESERVED 0x0004 | ||
56 | |||
57 | #define PHY_ID_VSC8244 0x000fc6c0 | ||
58 | #define PHY_ID_VSC8221 0x000fc550 | ||
59 | |||
52 | MODULE_DESCRIPTION("Vitesse PHY driver"); | 60 | MODULE_DESCRIPTION("Vitesse PHY driver"); |
53 | MODULE_AUTHOR("Kriston Carson"); | 61 | MODULE_AUTHOR("Kriston Carson"); |
54 | MODULE_LICENSE("GPL"); | 62 | MODULE_LICENSE("GPL"); |
@@ -95,13 +103,15 @@ static int vsc824x_ack_interrupt(struct phy_device *phydev) | |||
95 | return (err < 0) ? err : 0; | 103 | return (err < 0) ? err : 0; |
96 | } | 104 | } |
97 | 105 | ||
98 | static int vsc824x_config_intr(struct phy_device *phydev) | 106 | static int vsc82xx_config_intr(struct phy_device *phydev) |
99 | { | 107 | { |
100 | int err; | 108 | int err; |
101 | 109 | ||
102 | if (phydev->interrupts == PHY_INTERRUPT_ENABLED) | 110 | if (phydev->interrupts == PHY_INTERRUPT_ENABLED) |
103 | err = phy_write(phydev, MII_VSC8244_IMASK, | 111 | err = phy_write(phydev, MII_VSC8244_IMASK, |
104 | MII_VSC8244_IMASK_MASK); | 112 | phydev->drv->phy_id == PHY_ID_VSC8244 ? |
113 | MII_VSC8244_IMASK_MASK : | ||
114 | MII_VSC8221_IMASK_MASK); | ||
105 | else { | 115 | else { |
106 | /* | 116 | /* |
107 | * The Vitesse PHY cannot clear the interrupt | 117 | * The Vitesse PHY cannot clear the interrupt |
@@ -120,7 +130,7 @@ static int vsc824x_config_intr(struct phy_device *phydev) | |||
120 | 130 | ||
121 | /* Vitesse 824x */ | 131 | /* Vitesse 824x */ |
122 | static struct phy_driver vsc8244_driver = { | 132 | static struct phy_driver vsc8244_driver = { |
123 | .phy_id = 0x000fc6c0, | 133 | .phy_id = PHY_ID_VSC8244, |
124 | .name = "Vitesse VSC8244", | 134 | .name = "Vitesse VSC8244", |
125 | .phy_id_mask = 0x000fffc0, | 135 | .phy_id_mask = 0x000fffc0, |
126 | .features = PHY_GBIT_FEATURES, | 136 | .features = PHY_GBIT_FEATURES, |
@@ -129,19 +139,55 @@ static struct phy_driver vsc8244_driver = { | |||
129 | .config_aneg = &genphy_config_aneg, | 139 | .config_aneg = &genphy_config_aneg, |
130 | .read_status = &genphy_read_status, | 140 | .read_status = &genphy_read_status, |
131 | .ack_interrupt = &vsc824x_ack_interrupt, | 141 | .ack_interrupt = &vsc824x_ack_interrupt, |
132 | .config_intr = &vsc824x_config_intr, | 142 | .config_intr = &vsc82xx_config_intr, |
133 | .driver = { .owner = THIS_MODULE,}, | 143 | .driver = { .owner = THIS_MODULE,}, |
134 | }; | 144 | }; |
135 | 145 | ||
136 | static int __init vsc8244_init(void) | 146 | static int vsc8221_config_init(struct phy_device *phydev) |
137 | { | 147 | { |
138 | return phy_driver_register(&vsc8244_driver); | 148 | int err; |
149 | |||
150 | err = phy_write(phydev, MII_VSC8244_AUX_CONSTAT, | ||
151 | MII_VSC8221_AUXCONSTAT_INIT); | ||
152 | return err; | ||
153 | |||
154 | /* Perhaps we should set EXT_CON1 based on the interface? | ||
155 | Options are 802.3Z SerDes or SGMII */ | ||
156 | } | ||
157 | |||
158 | /* Vitesse 8221 */ | ||
159 | static struct phy_driver vsc8221_driver = { | ||
160 | .phy_id = PHY_ID_VSC8221, | ||
161 | .phy_id_mask = 0x000ffff0, | ||
162 | .name = "Vitesse VSC8221", | ||
163 | .features = PHY_GBIT_FEATURES, | ||
164 | .flags = PHY_HAS_INTERRUPT, | ||
165 | .config_init = &vsc8221_config_init, | ||
166 | .config_aneg = &genphy_config_aneg, | ||
167 | .read_status = &genphy_read_status, | ||
168 | .ack_interrupt = &vsc824x_ack_interrupt, | ||
169 | .config_intr = &vsc82xx_config_intr, | ||
170 | .driver = { .owner = THIS_MODULE,}, | ||
171 | }; | ||
172 | |||
173 | static int __init vsc82xx_init(void) | ||
174 | { | ||
175 | int err; | ||
176 | |||
177 | err = phy_driver_register(&vsc8244_driver); | ||
178 | if (err < 0) | ||
179 | return err; | ||
180 | err = phy_driver_register(&vsc8221_driver); | ||
181 | if (err < 0) | ||
182 | phy_driver_unregister(&vsc8244_driver); | ||
183 | return err; | ||
139 | } | 184 | } |
140 | 185 | ||
141 | static void __exit vsc8244_exit(void) | 186 | static void __exit vsc82xx_exit(void) |
142 | { | 187 | { |
143 | phy_driver_unregister(&vsc8244_driver); | 188 | phy_driver_unregister(&vsc8244_driver); |
189 | phy_driver_unregister(&vsc8221_driver); | ||
144 | } | 190 | } |
145 | 191 | ||
146 | module_init(vsc8244_init); | 192 | module_init(vsc82xx_init); |
147 | module_exit(vsc8244_exit); | 193 | module_exit(vsc82xx_exit); |
diff --git a/drivers/net/pppol2tp.c b/drivers/net/pppol2tp.c index 185b1dff10a8..e98d9773158d 100644 --- a/drivers/net/pppol2tp.c +++ b/drivers/net/pppol2tp.c | |||
@@ -1353,6 +1353,7 @@ static int pppol2tp_release(struct socket *sock) | |||
1353 | kfree_skb(skb); | 1353 | kfree_skb(skb); |
1354 | sock_put(sk); | 1354 | sock_put(sk); |
1355 | } | 1355 | } |
1356 | sock_put(sk); | ||
1356 | } | 1357 | } |
1357 | 1358 | ||
1358 | release_sock(sk); | 1359 | release_sock(sk); |
diff --git a/drivers/net/sis900.c b/drivers/net/sis900.c index fa3a460f8e2f..8e8337e8b072 100644 --- a/drivers/net/sis900.c +++ b/drivers/net/sis900.c | |||
@@ -1630,7 +1630,6 @@ sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev) | |||
1630 | * sis900_interrupt - sis900 interrupt handler | 1630 | * sis900_interrupt - sis900 interrupt handler |
1631 | * @irq: the irq number | 1631 | * @irq: the irq number |
1632 | * @dev_instance: the client data object | 1632 | * @dev_instance: the client data object |
1633 | * @regs: snapshot of processor context | ||
1634 | * | 1633 | * |
1635 | * The interrupt handler does all of the Rx thread work, | 1634 | * The interrupt handler does all of the Rx thread work, |
1636 | * and cleans up after the Tx thread | 1635 | * and cleans up after the Tx thread |
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c index b6435d0d71f9..07599b492359 100644 --- a/drivers/net/spider_net.c +++ b/drivers/net/spider_net.c | |||
@@ -672,7 +672,6 @@ write_hash: | |||
672 | /** | 672 | /** |
673 | * spider_net_prepare_tx_descr - fill tx descriptor with skb data | 673 | * spider_net_prepare_tx_descr - fill tx descriptor with skb data |
674 | * @card: card structure | 674 | * @card: card structure |
675 | * @descr: descriptor structure to fill out | ||
676 | * @skb: packet to use | 675 | * @skb: packet to use |
677 | * | 676 | * |
678 | * returns 0 on success, <0 on failure. | 677 | * returns 0 on success, <0 on failure. |
@@ -867,7 +866,6 @@ spider_net_release_tx_chain(struct spider_net_card *card, int brutal) | |||
867 | /** | 866 | /** |
868 | * spider_net_kick_tx_dma - enables TX DMA processing | 867 | * spider_net_kick_tx_dma - enables TX DMA processing |
869 | * @card: card structure | 868 | * @card: card structure |
870 | * @descr: descriptor address to enable TX processing at | ||
871 | * | 869 | * |
872 | * This routine will start the transmit DMA running if | 870 | * This routine will start the transmit DMA running if |
873 | * it is not already running. This routine ned only be | 871 | * it is not already running. This routine ned only be |
@@ -1637,7 +1635,6 @@ spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg, | |||
1637 | * spider_net_interrupt - interrupt handler for spider_net | 1635 | * spider_net_interrupt - interrupt handler for spider_net |
1638 | * @irq: interrupt number | 1636 | * @irq: interrupt number |
1639 | * @ptr: pointer to net_device | 1637 | * @ptr: pointer to net_device |
1640 | * @regs: PU registers | ||
1641 | * | 1638 | * |
1642 | * returns IRQ_HANDLED, if interrupt was for driver, or IRQ_NONE, if no | 1639 | * returns IRQ_HANDLED, if interrupt was for driver, or IRQ_NONE, if no |
1643 | * interrupt found raised by card. | 1640 | * interrupt found raised by card. |
@@ -2419,7 +2416,6 @@ spider_net_undo_pci_setup(struct spider_net_card *card) | |||
2419 | 2416 | ||
2420 | /** | 2417 | /** |
2421 | * spider_net_setup_pci_dev - sets up the device in terms of PCI operations | 2418 | * spider_net_setup_pci_dev - sets up the device in terms of PCI operations |
2422 | * @card: card structure | ||
2423 | * @pdev: PCI device | 2419 | * @pdev: PCI device |
2424 | * | 2420 | * |
2425 | * Returns the card structure or NULL if any errors occur | 2421 | * Returns the card structure or NULL if any errors occur |
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index 4291458955ef..1349e419673c 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c | |||
@@ -1714,7 +1714,7 @@ static void gem_init_phy(struct gem *gp) | |||
1714 | /* Reset PCS unit. */ | 1714 | /* Reset PCS unit. */ |
1715 | val = readl(gp->regs + PCS_MIICTRL); | 1715 | val = readl(gp->regs + PCS_MIICTRL); |
1716 | val |= PCS_MIICTRL_RST; | 1716 | val |= PCS_MIICTRL_RST; |
1717 | writeb(val, gp->regs + PCS_MIICTRL); | 1717 | writel(val, gp->regs + PCS_MIICTRL); |
1718 | 1718 | ||
1719 | limit = 32; | 1719 | limit = 32; |
1720 | while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) { | 1720 | while (readl(gp->regs + PCS_MIICTRL) & PCS_MIICTRL_RST) { |
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index cfd4d052d666..2d14255eb103 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c | |||
@@ -240,6 +240,10 @@ static u64 ath5k_get_tsf(struct ieee80211_hw *hw); | |||
240 | static void ath5k_reset_tsf(struct ieee80211_hw *hw); | 240 | static void ath5k_reset_tsf(struct ieee80211_hw *hw); |
241 | static int ath5k_beacon_update(struct ieee80211_hw *hw, | 241 | static int ath5k_beacon_update(struct ieee80211_hw *hw, |
242 | struct sk_buff *skb); | 242 | struct sk_buff *skb); |
243 | static void ath5k_bss_info_changed(struct ieee80211_hw *hw, | ||
244 | struct ieee80211_vif *vif, | ||
245 | struct ieee80211_bss_conf *bss_conf, | ||
246 | u32 changes); | ||
243 | 247 | ||
244 | static struct ieee80211_ops ath5k_hw_ops = { | 248 | static struct ieee80211_ops ath5k_hw_ops = { |
245 | .tx = ath5k_tx, | 249 | .tx = ath5k_tx, |
@@ -256,6 +260,7 @@ static struct ieee80211_ops ath5k_hw_ops = { | |||
256 | .get_tx_stats = ath5k_get_tx_stats, | 260 | .get_tx_stats = ath5k_get_tx_stats, |
257 | .get_tsf = ath5k_get_tsf, | 261 | .get_tsf = ath5k_get_tsf, |
258 | .reset_tsf = ath5k_reset_tsf, | 262 | .reset_tsf = ath5k_reset_tsf, |
263 | .bss_info_changed = ath5k_bss_info_changed, | ||
259 | }; | 264 | }; |
260 | 265 | ||
261 | /* | 266 | /* |
@@ -2942,7 +2947,7 @@ static void ath5k_configure_filter(struct ieee80211_hw *hw, | |||
2942 | sc->opmode != NL80211_IFTYPE_MESH_POINT && | 2947 | sc->opmode != NL80211_IFTYPE_MESH_POINT && |
2943 | test_bit(ATH_STAT_PROMISC, sc->status)) | 2948 | test_bit(ATH_STAT_PROMISC, sc->status)) |
2944 | rfilt |= AR5K_RX_FILTER_PROM; | 2949 | rfilt |= AR5K_RX_FILTER_PROM; |
2945 | if (sc->opmode == NL80211_IFTYPE_STATION || | 2950 | if ((sc->opmode == NL80211_IFTYPE_STATION && sc->assoc) || |
2946 | sc->opmode == NL80211_IFTYPE_ADHOC) { | 2951 | sc->opmode == NL80211_IFTYPE_ADHOC) { |
2947 | rfilt |= AR5K_RX_FILTER_BEACON; | 2952 | rfilt |= AR5K_RX_FILTER_BEACON; |
2948 | } | 2953 | } |
@@ -3083,4 +3088,32 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
3083 | end: | 3088 | end: |
3084 | return ret; | 3089 | return ret; |
3085 | } | 3090 | } |
3091 | static void | ||
3092 | set_beacon_filter(struct ieee80211_hw *hw, bool enable) | ||
3093 | { | ||
3094 | struct ath5k_softc *sc = hw->priv; | ||
3095 | struct ath5k_hw *ah = sc->ah; | ||
3096 | u32 rfilt; | ||
3097 | rfilt = ath5k_hw_get_rx_filter(ah); | ||
3098 | if (enable) | ||
3099 | rfilt |= AR5K_RX_FILTER_BEACON; | ||
3100 | else | ||
3101 | rfilt &= ~AR5K_RX_FILTER_BEACON; | ||
3102 | ath5k_hw_set_rx_filter(ah, rfilt); | ||
3103 | sc->filter_flags = rfilt; | ||
3104 | } | ||
3086 | 3105 | ||
3106 | static void ath5k_bss_info_changed(struct ieee80211_hw *hw, | ||
3107 | struct ieee80211_vif *vif, | ||
3108 | struct ieee80211_bss_conf *bss_conf, | ||
3109 | u32 changes) | ||
3110 | { | ||
3111 | struct ath5k_softc *sc = hw->priv; | ||
3112 | if (changes & BSS_CHANGED_ASSOC) { | ||
3113 | mutex_lock(&sc->lock); | ||
3114 | sc->assoc = bss_conf->assoc; | ||
3115 | if (sc->opmode == NL80211_IFTYPE_STATION) | ||
3116 | set_beacon_filter(hw, sc->assoc); | ||
3117 | mutex_unlock(&sc->lock); | ||
3118 | } | ||
3119 | } | ||
diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h index 06d1054ca94b..facc60ddada2 100644 --- a/drivers/net/wireless/ath5k/base.h +++ b/drivers/net/wireless/ath5k/base.h | |||
@@ -179,6 +179,7 @@ struct ath5k_softc { | |||
179 | 179 | ||
180 | struct timer_list calib_tim; /* calibration timer */ | 180 | struct timer_list calib_tim; /* calibration timer */ |
181 | int power_level; /* Requested tx power in dbm */ | 181 | int power_level; /* Requested tx power in dbm */ |
182 | bool assoc; /* assocate state */ | ||
182 | }; | 183 | }; |
183 | 184 | ||
184 | #define ath5k_hw_hasbssidmask(_ah) \ | 185 | #define ath5k_hw_hasbssidmask(_ah) \ |
diff --git a/drivers/net/wireless/ath5k/debug.c b/drivers/net/wireless/ath5k/debug.c index 19980cbd5d5f..ccaeb5c219d2 100644 --- a/drivers/net/wireless/ath5k/debug.c +++ b/drivers/net/wireless/ath5k/debug.c | |||
@@ -417,19 +417,19 @@ ath5k_debug_init_device(struct ath5k_softc *sc) | |||
417 | sc->debug.debugfs_phydir = debugfs_create_dir(wiphy_name(sc->hw->wiphy), | 417 | sc->debug.debugfs_phydir = debugfs_create_dir(wiphy_name(sc->hw->wiphy), |
418 | ath5k_global_debugfs); | 418 | ath5k_global_debugfs); |
419 | 419 | ||
420 | sc->debug.debugfs_debug = debugfs_create_file("debug", 0666, | 420 | sc->debug.debugfs_debug = debugfs_create_file("debug", S_IWUSR | S_IRUGO, |
421 | sc->debug.debugfs_phydir, sc, &fops_debug); | 421 | sc->debug.debugfs_phydir, sc, &fops_debug); |
422 | 422 | ||
423 | sc->debug.debugfs_registers = debugfs_create_file("registers", 0444, | 423 | sc->debug.debugfs_registers = debugfs_create_file("registers", S_IRUGO, |
424 | sc->debug.debugfs_phydir, sc, &fops_registers); | 424 | sc->debug.debugfs_phydir, sc, &fops_registers); |
425 | 425 | ||
426 | sc->debug.debugfs_tsf = debugfs_create_file("tsf", 0666, | 426 | sc->debug.debugfs_tsf = debugfs_create_file("tsf", S_IWUSR | S_IRUGO, |
427 | sc->debug.debugfs_phydir, sc, &fops_tsf); | 427 | sc->debug.debugfs_phydir, sc, &fops_tsf); |
428 | 428 | ||
429 | sc->debug.debugfs_beacon = debugfs_create_file("beacon", 0666, | 429 | sc->debug.debugfs_beacon = debugfs_create_file("beacon", S_IWUSR | S_IRUGO, |
430 | sc->debug.debugfs_phydir, sc, &fops_beacon); | 430 | sc->debug.debugfs_phydir, sc, &fops_beacon); |
431 | 431 | ||
432 | sc->debug.debugfs_reset = debugfs_create_file("reset", 0222, | 432 | sc->debug.debugfs_reset = debugfs_create_file("reset", S_IWUSR, |
433 | sc->debug.debugfs_phydir, sc, &fops_reset); | 433 | sc->debug.debugfs_phydir, sc, &fops_reset); |
434 | } | 434 | } |
435 | 435 | ||
diff --git a/drivers/net/wireless/ath9k/beacon.c b/drivers/net/wireless/ath9k/beacon.c index 9e15c30bbc06..4dd1c1bda0fb 100644 --- a/drivers/net/wireless/ath9k/beacon.c +++ b/drivers/net/wireless/ath9k/beacon.c | |||
@@ -170,7 +170,7 @@ static struct ath_buf *ath_beacon_generate(struct ath_softc *sc, int if_id) | |||
170 | skb = (struct sk_buff *)bf->bf_mpdu; | 170 | skb = (struct sk_buff *)bf->bf_mpdu; |
171 | if (skb) { | 171 | if (skb) { |
172 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, | 172 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, |
173 | skb_end_pointer(skb) - skb->head, | 173 | skb->len, |
174 | PCI_DMA_TODEVICE); | 174 | PCI_DMA_TODEVICE); |
175 | } | 175 | } |
176 | 176 | ||
@@ -193,7 +193,7 @@ static struct ath_buf *ath_beacon_generate(struct ath_softc *sc, int if_id) | |||
193 | 193 | ||
194 | bf->bf_buf_addr = bf->bf_dmacontext = | 194 | bf->bf_buf_addr = bf->bf_dmacontext = |
195 | pci_map_single(sc->pdev, skb->data, | 195 | pci_map_single(sc->pdev, skb->data, |
196 | skb_end_pointer(skb) - skb->head, | 196 | skb->len, |
197 | PCI_DMA_TODEVICE); | 197 | PCI_DMA_TODEVICE); |
198 | 198 | ||
199 | skb = ieee80211_get_buffered_bc(sc->hw, avp->av_if_data); | 199 | skb = ieee80211_get_buffered_bc(sc->hw, avp->av_if_data); |
@@ -352,7 +352,7 @@ int ath_beacon_alloc(struct ath_softc *sc, int if_id) | |||
352 | if (bf->bf_mpdu != NULL) { | 352 | if (bf->bf_mpdu != NULL) { |
353 | skb = (struct sk_buff *)bf->bf_mpdu; | 353 | skb = (struct sk_buff *)bf->bf_mpdu; |
354 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, | 354 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, |
355 | skb_end_pointer(skb) - skb->head, | 355 | skb->len, |
356 | PCI_DMA_TODEVICE); | 356 | PCI_DMA_TODEVICE); |
357 | dev_kfree_skb_any(skb); | 357 | dev_kfree_skb_any(skb); |
358 | bf->bf_mpdu = NULL; | 358 | bf->bf_mpdu = NULL; |
@@ -412,7 +412,7 @@ int ath_beacon_alloc(struct ath_softc *sc, int if_id) | |||
412 | 412 | ||
413 | bf->bf_buf_addr = bf->bf_dmacontext = | 413 | bf->bf_buf_addr = bf->bf_dmacontext = |
414 | pci_map_single(sc->pdev, skb->data, | 414 | pci_map_single(sc->pdev, skb->data, |
415 | skb_end_pointer(skb) - skb->head, | 415 | skb->len, |
416 | PCI_DMA_TODEVICE); | 416 | PCI_DMA_TODEVICE); |
417 | bf->bf_mpdu = skb; | 417 | bf->bf_mpdu = skb; |
418 | 418 | ||
@@ -439,7 +439,7 @@ void ath_beacon_return(struct ath_softc *sc, struct ath_vap *avp) | |||
439 | if (bf->bf_mpdu != NULL) { | 439 | if (bf->bf_mpdu != NULL) { |
440 | struct sk_buff *skb = (struct sk_buff *)bf->bf_mpdu; | 440 | struct sk_buff *skb = (struct sk_buff *)bf->bf_mpdu; |
441 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, | 441 | pci_unmap_single(sc->pdev, bf->bf_dmacontext, |
442 | skb_end_pointer(skb) - skb->head, | 442 | skb->len, |
443 | PCI_DMA_TODEVICE); | 443 | PCI_DMA_TODEVICE); |
444 | dev_kfree_skb_any(skb); | 444 | dev_kfree_skb_any(skb); |
445 | bf->bf_mpdu = NULL; | 445 | bf->bf_mpdu = NULL; |
diff --git a/drivers/net/wireless/ath9k/recv.c b/drivers/net/wireless/ath9k/recv.c index 4983402af559..504a0444d89f 100644 --- a/drivers/net/wireless/ath9k/recv.c +++ b/drivers/net/wireless/ath9k/recv.c | |||
@@ -49,10 +49,12 @@ static void ath_rx_buf_link(struct ath_softc *sc, struct ath_buf *bf) | |||
49 | ASSERT(skb != NULL); | 49 | ASSERT(skb != NULL); |
50 | ds->ds_vdata = skb->data; | 50 | ds->ds_vdata = skb->data; |
51 | 51 | ||
52 | /* setup rx descriptors */ | 52 | /* setup rx descriptors. The sc_rxbufsize here tells the harware |
53 | * how much data it can DMA to us and that we are prepared | ||
54 | * to process */ | ||
53 | ath9k_hw_setuprxdesc(ah, | 55 | ath9k_hw_setuprxdesc(ah, |
54 | ds, | 56 | ds, |
55 | skb_tailroom(skb), /* buffer size */ | 57 | sc->sc_rxbufsize, |
56 | 0); | 58 | 0); |
57 | 59 | ||
58 | if (sc->sc_rxlink == NULL) | 60 | if (sc->sc_rxlink == NULL) |
@@ -398,6 +400,13 @@ static struct sk_buff *ath_rxbuf_alloc(struct ath_softc *sc, | |||
398 | * in rx'd frames. | 400 | * in rx'd frames. |
399 | */ | 401 | */ |
400 | 402 | ||
403 | /* Note: the kernel can allocate a value greater than | ||
404 | * what we ask it to give us. We really only need 4 KB as that | ||
405 | * is this hardware supports and in fact we need at least 3849 | ||
406 | * as that is the MAX AMSDU size this hardware supports. | ||
407 | * Unfortunately this means we may get 8 KB here from the | ||
408 | * kernel... and that is actually what is observed on some | ||
409 | * systems :( */ | ||
401 | skb = dev_alloc_skb(len + sc->sc_cachelsz - 1); | 410 | skb = dev_alloc_skb(len + sc->sc_cachelsz - 1); |
402 | if (skb != NULL) { | 411 | if (skb != NULL) { |
403 | off = ((unsigned long) skb->data) % sc->sc_cachelsz; | 412 | off = ((unsigned long) skb->data) % sc->sc_cachelsz; |
@@ -456,7 +465,7 @@ static int ath_rx_indicate(struct ath_softc *sc, | |||
456 | if (nskb != NULL) { | 465 | if (nskb != NULL) { |
457 | bf->bf_mpdu = nskb; | 466 | bf->bf_mpdu = nskb; |
458 | bf->bf_buf_addr = pci_map_single(sc->pdev, nskb->data, | 467 | bf->bf_buf_addr = pci_map_single(sc->pdev, nskb->data, |
459 | skb_end_pointer(nskb) - nskb->head, | 468 | sc->sc_rxbufsize, |
460 | PCI_DMA_FROMDEVICE); | 469 | PCI_DMA_FROMDEVICE); |
461 | bf->bf_dmacontext = bf->bf_buf_addr; | 470 | bf->bf_dmacontext = bf->bf_buf_addr; |
462 | ATH_RX_CONTEXT(nskb)->ctx_rxbuf = bf; | 471 | ATH_RX_CONTEXT(nskb)->ctx_rxbuf = bf; |
@@ -542,7 +551,7 @@ int ath_rx_init(struct ath_softc *sc, int nbufs) | |||
542 | 551 | ||
543 | bf->bf_mpdu = skb; | 552 | bf->bf_mpdu = skb; |
544 | bf->bf_buf_addr = pci_map_single(sc->pdev, skb->data, | 553 | bf->bf_buf_addr = pci_map_single(sc->pdev, skb->data, |
545 | skb_end_pointer(skb) - skb->head, | 554 | sc->sc_rxbufsize, |
546 | PCI_DMA_FROMDEVICE); | 555 | PCI_DMA_FROMDEVICE); |
547 | bf->bf_dmacontext = bf->bf_buf_addr; | 556 | bf->bf_dmacontext = bf->bf_buf_addr; |
548 | ATH_RX_CONTEXT(skb)->ctx_rxbuf = bf; | 557 | ATH_RX_CONTEXT(skb)->ctx_rxbuf = bf; |
@@ -1007,7 +1016,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
1007 | 1016 | ||
1008 | pci_dma_sync_single_for_cpu(sc->pdev, | 1017 | pci_dma_sync_single_for_cpu(sc->pdev, |
1009 | bf->bf_buf_addr, | 1018 | bf->bf_buf_addr, |
1010 | skb_tailroom(skb), | 1019 | sc->sc_rxbufsize, |
1011 | PCI_DMA_FROMDEVICE); | 1020 | PCI_DMA_FROMDEVICE); |
1012 | pci_unmap_single(sc->pdev, | 1021 | pci_unmap_single(sc->pdev, |
1013 | bf->bf_buf_addr, | 1022 | bf->bf_buf_addr, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 444c5cc05f03..c4c0371c763b 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -1384,9 +1384,11 @@ void iwl_rx_handle(struct iwl_priv *priv) | |||
1384 | 1384 | ||
1385 | rxq->queue[i] = NULL; | 1385 | rxq->queue[i] = NULL; |
1386 | 1386 | ||
1387 | pci_dma_sync_single_for_cpu(priv->pci_dev, rxb->aligned_dma_addr, | 1387 | dma_sync_single_range_for_cpu( |
1388 | priv->hw_params.rx_buf_size, | 1388 | &priv->pci_dev->dev, rxb->real_dma_addr, |
1389 | PCI_DMA_FROMDEVICE); | 1389 | rxb->aligned_dma_addr - rxb->real_dma_addr, |
1390 | priv->hw_params.rx_buf_size, | ||
1391 | PCI_DMA_FROMDEVICE); | ||
1390 | pkt = (struct iwl_rx_packet *)rxb->skb->data; | 1392 | pkt = (struct iwl_rx_packet *)rxb->skb->data; |
1391 | 1393 | ||
1392 | /* Reclaim a command buffer only if this packet is a response | 1394 | /* Reclaim a command buffer only if this packet is a response |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 5049a47030ac..5f4f85f56cb7 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | #include <linux/acpi.h> | 23 | #include <linux/acpi.h> |
24 | #include <linux/kallsyms.h> | 24 | #include <linux/kallsyms.h> |
25 | #include <linux/dmi.h> | ||
25 | #include "pci.h" | 26 | #include "pci.h" |
26 | 27 | ||
27 | int isa_dma_bridge_buggy; | 28 | int isa_dma_bridge_buggy; |
@@ -1828,6 +1829,22 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS, | |||
1828 | PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB, | 1829 | PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB, |
1829 | ht_enable_msi_mapping); | 1830 | ht_enable_msi_mapping); |
1830 | 1831 | ||
1832 | /* The P5N32-SLI Premium motherboard from Asus has a problem with msi | ||
1833 | * for the MCP55 NIC. It is not yet determined whether the msi problem | ||
1834 | * also affects other devices. As for now, turn off msi for this device. | ||
1835 | */ | ||
1836 | static void __devinit nvenet_msi_disable(struct pci_dev *dev) | ||
1837 | { | ||
1838 | if (dmi_name_in_vendors("P5N32-SLI PREMIUM")) { | ||
1839 | dev_info(&dev->dev, | ||
1840 | "Disabling msi for MCP55 NIC on P5N32-SLI Premium\n"); | ||
1841 | dev->no_msi = 1; | ||
1842 | } | ||
1843 | } | ||
1844 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, | ||
1845 | PCI_DEVICE_ID_NVIDIA_NVENET_15, | ||
1846 | nvenet_msi_disable); | ||
1847 | |||
1831 | static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev) | 1848 | static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev) |
1832 | { | 1849 | { |
1833 | struct pci_dev *host_bridge; | 1850 | struct pci_dev *host_bridge; |
diff --git a/drivers/rtc/rtc-starfire.c b/drivers/rtc/rtc-starfire.c index 7ccb0dd700af..5be98bfd7ed3 100644 --- a/drivers/rtc/rtc-starfire.c +++ b/drivers/rtc/rtc-starfire.c | |||
@@ -6,7 +6,6 @@ | |||
6 | #include <linux/kernel.h> | 6 | #include <linux/kernel.h> |
7 | #include <linux/module.h> | 7 | #include <linux/module.h> |
8 | #include <linux/init.h> | 8 | #include <linux/init.h> |
9 | #include <linux/time.h> | ||
10 | #include <linux/rtc.h> | 9 | #include <linux/rtc.h> |
11 | #include <linux/platform_device.h> | 10 | #include <linux/platform_device.h> |
12 | 11 | ||
@@ -16,11 +15,6 @@ MODULE_AUTHOR("David S. Miller <davem@davemloft.net>"); | |||
16 | MODULE_DESCRIPTION("Starfire RTC driver"); | 15 | MODULE_DESCRIPTION("Starfire RTC driver"); |
17 | MODULE_LICENSE("GPL"); | 16 | MODULE_LICENSE("GPL"); |
18 | 17 | ||
19 | struct starfire_rtc { | ||
20 | struct rtc_device *rtc; | ||
21 | spinlock_t lock; | ||
22 | }; | ||
23 | |||
24 | static u32 starfire_get_time(void) | 18 | static u32 starfire_get_time(void) |
25 | { | 19 | { |
26 | static char obp_gettod[32]; | 20 | static char obp_gettod[32]; |
@@ -35,64 +29,31 @@ static u32 starfire_get_time(void) | |||
35 | 29 | ||
36 | static int starfire_read_time(struct device *dev, struct rtc_time *tm) | 30 | static int starfire_read_time(struct device *dev, struct rtc_time *tm) |
37 | { | 31 | { |
38 | struct starfire_rtc *p = dev_get_drvdata(dev); | 32 | rtc_time_to_tm(starfire_get_time(), tm); |
39 | unsigned long flags, secs; | 33 | return rtc_valid_tm(tm); |
40 | |||
41 | spin_lock_irqsave(&p->lock, flags); | ||
42 | secs = starfire_get_time(); | ||
43 | spin_unlock_irqrestore(&p->lock, flags); | ||
44 | |||
45 | rtc_time_to_tm(secs, tm); | ||
46 | |||
47 | return 0; | ||
48 | } | ||
49 | |||
50 | static int starfire_set_time(struct device *dev, struct rtc_time *tm) | ||
51 | { | ||
52 | unsigned long secs; | ||
53 | int err; | ||
54 | |||
55 | err = rtc_tm_to_time(tm, &secs); | ||
56 | if (err) | ||
57 | return err; | ||
58 | |||
59 | /* Do nothing, time is set using the service processor | ||
60 | * console on this platform. | ||
61 | */ | ||
62 | return 0; | ||
63 | } | 34 | } |
64 | 35 | ||
65 | static const struct rtc_class_ops starfire_rtc_ops = { | 36 | static const struct rtc_class_ops starfire_rtc_ops = { |
66 | .read_time = starfire_read_time, | 37 | .read_time = starfire_read_time, |
67 | .set_time = starfire_set_time, | ||
68 | }; | 38 | }; |
69 | 39 | ||
70 | static int __devinit starfire_rtc_probe(struct platform_device *pdev) | 40 | static int __init starfire_rtc_probe(struct platform_device *pdev) |
71 | { | 41 | { |
72 | struct starfire_rtc *p = kzalloc(sizeof(*p), GFP_KERNEL); | 42 | struct rtc_device *rtc = rtc_device_register("starfire", &pdev->dev, |
73 | 43 | &starfire_rtc_ops, THIS_MODULE); | |
74 | if (!p) | 44 | if (IS_ERR(rtc)) |
75 | return -ENOMEM; | 45 | return PTR_ERR(rtc); |
76 | 46 | ||
77 | spin_lock_init(&p->lock); | 47 | platform_set_drvdata(pdev, rtc); |
78 | 48 | ||
79 | p->rtc = rtc_device_register("starfire", &pdev->dev, | ||
80 | &starfire_rtc_ops, THIS_MODULE); | ||
81 | if (IS_ERR(p->rtc)) { | ||
82 | int err = PTR_ERR(p->rtc); | ||
83 | kfree(p); | ||
84 | return err; | ||
85 | } | ||
86 | platform_set_drvdata(pdev, p); | ||
87 | return 0; | 49 | return 0; |
88 | } | 50 | } |
89 | 51 | ||
90 | static int __devexit starfire_rtc_remove(struct platform_device *pdev) | 52 | static int __exit starfire_rtc_remove(struct platform_device *pdev) |
91 | { | 53 | { |
92 | struct starfire_rtc *p = platform_get_drvdata(pdev); | 54 | struct rtc_device *rtc = platform_get_drvdata(pdev); |
93 | 55 | ||
94 | rtc_device_unregister(p->rtc); | 56 | rtc_device_unregister(rtc); |
95 | kfree(p); | ||
96 | 57 | ||
97 | return 0; | 58 | return 0; |
98 | } | 59 | } |
@@ -102,13 +63,12 @@ static struct platform_driver starfire_rtc_driver = { | |||
102 | .name = "rtc-starfire", | 63 | .name = "rtc-starfire", |
103 | .owner = THIS_MODULE, | 64 | .owner = THIS_MODULE, |
104 | }, | 65 | }, |
105 | .probe = starfire_rtc_probe, | 66 | .remove = __exit_p(starfire_rtc_remove), |
106 | .remove = __devexit_p(starfire_rtc_remove), | ||
107 | }; | 67 | }; |
108 | 68 | ||
109 | static int __init starfire_rtc_init(void) | 69 | static int __init starfire_rtc_init(void) |
110 | { | 70 | { |
111 | return platform_driver_register(&starfire_rtc_driver); | 71 | return platform_driver_probe(&starfire_rtc_driver, starfire_rtc_probe); |
112 | } | 72 | } |
113 | 73 | ||
114 | static void __exit starfire_rtc_exit(void) | 74 | static void __exit starfire_rtc_exit(void) |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index 35364f64da7f..c557ba34e1aa 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -720,7 +720,6 @@ static int zfcp_erp_adapter_strategy_generic(struct zfcp_erp_action *act, | |||
720 | goto failed_openfcp; | 720 | goto failed_openfcp; |
721 | 721 | ||
722 | atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &act->adapter->status); | 722 | atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &act->adapter->status); |
723 | schedule_work(&act->adapter->scan_work); | ||
724 | 723 | ||
725 | return ZFCP_ERP_SUCCEEDED; | 724 | return ZFCP_ERP_SUCCEEDED; |
726 | 725 | ||
@@ -1186,7 +1185,9 @@ static void zfcp_erp_scsi_scan(struct work_struct *work) | |||
1186 | container_of(work, struct zfcp_erp_add_work, work); | 1185 | container_of(work, struct zfcp_erp_add_work, work); |
1187 | struct zfcp_unit *unit = p->unit; | 1186 | struct zfcp_unit *unit = p->unit; |
1188 | struct fc_rport *rport = unit->port->rport; | 1187 | struct fc_rport *rport = unit->port->rport; |
1189 | scsi_scan_target(&rport->dev, 0, rport->scsi_target_id, | 1188 | |
1189 | if (rport && rport->port_state == FC_PORTSTATE_ONLINE) | ||
1190 | scsi_scan_target(&rport->dev, 0, rport->scsi_target_id, | ||
1190 | scsilun_to_int((struct scsi_lun *)&unit->fcp_lun), 0); | 1191 | scsilun_to_int((struct scsi_lun *)&unit->fcp_lun), 0); |
1191 | atomic_clear_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status); | 1192 | atomic_clear_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status); |
1192 | zfcp_unit_put(unit); | 1193 | zfcp_unit_put(unit); |
@@ -1282,6 +1283,8 @@ static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result) | |||
1282 | case ZFCP_ERP_ACTION_REOPEN_ADAPTER: | 1283 | case ZFCP_ERP_ACTION_REOPEN_ADAPTER: |
1283 | if (result != ZFCP_ERP_SUCCEEDED) | 1284 | if (result != ZFCP_ERP_SUCCEEDED) |
1284 | zfcp_erp_rports_del(adapter); | 1285 | zfcp_erp_rports_del(adapter); |
1286 | else | ||
1287 | schedule_work(&adapter->scan_work); | ||
1285 | zfcp_adapter_put(adapter); | 1288 | zfcp_adapter_put(adapter); |
1286 | break; | 1289 | break; |
1287 | } | 1290 | } |
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index 1a7c80a77ff5..8aab3091a7b1 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c | |||
@@ -50,7 +50,8 @@ static int zfcp_wka_port_get(struct zfcp_wka_port *wka_port) | |||
50 | if (mutex_lock_interruptible(&wka_port->mutex)) | 50 | if (mutex_lock_interruptible(&wka_port->mutex)) |
51 | return -ERESTARTSYS; | 51 | return -ERESTARTSYS; |
52 | 52 | ||
53 | if (wka_port->status != ZFCP_WKA_PORT_ONLINE) { | 53 | if (wka_port->status == ZFCP_WKA_PORT_OFFLINE || |
54 | wka_port->status == ZFCP_WKA_PORT_CLOSING) { | ||
54 | wka_port->status = ZFCP_WKA_PORT_OPENING; | 55 | wka_port->status = ZFCP_WKA_PORT_OPENING; |
55 | if (zfcp_fsf_open_wka_port(wka_port)) | 56 | if (zfcp_fsf_open_wka_port(wka_port)) |
56 | wka_port->status = ZFCP_WKA_PORT_OFFLINE; | 57 | wka_port->status = ZFCP_WKA_PORT_OFFLINE; |
@@ -125,8 +126,7 @@ static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range, | |||
125 | 126 | ||
126 | read_lock_irqsave(&zfcp_data.config_lock, flags); | 127 | read_lock_irqsave(&zfcp_data.config_lock, flags); |
127 | list_for_each_entry(port, &fsf_req->adapter->port_list_head, list) { | 128 | list_for_each_entry(port, &fsf_req->adapter->port_list_head, list) { |
128 | /* FIXME: ZFCP_STATUS_PORT_DID_DID check is racy */ | 129 | if (!(atomic_read(&port->status) & ZFCP_STATUS_PORT_PHYS_OPEN)) |
129 | if (!(atomic_read(&port->status) & ZFCP_STATUS_PORT_DID_DID)) | ||
130 | /* Try to connect to unused ports anyway. */ | 130 | /* Try to connect to unused ports anyway. */ |
131 | zfcp_erp_port_reopen(port, | 131 | zfcp_erp_port_reopen(port, |
132 | ZFCP_STATUS_COMMON_ERP_FAILED, | 132 | ZFCP_STATUS_COMMON_ERP_FAILED, |
@@ -610,7 +610,6 @@ int zfcp_scan_ports(struct zfcp_adapter *adapter) | |||
610 | int ret, i; | 610 | int ret, i; |
611 | struct zfcp_gpn_ft *gpn_ft; | 611 | struct zfcp_gpn_ft *gpn_ft; |
612 | 612 | ||
613 | zfcp_erp_wait(adapter); /* wait until adapter is finished with ERP */ | ||
614 | if (fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPORT) | 613 | if (fc_host_port_type(adapter->scsi_host) != FC_PORTTYPE_NPORT) |
615 | return 0; | 614 | return 0; |
616 | 615 | ||
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index d024442ee128..dc0367690405 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -930,8 +930,10 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command(unsigned long old_req_id, | |||
930 | goto out; | 930 | goto out; |
931 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_ABORT_FCP_CMND, | 931 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_ABORT_FCP_CMND, |
932 | req_flags, adapter->pool.fsf_req_abort); | 932 | req_flags, adapter->pool.fsf_req_abort); |
933 | if (IS_ERR(req)) | 933 | if (IS_ERR(req)) { |
934 | req = NULL; | ||
934 | goto out; | 935 | goto out; |
936 | } | ||
935 | 937 | ||
936 | if (unlikely(!(atomic_read(&unit->status) & | 938 | if (unlikely(!(atomic_read(&unit->status) & |
937 | ZFCP_STATUS_COMMON_UNBLOCKED))) | 939 | ZFCP_STATUS_COMMON_UNBLOCKED))) |
@@ -1584,6 +1586,7 @@ static void zfcp_fsf_open_wka_port_handler(struct zfcp_fsf_req *req) | |||
1584 | wka_port->status = ZFCP_WKA_PORT_OFFLINE; | 1586 | wka_port->status = ZFCP_WKA_PORT_OFFLINE; |
1585 | break; | 1587 | break; |
1586 | case FSF_PORT_ALREADY_OPEN: | 1588 | case FSF_PORT_ALREADY_OPEN: |
1589 | break; | ||
1587 | case FSF_GOOD: | 1590 | case FSF_GOOD: |
1588 | wka_port->handle = header->port_handle; | 1591 | wka_port->handle = header->port_handle; |
1589 | wka_port->status = ZFCP_WKA_PORT_ONLINE; | 1592 | wka_port->status = ZFCP_WKA_PORT_ONLINE; |
@@ -2113,18 +2116,21 @@ static inline void zfcp_fsf_trace_latency(struct zfcp_fsf_req *fsf_req) | |||
2113 | 2116 | ||
2114 | static void zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *req) | 2117 | static void zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *req) |
2115 | { | 2118 | { |
2116 | struct scsi_cmnd *scpnt = req->data; | 2119 | struct scsi_cmnd *scpnt; |
2117 | struct fcp_rsp_iu *fcp_rsp_iu = (struct fcp_rsp_iu *) | 2120 | struct fcp_rsp_iu *fcp_rsp_iu = (struct fcp_rsp_iu *) |
2118 | &(req->qtcb->bottom.io.fcp_rsp); | 2121 | &(req->qtcb->bottom.io.fcp_rsp); |
2119 | u32 sns_len; | 2122 | u32 sns_len; |
2120 | char *fcp_rsp_info = (unsigned char *) &fcp_rsp_iu[1]; | 2123 | char *fcp_rsp_info = (unsigned char *) &fcp_rsp_iu[1]; |
2121 | unsigned long flags; | 2124 | unsigned long flags; |
2122 | 2125 | ||
2123 | if (unlikely(!scpnt)) | ||
2124 | return; | ||
2125 | |||
2126 | read_lock_irqsave(&req->adapter->abort_lock, flags); | 2126 | read_lock_irqsave(&req->adapter->abort_lock, flags); |
2127 | 2127 | ||
2128 | scpnt = req->data; | ||
2129 | if (unlikely(!scpnt)) { | ||
2130 | read_unlock_irqrestore(&req->adapter->abort_lock, flags); | ||
2131 | return; | ||
2132 | } | ||
2133 | |||
2128 | if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ABORTED)) { | 2134 | if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ABORTED)) { |
2129 | set_host_byte(scpnt, DID_SOFT_ERROR); | 2135 | set_host_byte(scpnt, DID_SOFT_ERROR); |
2130 | set_driver_byte(scpnt, SUGGEST_RETRY); | 2136 | set_driver_byte(scpnt, SUGGEST_RETRY); |
@@ -2442,8 +2448,10 @@ struct zfcp_fsf_req *zfcp_fsf_send_fcp_ctm(struct zfcp_adapter *adapter, | |||
2442 | goto out; | 2448 | goto out; |
2443 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags, | 2449 | req = zfcp_fsf_req_create(adapter, FSF_QTCB_FCP_CMND, req_flags, |
2444 | adapter->pool.fsf_req_scsi); | 2450 | adapter->pool.fsf_req_scsi); |
2445 | if (IS_ERR(req)) | 2451 | if (IS_ERR(req)) { |
2452 | req = NULL; | ||
2446 | goto out; | 2453 | goto out; |
2454 | } | ||
2447 | 2455 | ||
2448 | req->status |= ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT; | 2456 | req->status |= ZFCP_STATUS_FSFREQ_TASK_MANAGEMENT; |
2449 | req->data = unit; | 2457 | req->data = unit; |
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index e46fd3e9f68f..468c880f8b6d 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
@@ -88,7 +88,7 @@ static int zfcp_scsi_queuecommand(struct scsi_cmnd *scpnt, | |||
88 | ret = zfcp_fsf_send_fcp_command_task(adapter, unit, scpnt, 0, | 88 | ret = zfcp_fsf_send_fcp_command_task(adapter, unit, scpnt, 0, |
89 | ZFCP_REQ_AUTO_CLEANUP); | 89 | ZFCP_REQ_AUTO_CLEANUP); |
90 | if (unlikely(ret == -EBUSY)) | 90 | if (unlikely(ret == -EBUSY)) |
91 | zfcp_scsi_command_fail(scpnt, DID_NO_CONNECT); | 91 | return SCSI_MLQUEUE_DEVICE_BUSY; |
92 | else if (unlikely(ret < 0)) | 92 | else if (unlikely(ret < 0)) |
93 | return SCSI_MLQUEUE_HOST_BUSY; | 93 | return SCSI_MLQUEUE_HOST_BUSY; |
94 | 94 | ||
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 9aa301c1ed07..162cd927d94b 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
@@ -427,8 +427,8 @@ static int aac_slave_configure(struct scsi_device *sdev) | |||
427 | * Firmware has an individual device recovery time typically | 427 | * Firmware has an individual device recovery time typically |
428 | * of 35 seconds, give us a margin. | 428 | * of 35 seconds, give us a margin. |
429 | */ | 429 | */ |
430 | if (sdev->timeout < (45 * HZ)) | 430 | if (sdev->request_queue->rq_timeout < (45 * HZ)) |
431 | sdev->timeout = 45 * HZ; | 431 | blk_queue_rq_timeout(sdev->request_queue, 45*HZ); |
432 | for (cid = 0; cid < aac->maximum_num_containers; ++cid) | 432 | for (cid = 0; cid < aac->maximum_num_containers; ++cid) |
433 | if (aac->fsa_dev[cid].valid) | 433 | if (aac->fsa_dev[cid].valid) |
434 | ++num_lsu; | 434 | ++num_lsu; |
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index 87e09f35d3d4..6cad1758243a 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
@@ -1442,7 +1442,7 @@ static int ibmvscsi_slave_configure(struct scsi_device *sdev) | |||
1442 | spin_lock_irqsave(shost->host_lock, lock_flags); | 1442 | spin_lock_irqsave(shost->host_lock, lock_flags); |
1443 | if (sdev->type == TYPE_DISK) { | 1443 | if (sdev->type == TYPE_DISK) { |
1444 | sdev->allow_restart = 1; | 1444 | sdev->allow_restart = 1; |
1445 | sdev->timeout = 60 * HZ; | 1445 | blk_queue_rq_timeout(sdev->request_queue, 60 * HZ); |
1446 | } | 1446 | } |
1447 | scsi_adjust_queue_depth(sdev, 0, shost->cmd_per_lun); | 1447 | scsi_adjust_queue_depth(sdev, 0, shost->cmd_per_lun); |
1448 | spin_unlock_irqrestore(shost->host_lock, lock_flags); | 1448 | spin_unlock_irqrestore(shost->host_lock, lock_flags); |
diff --git a/drivers/scsi/megaraid/megaraid_sas.c b/drivers/scsi/megaraid/megaraid_sas.c index a454f94623d7..17ce7abe17ee 100644 --- a/drivers/scsi/megaraid/megaraid_sas.c +++ b/drivers/scsi/megaraid/megaraid_sas.c | |||
@@ -1016,7 +1016,8 @@ static int megasas_slave_configure(struct scsi_device *sdev) | |||
1016 | * The RAID firmware may require extended timeouts. | 1016 | * The RAID firmware may require extended timeouts. |
1017 | */ | 1017 | */ |
1018 | if (sdev->channel >= MEGASAS_MAX_PD_CHANNELS) | 1018 | if (sdev->channel >= MEGASAS_MAX_PD_CHANNELS) |
1019 | sdev->timeout = MEGASAS_DEFAULT_CMD_TIMEOUT * HZ; | 1019 | blk_queue_rq_timeout(sdev->request_queue, |
1020 | MEGASAS_DEFAULT_CMD_TIMEOUT * HZ); | ||
1020 | return 0; | 1021 | return 0; |
1021 | } | 1022 | } |
1022 | 1023 | ||
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 386361778ebb..edfaf241c5ba 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
@@ -932,8 +932,7 @@ static int scsi_eh_try_stu(struct scsi_cmnd *scmd) | |||
932 | int i, rtn = NEEDS_RETRY; | 932 | int i, rtn = NEEDS_RETRY; |
933 | 933 | ||
934 | for (i = 0; rtn == NEEDS_RETRY && i < 2; i++) | 934 | for (i = 0; rtn == NEEDS_RETRY && i < 2; i++) |
935 | rtn = scsi_send_eh_cmnd(scmd, stu_command, 6, | 935 | rtn = scsi_send_eh_cmnd(scmd, stu_command, 6, scmd->device->request_queue->rq_timeout, 0); |
936 | scmd->device->timeout, 0); | ||
937 | 936 | ||
938 | if (rtn == SUCCESS) | 937 | if (rtn == SUCCESS) |
939 | return 0; | 938 | return 0; |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index f5d3b96890dc..fa45a1a66867 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -567,15 +567,18 @@ static inline int scsi_host_is_busy(struct Scsi_Host *shost) | |||
567 | */ | 567 | */ |
568 | static void scsi_run_queue(struct request_queue *q) | 568 | static void scsi_run_queue(struct request_queue *q) |
569 | { | 569 | { |
570 | struct scsi_device *starved_head = NULL, *sdev = q->queuedata; | 570 | struct scsi_device *sdev = q->queuedata; |
571 | struct Scsi_Host *shost = sdev->host; | 571 | struct Scsi_Host *shost = sdev->host; |
572 | LIST_HEAD(starved_list); | ||
572 | unsigned long flags; | 573 | unsigned long flags; |
573 | 574 | ||
574 | if (scsi_target(sdev)->single_lun) | 575 | if (scsi_target(sdev)->single_lun) |
575 | scsi_single_lun_run(sdev); | 576 | scsi_single_lun_run(sdev); |
576 | 577 | ||
577 | spin_lock_irqsave(shost->host_lock, flags); | 578 | spin_lock_irqsave(shost->host_lock, flags); |
578 | while (!list_empty(&shost->starved_list) && !scsi_host_is_busy(shost)) { | 579 | list_splice_init(&shost->starved_list, &starved_list); |
580 | |||
581 | while (!list_empty(&starved_list)) { | ||
579 | int flagset; | 582 | int flagset; |
580 | 583 | ||
581 | /* | 584 | /* |
@@ -588,24 +591,18 @@ static void scsi_run_queue(struct request_queue *q) | |||
588 | * scsi_request_fn must get the host_lock before checking | 591 | * scsi_request_fn must get the host_lock before checking |
589 | * or modifying starved_list or starved_entry. | 592 | * or modifying starved_list or starved_entry. |
590 | */ | 593 | */ |
591 | sdev = list_entry(shost->starved_list.next, | 594 | if (scsi_host_is_busy(shost)) |
592 | struct scsi_device, starved_entry); | ||
593 | /* | ||
594 | * The *queue_ready functions can add a device back onto the | ||
595 | * starved list's tail, so we must check for a infinite loop. | ||
596 | */ | ||
597 | if (sdev == starved_head) | ||
598 | break; | 595 | break; |
599 | if (!starved_head) | ||
600 | starved_head = sdev; | ||
601 | 596 | ||
597 | sdev = list_entry(starved_list.next, | ||
598 | struct scsi_device, starved_entry); | ||
599 | list_del_init(&sdev->starved_entry); | ||
602 | if (scsi_target_is_busy(scsi_target(sdev))) { | 600 | if (scsi_target_is_busy(scsi_target(sdev))) { |
603 | list_move_tail(&sdev->starved_entry, | 601 | list_move_tail(&sdev->starved_entry, |
604 | &shost->starved_list); | 602 | &shost->starved_list); |
605 | continue; | 603 | continue; |
606 | } | 604 | } |
607 | 605 | ||
608 | list_del_init(&sdev->starved_entry); | ||
609 | spin_unlock(shost->host_lock); | 606 | spin_unlock(shost->host_lock); |
610 | 607 | ||
611 | spin_lock(sdev->request_queue->queue_lock); | 608 | spin_lock(sdev->request_queue->queue_lock); |
@@ -621,6 +618,8 @@ static void scsi_run_queue(struct request_queue *q) | |||
621 | 618 | ||
622 | spin_lock(shost->host_lock); | 619 | spin_lock(shost->host_lock); |
623 | } | 620 | } |
621 | /* put any unprocessed entries back */ | ||
622 | list_splice(&starved_list, &shost->starved_list); | ||
624 | spin_unlock_irqrestore(shost->host_lock, flags); | 623 | spin_unlock_irqrestore(shost->host_lock, flags); |
625 | 624 | ||
626 | blk_run_queue(q); | 625 | blk_run_queue(q); |
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c index 3790906a77d1..2fa830c0be27 100644 --- a/drivers/scsi/stex.c +++ b/drivers/scsi/stex.c | |||
@@ -477,7 +477,7 @@ stex_slave_config(struct scsi_device *sdev) | |||
477 | { | 477 | { |
478 | sdev->use_10_for_rw = 1; | 478 | sdev->use_10_for_rw = 1; |
479 | sdev->use_10_for_ms = 1; | 479 | sdev->use_10_for_ms = 1; |
480 | sdev->timeout = 60 * HZ; | 480 | blk_queue_rq_timeout(sdev->request_queue, 60 * HZ); |
481 | sdev->tagged_supported = 1; | 481 | sdev->tagged_supported = 1; |
482 | 482 | ||
483 | return 0; | 483 | return 0; |
diff --git a/drivers/video/macfb.c b/drivers/video/macfb.c index b790ddff76f9..ee380d5f3410 100644 --- a/drivers/video/macfb.c +++ b/drivers/video/macfb.c | |||
@@ -164,7 +164,6 @@ static struct fb_var_screeninfo macfb_defined = { | |||
164 | }; | 164 | }; |
165 | 165 | ||
166 | static struct fb_fix_screeninfo macfb_fix = { | 166 | static struct fb_fix_screeninfo macfb_fix = { |
167 | .id = "Macintosh ", | ||
168 | .type = FB_TYPE_PACKED_PIXELS, | 167 | .type = FB_TYPE_PACKED_PIXELS, |
169 | .accel = FB_ACCEL_NONE, | 168 | .accel = FB_ACCEL_NONE, |
170 | }; | 169 | }; |
@@ -760,22 +759,22 @@ static int __init macfb_init(void) | |||
760 | 759 | ||
761 | switch(ndev->dr_hw) { | 760 | switch(ndev->dr_hw) { |
762 | case NUBUS_DRHW_APPLE_MDC: | 761 | case NUBUS_DRHW_APPLE_MDC: |
763 | strcat( macfb_fix.id, "Display Card" ); | 762 | strcpy(macfb_fix.id, "Mac Disp. Card"); |
764 | macfb_setpalette = mdc_setpalette; | 763 | macfb_setpalette = mdc_setpalette; |
765 | macfb_defined.activate = FB_ACTIVATE_NOW; | 764 | macfb_defined.activate = FB_ACTIVATE_NOW; |
766 | break; | 765 | break; |
767 | case NUBUS_DRHW_APPLE_TFB: | 766 | case NUBUS_DRHW_APPLE_TFB: |
768 | strcat( macfb_fix.id, "Toby" ); | 767 | strcpy(macfb_fix.id, "Toby"); |
769 | macfb_setpalette = toby_setpalette; | 768 | macfb_setpalette = toby_setpalette; |
770 | macfb_defined.activate = FB_ACTIVATE_NOW; | 769 | macfb_defined.activate = FB_ACTIVATE_NOW; |
771 | break; | 770 | break; |
772 | case NUBUS_DRHW_APPLE_JET: | 771 | case NUBUS_DRHW_APPLE_JET: |
773 | strcat( macfb_fix.id, "Jet"); | 772 | strcpy(macfb_fix.id, "Jet"); |
774 | macfb_setpalette = jet_setpalette; | 773 | macfb_setpalette = jet_setpalette; |
775 | macfb_defined.activate = FB_ACTIVATE_NOW; | 774 | macfb_defined.activate = FB_ACTIVATE_NOW; |
776 | break; | 775 | break; |
777 | default: | 776 | default: |
778 | strcat( macfb_fix.id, "Generic NuBus" ); | 777 | strcpy(macfb_fix.id, "Generic NuBus"); |
779 | break; | 778 | break; |
780 | } | 779 | } |
781 | } | 780 | } |
@@ -786,21 +785,11 @@ static int __init macfb_init(void) | |||
786 | if (!video_is_nubus) | 785 | if (!video_is_nubus) |
787 | switch( mac_bi_data.id ) | 786 | switch( mac_bi_data.id ) |
788 | { | 787 | { |
789 | /* These don't have onboard video. Eventually, we may | ||
790 | be able to write separate framebuffer drivers for | ||
791 | them (tobyfb.c, hiresfb.c, etc, etc) */ | ||
792 | case MAC_MODEL_II: | ||
793 | case MAC_MODEL_IIX: | ||
794 | case MAC_MODEL_IICX: | ||
795 | case MAC_MODEL_IIFX: | ||
796 | strcat( macfb_fix.id, "Generic NuBus" ); | ||
797 | break; | ||
798 | |||
799 | /* Valkyrie Quadras */ | 788 | /* Valkyrie Quadras */ |
800 | case MAC_MODEL_Q630: | 789 | case MAC_MODEL_Q630: |
801 | /* I'm not sure about this one */ | 790 | /* I'm not sure about this one */ |
802 | case MAC_MODEL_P588: | 791 | case MAC_MODEL_P588: |
803 | strcat( macfb_fix.id, "Valkyrie built-in" ); | 792 | strcpy(macfb_fix.id, "Valkyrie"); |
804 | macfb_setpalette = valkyrie_setpalette; | 793 | macfb_setpalette = valkyrie_setpalette; |
805 | macfb_defined.activate = FB_ACTIVATE_NOW; | 794 | macfb_defined.activate = FB_ACTIVATE_NOW; |
806 | valkyrie_cmap_regs = ioremap(DAC_BASE, 0x1000); | 795 | valkyrie_cmap_regs = ioremap(DAC_BASE, 0x1000); |
@@ -823,7 +812,7 @@ static int __init macfb_init(void) | |||
823 | case MAC_MODEL_Q700: | 812 | case MAC_MODEL_Q700: |
824 | case MAC_MODEL_Q900: | 813 | case MAC_MODEL_Q900: |
825 | case MAC_MODEL_Q950: | 814 | case MAC_MODEL_Q950: |
826 | strcat( macfb_fix.id, "DAFB built-in" ); | 815 | strcpy(macfb_fix.id, "DAFB"); |
827 | macfb_setpalette = dafb_setpalette; | 816 | macfb_setpalette = dafb_setpalette; |
828 | macfb_defined.activate = FB_ACTIVATE_NOW; | 817 | macfb_defined.activate = FB_ACTIVATE_NOW; |
829 | dafb_cmap_regs = ioremap(DAFB_BASE, 0x1000); | 818 | dafb_cmap_regs = ioremap(DAFB_BASE, 0x1000); |
@@ -831,7 +820,7 @@ static int __init macfb_init(void) | |||
831 | 820 | ||
832 | /* LC II uses the V8 framebuffer */ | 821 | /* LC II uses the V8 framebuffer */ |
833 | case MAC_MODEL_LCII: | 822 | case MAC_MODEL_LCII: |
834 | strcat( macfb_fix.id, "V8 built-in" ); | 823 | strcpy(macfb_fix.id, "V8"); |
835 | macfb_setpalette = v8_brazil_setpalette; | 824 | macfb_setpalette = v8_brazil_setpalette; |
836 | macfb_defined.activate = FB_ACTIVATE_NOW; | 825 | macfb_defined.activate = FB_ACTIVATE_NOW; |
837 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); | 826 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); |
@@ -843,7 +832,7 @@ static int __init macfb_init(void) | |||
843 | case MAC_MODEL_IIVI: | 832 | case MAC_MODEL_IIVI: |
844 | case MAC_MODEL_IIVX: | 833 | case MAC_MODEL_IIVX: |
845 | case MAC_MODEL_P600: | 834 | case MAC_MODEL_P600: |
846 | strcat( macfb_fix.id, "Brazil built-in" ); | 835 | strcpy(macfb_fix.id, "Brazil"); |
847 | macfb_setpalette = v8_brazil_setpalette; | 836 | macfb_setpalette = v8_brazil_setpalette; |
848 | macfb_defined.activate = FB_ACTIVATE_NOW; | 837 | macfb_defined.activate = FB_ACTIVATE_NOW; |
849 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); | 838 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); |
@@ -860,7 +849,7 @@ static int __init macfb_init(void) | |||
860 | case MAC_MODEL_P460: | 849 | case MAC_MODEL_P460: |
861 | macfb_setpalette = v8_brazil_setpalette; | 850 | macfb_setpalette = v8_brazil_setpalette; |
862 | macfb_defined.activate = FB_ACTIVATE_NOW; | 851 | macfb_defined.activate = FB_ACTIVATE_NOW; |
863 | strcat( macfb_fix.id, "Sonora built-in" ); | 852 | strcpy(macfb_fix.id, "Sonora"); |
864 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); | 853 | v8_brazil_cmap_regs = ioremap(DAC_BASE, 0x1000); |
865 | break; | 854 | break; |
866 | 855 | ||
@@ -871,7 +860,7 @@ static int __init macfb_init(void) | |||
871 | case MAC_MODEL_IISI: | 860 | case MAC_MODEL_IISI: |
872 | macfb_setpalette = rbv_setpalette; | 861 | macfb_setpalette = rbv_setpalette; |
873 | macfb_defined.activate = FB_ACTIVATE_NOW; | 862 | macfb_defined.activate = FB_ACTIVATE_NOW; |
874 | strcat( macfb_fix.id, "RBV built-in" ); | 863 | strcpy(macfb_fix.id, "RBV"); |
875 | rbv_cmap_regs = ioremap(DAC_BASE, 0x1000); | 864 | rbv_cmap_regs = ioremap(DAC_BASE, 0x1000); |
876 | break; | 865 | break; |
877 | 866 | ||
@@ -880,7 +869,7 @@ static int __init macfb_init(void) | |||
880 | case MAC_MODEL_C660: | 869 | case MAC_MODEL_C660: |
881 | macfb_setpalette = civic_setpalette; | 870 | macfb_setpalette = civic_setpalette; |
882 | macfb_defined.activate = FB_ACTIVATE_NOW; | 871 | macfb_defined.activate = FB_ACTIVATE_NOW; |
883 | strcat( macfb_fix.id, "Civic built-in" ); | 872 | strcpy(macfb_fix.id, "Civic"); |
884 | civic_cmap_regs = ioremap(CIVIC_BASE, 0x1000); | 873 | civic_cmap_regs = ioremap(CIVIC_BASE, 0x1000); |
885 | break; | 874 | break; |
886 | 875 | ||
@@ -901,7 +890,7 @@ static int __init macfb_init(void) | |||
901 | v8_brazil_cmap_regs = | 890 | v8_brazil_cmap_regs = |
902 | ioremap(DAC_BASE, 0x1000); | 891 | ioremap(DAC_BASE, 0x1000); |
903 | } | 892 | } |
904 | strcat( macfb_fix.id, "LC built-in" ); | 893 | strcpy(macfb_fix.id, "LC"); |
905 | break; | 894 | break; |
906 | /* We think this may be like the LC II */ | 895 | /* We think this may be like the LC II */ |
907 | case MAC_MODEL_CCL: | 896 | case MAC_MODEL_CCL: |
@@ -911,18 +900,18 @@ static int __init macfb_init(void) | |||
911 | v8_brazil_cmap_regs = | 900 | v8_brazil_cmap_regs = |
912 | ioremap(DAC_BASE, 0x1000); | 901 | ioremap(DAC_BASE, 0x1000); |
913 | } | 902 | } |
914 | strcat( macfb_fix.id, "Color Classic built-in" ); | 903 | strcpy(macfb_fix.id, "Color Classic"); |
915 | break; | 904 | break; |
916 | 905 | ||
917 | /* And we *do* mean "weirdos" */ | 906 | /* And we *do* mean "weirdos" */ |
918 | case MAC_MODEL_TV: | 907 | case MAC_MODEL_TV: |
919 | strcat( macfb_fix.id, "Mac TV built-in" ); | 908 | strcpy(macfb_fix.id, "Mac TV"); |
920 | break; | 909 | break; |
921 | 910 | ||
922 | /* These don't have colour, so no need to worry */ | 911 | /* These don't have colour, so no need to worry */ |
923 | case MAC_MODEL_SE30: | 912 | case MAC_MODEL_SE30: |
924 | case MAC_MODEL_CLII: | 913 | case MAC_MODEL_CLII: |
925 | strcat( macfb_fix.id, "Monochrome built-in" ); | 914 | strcpy(macfb_fix.id, "Monochrome"); |
926 | break; | 915 | break; |
927 | 916 | ||
928 | /* Powerbooks are particularly difficult. Many of | 917 | /* Powerbooks are particularly difficult. Many of |
@@ -935,7 +924,7 @@ static int __init macfb_init(void) | |||
935 | case MAC_MODEL_PB140: | 924 | case MAC_MODEL_PB140: |
936 | case MAC_MODEL_PB145: | 925 | case MAC_MODEL_PB145: |
937 | case MAC_MODEL_PB170: | 926 | case MAC_MODEL_PB170: |
938 | strcat( macfb_fix.id, "DDC built-in" ); | 927 | strcpy(macfb_fix.id, "DDC"); |
939 | break; | 928 | break; |
940 | 929 | ||
941 | /* Internal is GSC, External (if present) is ViSC */ | 930 | /* Internal is GSC, External (if present) is ViSC */ |
@@ -945,13 +934,13 @@ static int __init macfb_init(void) | |||
945 | case MAC_MODEL_PB180: | 934 | case MAC_MODEL_PB180: |
946 | case MAC_MODEL_PB210: | 935 | case MAC_MODEL_PB210: |
947 | case MAC_MODEL_PB230: | 936 | case MAC_MODEL_PB230: |
948 | strcat( macfb_fix.id, "GSC built-in" ); | 937 | strcpy(macfb_fix.id, "GSC"); |
949 | break; | 938 | break; |
950 | 939 | ||
951 | /* Internal is TIM, External is ViSC */ | 940 | /* Internal is TIM, External is ViSC */ |
952 | case MAC_MODEL_PB165C: | 941 | case MAC_MODEL_PB165C: |
953 | case MAC_MODEL_PB180C: | 942 | case MAC_MODEL_PB180C: |
954 | strcat( macfb_fix.id, "TIM built-in" ); | 943 | strcpy(macfb_fix.id, "TIM"); |
955 | break; | 944 | break; |
956 | 945 | ||
957 | /* Internal is CSC, External is Keystone+Ariel. */ | 946 | /* Internal is CSC, External is Keystone+Ariel. */ |
@@ -963,12 +952,12 @@ static int __init macfb_init(void) | |||
963 | case MAC_MODEL_PB280C: | 952 | case MAC_MODEL_PB280C: |
964 | macfb_setpalette = csc_setpalette; | 953 | macfb_setpalette = csc_setpalette; |
965 | macfb_defined.activate = FB_ACTIVATE_NOW; | 954 | macfb_defined.activate = FB_ACTIVATE_NOW; |
966 | strcat( macfb_fix.id, "CSC built-in" ); | 955 | strcpy(macfb_fix.id, "CSC"); |
967 | csc_cmap_regs = ioremap(CSC_BASE, 0x1000); | 956 | csc_cmap_regs = ioremap(CSC_BASE, 0x1000); |
968 | break; | 957 | break; |
969 | 958 | ||
970 | default: | 959 | default: |
971 | strcat( macfb_fix.id, "Unknown/Unsupported built-in" ); | 960 | strcpy(macfb_fix.id, "Unknown"); |
972 | break; | 961 | break; |
973 | } | 962 | } |
974 | 963 | ||
@@ -978,16 +967,23 @@ static int __init macfb_init(void) | |||
978 | fb_info.pseudo_palette = pseudo_palette; | 967 | fb_info.pseudo_palette = pseudo_palette; |
979 | fb_info.flags = FBINFO_DEFAULT; | 968 | fb_info.flags = FBINFO_DEFAULT; |
980 | 969 | ||
981 | fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0); | 970 | err = fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0); |
971 | if (err) | ||
972 | goto fail_unmap; | ||
982 | 973 | ||
983 | err = register_framebuffer(&fb_info); | 974 | err = register_framebuffer(&fb_info); |
984 | if (!err) | 975 | if (err) |
985 | printk("fb%d: %s frame buffer device\n", | 976 | goto fail_dealloc; |
986 | fb_info.node, fb_info.fix.id); | 977 | |
987 | else { | 978 | printk("fb%d: %s frame buffer device\n", |
988 | iounmap(fb_info.screen_base); | 979 | fb_info.node, fb_info.fix.id); |
989 | iounmap_macfb(); | 980 | return 0; |
990 | } | 981 | |
982 | fail_dealloc: | ||
983 | fb_dealloc_cmap(&fb_info.cmap); | ||
984 | fail_unmap: | ||
985 | iounmap(fb_info.screen_base); | ||
986 | iounmap_macfb(); | ||
991 | return err; | 987 | return err; |
992 | } | 988 | } |
993 | 989 | ||
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index a3765e0be4a8..763c1ea5dce5 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <linux/bootmem.h> | 40 | #include <linux/bootmem.h> |
41 | #include <linux/slab.h> | 41 | #include <linux/slab.h> |
42 | #include <asm/desc.h> | 42 | #include <asm/desc.h> |
43 | #include <asm/cacheflush.h> | ||
43 | 44 | ||
44 | #define PCI_BIOS32_SD_VALUE 0x5F32335F /* "_32_" */ | 45 | #define PCI_BIOS32_SD_VALUE 0x5F32335F /* "_32_" */ |
45 | #define CRU_BIOS_SIGNATURE_VALUE 0x55524324 | 46 | #define CRU_BIOS_SIGNATURE_VALUE 0x55524324 |
@@ -394,6 +395,8 @@ static void __devinit dmi_find_cru(const struct dmi_header *dm) | |||
394 | smbios_cru64_ptr->double_offset; | 395 | smbios_cru64_ptr->double_offset; |
395 | cru_rom_addr = ioremap(cru_physical_address, | 396 | cru_rom_addr = ioremap(cru_physical_address, |
396 | smbios_cru64_ptr->double_length); | 397 | smbios_cru64_ptr->double_length); |
398 | set_memory_x((unsigned long)cru_rom_addr & PAGE_MASK, | ||
399 | smbios_cru64_ptr->double_length >> PAGE_SHIFT); | ||
397 | } | 400 | } |
398 | } | 401 | } |
399 | } | 402 | } |
@@ -482,7 +485,7 @@ static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason, | |||
482 | "Management Log for details.\n"); | 485 | "Management Log for details.\n"); |
483 | } | 486 | } |
484 | 487 | ||
485 | return NOTIFY_STOP; | 488 | return NOTIFY_OK; |
486 | } | 489 | } |
487 | 490 | ||
488 | /* | 491 | /* |
diff --git a/drivers/watchdog/iTCO_vendor_support.c b/drivers/watchdog/iTCO_vendor_support.c index ca344a85eb95..2474ebca88f6 100644 --- a/drivers/watchdog/iTCO_vendor_support.c +++ b/drivers/watchdog/iTCO_vendor_support.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * intel TCO vendor specific watchdog driver support | 2 | * intel TCO vendor specific watchdog driver support |
3 | * | 3 | * |
4 | * (c) Copyright 2006 Wim Van Sebroeck <wim@iguana.be>. | 4 | * (c) Copyright 2006-2008 Wim Van Sebroeck <wim@iguana.be>. |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
@@ -19,8 +19,7 @@ | |||
19 | 19 | ||
20 | /* Module and version information */ | 20 | /* Module and version information */ |
21 | #define DRV_NAME "iTCO_vendor_support" | 21 | #define DRV_NAME "iTCO_vendor_support" |
22 | #define DRV_VERSION "1.01" | 22 | #define DRV_VERSION "1.02" |
23 | #define DRV_RELDATE "11-Nov-2006" | ||
24 | #define PFX DRV_NAME ": " | 23 | #define PFX DRV_NAME ": " |
25 | 24 | ||
26 | /* Includes */ | 25 | /* Includes */ |
@@ -78,24 +77,6 @@ MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default=0 (n | |||
78 | * 20.6 seconds. | 77 | * 20.6 seconds. |
79 | */ | 78 | */ |
80 | 79 | ||
81 | static void supermicro_old_pre_start(unsigned long acpibase) | ||
82 | { | ||
83 | unsigned long val32; | ||
84 | |||
85 | val32 = inl(SMI_EN); | ||
86 | val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */ | ||
87 | outl(val32, SMI_EN); /* Needed to activate watchdog */ | ||
88 | } | ||
89 | |||
90 | static void supermicro_old_pre_stop(unsigned long acpibase) | ||
91 | { | ||
92 | unsigned long val32; | ||
93 | |||
94 | val32 = inl(SMI_EN); | ||
95 | val32 &= 0x00002000; /* Turn on SMI clearing watchdog */ | ||
96 | outl(val32, SMI_EN); /* Needed to deactivate watchdog */ | ||
97 | } | ||
98 | |||
99 | static void supermicro_old_pre_keepalive(unsigned long acpibase) | 80 | static void supermicro_old_pre_keepalive(unsigned long acpibase) |
100 | { | 81 | { |
101 | /* Reload TCO Timer (done in iTCO_wdt_keepalive) + */ | 82 | /* Reload TCO Timer (done in iTCO_wdt_keepalive) + */ |
@@ -247,18 +228,14 @@ static void supermicro_new_pre_set_heartbeat(unsigned int heartbeat) | |||
247 | void iTCO_vendor_pre_start(unsigned long acpibase, | 228 | void iTCO_vendor_pre_start(unsigned long acpibase, |
248 | unsigned int heartbeat) | 229 | unsigned int heartbeat) |
249 | { | 230 | { |
250 | if (vendorsupport == SUPERMICRO_OLD_BOARD) | 231 | if (vendorsupport == SUPERMICRO_NEW_BOARD) |
251 | supermicro_old_pre_start(acpibase); | ||
252 | else if (vendorsupport == SUPERMICRO_NEW_BOARD) | ||
253 | supermicro_new_pre_start(heartbeat); | 232 | supermicro_new_pre_start(heartbeat); |
254 | } | 233 | } |
255 | EXPORT_SYMBOL(iTCO_vendor_pre_start); | 234 | EXPORT_SYMBOL(iTCO_vendor_pre_start); |
256 | 235 | ||
257 | void iTCO_vendor_pre_stop(unsigned long acpibase) | 236 | void iTCO_vendor_pre_stop(unsigned long acpibase) |
258 | { | 237 | { |
259 | if (vendorsupport == SUPERMICRO_OLD_BOARD) | 238 | if (vendorsupport == SUPERMICRO_NEW_BOARD) |
260 | supermicro_old_pre_stop(acpibase); | ||
261 | else if (vendorsupport == SUPERMICRO_NEW_BOARD) | ||
262 | supermicro_new_pre_stop(); | 239 | supermicro_new_pre_stop(); |
263 | } | 240 | } |
264 | EXPORT_SYMBOL(iTCO_vendor_pre_stop); | 241 | EXPORT_SYMBOL(iTCO_vendor_pre_stop); |
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index bfb93bc2ca9f..5b395a4ddfdf 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * intel TCO Watchdog Driver (Used in i82801 and i6300ESB chipsets) | 2 | * intel TCO Watchdog Driver (Used in i82801 and i6300ESB chipsets) |
3 | * | 3 | * |
4 | * (c) Copyright 2006-2007 Wim Van Sebroeck <wim@iguana.be>. | 4 | * (c) Copyright 2006-2008 Wim Van Sebroeck <wim@iguana.be>. |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
@@ -20,34 +20,41 @@ | |||
20 | * 82801BAM (ICH2-M) : document number 290687-002, 298242-027, | 20 | * 82801BAM (ICH2-M) : document number 290687-002, 298242-027, |
21 | * 82801CA (ICH3-S) : document number 290733-003, 290739-013, | 21 | * 82801CA (ICH3-S) : document number 290733-003, 290739-013, |
22 | * 82801CAM (ICH3-M) : document number 290716-001, 290718-007, | 22 | * 82801CAM (ICH3-M) : document number 290716-001, 290718-007, |
23 | * 82801DB (ICH4) : document number 290744-001, 290745-020, | 23 | * 82801DB (ICH4) : document number 290744-001, 290745-025, |
24 | * 82801DBM (ICH4-M) : document number 252337-001, 252663-005, | 24 | * 82801DBM (ICH4-M) : document number 252337-001, 252663-008, |
25 | * 82801E (C-ICH) : document number 273599-001, 273645-002, | 25 | * 82801E (C-ICH) : document number 273599-001, 273645-002, |
26 | * 82801EB (ICH5) : document number 252516-001, 252517-003, | 26 | * 82801EB (ICH5) : document number 252516-001, 252517-028, |
27 | * 82801ER (ICH5R) : document number 252516-001, 252517-003, | 27 | * 82801ER (ICH5R) : document number 252516-001, 252517-028, |
28 | * 82801FB (ICH6) : document number 301473-002, 301474-007, | 28 | * 6300ESB (6300ESB) : document number 300641-004, 300884-013, |
29 | * 82801FR (ICH6R) : document number 301473-002, 301474-007, | 29 | * 82801FB (ICH6) : document number 301473-002, 301474-026, |
30 | * 82801FBM (ICH6-M) : document number 301473-002, 301474-007, | 30 | * 82801FR (ICH6R) : document number 301473-002, 301474-026, |
31 | * 82801FW (ICH6W) : document number 301473-001, 301474-007, | 31 | * 82801FBM (ICH6-M) : document number 301473-002, 301474-026, |
32 | * 82801FRW (ICH6RW) : document number 301473-001, 301474-007, | 32 | * 82801FW (ICH6W) : document number 301473-001, 301474-026, |
33 | * 82801GB (ICH7) : document number 307013-002, 307014-009, | 33 | * 82801FRW (ICH6RW) : document number 301473-001, 301474-026, |
34 | * 82801GR (ICH7R) : document number 307013-002, 307014-009, | 34 | * 631xESB (631xESB) : document number 313082-001, 313075-006, |
35 | * 82801GDH (ICH7DH) : document number 307013-002, 307014-009, | 35 | * 632xESB (632xESB) : document number 313082-001, 313075-006, |
36 | * 82801GBM (ICH7-M) : document number 307013-002, 307014-009, | 36 | * 82801GB (ICH7) : document number 307013-003, 307014-024, |
37 | * 82801GHM (ICH7-M DH) : document number 307013-002, 307014-009, | 37 | * 82801GR (ICH7R) : document number 307013-003, 307014-024, |
38 | * 82801HB (ICH8) : document number 313056-003, 313057-009, | 38 | * 82801GDH (ICH7DH) : document number 307013-003, 307014-024, |
39 | * 82801HR (ICH8R) : document number 313056-003, 313057-009, | 39 | * 82801GBM (ICH7-M) : document number 307013-003, 307014-024, |
40 | * 82801HBM (ICH8M) : document number 313056-003, 313057-009, | 40 | * 82801GHM (ICH7-M DH) : document number 307013-003, 307014-024, |
41 | * 82801HH (ICH8DH) : document number 313056-003, 313057-009, | 41 | * 82801GU (ICH7-U) : document number 307013-003, 307014-024, |
42 | * 82801HO (ICH8DO) : document number 313056-003, 313057-009, | 42 | * 82801HB (ICH8) : document number 313056-003, 313057-017, |
43 | * 82801HEM (ICH8M-E) : document number 313056-003, 313057-009, | 43 | * 82801HR (ICH8R) : document number 313056-003, 313057-017, |
44 | * 82801IB (ICH9) : document number 316972-001, 316973-006, | 44 | * 82801HBM (ICH8M) : document number 313056-003, 313057-017, |
45 | * 82801IR (ICH9R) : document number 316972-001, 316973-006, | 45 | * 82801HH (ICH8DH) : document number 313056-003, 313057-017, |
46 | * 82801IH (ICH9DH) : document number 316972-001, 316973-006, | 46 | * 82801HO (ICH8DO) : document number 313056-003, 313057-017, |
47 | * 82801IO (ICH9DO) : document number 316972-001, 316973-006, | 47 | * 82801HEM (ICH8M-E) : document number 313056-003, 313057-017, |
48 | * 6300ESB (6300ESB) : document number 300641-003, 300884-010, | 48 | * 82801IB (ICH9) : document number 316972-004, 316973-012, |
49 | * 631xESB (631xESB) : document number 313082-001, 313075-005, | 49 | * 82801IR (ICH9R) : document number 316972-004, 316973-012, |
50 | * 632xESB (632xESB) : document number 313082-001, 313075-005 | 50 | * 82801IH (ICH9DH) : document number 316972-004, 316973-012, |
51 | * 82801IO (ICH9DO) : document number 316972-004, 316973-012, | ||
52 | * 82801IBM (ICH9M) : document number 316972-004, 316973-012, | ||
53 | * 82801IEM (ICH9M-E) : document number 316972-004, 316973-012, | ||
54 | * 82801JIB (ICH10) : document number 319973-002, 319974-002, | ||
55 | * 82801JIR (ICH10R) : document number 319973-002, 319974-002, | ||
56 | * 82801JD (ICH10D) : document number 319973-002, 319974-002, | ||
57 | * 82801JDO (ICH10DO) : document number 319973-002, 319974-002 | ||
51 | */ | 58 | */ |
52 | 59 | ||
53 | /* | 60 | /* |
@@ -56,8 +63,7 @@ | |||
56 | 63 | ||
57 | /* Module and version information */ | 64 | /* Module and version information */ |
58 | #define DRV_NAME "iTCO_wdt" | 65 | #define DRV_NAME "iTCO_wdt" |
59 | #define DRV_VERSION "1.03" | 66 | #define DRV_VERSION "1.04" |
60 | #define DRV_RELDATE "30-Apr-2008" | ||
61 | #define PFX DRV_NAME ": " | 67 | #define PFX DRV_NAME ": " |
62 | 68 | ||
63 | /* Includes */ | 69 | /* Includes */ |
@@ -96,19 +102,26 @@ enum iTCO_chipsets { | |||
96 | TCO_ICH6, /* ICH6 & ICH6R */ | 102 | TCO_ICH6, /* ICH6 & ICH6R */ |
97 | TCO_ICH6M, /* ICH6-M */ | 103 | TCO_ICH6M, /* ICH6-M */ |
98 | TCO_ICH6W, /* ICH6W & ICH6RW */ | 104 | TCO_ICH6W, /* ICH6W & ICH6RW */ |
105 | TCO_631XESB, /* 631xESB/632xESB */ | ||
99 | TCO_ICH7, /* ICH7 & ICH7R */ | 106 | TCO_ICH7, /* ICH7 & ICH7R */ |
100 | TCO_ICH7M, /* ICH7-M */ | 107 | TCO_ICH7DH, /* ICH7DH */ |
108 | TCO_ICH7M, /* ICH7-M & ICH7-U */ | ||
101 | TCO_ICH7MDH, /* ICH7-M DH */ | 109 | TCO_ICH7MDH, /* ICH7-M DH */ |
102 | TCO_ICH8, /* ICH8 & ICH8R */ | 110 | TCO_ICH8, /* ICH8 & ICH8R */ |
103 | TCO_ICH8ME, /* ICH8M-E */ | ||
104 | TCO_ICH8DH, /* ICH8DH */ | 111 | TCO_ICH8DH, /* ICH8DH */ |
105 | TCO_ICH8DO, /* ICH8DO */ | 112 | TCO_ICH8DO, /* ICH8DO */ |
106 | TCO_ICH8M, /* ICH8M */ | 113 | TCO_ICH8M, /* ICH8M */ |
114 | TCO_ICH8ME, /* ICH8M-E */ | ||
107 | TCO_ICH9, /* ICH9 */ | 115 | TCO_ICH9, /* ICH9 */ |
108 | TCO_ICH9R, /* ICH9R */ | 116 | TCO_ICH9R, /* ICH9R */ |
109 | TCO_ICH9DH, /* ICH9DH */ | 117 | TCO_ICH9DH, /* ICH9DH */ |
110 | TCO_ICH9DO, /* ICH9DO */ | 118 | TCO_ICH9DO, /* ICH9DO */ |
111 | TCO_631XESB, /* 631xESB/632xESB */ | 119 | TCO_ICH9M, /* ICH9M */ |
120 | TCO_ICH9ME, /* ICH9M-E */ | ||
121 | TCO_ICH10, /* ICH10 */ | ||
122 | TCO_ICH10R, /* ICH10R */ | ||
123 | TCO_ICH10D, /* ICH10D */ | ||
124 | TCO_ICH10DO, /* ICH10DO */ | ||
112 | }; | 125 | }; |
113 | 126 | ||
114 | static struct { | 127 | static struct { |
@@ -129,19 +142,26 @@ static struct { | |||
129 | {"ICH6 or ICH6R", 2}, | 142 | {"ICH6 or ICH6R", 2}, |
130 | {"ICH6-M", 2}, | 143 | {"ICH6-M", 2}, |
131 | {"ICH6W or ICH6RW", 2}, | 144 | {"ICH6W or ICH6RW", 2}, |
145 | {"631xESB/632xESB", 2}, | ||
132 | {"ICH7 or ICH7R", 2}, | 146 | {"ICH7 or ICH7R", 2}, |
133 | {"ICH7-M", 2}, | 147 | {"ICH7DH", 2}, |
148 | {"ICH7-M or ICH7-U", 2}, | ||
134 | {"ICH7-M DH", 2}, | 149 | {"ICH7-M DH", 2}, |
135 | {"ICH8 or ICH8R", 2}, | 150 | {"ICH8 or ICH8R", 2}, |
136 | {"ICH8M-E", 2}, | ||
137 | {"ICH8DH", 2}, | 151 | {"ICH8DH", 2}, |
138 | {"ICH8DO", 2}, | 152 | {"ICH8DO", 2}, |
139 | {"ICH8M", 2}, | 153 | {"ICH8M", 2}, |
154 | {"ICH8M-E", 2}, | ||
140 | {"ICH9", 2}, | 155 | {"ICH9", 2}, |
141 | {"ICH9R", 2}, | 156 | {"ICH9R", 2}, |
142 | {"ICH9DH", 2}, | 157 | {"ICH9DH", 2}, |
143 | {"ICH9DO", 2}, | 158 | {"ICH9DO", 2}, |
144 | {"631xESB/632xESB", 2}, | 159 | {"ICH9M", 2}, |
160 | {"ICH9M-E", 2}, | ||
161 | {"ICH10", 2}, | ||
162 | {"ICH10R", 2}, | ||
163 | {"ICH10D", 2}, | ||
164 | {"ICH10DO", 2}, | ||
145 | {NULL, 0} | 165 | {NULL, 0} |
146 | }; | 166 | }; |
147 | 167 | ||
@@ -175,18 +195,6 @@ static struct pci_device_id iTCO_wdt_pci_tbl[] = { | |||
175 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH6_0, TCO_ICH6)}, | 195 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH6_0, TCO_ICH6)}, |
176 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH6_1, TCO_ICH6M)}, | 196 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH6_1, TCO_ICH6M)}, |
177 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH6_2, TCO_ICH6W)}, | 197 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH6_2, TCO_ICH6W)}, |
178 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH7_0, TCO_ICH7)}, | ||
179 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH7_1, TCO_ICH7M)}, | ||
180 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH7_31, TCO_ICH7MDH)}, | ||
181 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_0, TCO_ICH8)}, | ||
182 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_1, TCO_ICH8ME)}, | ||
183 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_2, TCO_ICH8DH)}, | ||
184 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_3, TCO_ICH8DO)}, | ||
185 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_4, TCO_ICH8M)}, | ||
186 | { ITCO_PCI_DEVICE(0x2918, TCO_ICH9)}, | ||
187 | { ITCO_PCI_DEVICE(0x2916, TCO_ICH9R)}, | ||
188 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_2, TCO_ICH9DH)}, | ||
189 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_4, TCO_ICH9DO)}, | ||
190 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ESB2_0, TCO_631XESB)}, | 198 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ESB2_0, TCO_631XESB)}, |
191 | { ITCO_PCI_DEVICE(0x2671, TCO_631XESB)}, | 199 | { ITCO_PCI_DEVICE(0x2671, TCO_631XESB)}, |
192 | { ITCO_PCI_DEVICE(0x2672, TCO_631XESB)}, | 200 | { ITCO_PCI_DEVICE(0x2672, TCO_631XESB)}, |
@@ -203,6 +211,25 @@ static struct pci_device_id iTCO_wdt_pci_tbl[] = { | |||
203 | { ITCO_PCI_DEVICE(0x267d, TCO_631XESB)}, | 211 | { ITCO_PCI_DEVICE(0x267d, TCO_631XESB)}, |
204 | { ITCO_PCI_DEVICE(0x267e, TCO_631XESB)}, | 212 | { ITCO_PCI_DEVICE(0x267e, TCO_631XESB)}, |
205 | { ITCO_PCI_DEVICE(0x267f, TCO_631XESB)}, | 213 | { ITCO_PCI_DEVICE(0x267f, TCO_631XESB)}, |
214 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH7_0, TCO_ICH7)}, | ||
215 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH7_30, TCO_ICH7DH)}, | ||
216 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH7_1, TCO_ICH7M)}, | ||
217 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH7_31, TCO_ICH7MDH)}, | ||
218 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_0, TCO_ICH8)}, | ||
219 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_2, TCO_ICH8DH)}, | ||
220 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_3, TCO_ICH8DO)}, | ||
221 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_4, TCO_ICH8M)}, | ||
222 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH8_1, TCO_ICH8ME)}, | ||
223 | { ITCO_PCI_DEVICE(0x2918, TCO_ICH9)}, | ||
224 | { ITCO_PCI_DEVICE(0x2916, TCO_ICH9R)}, | ||
225 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_2, TCO_ICH9DH)}, | ||
226 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_4, TCO_ICH9DO)}, | ||
227 | { ITCO_PCI_DEVICE(0x2919, TCO_ICH9M)}, | ||
228 | { ITCO_PCI_DEVICE(0x2917, TCO_ICH9ME)}, | ||
229 | { ITCO_PCI_DEVICE(0x3a18, TCO_ICH10)}, | ||
230 | { ITCO_PCI_DEVICE(0x3a16, TCO_ICH10R)}, | ||
231 | { ITCO_PCI_DEVICE(0x3a1a, TCO_ICH10D)}, | ||
232 | { ITCO_PCI_DEVICE(0x3a14, TCO_ICH10DO)}, | ||
206 | { 0, }, /* End of list */ | 233 | { 0, }, /* End of list */ |
207 | }; | 234 | }; |
208 | MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl); | 235 | MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl); |
@@ -311,6 +338,7 @@ static int iTCO_wdt_unset_NO_REBOOT_bit(void) | |||
311 | static int iTCO_wdt_start(void) | 338 | static int iTCO_wdt_start(void) |
312 | { | 339 | { |
313 | unsigned int val; | 340 | unsigned int val; |
341 | unsigned long val32; | ||
314 | 342 | ||
315 | spin_lock(&iTCO_wdt_private.io_lock); | 343 | spin_lock(&iTCO_wdt_private.io_lock); |
316 | 344 | ||
@@ -323,6 +351,18 @@ static int iTCO_wdt_start(void) | |||
323 | return -EIO; | 351 | return -EIO; |
324 | } | 352 | } |
325 | 353 | ||
354 | /* Bit 13: TCO_EN -> 0 = Disables TCO logic generating an SMI# */ | ||
355 | val32 = inl(SMI_EN); | ||
356 | val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */ | ||
357 | outl(val32, SMI_EN); | ||
358 | |||
359 | /* Force the timer to its reload value by writing to the TCO_RLD | ||
360 | register */ | ||
361 | if (iTCO_wdt_private.iTCO_version == 2) | ||
362 | outw(0x01, TCO_RLD); | ||
363 | else if (iTCO_wdt_private.iTCO_version == 1) | ||
364 | outb(0x01, TCO_RLD); | ||
365 | |||
326 | /* Bit 11: TCO Timer Halt -> 0 = The TCO timer is enabled to count */ | 366 | /* Bit 11: TCO Timer Halt -> 0 = The TCO timer is enabled to count */ |
327 | val = inw(TCO1_CNT); | 367 | val = inw(TCO1_CNT); |
328 | val &= 0xf7ff; | 368 | val &= 0xf7ff; |
@@ -338,6 +378,7 @@ static int iTCO_wdt_start(void) | |||
338 | static int iTCO_wdt_stop(void) | 378 | static int iTCO_wdt_stop(void) |
339 | { | 379 | { |
340 | unsigned int val; | 380 | unsigned int val; |
381 | unsigned long val32; | ||
341 | 382 | ||
342 | spin_lock(&iTCO_wdt_private.io_lock); | 383 | spin_lock(&iTCO_wdt_private.io_lock); |
343 | 384 | ||
@@ -349,6 +390,11 @@ static int iTCO_wdt_stop(void) | |||
349 | outw(val, TCO1_CNT); | 390 | outw(val, TCO1_CNT); |
350 | val = inw(TCO1_CNT); | 391 | val = inw(TCO1_CNT); |
351 | 392 | ||
393 | /* Bit 13: TCO_EN -> 1 = Enables the TCO logic to generate SMI# */ | ||
394 | val32 = inl(SMI_EN); | ||
395 | val32 |= 0x00002000; | ||
396 | outl(val32, SMI_EN); | ||
397 | |||
352 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ | 398 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ |
353 | iTCO_wdt_set_NO_REBOOT_bit(); | 399 | iTCO_wdt_set_NO_REBOOT_bit(); |
354 | 400 | ||
@@ -459,7 +505,6 @@ static int iTCO_wdt_open(struct inode *inode, struct file *file) | |||
459 | /* | 505 | /* |
460 | * Reload and activate timer | 506 | * Reload and activate timer |
461 | */ | 507 | */ |
462 | iTCO_wdt_keepalive(); | ||
463 | iTCO_wdt_start(); | 508 | iTCO_wdt_start(); |
464 | return nonseekable_open(inode, file); | 509 | return nonseekable_open(inode, file); |
465 | } | 510 | } |
@@ -604,7 +649,6 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
604 | int ret; | 649 | int ret; |
605 | u32 base_address; | 650 | u32 base_address; |
606 | unsigned long RCBA; | 651 | unsigned long RCBA; |
607 | unsigned long val32; | ||
608 | 652 | ||
609 | /* | 653 | /* |
610 | * Find the ACPI/PM base I/O address which is the base | 654 | * Find the ACPI/PM base I/O address which is the base |
@@ -644,17 +688,13 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
644 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ | 688 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ |
645 | iTCO_wdt_set_NO_REBOOT_bit(); | 689 | iTCO_wdt_set_NO_REBOOT_bit(); |
646 | 690 | ||
647 | /* Set the TCO_EN bit in SMI_EN register */ | 691 | /* The TCO logic uses the TCO_EN bit in the SMI_EN register */ |
648 | if (!request_region(SMI_EN, 4, "iTCO_wdt")) { | 692 | if (!request_region(SMI_EN, 4, "iTCO_wdt")) { |
649 | printk(KERN_ERR PFX | 693 | printk(KERN_ERR PFX |
650 | "I/O address 0x%04lx already in use\n", SMI_EN); | 694 | "I/O address 0x%04lx already in use\n", SMI_EN); |
651 | ret = -EIO; | 695 | ret = -EIO; |
652 | goto out; | 696 | goto out; |
653 | } | 697 | } |
654 | val32 = inl(SMI_EN); | ||
655 | val32 &= 0xffffdfff; /* Turn off SMI clearing watchdog */ | ||
656 | outl(val32, SMI_EN); | ||
657 | release_region(SMI_EN, 4); | ||
658 | 698 | ||
659 | /* The TCO I/O registers reside in a 32-byte range pointed to | 699 | /* The TCO I/O registers reside in a 32-byte range pointed to |
660 | by the TCOBASE value */ | 700 | by the TCOBASE value */ |
@@ -662,7 +702,7 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
662 | printk(KERN_ERR PFX "I/O address 0x%04lx already in use\n", | 702 | printk(KERN_ERR PFX "I/O address 0x%04lx already in use\n", |
663 | TCOBASE); | 703 | TCOBASE); |
664 | ret = -EIO; | 704 | ret = -EIO; |
665 | goto out; | 705 | goto unreg_smi_en; |
666 | } | 706 | } |
667 | 707 | ||
668 | printk(KERN_INFO PFX | 708 | printk(KERN_INFO PFX |
@@ -672,8 +712,9 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
672 | TCOBASE); | 712 | TCOBASE); |
673 | 713 | ||
674 | /* Clear out the (probably old) status */ | 714 | /* Clear out the (probably old) status */ |
675 | outb(0, TCO1_STS); | 715 | outb(8, TCO1_STS); /* Clear the Time Out Status bit */ |
676 | outb(3, TCO2_STS); | 716 | outb(2, TCO2_STS); /* Clear SECOND_TO_STS bit */ |
717 | outb(4, TCO2_STS); /* Clear BOOT_STS bit */ | ||
677 | 718 | ||
678 | /* Make sure the watchdog is not running */ | 719 | /* Make sure the watchdog is not running */ |
679 | iTCO_wdt_stop(); | 720 | iTCO_wdt_stop(); |
@@ -701,6 +742,8 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, | |||
701 | 742 | ||
702 | unreg_region: | 743 | unreg_region: |
703 | release_region(TCOBASE, 0x20); | 744 | release_region(TCOBASE, 0x20); |
745 | unreg_smi_en: | ||
746 | release_region(SMI_EN, 4); | ||
704 | out: | 747 | out: |
705 | if (iTCO_wdt_private.iTCO_version == 2) | 748 | if (iTCO_wdt_private.iTCO_version == 2) |
706 | iounmap(iTCO_wdt_private.gcs); | 749 | iounmap(iTCO_wdt_private.gcs); |
@@ -718,6 +761,7 @@ static void __devexit iTCO_wdt_cleanup(void) | |||
718 | /* Deregister */ | 761 | /* Deregister */ |
719 | misc_deregister(&iTCO_wdt_miscdev); | 762 | misc_deregister(&iTCO_wdt_miscdev); |
720 | release_region(TCOBASE, 0x20); | 763 | release_region(TCOBASE, 0x20); |
764 | release_region(SMI_EN, 4); | ||
721 | if (iTCO_wdt_private.iTCO_version == 2) | 765 | if (iTCO_wdt_private.iTCO_version == 2) |
722 | iounmap(iTCO_wdt_private.gcs); | 766 | iounmap(iTCO_wdt_private.gcs); |
723 | pci_dev_put(iTCO_wdt_private.pdev); | 767 | pci_dev_put(iTCO_wdt_private.pdev); |
@@ -782,8 +826,8 @@ static int __init iTCO_wdt_init_module(void) | |||
782 | { | 826 | { |
783 | int err; | 827 | int err; |
784 | 828 | ||
785 | printk(KERN_INFO PFX "Intel TCO WatchDog Timer Driver v%s (%s)\n", | 829 | printk(KERN_INFO PFX "Intel TCO WatchDog Timer Driver v%s\n", |
786 | DRV_VERSION, DRV_RELDATE); | 830 | DRV_VERSION); |
787 | 831 | ||
788 | err = platform_driver_register(&iTCO_wdt_driver); | 832 | err = platform_driver_register(&iTCO_wdt_driver); |
789 | if (err) | 833 | if (err) |
diff --git a/drivers/watchdog/mtx-1_wdt.c b/drivers/watchdog/mtx-1_wdt.c index b4b7b0a4c119..3acce623f209 100644 --- a/drivers/watchdog/mtx-1_wdt.c +++ b/drivers/watchdog/mtx-1_wdt.c | |||
@@ -98,6 +98,8 @@ static void mtx1_wdt_reset(void) | |||
98 | 98 | ||
99 | static void mtx1_wdt_start(void) | 99 | static void mtx1_wdt_start(void) |
100 | { | 100 | { |
101 | unsigned long flags; | ||
102 | |||
101 | spin_lock_irqsave(&mtx1_wdt_device.lock, flags); | 103 | spin_lock_irqsave(&mtx1_wdt_device.lock, flags); |
102 | if (!mtx1_wdt_device.queue) { | 104 | if (!mtx1_wdt_device.queue) { |
103 | mtx1_wdt_device.queue = 1; | 105 | mtx1_wdt_device.queue = 1; |
@@ -110,6 +112,8 @@ static void mtx1_wdt_start(void) | |||
110 | 112 | ||
111 | static int mtx1_wdt_stop(void) | 113 | static int mtx1_wdt_stop(void) |
112 | { | 114 | { |
115 | unsigned long flags; | ||
116 | |||
113 | spin_lock_irqsave(&mtx1_wdt_device.lock, flags); | 117 | spin_lock_irqsave(&mtx1_wdt_device.lock, flags); |
114 | if (mtx1_wdt_device.queue) { | 118 | if (mtx1_wdt_device.queue) { |
115 | mtx1_wdt_device.queue = 0; | 119 | mtx1_wdt_device.queue = 0; |
@@ -26,8 +26,11 @@ | |||
26 | #include <linux/mempool.h> | 26 | #include <linux/mempool.h> |
27 | #include <linux/workqueue.h> | 27 | #include <linux/workqueue.h> |
28 | #include <linux/blktrace_api.h> | 28 | #include <linux/blktrace_api.h> |
29 | #include <trace/block.h> | ||
29 | #include <scsi/sg.h> /* for struct sg_iovec */ | 30 | #include <scsi/sg.h> /* for struct sg_iovec */ |
30 | 31 | ||
32 | DEFINE_TRACE(block_split); | ||
33 | |||
31 | static struct kmem_cache *bio_slab __read_mostly; | 34 | static struct kmem_cache *bio_slab __read_mostly; |
32 | 35 | ||
33 | static mempool_t *bio_split_pool __read_mostly; | 36 | static mempool_t *bio_split_pool __read_mostly; |
@@ -1263,7 +1266,7 @@ struct bio_pair *bio_split(struct bio *bi, int first_sectors) | |||
1263 | if (!bp) | 1266 | if (!bp) |
1264 | return bp; | 1267 | return bp; |
1265 | 1268 | ||
1266 | blk_add_trace_pdu_int(bdev_get_queue(bi->bi_bdev), BLK_TA_SPLIT, bi, | 1269 | trace_block_split(bdev_get_queue(bi->bi_bdev), bi, |
1267 | bi->bi_sector + first_sectors); | 1270 | bi->bi_sector + first_sectors); |
1268 | 1271 | ||
1269 | BUG_ON(bi->bi_vcnt != 1); | 1272 | BUG_ON(bi->bi_vcnt != 1); |
diff --git a/fs/lockd/host.c b/fs/lockd/host.c index 9fd8889097b7..70fc63a1727b 100644 --- a/fs/lockd/host.c +++ b/fs/lockd/host.c | |||
@@ -167,7 +167,8 @@ static struct nlm_host *nlm_lookup_host(struct nlm_lookup_host_info *ni) | |||
167 | continue; | 167 | continue; |
168 | if (host->h_server != ni->server) | 168 | if (host->h_server != ni->server) |
169 | continue; | 169 | continue; |
170 | if (!nlm_cmp_addr(nlm_srcaddr(host), ni->src_sap)) | 170 | if (ni->server && |
171 | !nlm_cmp_addr(nlm_srcaddr(host), ni->src_sap)) | ||
171 | continue; | 172 | continue; |
172 | 173 | ||
173 | /* Move to head of hash chain. */ | 174 | /* Move to head of hash chain. */ |
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c index c631a83931ce..56b076736b56 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c | |||
@@ -181,6 +181,7 @@ lockd(void *vrqstp) | |||
181 | } | 181 | } |
182 | flush_signals(current); | 182 | flush_signals(current); |
183 | cancel_delayed_work_sync(&grace_period_end); | 183 | cancel_delayed_work_sync(&grace_period_end); |
184 | locks_end_grace(&lockd_manager); | ||
184 | if (nlmsvc_ops) | 185 | if (nlmsvc_ops) |
185 | nlmsvc_invalidate_all(); | 186 | nlmsvc_invalidate_all(); |
186 | nlm_shutdown_hosts(); | 187 | nlm_shutdown_hosts(); |
diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c index bb93946ace22..b79ec930d9f1 100644 --- a/fs/nfsd/nfs4recover.c +++ b/fs/nfsd/nfs4recover.c | |||
@@ -225,12 +225,12 @@ nfsd4_list_rec_dir(struct dentry *dir, recdir_func *f) | |||
225 | return 0; | 225 | return 0; |
226 | 226 | ||
227 | nfs4_save_user(&uid, &gid); | 227 | nfs4_save_user(&uid, &gid); |
228 | INIT_LIST_HEAD(dentries); | ||
228 | 229 | ||
229 | filp = dentry_open(dget(dir), mntget(rec_dir.mnt), O_RDONLY); | 230 | filp = dentry_open(dget(dir), mntget(rec_dir.mnt), O_RDONLY); |
230 | status = PTR_ERR(filp); | 231 | status = PTR_ERR(filp); |
231 | if (IS_ERR(filp)) | 232 | if (IS_ERR(filp)) |
232 | goto out; | 233 | goto out; |
233 | INIT_LIST_HEAD(dentries); | ||
234 | status = vfs_readdir(filp, nfsd4_build_dentrylist, &dla); | 234 | status = vfs_readdir(filp, nfsd4_build_dentrylist, &dla); |
235 | fput(filp); | 235 | fput(filp); |
236 | while (!list_empty(dentries)) { | 236 | while (!list_empty(dentries)) { |
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index b0bebc552a11..1a052ac2bde9 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -3261,6 +3261,7 @@ nfs4_state_shutdown(void) | |||
3261 | { | 3261 | { |
3262 | cancel_rearming_delayed_workqueue(laundry_wq, &laundromat_work); | 3262 | cancel_rearming_delayed_workqueue(laundry_wq, &laundromat_work); |
3263 | destroy_workqueue(laundry_wq); | 3263 | destroy_workqueue(laundry_wq); |
3264 | locks_end_grace(&nfsd4_manager); | ||
3264 | nfs4_lock_state(); | 3265 | nfs4_lock_state(); |
3265 | nfs4_release_reclaim(); | 3266 | nfs4_release_reclaim(); |
3266 | __nfs4_state_shutdown(); | 3267 | __nfs4_state_shutdown(); |
diff --git a/fs/seq_file.c b/fs/seq_file.c index f03220d7891b..16c211558c22 100644 --- a/fs/seq_file.c +++ b/fs/seq_file.c | |||
@@ -387,7 +387,7 @@ char *mangle_path(char *s, char *p, char *esc) | |||
387 | } | 387 | } |
388 | return NULL; | 388 | return NULL; |
389 | } | 389 | } |
390 | EXPORT_SYMBOL_GPL(mangle_path); | 390 | EXPORT_SYMBOL(mangle_path); |
391 | 391 | ||
392 | /* | 392 | /* |
393 | * return the absolute path of 'dentry' residing in mount 'mnt'. | 393 | * return the absolute path of 'dentry' residing in mount 'mnt'. |
diff --git a/fs/ubifs/commit.c b/fs/ubifs/commit.c index 0a6aa2cc78f0..b49884c8c10e 100644 --- a/fs/ubifs/commit.c +++ b/fs/ubifs/commit.c | |||
@@ -234,8 +234,8 @@ int ubifs_bg_thread(void *info) | |||
234 | int err; | 234 | int err; |
235 | struct ubifs_info *c = info; | 235 | struct ubifs_info *c = info; |
236 | 236 | ||
237 | ubifs_msg("background thread \"%s\" started, PID %d", | 237 | dbg_msg("background thread \"%s\" started, PID %d", |
238 | c->bgt_name, current->pid); | 238 | c->bgt_name, current->pid); |
239 | set_freezable(); | 239 | set_freezable(); |
240 | 240 | ||
241 | while (1) { | 241 | while (1) { |
diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c index 7186400750e7..510ffa0bbda4 100644 --- a/fs/ubifs/debug.c +++ b/fs/ubifs/debug.c | |||
@@ -101,21 +101,24 @@ static void sprintf_key(const struct ubifs_info *c, const union ubifs_key *key, | |||
101 | if (c->key_fmt == UBIFS_SIMPLE_KEY_FMT) { | 101 | if (c->key_fmt == UBIFS_SIMPLE_KEY_FMT) { |
102 | switch (type) { | 102 | switch (type) { |
103 | case UBIFS_INO_KEY: | 103 | case UBIFS_INO_KEY: |
104 | sprintf(p, "(%lu, %s)", key_inum(c, key), | 104 | sprintf(p, "(%lu, %s)", (unsigned long)key_inum(c, key), |
105 | get_key_type(type)); | 105 | get_key_type(type)); |
106 | break; | 106 | break; |
107 | case UBIFS_DENT_KEY: | 107 | case UBIFS_DENT_KEY: |
108 | case UBIFS_XENT_KEY: | 108 | case UBIFS_XENT_KEY: |
109 | sprintf(p, "(%lu, %s, %#08x)", key_inum(c, key), | 109 | sprintf(p, "(%lu, %s, %#08x)", |
110 | (unsigned long)key_inum(c, key), | ||
110 | get_key_type(type), key_hash(c, key)); | 111 | get_key_type(type), key_hash(c, key)); |
111 | break; | 112 | break; |
112 | case UBIFS_DATA_KEY: | 113 | case UBIFS_DATA_KEY: |
113 | sprintf(p, "(%lu, %s, %u)", key_inum(c, key), | 114 | sprintf(p, "(%lu, %s, %u)", |
115 | (unsigned long)key_inum(c, key), | ||
114 | get_key_type(type), key_block(c, key)); | 116 | get_key_type(type), key_block(c, key)); |
115 | break; | 117 | break; |
116 | case UBIFS_TRUN_KEY: | 118 | case UBIFS_TRUN_KEY: |
117 | sprintf(p, "(%lu, %s)", | 119 | sprintf(p, "(%lu, %s)", |
118 | key_inum(c, key), get_key_type(type)); | 120 | (unsigned long)key_inum(c, key), |
121 | get_key_type(type)); | ||
119 | break; | 122 | break; |
120 | default: | 123 | default: |
121 | sprintf(p, "(bad key type: %#08x, %#08x)", | 124 | sprintf(p, "(bad key type: %#08x, %#08x)", |
@@ -364,8 +367,8 @@ void dbg_dump_node(const struct ubifs_info *c, const void *node) | |||
364 | le32_to_cpu(mst->ihead_lnum)); | 367 | le32_to_cpu(mst->ihead_lnum)); |
365 | printk(KERN_DEBUG "\tihead_offs %u\n", | 368 | printk(KERN_DEBUG "\tihead_offs %u\n", |
366 | le32_to_cpu(mst->ihead_offs)); | 369 | le32_to_cpu(mst->ihead_offs)); |
367 | printk(KERN_DEBUG "\tindex_size %u\n", | 370 | printk(KERN_DEBUG "\tindex_size %llu\n", |
368 | le32_to_cpu(mst->index_size)); | 371 | (unsigned long long)le64_to_cpu(mst->index_size)); |
369 | printk(KERN_DEBUG "\tlpt_lnum %u\n", | 372 | printk(KERN_DEBUG "\tlpt_lnum %u\n", |
370 | le32_to_cpu(mst->lpt_lnum)); | 373 | le32_to_cpu(mst->lpt_lnum)); |
371 | printk(KERN_DEBUG "\tlpt_offs %u\n", | 374 | printk(KERN_DEBUG "\tlpt_offs %u\n", |
@@ -1589,7 +1592,7 @@ static struct fsck_inode *add_inode(struct ubifs_info *c, | |||
1589 | 1592 | ||
1590 | if (inum > c->highest_inum) { | 1593 | if (inum > c->highest_inum) { |
1591 | ubifs_err("too high inode number, max. is %lu", | 1594 | ubifs_err("too high inode number, max. is %lu", |
1592 | c->highest_inum); | 1595 | (unsigned long)c->highest_inum); |
1593 | return ERR_PTR(-EINVAL); | 1596 | return ERR_PTR(-EINVAL); |
1594 | } | 1597 | } |
1595 | 1598 | ||
@@ -1668,16 +1671,18 @@ static struct fsck_inode *read_add_inode(struct ubifs_info *c, | |||
1668 | ino_key_init(c, &key, inum); | 1671 | ino_key_init(c, &key, inum); |
1669 | err = ubifs_lookup_level0(c, &key, &znode, &n); | 1672 | err = ubifs_lookup_level0(c, &key, &znode, &n); |
1670 | if (!err) { | 1673 | if (!err) { |
1671 | ubifs_err("inode %lu not found in index", inum); | 1674 | ubifs_err("inode %lu not found in index", (unsigned long)inum); |
1672 | return ERR_PTR(-ENOENT); | 1675 | return ERR_PTR(-ENOENT); |
1673 | } else if (err < 0) { | 1676 | } else if (err < 0) { |
1674 | ubifs_err("error %d while looking up inode %lu", err, inum); | 1677 | ubifs_err("error %d while looking up inode %lu", |
1678 | err, (unsigned long)inum); | ||
1675 | return ERR_PTR(err); | 1679 | return ERR_PTR(err); |
1676 | } | 1680 | } |
1677 | 1681 | ||
1678 | zbr = &znode->zbranch[n]; | 1682 | zbr = &znode->zbranch[n]; |
1679 | if (zbr->len < UBIFS_INO_NODE_SZ) { | 1683 | if (zbr->len < UBIFS_INO_NODE_SZ) { |
1680 | ubifs_err("bad node %lu node length %d", inum, zbr->len); | 1684 | ubifs_err("bad node %lu node length %d", |
1685 | (unsigned long)inum, zbr->len); | ||
1681 | return ERR_PTR(-EINVAL); | 1686 | return ERR_PTR(-EINVAL); |
1682 | } | 1687 | } |
1683 | 1688 | ||
@@ -1697,7 +1702,7 @@ static struct fsck_inode *read_add_inode(struct ubifs_info *c, | |||
1697 | kfree(ino); | 1702 | kfree(ino); |
1698 | if (IS_ERR(fscki)) { | 1703 | if (IS_ERR(fscki)) { |
1699 | ubifs_err("error %ld while adding inode %lu node", | 1704 | ubifs_err("error %ld while adding inode %lu node", |
1700 | PTR_ERR(fscki), inum); | 1705 | PTR_ERR(fscki), (unsigned long)inum); |
1701 | return fscki; | 1706 | return fscki; |
1702 | } | 1707 | } |
1703 | 1708 | ||
@@ -1786,7 +1791,8 @@ static int check_leaf(struct ubifs_info *c, struct ubifs_zbranch *zbr, | |||
1786 | if (IS_ERR(fscki)) { | 1791 | if (IS_ERR(fscki)) { |
1787 | err = PTR_ERR(fscki); | 1792 | err = PTR_ERR(fscki); |
1788 | ubifs_err("error %d while processing data node and " | 1793 | ubifs_err("error %d while processing data node and " |
1789 | "trying to find inode node %lu", err, inum); | 1794 | "trying to find inode node %lu", |
1795 | err, (unsigned long)inum); | ||
1790 | goto out_dump; | 1796 | goto out_dump; |
1791 | } | 1797 | } |
1792 | 1798 | ||
@@ -1819,7 +1825,8 @@ static int check_leaf(struct ubifs_info *c, struct ubifs_zbranch *zbr, | |||
1819 | if (IS_ERR(fscki)) { | 1825 | if (IS_ERR(fscki)) { |
1820 | err = PTR_ERR(fscki); | 1826 | err = PTR_ERR(fscki); |
1821 | ubifs_err("error %d while processing entry node and " | 1827 | ubifs_err("error %d while processing entry node and " |
1822 | "trying to find inode node %lu", err, inum); | 1828 | "trying to find inode node %lu", |
1829 | err, (unsigned long)inum); | ||
1823 | goto out_dump; | 1830 | goto out_dump; |
1824 | } | 1831 | } |
1825 | 1832 | ||
@@ -1832,7 +1839,7 @@ static int check_leaf(struct ubifs_info *c, struct ubifs_zbranch *zbr, | |||
1832 | err = PTR_ERR(fscki); | 1839 | err = PTR_ERR(fscki); |
1833 | ubifs_err("error %d while processing entry node and " | 1840 | ubifs_err("error %d while processing entry node and " |
1834 | "trying to find parent inode node %lu", | 1841 | "trying to find parent inode node %lu", |
1835 | err, inum); | 1842 | err, (unsigned long)inum); |
1836 | goto out_dump; | 1843 | goto out_dump; |
1837 | } | 1844 | } |
1838 | 1845 | ||
@@ -1923,7 +1930,8 @@ static int check_inodes(struct ubifs_info *c, struct fsck_data *fsckd) | |||
1923 | fscki->references != 1) { | 1930 | fscki->references != 1) { |
1924 | ubifs_err("directory inode %lu has %d " | 1931 | ubifs_err("directory inode %lu has %d " |
1925 | "direntries which refer it, but " | 1932 | "direntries which refer it, but " |
1926 | "should be 1", fscki->inum, | 1933 | "should be 1", |
1934 | (unsigned long)fscki->inum, | ||
1927 | fscki->references); | 1935 | fscki->references); |
1928 | goto out_dump; | 1936 | goto out_dump; |
1929 | } | 1937 | } |
@@ -1931,27 +1939,29 @@ static int check_inodes(struct ubifs_info *c, struct fsck_data *fsckd) | |||
1931 | fscki->references != 0) { | 1939 | fscki->references != 0) { |
1932 | ubifs_err("root inode %lu has non-zero (%d) " | 1940 | ubifs_err("root inode %lu has non-zero (%d) " |
1933 | "direntries which refer it", | 1941 | "direntries which refer it", |
1934 | fscki->inum, fscki->references); | 1942 | (unsigned long)fscki->inum, |
1943 | fscki->references); | ||
1935 | goto out_dump; | 1944 | goto out_dump; |
1936 | } | 1945 | } |
1937 | if (fscki->calc_sz != fscki->size) { | 1946 | if (fscki->calc_sz != fscki->size) { |
1938 | ubifs_err("directory inode %lu size is %lld, " | 1947 | ubifs_err("directory inode %lu size is %lld, " |
1939 | "but calculated size is %lld", | 1948 | "but calculated size is %lld", |
1940 | fscki->inum, fscki->size, | 1949 | (unsigned long)fscki->inum, |
1941 | fscki->calc_sz); | 1950 | fscki->size, fscki->calc_sz); |
1942 | goto out_dump; | 1951 | goto out_dump; |
1943 | } | 1952 | } |
1944 | if (fscki->calc_cnt != fscki->nlink) { | 1953 | if (fscki->calc_cnt != fscki->nlink) { |
1945 | ubifs_err("directory inode %lu nlink is %d, " | 1954 | ubifs_err("directory inode %lu nlink is %d, " |
1946 | "but calculated nlink is %d", | 1955 | "but calculated nlink is %d", |
1947 | fscki->inum, fscki->nlink, | 1956 | (unsigned long)fscki->inum, |
1948 | fscki->calc_cnt); | 1957 | fscki->nlink, fscki->calc_cnt); |
1949 | goto out_dump; | 1958 | goto out_dump; |
1950 | } | 1959 | } |
1951 | } else { | 1960 | } else { |
1952 | if (fscki->references != fscki->nlink) { | 1961 | if (fscki->references != fscki->nlink) { |
1953 | ubifs_err("inode %lu nlink is %d, but " | 1962 | ubifs_err("inode %lu nlink is %d, but " |
1954 | "calculated nlink is %d", fscki->inum, | 1963 | "calculated nlink is %d", |
1964 | (unsigned long)fscki->inum, | ||
1955 | fscki->nlink, fscki->references); | 1965 | fscki->nlink, fscki->references); |
1956 | goto out_dump; | 1966 | goto out_dump; |
1957 | } | 1967 | } |
@@ -1959,20 +1969,21 @@ static int check_inodes(struct ubifs_info *c, struct fsck_data *fsckd) | |||
1959 | if (fscki->xattr_sz != fscki->calc_xsz) { | 1969 | if (fscki->xattr_sz != fscki->calc_xsz) { |
1960 | ubifs_err("inode %lu has xattr size %u, but " | 1970 | ubifs_err("inode %lu has xattr size %u, but " |
1961 | "calculated size is %lld", | 1971 | "calculated size is %lld", |
1962 | fscki->inum, fscki->xattr_sz, | 1972 | (unsigned long)fscki->inum, fscki->xattr_sz, |
1963 | fscki->calc_xsz); | 1973 | fscki->calc_xsz); |
1964 | goto out_dump; | 1974 | goto out_dump; |
1965 | } | 1975 | } |
1966 | if (fscki->xattr_cnt != fscki->calc_xcnt) { | 1976 | if (fscki->xattr_cnt != fscki->calc_xcnt) { |
1967 | ubifs_err("inode %lu has %u xattrs, but " | 1977 | ubifs_err("inode %lu has %u xattrs, but " |
1968 | "calculated count is %lld", fscki->inum, | 1978 | "calculated count is %lld", |
1979 | (unsigned long)fscki->inum, | ||
1969 | fscki->xattr_cnt, fscki->calc_xcnt); | 1980 | fscki->xattr_cnt, fscki->calc_xcnt); |
1970 | goto out_dump; | 1981 | goto out_dump; |
1971 | } | 1982 | } |
1972 | if (fscki->xattr_nms != fscki->calc_xnms) { | 1983 | if (fscki->xattr_nms != fscki->calc_xnms) { |
1973 | ubifs_err("inode %lu has xattr names' size %u, but " | 1984 | ubifs_err("inode %lu has xattr names' size %u, but " |
1974 | "calculated names' size is %lld", | 1985 | "calculated names' size is %lld", |
1975 | fscki->inum, fscki->xattr_nms, | 1986 | (unsigned long)fscki->inum, fscki->xattr_nms, |
1976 | fscki->calc_xnms); | 1987 | fscki->calc_xnms); |
1977 | goto out_dump; | 1988 | goto out_dump; |
1978 | } | 1989 | } |
@@ -1985,11 +1996,12 @@ out_dump: | |||
1985 | ino_key_init(c, &key, fscki->inum); | 1996 | ino_key_init(c, &key, fscki->inum); |
1986 | err = ubifs_lookup_level0(c, &key, &znode, &n); | 1997 | err = ubifs_lookup_level0(c, &key, &znode, &n); |
1987 | if (!err) { | 1998 | if (!err) { |
1988 | ubifs_err("inode %lu not found in index", fscki->inum); | 1999 | ubifs_err("inode %lu not found in index", |
2000 | (unsigned long)fscki->inum); | ||
1989 | return -ENOENT; | 2001 | return -ENOENT; |
1990 | } else if (err < 0) { | 2002 | } else if (err < 0) { |
1991 | ubifs_err("error %d while looking up inode %lu", | 2003 | ubifs_err("error %d while looking up inode %lu", |
1992 | err, fscki->inum); | 2004 | err, (unsigned long)fscki->inum); |
1993 | return err; | 2005 | return err; |
1994 | } | 2006 | } |
1995 | 2007 | ||
@@ -2007,7 +2019,7 @@ out_dump: | |||
2007 | } | 2019 | } |
2008 | 2020 | ||
2009 | ubifs_msg("dump of the inode %lu sitting in LEB %d:%d", | 2021 | ubifs_msg("dump of the inode %lu sitting in LEB %d:%d", |
2010 | fscki->inum, zbr->lnum, zbr->offs); | 2022 | (unsigned long)fscki->inum, zbr->lnum, zbr->offs); |
2011 | dbg_dump_node(c, ino); | 2023 | dbg_dump_node(c, ino); |
2012 | kfree(ino); | 2024 | kfree(ino); |
2013 | return -EINVAL; | 2025 | return -EINVAL; |
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c index 526c01ec8003..0422c98e1793 100644 --- a/fs/ubifs/dir.c +++ b/fs/ubifs/dir.c | |||
@@ -161,7 +161,7 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir, | |||
161 | return ERR_PTR(-EINVAL); | 161 | return ERR_PTR(-EINVAL); |
162 | } | 162 | } |
163 | ubifs_warn("running out of inode numbers (current %lu, max %d)", | 163 | ubifs_warn("running out of inode numbers (current %lu, max %d)", |
164 | c->highest_inum, INUM_WATERMARK); | 164 | (unsigned long)c->highest_inum, INUM_WATERMARK); |
165 | } | 165 | } |
166 | 166 | ||
167 | inode->i_ino = ++c->highest_inum; | 167 | inode->i_ino = ++c->highest_inum; |
@@ -428,7 +428,8 @@ static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir) | |||
428 | dbg_gen("feed '%s', ino %llu, new f_pos %#x", | 428 | dbg_gen("feed '%s', ino %llu, new f_pos %#x", |
429 | dent->name, (unsigned long long)le64_to_cpu(dent->inum), | 429 | dent->name, (unsigned long long)le64_to_cpu(dent->inum), |
430 | key_hash_flash(c, &dent->key)); | 430 | key_hash_flash(c, &dent->key)); |
431 | ubifs_assert(dent->ch.sqnum > ubifs_inode(dir)->creat_sqnum); | 431 | ubifs_assert(le64_to_cpu(dent->ch.sqnum) > |
432 | ubifs_inode(dir)->creat_sqnum); | ||
432 | 433 | ||
433 | nm.len = le16_to_cpu(dent->nlen); | 434 | nm.len = le16_to_cpu(dent->nlen); |
434 | over = filldir(dirent, dent->name, nm.len, file->f_pos, | 435 | over = filldir(dirent, dent->name, nm.len, file->f_pos, |
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index 51cf511d44d9..2624411d9758 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c | |||
@@ -72,7 +72,7 @@ static int read_block(struct inode *inode, void *addr, unsigned int block, | |||
72 | return err; | 72 | return err; |
73 | } | 73 | } |
74 | 74 | ||
75 | ubifs_assert(dn->ch.sqnum > ubifs_inode(inode)->creat_sqnum); | 75 | ubifs_assert(le64_to_cpu(dn->ch.sqnum) > ubifs_inode(inode)->creat_sqnum); |
76 | 76 | ||
77 | len = le32_to_cpu(dn->size); | 77 | len = le32_to_cpu(dn->size); |
78 | if (len <= 0 || len > UBIFS_BLOCK_SIZE) | 78 | if (len <= 0 || len > UBIFS_BLOCK_SIZE) |
@@ -626,7 +626,7 @@ static int populate_page(struct ubifs_info *c, struct page *page, | |||
626 | 626 | ||
627 | dn = bu->buf + (bu->zbranch[nn].offs - offs); | 627 | dn = bu->buf + (bu->zbranch[nn].offs - offs); |
628 | 628 | ||
629 | ubifs_assert(dn->ch.sqnum > | 629 | ubifs_assert(le64_to_cpu(dn->ch.sqnum) > |
630 | ubifs_inode(inode)->creat_sqnum); | 630 | ubifs_inode(inode)->creat_sqnum); |
631 | 631 | ||
632 | len = le32_to_cpu(dn->size); | 632 | len = le32_to_cpu(dn->size); |
@@ -691,32 +691,22 @@ out_err: | |||
691 | /** | 691 | /** |
692 | * ubifs_do_bulk_read - do bulk-read. | 692 | * ubifs_do_bulk_read - do bulk-read. |
693 | * @c: UBIFS file-system description object | 693 | * @c: UBIFS file-system description object |
694 | * @page1: first page | 694 | * @bu: bulk-read information |
695 | * @page1: first page to read | ||
695 | * | 696 | * |
696 | * This function returns %1 if the bulk-read is done, otherwise %0 is returned. | 697 | * This function returns %1 if the bulk-read is done, otherwise %0 is returned. |
697 | */ | 698 | */ |
698 | static int ubifs_do_bulk_read(struct ubifs_info *c, struct page *page1) | 699 | static int ubifs_do_bulk_read(struct ubifs_info *c, struct bu_info *bu, |
700 | struct page *page1) | ||
699 | { | 701 | { |
700 | pgoff_t offset = page1->index, end_index; | 702 | pgoff_t offset = page1->index, end_index; |
701 | struct address_space *mapping = page1->mapping; | 703 | struct address_space *mapping = page1->mapping; |
702 | struct inode *inode = mapping->host; | 704 | struct inode *inode = mapping->host; |
703 | struct ubifs_inode *ui = ubifs_inode(inode); | 705 | struct ubifs_inode *ui = ubifs_inode(inode); |
704 | struct bu_info *bu; | ||
705 | int err, page_idx, page_cnt, ret = 0, n = 0; | 706 | int err, page_idx, page_cnt, ret = 0, n = 0; |
707 | int allocate = bu->buf ? 0 : 1; | ||
706 | loff_t isize; | 708 | loff_t isize; |
707 | 709 | ||
708 | bu = kmalloc(sizeof(struct bu_info), GFP_NOFS); | ||
709 | if (!bu) | ||
710 | return 0; | ||
711 | |||
712 | bu->buf_len = c->bulk_read_buf_size; | ||
713 | bu->buf = kmalloc(bu->buf_len, GFP_NOFS); | ||
714 | if (!bu->buf) | ||
715 | goto out_free; | ||
716 | |||
717 | data_key_init(c, &bu->key, inode->i_ino, | ||
718 | offset << UBIFS_BLOCKS_PER_PAGE_SHIFT); | ||
719 | |||
720 | err = ubifs_tnc_get_bu_keys(c, bu); | 710 | err = ubifs_tnc_get_bu_keys(c, bu); |
721 | if (err) | 711 | if (err) |
722 | goto out_warn; | 712 | goto out_warn; |
@@ -735,12 +725,25 @@ static int ubifs_do_bulk_read(struct ubifs_info *c, struct page *page1) | |||
735 | * together. If all the pages were like this, bulk-read would | 725 | * together. If all the pages were like this, bulk-read would |
736 | * reduce performance, so we turn it off for a while. | 726 | * reduce performance, so we turn it off for a while. |
737 | */ | 727 | */ |
738 | ui->read_in_a_row = 0; | 728 | goto out_bu_off; |
739 | ui->bulk_read = 0; | ||
740 | goto out_free; | ||
741 | } | 729 | } |
742 | 730 | ||
743 | if (bu->cnt) { | 731 | if (bu->cnt) { |
732 | if (allocate) { | ||
733 | /* | ||
734 | * Allocate bulk-read buffer depending on how many data | ||
735 | * nodes we are going to read. | ||
736 | */ | ||
737 | bu->buf_len = bu->zbranch[bu->cnt - 1].offs + | ||
738 | bu->zbranch[bu->cnt - 1].len - | ||
739 | bu->zbranch[0].offs; | ||
740 | ubifs_assert(bu->buf_len > 0); | ||
741 | ubifs_assert(bu->buf_len <= c->leb_size); | ||
742 | bu->buf = kmalloc(bu->buf_len, GFP_NOFS | __GFP_NOWARN); | ||
743 | if (!bu->buf) | ||
744 | goto out_bu_off; | ||
745 | } | ||
746 | |||
744 | err = ubifs_tnc_bulk_read(c, bu); | 747 | err = ubifs_tnc_bulk_read(c, bu); |
745 | if (err) | 748 | if (err) |
746 | goto out_warn; | 749 | goto out_warn; |
@@ -779,13 +782,17 @@ static int ubifs_do_bulk_read(struct ubifs_info *c, struct page *page1) | |||
779 | ui->last_page_read = offset + page_idx - 1; | 782 | ui->last_page_read = offset + page_idx - 1; |
780 | 783 | ||
781 | out_free: | 784 | out_free: |
782 | kfree(bu->buf); | 785 | if (allocate) |
783 | kfree(bu); | 786 | kfree(bu->buf); |
784 | return ret; | 787 | return ret; |
785 | 788 | ||
786 | out_warn: | 789 | out_warn: |
787 | ubifs_warn("ignoring error %d and skipping bulk-read", err); | 790 | ubifs_warn("ignoring error %d and skipping bulk-read", err); |
788 | goto out_free; | 791 | goto out_free; |
792 | |||
793 | out_bu_off: | ||
794 | ui->read_in_a_row = ui->bulk_read = 0; | ||
795 | goto out_free; | ||
789 | } | 796 | } |
790 | 797 | ||
791 | /** | 798 | /** |
@@ -803,18 +810,20 @@ static int ubifs_bulk_read(struct page *page) | |||
803 | struct ubifs_info *c = inode->i_sb->s_fs_info; | 810 | struct ubifs_info *c = inode->i_sb->s_fs_info; |
804 | struct ubifs_inode *ui = ubifs_inode(inode); | 811 | struct ubifs_inode *ui = ubifs_inode(inode); |
805 | pgoff_t index = page->index, last_page_read = ui->last_page_read; | 812 | pgoff_t index = page->index, last_page_read = ui->last_page_read; |
806 | int ret = 0; | 813 | struct bu_info *bu; |
814 | int err = 0, allocated = 0; | ||
807 | 815 | ||
808 | ui->last_page_read = index; | 816 | ui->last_page_read = index; |
809 | |||
810 | if (!c->bulk_read) | 817 | if (!c->bulk_read) |
811 | return 0; | 818 | return 0; |
819 | |||
812 | /* | 820 | /* |
813 | * Bulk-read is protected by ui_mutex, but it is an optimization, so | 821 | * Bulk-read is protected by @ui->ui_mutex, but it is an optimization, |
814 | * don't bother if we cannot lock the mutex. | 822 | * so don't bother if we cannot lock the mutex. |
815 | */ | 823 | */ |
816 | if (!mutex_trylock(&ui->ui_mutex)) | 824 | if (!mutex_trylock(&ui->ui_mutex)) |
817 | return 0; | 825 | return 0; |
826 | |||
818 | if (index != last_page_read + 1) { | 827 | if (index != last_page_read + 1) { |
819 | /* Turn off bulk-read if we stop reading sequentially */ | 828 | /* Turn off bulk-read if we stop reading sequentially */ |
820 | ui->read_in_a_row = 1; | 829 | ui->read_in_a_row = 1; |
@@ -822,6 +831,7 @@ static int ubifs_bulk_read(struct page *page) | |||
822 | ui->bulk_read = 0; | 831 | ui->bulk_read = 0; |
823 | goto out_unlock; | 832 | goto out_unlock; |
824 | } | 833 | } |
834 | |||
825 | if (!ui->bulk_read) { | 835 | if (!ui->bulk_read) { |
826 | ui->read_in_a_row += 1; | 836 | ui->read_in_a_row += 1; |
827 | if (ui->read_in_a_row < 3) | 837 | if (ui->read_in_a_row < 3) |
@@ -829,10 +839,35 @@ static int ubifs_bulk_read(struct page *page) | |||
829 | /* Three reads in a row, so switch on bulk-read */ | 839 | /* Three reads in a row, so switch on bulk-read */ |
830 | ui->bulk_read = 1; | 840 | ui->bulk_read = 1; |
831 | } | 841 | } |
832 | ret = ubifs_do_bulk_read(c, page); | 842 | |
843 | /* | ||
844 | * If possible, try to use pre-allocated bulk-read information, which | ||
845 | * is protected by @c->bu_mutex. | ||
846 | */ | ||
847 | if (mutex_trylock(&c->bu_mutex)) | ||
848 | bu = &c->bu; | ||
849 | else { | ||
850 | bu = kmalloc(sizeof(struct bu_info), GFP_NOFS | __GFP_NOWARN); | ||
851 | if (!bu) | ||
852 | goto out_unlock; | ||
853 | |||
854 | bu->buf = NULL; | ||
855 | allocated = 1; | ||
856 | } | ||
857 | |||
858 | bu->buf_len = c->max_bu_buf_len; | ||
859 | data_key_init(c, &bu->key, inode->i_ino, | ||
860 | page->index << UBIFS_BLOCKS_PER_PAGE_SHIFT); | ||
861 | err = ubifs_do_bulk_read(c, bu, page); | ||
862 | |||
863 | if (!allocated) | ||
864 | mutex_unlock(&c->bu_mutex); | ||
865 | else | ||
866 | kfree(bu); | ||
867 | |||
833 | out_unlock: | 868 | out_unlock: |
834 | mutex_unlock(&ui->ui_mutex); | 869 | mutex_unlock(&ui->ui_mutex); |
835 | return ret; | 870 | return err; |
836 | } | 871 | } |
837 | 872 | ||
838 | static int ubifs_readpage(struct file *file, struct page *page) | 873 | static int ubifs_readpage(struct file *file, struct page *page) |
diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c index 22993f867d19..f91b745908ea 100644 --- a/fs/ubifs/journal.c +++ b/fs/ubifs/journal.c | |||
@@ -690,8 +690,9 @@ int ubifs_jnl_write_data(struct ubifs_info *c, const struct inode *inode, | |||
690 | int dlen = UBIFS_DATA_NODE_SZ + UBIFS_BLOCK_SIZE * WORST_COMPR_FACTOR; | 690 | int dlen = UBIFS_DATA_NODE_SZ + UBIFS_BLOCK_SIZE * WORST_COMPR_FACTOR; |
691 | struct ubifs_inode *ui = ubifs_inode(inode); | 691 | struct ubifs_inode *ui = ubifs_inode(inode); |
692 | 692 | ||
693 | dbg_jnl("ino %lu, blk %u, len %d, key %s", key_inum(c, key), | 693 | dbg_jnl("ino %lu, blk %u, len %d, key %s", |
694 | key_block(c, key), len, DBGKEY(key)); | 694 | (unsigned long)key_inum(c, key), key_block(c, key), len, |
695 | DBGKEY(key)); | ||
695 | ubifs_assert(len <= UBIFS_BLOCK_SIZE); | 696 | ubifs_assert(len <= UBIFS_BLOCK_SIZE); |
696 | 697 | ||
697 | data = kmalloc(dlen, GFP_NOFS); | 698 | data = kmalloc(dlen, GFP_NOFS); |
@@ -1128,7 +1129,8 @@ int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode, | |||
1128 | ino_t inum = inode->i_ino; | 1129 | ino_t inum = inode->i_ino; |
1129 | unsigned int blk; | 1130 | unsigned int blk; |
1130 | 1131 | ||
1131 | dbg_jnl("ino %lu, size %lld -> %lld", inum, old_size, new_size); | 1132 | dbg_jnl("ino %lu, size %lld -> %lld", |
1133 | (unsigned long)inum, old_size, new_size); | ||
1132 | ubifs_assert(!ui->data_len); | 1134 | ubifs_assert(!ui->data_len); |
1133 | ubifs_assert(S_ISREG(inode->i_mode)); | 1135 | ubifs_assert(S_ISREG(inode->i_mode)); |
1134 | ubifs_assert(mutex_is_locked(&ui->ui_mutex)); | 1136 | ubifs_assert(mutex_is_locked(&ui->ui_mutex)); |
diff --git a/fs/ubifs/key.h b/fs/ubifs/key.h index 9ee65086f627..3f1f16bc25c9 100644 --- a/fs/ubifs/key.h +++ b/fs/ubifs/key.h | |||
@@ -345,7 +345,7 @@ static inline int key_type_flash(const struct ubifs_info *c, const void *k) | |||
345 | { | 345 | { |
346 | const union ubifs_key *key = k; | 346 | const union ubifs_key *key = k; |
347 | 347 | ||
348 | return le32_to_cpu(key->u32[1]) >> UBIFS_S_KEY_BLOCK_BITS; | 348 | return le32_to_cpu(key->j32[1]) >> UBIFS_S_KEY_BLOCK_BITS; |
349 | } | 349 | } |
350 | 350 | ||
351 | /** | 351 | /** |
@@ -416,7 +416,7 @@ static inline unsigned int key_block_flash(const struct ubifs_info *c, | |||
416 | { | 416 | { |
417 | const union ubifs_key *key = k; | 417 | const union ubifs_key *key = k; |
418 | 418 | ||
419 | return le32_to_cpu(key->u32[1]) & UBIFS_S_KEY_BLOCK_MASK; | 419 | return le32_to_cpu(key->j32[1]) & UBIFS_S_KEY_BLOCK_MASK; |
420 | } | 420 | } |
421 | 421 | ||
422 | /** | 422 | /** |
diff --git a/fs/ubifs/lpt_commit.c b/fs/ubifs/lpt_commit.c index eed5a0025d63..a41434b42785 100644 --- a/fs/ubifs/lpt_commit.c +++ b/fs/ubifs/lpt_commit.c | |||
@@ -571,8 +571,6 @@ static struct ubifs_pnode *next_pnode(struct ubifs_info *c, | |||
571 | /* We assume here that LEB zero is never an LPT LEB */ | 571 | /* We assume here that LEB zero is never an LPT LEB */ |
572 | if (nnode->nbranch[iip].lnum) | 572 | if (nnode->nbranch[iip].lnum) |
573 | return ubifs_get_pnode(c, nnode, iip); | 573 | return ubifs_get_pnode(c, nnode, iip); |
574 | else | ||
575 | return NULL; | ||
576 | } | 574 | } |
577 | 575 | ||
578 | /* Go up while can't go right */ | 576 | /* Go up while can't go right */ |
diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c index 02d3462f4d3e..9bd5a43d4526 100644 --- a/fs/ubifs/orphan.c +++ b/fs/ubifs/orphan.c | |||
@@ -105,7 +105,7 @@ int ubifs_add_orphan(struct ubifs_info *c, ino_t inum) | |||
105 | list_add_tail(&orphan->list, &c->orph_list); | 105 | list_add_tail(&orphan->list, &c->orph_list); |
106 | list_add_tail(&orphan->new_list, &c->orph_new); | 106 | list_add_tail(&orphan->new_list, &c->orph_new); |
107 | spin_unlock(&c->orphan_lock); | 107 | spin_unlock(&c->orphan_lock); |
108 | dbg_gen("ino %lu", inum); | 108 | dbg_gen("ino %lu", (unsigned long)inum); |
109 | return 0; | 109 | return 0; |
110 | } | 110 | } |
111 | 111 | ||
@@ -132,14 +132,16 @@ void ubifs_delete_orphan(struct ubifs_info *c, ino_t inum) | |||
132 | else { | 132 | else { |
133 | if (o->dnext) { | 133 | if (o->dnext) { |
134 | spin_unlock(&c->orphan_lock); | 134 | spin_unlock(&c->orphan_lock); |
135 | dbg_gen("deleted twice ino %lu", inum); | 135 | dbg_gen("deleted twice ino %lu", |
136 | (unsigned long)inum); | ||
136 | return; | 137 | return; |
137 | } | 138 | } |
138 | if (o->cnext) { | 139 | if (o->cnext) { |
139 | o->dnext = c->orph_dnext; | 140 | o->dnext = c->orph_dnext; |
140 | c->orph_dnext = o; | 141 | c->orph_dnext = o; |
141 | spin_unlock(&c->orphan_lock); | 142 | spin_unlock(&c->orphan_lock); |
142 | dbg_gen("delete later ino %lu", inum); | 143 | dbg_gen("delete later ino %lu", |
144 | (unsigned long)inum); | ||
143 | return; | 145 | return; |
144 | } | 146 | } |
145 | rb_erase(p, &c->orph_tree); | 147 | rb_erase(p, &c->orph_tree); |
@@ -151,12 +153,12 @@ void ubifs_delete_orphan(struct ubifs_info *c, ino_t inum) | |||
151 | } | 153 | } |
152 | spin_unlock(&c->orphan_lock); | 154 | spin_unlock(&c->orphan_lock); |
153 | kfree(o); | 155 | kfree(o); |
154 | dbg_gen("inum %lu", inum); | 156 | dbg_gen("inum %lu", (unsigned long)inum); |
155 | return; | 157 | return; |
156 | } | 158 | } |
157 | } | 159 | } |
158 | spin_unlock(&c->orphan_lock); | 160 | spin_unlock(&c->orphan_lock); |
159 | dbg_err("missing orphan ino %lu", inum); | 161 | dbg_err("missing orphan ino %lu", (unsigned long)inum); |
160 | dbg_dump_stack(); | 162 | dbg_dump_stack(); |
161 | } | 163 | } |
162 | 164 | ||
@@ -448,7 +450,7 @@ static void erase_deleted(struct ubifs_info *c) | |||
448 | rb_erase(&orphan->rb, &c->orph_tree); | 450 | rb_erase(&orphan->rb, &c->orph_tree); |
449 | list_del(&orphan->list); | 451 | list_del(&orphan->list); |
450 | c->tot_orphans -= 1; | 452 | c->tot_orphans -= 1; |
451 | dbg_gen("deleting orphan ino %lu", orphan->inum); | 453 | dbg_gen("deleting orphan ino %lu", (unsigned long)orphan->inum); |
452 | kfree(orphan); | 454 | kfree(orphan); |
453 | } | 455 | } |
454 | c->orph_dnext = NULL; | 456 | c->orph_dnext = NULL; |
@@ -536,8 +538,8 @@ static int insert_dead_orphan(struct ubifs_info *c, ino_t inum) | |||
536 | list_add_tail(&orphan->list, &c->orph_list); | 538 | list_add_tail(&orphan->list, &c->orph_list); |
537 | orphan->dnext = c->orph_dnext; | 539 | orphan->dnext = c->orph_dnext; |
538 | c->orph_dnext = orphan; | 540 | c->orph_dnext = orphan; |
539 | dbg_mnt("ino %lu, new %d, tot %d", | 541 | dbg_mnt("ino %lu, new %d, tot %d", (unsigned long)inum, |
540 | inum, c->new_orphans, c->tot_orphans); | 542 | c->new_orphans, c->tot_orphans); |
541 | return 0; | 543 | return 0; |
542 | } | 544 | } |
543 | 545 | ||
@@ -609,7 +611,8 @@ static int do_kill_orphans(struct ubifs_info *c, struct ubifs_scan_leb *sleb, | |||
609 | n = (le32_to_cpu(orph->ch.len) - UBIFS_ORPH_NODE_SZ) >> 3; | 611 | n = (le32_to_cpu(orph->ch.len) - UBIFS_ORPH_NODE_SZ) >> 3; |
610 | for (i = 0; i < n; i++) { | 612 | for (i = 0; i < n; i++) { |
611 | inum = le64_to_cpu(orph->inos[i]); | 613 | inum = le64_to_cpu(orph->inos[i]); |
612 | dbg_rcvry("deleting orphaned inode %lu", inum); | 614 | dbg_rcvry("deleting orphaned inode %lu", |
615 | (unsigned long)inum); | ||
613 | err = ubifs_tnc_remove_ino(c, inum); | 616 | err = ubifs_tnc_remove_ino(c, inum); |
614 | if (err) | 617 | if (err) |
615 | return err; | 618 | return err; |
@@ -840,8 +843,8 @@ static int dbg_orphan_check(struct ubifs_info *c, struct ubifs_zbranch *zbr, | |||
840 | if (inum != ci->last_ino) { | 843 | if (inum != ci->last_ino) { |
841 | /* Lowest node type is the inode node, so it comes first */ | 844 | /* Lowest node type is the inode node, so it comes first */ |
842 | if (key_type(c, &zbr->key) != UBIFS_INO_KEY) | 845 | if (key_type(c, &zbr->key) != UBIFS_INO_KEY) |
843 | ubifs_err("found orphan node ino %lu, type %d", inum, | 846 | ubifs_err("found orphan node ino %lu, type %d", |
844 | key_type(c, &zbr->key)); | 847 | (unsigned long)inum, key_type(c, &zbr->key)); |
845 | ci->last_ino = inum; | 848 | ci->last_ino = inum; |
846 | ci->tot_inos += 1; | 849 | ci->tot_inos += 1; |
847 | err = ubifs_tnc_read_node(c, zbr, ci->node); | 850 | err = ubifs_tnc_read_node(c, zbr, ci->node); |
@@ -853,7 +856,8 @@ static int dbg_orphan_check(struct ubifs_info *c, struct ubifs_zbranch *zbr, | |||
853 | /* Must be recorded as an orphan */ | 856 | /* Must be recorded as an orphan */ |
854 | if (!dbg_find_check_orphan(&ci->root, inum) && | 857 | if (!dbg_find_check_orphan(&ci->root, inum) && |
855 | !dbg_find_orphan(c, inum)) { | 858 | !dbg_find_orphan(c, inum)) { |
856 | ubifs_err("missing orphan, ino %lu", inum); | 859 | ubifs_err("missing orphan, ino %lu", |
860 | (unsigned long)inum); | ||
857 | ci->missing += 1; | 861 | ci->missing += 1; |
858 | } | 862 | } |
859 | } | 863 | } |
diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c index 77d26c141cf6..90acac603e63 100644 --- a/fs/ubifs/recovery.c +++ b/fs/ubifs/recovery.c | |||
@@ -168,12 +168,12 @@ static int write_rcvrd_mst_node(struct ubifs_info *c, | |||
168 | struct ubifs_mst_node *mst) | 168 | struct ubifs_mst_node *mst) |
169 | { | 169 | { |
170 | int err = 0, lnum = UBIFS_MST_LNUM, sz = c->mst_node_alsz; | 170 | int err = 0, lnum = UBIFS_MST_LNUM, sz = c->mst_node_alsz; |
171 | uint32_t save_flags; | 171 | __le32 save_flags; |
172 | 172 | ||
173 | dbg_rcvry("recovery"); | 173 | dbg_rcvry("recovery"); |
174 | 174 | ||
175 | save_flags = mst->flags; | 175 | save_flags = mst->flags; |
176 | mst->flags = cpu_to_le32(le32_to_cpu(mst->flags) | UBIFS_MST_RCVRY); | 176 | mst->flags |= cpu_to_le32(UBIFS_MST_RCVRY); |
177 | 177 | ||
178 | ubifs_prepare_node(c, mst, UBIFS_MST_NODE_SZ, 1); | 178 | ubifs_prepare_node(c, mst, UBIFS_MST_NODE_SZ, 1); |
179 | err = ubi_leb_change(c->ubi, lnum, mst, sz, UBI_SHORTTERM); | 179 | err = ubi_leb_change(c->ubi, lnum, mst, sz, UBI_SHORTTERM); |
@@ -1435,13 +1435,13 @@ static int fix_size_in_place(struct ubifs_info *c, struct size_entry *e) | |||
1435 | err = ubi_leb_change(c->ubi, lnum, c->sbuf, len, UBI_UNKNOWN); | 1435 | err = ubi_leb_change(c->ubi, lnum, c->sbuf, len, UBI_UNKNOWN); |
1436 | if (err) | 1436 | if (err) |
1437 | goto out; | 1437 | goto out; |
1438 | dbg_rcvry("inode %lu at %d:%d size %lld -> %lld ", e->inum, lnum, offs, | 1438 | dbg_rcvry("inode %lu at %d:%d size %lld -> %lld ", |
1439 | i_size, e->d_size); | 1439 | (unsigned long)e->inum, lnum, offs, i_size, e->d_size); |
1440 | return 0; | 1440 | return 0; |
1441 | 1441 | ||
1442 | out: | 1442 | out: |
1443 | ubifs_warn("inode %lu failed to fix size %lld -> %lld error %d", | 1443 | ubifs_warn("inode %lu failed to fix size %lld -> %lld error %d", |
1444 | e->inum, e->i_size, e->d_size, err); | 1444 | (unsigned long)e->inum, e->i_size, e->d_size, err); |
1445 | return err; | 1445 | return err; |
1446 | } | 1446 | } |
1447 | 1447 | ||
@@ -1472,7 +1472,8 @@ int ubifs_recover_size(struct ubifs_info *c) | |||
1472 | return err; | 1472 | return err; |
1473 | if (err == -ENOENT) { | 1473 | if (err == -ENOENT) { |
1474 | /* Remove data nodes that have no inode */ | 1474 | /* Remove data nodes that have no inode */ |
1475 | dbg_rcvry("removing ino %lu", e->inum); | 1475 | dbg_rcvry("removing ino %lu", |
1476 | (unsigned long)e->inum); | ||
1476 | err = ubifs_tnc_remove_ino(c, e->inum); | 1477 | err = ubifs_tnc_remove_ino(c, e->inum); |
1477 | if (err) | 1478 | if (err) |
1478 | return err; | 1479 | return err; |
@@ -1493,8 +1494,8 @@ int ubifs_recover_size(struct ubifs_info *c) | |||
1493 | return PTR_ERR(inode); | 1494 | return PTR_ERR(inode); |
1494 | if (inode->i_size < e->d_size) { | 1495 | if (inode->i_size < e->d_size) { |
1495 | dbg_rcvry("ino %lu size %lld -> %lld", | 1496 | dbg_rcvry("ino %lu size %lld -> %lld", |
1496 | e->inum, e->d_size, | 1497 | (unsigned long)e->inum, |
1497 | inode->i_size); | 1498 | e->d_size, inode->i_size); |
1498 | inode->i_size = e->d_size; | 1499 | inode->i_size = e->d_size; |
1499 | ubifs_inode(inode)->ui_size = e->d_size; | 1500 | ubifs_inode(inode)->ui_size = e->d_size; |
1500 | e->inode = inode; | 1501 | e->inode = inode; |
diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c index 7399692af859..21f7d047c306 100644 --- a/fs/ubifs/replay.c +++ b/fs/ubifs/replay.c | |||
@@ -1065,7 +1065,7 @@ int ubifs_replay_journal(struct ubifs_info *c) | |||
1065 | ubifs_assert(c->bud_bytes <= c->max_bud_bytes || c->need_recovery); | 1065 | ubifs_assert(c->bud_bytes <= c->max_bud_bytes || c->need_recovery); |
1066 | dbg_mnt("finished, log head LEB %d:%d, max_sqnum %llu, " | 1066 | dbg_mnt("finished, log head LEB %d:%d, max_sqnum %llu, " |
1067 | "highest_inum %lu", c->lhead_lnum, c->lhead_offs, c->max_sqnum, | 1067 | "highest_inum %lu", c->lhead_lnum, c->lhead_offs, c->max_sqnum, |
1068 | c->highest_inum); | 1068 | (unsigned long)c->highest_inum); |
1069 | out: | 1069 | out: |
1070 | destroy_replay_tree(c); | 1070 | destroy_replay_tree(c); |
1071 | destroy_bud_list(c); | 1071 | destroy_bud_list(c); |
diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c index 2bf753b38889..0f392351dc5a 100644 --- a/fs/ubifs/sb.c +++ b/fs/ubifs/sb.c | |||
@@ -81,6 +81,7 @@ static int create_default_filesystem(struct ubifs_info *c) | |||
81 | int lpt_lebs, lpt_first, orph_lebs, big_lpt, ino_waste, sup_flags = 0; | 81 | int lpt_lebs, lpt_first, orph_lebs, big_lpt, ino_waste, sup_flags = 0; |
82 | int min_leb_cnt = UBIFS_MIN_LEB_CNT; | 82 | int min_leb_cnt = UBIFS_MIN_LEB_CNT; |
83 | uint64_t tmp64, main_bytes; | 83 | uint64_t tmp64, main_bytes; |
84 | __le64 tmp_le64; | ||
84 | 85 | ||
85 | /* Some functions called from here depend on the @c->key_len filed */ | 86 | /* Some functions called from here depend on the @c->key_len filed */ |
86 | c->key_len = UBIFS_SK_LEN; | 87 | c->key_len = UBIFS_SK_LEN; |
@@ -295,10 +296,10 @@ static int create_default_filesystem(struct ubifs_info *c) | |||
295 | ino->ch.node_type = UBIFS_INO_NODE; | 296 | ino->ch.node_type = UBIFS_INO_NODE; |
296 | ino->creat_sqnum = cpu_to_le64(++c->max_sqnum); | 297 | ino->creat_sqnum = cpu_to_le64(++c->max_sqnum); |
297 | ino->nlink = cpu_to_le32(2); | 298 | ino->nlink = cpu_to_le32(2); |
298 | tmp = cpu_to_le64(CURRENT_TIME_SEC.tv_sec); | 299 | tmp_le64 = cpu_to_le64(CURRENT_TIME_SEC.tv_sec); |
299 | ino->atime_sec = tmp; | 300 | ino->atime_sec = tmp_le64; |
300 | ino->ctime_sec = tmp; | 301 | ino->ctime_sec = tmp_le64; |
301 | ino->mtime_sec = tmp; | 302 | ino->mtime_sec = tmp_le64; |
302 | ino->atime_nsec = 0; | 303 | ino->atime_nsec = 0; |
303 | ino->ctime_nsec = 0; | 304 | ino->ctime_nsec = 0; |
304 | ino->mtime_nsec = 0; | 305 | ino->mtime_nsec = 0; |
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 8780efbf40ac..d80b2aef42b6 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
@@ -36,6 +36,12 @@ | |||
36 | #include <linux/mount.h> | 36 | #include <linux/mount.h> |
37 | #include "ubifs.h" | 37 | #include "ubifs.h" |
38 | 38 | ||
39 | /* | ||
40 | * Maximum amount of memory we may 'kmalloc()' without worrying that we are | ||
41 | * allocating too much. | ||
42 | */ | ||
43 | #define UBIFS_KMALLOC_OK (128*1024) | ||
44 | |||
39 | /* Slab cache for UBIFS inodes */ | 45 | /* Slab cache for UBIFS inodes */ |
40 | struct kmem_cache *ubifs_inode_slab; | 46 | struct kmem_cache *ubifs_inode_slab; |
41 | 47 | ||
@@ -561,18 +567,11 @@ static int init_constants_early(struct ubifs_info *c) | |||
561 | * calculations when reporting free space. | 567 | * calculations when reporting free space. |
562 | */ | 568 | */ |
563 | c->leb_overhead = c->leb_size % UBIFS_MAX_DATA_NODE_SZ; | 569 | c->leb_overhead = c->leb_size % UBIFS_MAX_DATA_NODE_SZ; |
564 | /* Buffer size for bulk-reads */ | ||
565 | c->bulk_read_buf_size = UBIFS_MAX_BULK_READ * UBIFS_MAX_DATA_NODE_SZ; | ||
566 | if (c->bulk_read_buf_size > c->leb_size) | ||
567 | c->bulk_read_buf_size = c->leb_size; | ||
568 | if (c->bulk_read_buf_size > 128 * 1024) { | ||
569 | /* Check if we can kmalloc more than 128KiB */ | ||
570 | void *try = kmalloc(c->bulk_read_buf_size, GFP_KERNEL); | ||
571 | 570 | ||
572 | kfree(try); | 571 | /* Buffer size for bulk-reads */ |
573 | if (!try) | 572 | c->max_bu_buf_len = UBIFS_MAX_BULK_READ * UBIFS_MAX_DATA_NODE_SZ; |
574 | c->bulk_read_buf_size = 128 * 1024; | 573 | if (c->max_bu_buf_len > c->leb_size) |
575 | } | 574 | c->max_bu_buf_len = c->leb_size; |
576 | return 0; | 575 | return 0; |
577 | } | 576 | } |
578 | 577 | ||
@@ -992,6 +991,34 @@ static void destroy_journal(struct ubifs_info *c) | |||
992 | } | 991 | } |
993 | 992 | ||
994 | /** | 993 | /** |
994 | * bu_init - initialize bulk-read information. | ||
995 | * @c: UBIFS file-system description object | ||
996 | */ | ||
997 | static void bu_init(struct ubifs_info *c) | ||
998 | { | ||
999 | ubifs_assert(c->bulk_read == 1); | ||
1000 | |||
1001 | if (c->bu.buf) | ||
1002 | return; /* Already initialized */ | ||
1003 | |||
1004 | again: | ||
1005 | c->bu.buf = kmalloc(c->max_bu_buf_len, GFP_KERNEL | __GFP_NOWARN); | ||
1006 | if (!c->bu.buf) { | ||
1007 | if (c->max_bu_buf_len > UBIFS_KMALLOC_OK) { | ||
1008 | c->max_bu_buf_len = UBIFS_KMALLOC_OK; | ||
1009 | goto again; | ||
1010 | } | ||
1011 | |||
1012 | /* Just disable bulk-read */ | ||
1013 | ubifs_warn("Cannot allocate %d bytes of memory for bulk-read, " | ||
1014 | "disabling it", c->max_bu_buf_len); | ||
1015 | c->mount_opts.bulk_read = 1; | ||
1016 | c->bulk_read = 0; | ||
1017 | return; | ||
1018 | } | ||
1019 | } | ||
1020 | |||
1021 | /** | ||
995 | * mount_ubifs - mount UBIFS file-system. | 1022 | * mount_ubifs - mount UBIFS file-system. |
996 | * @c: UBIFS file-system description object | 1023 | * @c: UBIFS file-system description object |
997 | * | 1024 | * |
@@ -1059,6 +1086,13 @@ static int mount_ubifs(struct ubifs_info *c) | |||
1059 | goto out_free; | 1086 | goto out_free; |
1060 | } | 1087 | } |
1061 | 1088 | ||
1089 | if (c->bulk_read == 1) | ||
1090 | bu_init(c); | ||
1091 | |||
1092 | /* | ||
1093 | * We have to check all CRCs, even for data nodes, when we mount the FS | ||
1094 | * (specifically, when we are replaying). | ||
1095 | */ | ||
1062 | c->always_chk_crc = 1; | 1096 | c->always_chk_crc = 1; |
1063 | 1097 | ||
1064 | err = ubifs_read_superblock(c); | 1098 | err = ubifs_read_superblock(c); |
@@ -1289,6 +1323,7 @@ out_cbuf: | |||
1289 | out_dereg: | 1323 | out_dereg: |
1290 | dbg_failure_mode_deregistration(c); | 1324 | dbg_failure_mode_deregistration(c); |
1291 | out_free: | 1325 | out_free: |
1326 | kfree(c->bu.buf); | ||
1292 | vfree(c->ileb_buf); | 1327 | vfree(c->ileb_buf); |
1293 | vfree(c->sbuf); | 1328 | vfree(c->sbuf); |
1294 | kfree(c->bottom_up_buf); | 1329 | kfree(c->bottom_up_buf); |
@@ -1325,10 +1360,11 @@ static void ubifs_umount(struct ubifs_info *c) | |||
1325 | kfree(c->cbuf); | 1360 | kfree(c->cbuf); |
1326 | kfree(c->rcvrd_mst_node); | 1361 | kfree(c->rcvrd_mst_node); |
1327 | kfree(c->mst_node); | 1362 | kfree(c->mst_node); |
1363 | kfree(c->bu.buf); | ||
1364 | vfree(c->ileb_buf); | ||
1328 | vfree(c->sbuf); | 1365 | vfree(c->sbuf); |
1329 | kfree(c->bottom_up_buf); | 1366 | kfree(c->bottom_up_buf); |
1330 | UBIFS_DBG(vfree(c->dbg_buf)); | 1367 | UBIFS_DBG(vfree(c->dbg_buf)); |
1331 | vfree(c->ileb_buf); | ||
1332 | dbg_failure_mode_deregistration(c); | 1368 | dbg_failure_mode_deregistration(c); |
1333 | } | 1369 | } |
1334 | 1370 | ||
@@ -1626,6 +1662,7 @@ static int ubifs_remount_fs(struct super_block *sb, int *flags, char *data) | |||
1626 | ubifs_err("invalid or unknown remount parameter"); | 1662 | ubifs_err("invalid or unknown remount parameter"); |
1627 | return err; | 1663 | return err; |
1628 | } | 1664 | } |
1665 | |||
1629 | if ((sb->s_flags & MS_RDONLY) && !(*flags & MS_RDONLY)) { | 1666 | if ((sb->s_flags & MS_RDONLY) && !(*flags & MS_RDONLY)) { |
1630 | err = ubifs_remount_rw(c); | 1667 | err = ubifs_remount_rw(c); |
1631 | if (err) | 1668 | if (err) |
@@ -1633,6 +1670,14 @@ static int ubifs_remount_fs(struct super_block *sb, int *flags, char *data) | |||
1633 | } else if (!(sb->s_flags & MS_RDONLY) && (*flags & MS_RDONLY)) | 1670 | } else if (!(sb->s_flags & MS_RDONLY) && (*flags & MS_RDONLY)) |
1634 | ubifs_remount_ro(c); | 1671 | ubifs_remount_ro(c); |
1635 | 1672 | ||
1673 | if (c->bulk_read == 1) | ||
1674 | bu_init(c); | ||
1675 | else { | ||
1676 | dbg_gen("disable bulk-read"); | ||
1677 | kfree(c->bu.buf); | ||
1678 | c->bu.buf = NULL; | ||
1679 | } | ||
1680 | |||
1636 | return 0; | 1681 | return 0; |
1637 | } | 1682 | } |
1638 | 1683 | ||
@@ -1723,6 +1768,7 @@ static int ubifs_fill_super(struct super_block *sb, void *data, int silent) | |||
1723 | mutex_init(&c->log_mutex); | 1768 | mutex_init(&c->log_mutex); |
1724 | mutex_init(&c->mst_mutex); | 1769 | mutex_init(&c->mst_mutex); |
1725 | mutex_init(&c->umount_mutex); | 1770 | mutex_init(&c->umount_mutex); |
1771 | mutex_init(&c->bu_mutex); | ||
1726 | init_waitqueue_head(&c->cmt_wq); | 1772 | init_waitqueue_head(&c->cmt_wq); |
1727 | c->buds = RB_ROOT; | 1773 | c->buds = RB_ROOT; |
1728 | c->old_idx = RB_ROOT; | 1774 | c->old_idx = RB_ROOT; |
diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c index d27fd918b9c9..6eef5344a145 100644 --- a/fs/ubifs/tnc.c +++ b/fs/ubifs/tnc.c | |||
@@ -1501,7 +1501,12 @@ out: | |||
1501 | * @bu: bulk-read parameters and results | 1501 | * @bu: bulk-read parameters and results |
1502 | * | 1502 | * |
1503 | * Lookup consecutive data node keys for the same inode that reside | 1503 | * Lookup consecutive data node keys for the same inode that reside |
1504 | * consecutively in the same LEB. | 1504 | * consecutively in the same LEB. This function returns zero in case of success |
1505 | * and a negative error code in case of failure. | ||
1506 | * | ||
1507 | * Note, if the bulk-read buffer length (@bu->buf_len) is known, this function | ||
1508 | * makes sure bulk-read nodes fit the buffer. Otherwise, this function prepares | ||
1509 | * maxumum possible amount of nodes for bulk-read. | ||
1505 | */ | 1510 | */ |
1506 | int ubifs_tnc_get_bu_keys(struct ubifs_info *c, struct bu_info *bu) | 1511 | int ubifs_tnc_get_bu_keys(struct ubifs_info *c, struct bu_info *bu) |
1507 | { | 1512 | { |
@@ -2677,7 +2682,7 @@ int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum) | |||
2677 | struct ubifs_dent_node *xent, *pxent = NULL; | 2682 | struct ubifs_dent_node *xent, *pxent = NULL; |
2678 | struct qstr nm = { .name = NULL }; | 2683 | struct qstr nm = { .name = NULL }; |
2679 | 2684 | ||
2680 | dbg_tnc("ino %lu", inum); | 2685 | dbg_tnc("ino %lu", (unsigned long)inum); |
2681 | 2686 | ||
2682 | /* | 2687 | /* |
2683 | * Walk all extended attribute entries and remove them together with | 2688 | * Walk all extended attribute entries and remove them together with |
@@ -2697,7 +2702,8 @@ int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum) | |||
2697 | } | 2702 | } |
2698 | 2703 | ||
2699 | xattr_inum = le64_to_cpu(xent->inum); | 2704 | xattr_inum = le64_to_cpu(xent->inum); |
2700 | dbg_tnc("xent '%s', ino %lu", xent->name, xattr_inum); | 2705 | dbg_tnc("xent '%s', ino %lu", xent->name, |
2706 | (unsigned long)xattr_inum); | ||
2701 | 2707 | ||
2702 | nm.name = xent->name; | 2708 | nm.name = xent->name; |
2703 | nm.len = le16_to_cpu(xent->nlen); | 2709 | nm.len = le16_to_cpu(xent->nlen); |
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index a7bd32fa15b9..46b172560a06 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h | |||
@@ -753,7 +753,7 @@ struct ubifs_znode { | |||
753 | }; | 753 | }; |
754 | 754 | ||
755 | /** | 755 | /** |
756 | * struct bu_info - bulk-read information | 756 | * struct bu_info - bulk-read information. |
757 | * @key: first data node key | 757 | * @key: first data node key |
758 | * @zbranch: zbranches of data nodes to bulk read | 758 | * @zbranch: zbranches of data nodes to bulk read |
759 | * @buf: buffer to read into | 759 | * @buf: buffer to read into |
@@ -969,7 +969,10 @@ struct ubifs_mount_opts { | |||
969 | * @mst_node: master node | 969 | * @mst_node: master node |
970 | * @mst_offs: offset of valid master node | 970 | * @mst_offs: offset of valid master node |
971 | * @mst_mutex: protects the master node area, @mst_node, and @mst_offs | 971 | * @mst_mutex: protects the master node area, @mst_node, and @mst_offs |
972 | * @bulk_read_buf_size: buffer size for bulk-reads | 972 | * |
973 | * @max_bu_buf_len: maximum bulk-read buffer length | ||
974 | * @bu_mutex: protects the pre-allocated bulk-read buffer and @c->bu | ||
975 | * @bu: pre-allocated bulk-read information | ||
973 | * | 976 | * |
974 | * @log_lebs: number of logical eraseblocks in the log | 977 | * @log_lebs: number of logical eraseblocks in the log |
975 | * @log_bytes: log size in bytes | 978 | * @log_bytes: log size in bytes |
@@ -1217,7 +1220,10 @@ struct ubifs_info { | |||
1217 | struct ubifs_mst_node *mst_node; | 1220 | struct ubifs_mst_node *mst_node; |
1218 | int mst_offs; | 1221 | int mst_offs; |
1219 | struct mutex mst_mutex; | 1222 | struct mutex mst_mutex; |
1220 | int bulk_read_buf_size; | 1223 | |
1224 | int max_bu_buf_len; | ||
1225 | struct mutex bu_mutex; | ||
1226 | struct bu_info bu; | ||
1221 | 1227 | ||
1222 | int log_lebs; | 1228 | int log_lebs; |
1223 | long long log_bytes; | 1229 | long long log_bytes; |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index a135256b272c..6dcd30d806cd 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -786,6 +786,8 @@ static inline void blk_run_address_space(struct address_space *mapping) | |||
786 | blk_run_backing_dev(mapping->backing_dev_info, NULL); | 786 | blk_run_backing_dev(mapping->backing_dev_info, NULL); |
787 | } | 787 | } |
788 | 788 | ||
789 | extern void blkdev_dequeue_request(struct request *req); | ||
790 | |||
789 | /* | 791 | /* |
790 | * blk_end_request() and friends. | 792 | * blk_end_request() and friends. |
791 | * __blk_end_request() and end_request() must be called with | 793 | * __blk_end_request() and end_request() must be called with |
@@ -820,11 +822,6 @@ extern void blk_update_request(struct request *rq, int error, | |||
820 | extern unsigned int blk_rq_bytes(struct request *rq); | 822 | extern unsigned int blk_rq_bytes(struct request *rq); |
821 | extern unsigned int blk_rq_cur_bytes(struct request *rq); | 823 | extern unsigned int blk_rq_cur_bytes(struct request *rq); |
822 | 824 | ||
823 | static inline void blkdev_dequeue_request(struct request *req) | ||
824 | { | ||
825 | elv_dequeue_request(req->q, req); | ||
826 | } | ||
827 | |||
828 | /* | 825 | /* |
829 | * Access functions for manipulating queue properties | 826 | * Access functions for manipulating queue properties |
830 | */ | 827 | */ |
@@ -921,6 +918,8 @@ extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter); | |||
921 | 918 | ||
922 | #define MAX_SEGMENT_SIZE 65536 | 919 | #define MAX_SEGMENT_SIZE 65536 |
923 | 920 | ||
921 | #define BLK_SEG_BOUNDARY_MASK 0xFFFFFFFFUL | ||
922 | |||
924 | #define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist) | 923 | #define blkdev_entry_to_request(entry) list_entry((entry), struct request, queuelist) |
925 | 924 | ||
926 | static inline int queue_hardsect_size(struct request_queue *q) | 925 | static inline int queue_hardsect_size(struct request_queue *q) |
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index bdf505d33e77..1dba3493d520 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
@@ -160,7 +160,6 @@ struct blk_trace { | |||
160 | 160 | ||
161 | extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); | 161 | extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); |
162 | extern void blk_trace_shutdown(struct request_queue *); | 162 | extern void blk_trace_shutdown(struct request_queue *); |
163 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); | ||
164 | extern int do_blk_trace_setup(struct request_queue *q, | 163 | extern int do_blk_trace_setup(struct request_queue *q, |
165 | char *name, dev_t dev, struct blk_user_trace_setup *buts); | 164 | char *name, dev_t dev, struct blk_user_trace_setup *buts); |
166 | extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); | 165 | extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); |
@@ -186,168 +185,8 @@ extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); | |||
186 | } while (0) | 185 | } while (0) |
187 | #define BLK_TN_MAX_MSG 128 | 186 | #define BLK_TN_MAX_MSG 128 |
188 | 187 | ||
189 | /** | 188 | extern void blk_add_driver_data(struct request_queue *q, struct request *rq, |
190 | * blk_add_trace_rq - Add a trace for a request oriented action | 189 | void *data, size_t len); |
191 | * @q: queue the io is for | ||
192 | * @rq: the source request | ||
193 | * @what: the action | ||
194 | * | ||
195 | * Description: | ||
196 | * Records an action against a request. Will log the bio offset + size. | ||
197 | * | ||
198 | **/ | ||
199 | static inline void blk_add_trace_rq(struct request_queue *q, struct request *rq, | ||
200 | u32 what) | ||
201 | { | ||
202 | struct blk_trace *bt = q->blk_trace; | ||
203 | int rw = rq->cmd_flags & 0x03; | ||
204 | |||
205 | if (likely(!bt)) | ||
206 | return; | ||
207 | |||
208 | if (blk_discard_rq(rq)) | ||
209 | rw |= (1 << BIO_RW_DISCARD); | ||
210 | |||
211 | if (blk_pc_request(rq)) { | ||
212 | what |= BLK_TC_ACT(BLK_TC_PC); | ||
213 | __blk_add_trace(bt, 0, rq->data_len, rw, what, rq->errors, sizeof(rq->cmd), rq->cmd); | ||
214 | } else { | ||
215 | what |= BLK_TC_ACT(BLK_TC_FS); | ||
216 | __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, rw, what, rq->errors, 0, NULL); | ||
217 | } | ||
218 | } | ||
219 | |||
220 | /** | ||
221 | * blk_add_trace_bio - Add a trace for a bio oriented action | ||
222 | * @q: queue the io is for | ||
223 | * @bio: the source bio | ||
224 | * @what: the action | ||
225 | * | ||
226 | * Description: | ||
227 | * Records an action against a bio. Will log the bio offset + size. | ||
228 | * | ||
229 | **/ | ||
230 | static inline void blk_add_trace_bio(struct request_queue *q, struct bio *bio, | ||
231 | u32 what) | ||
232 | { | ||
233 | struct blk_trace *bt = q->blk_trace; | ||
234 | |||
235 | if (likely(!bt)) | ||
236 | return; | ||
237 | |||
238 | __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), 0, NULL); | ||
239 | } | ||
240 | |||
241 | /** | ||
242 | * blk_add_trace_generic - Add a trace for a generic action | ||
243 | * @q: queue the io is for | ||
244 | * @bio: the source bio | ||
245 | * @rw: the data direction | ||
246 | * @what: the action | ||
247 | * | ||
248 | * Description: | ||
249 | * Records a simple trace | ||
250 | * | ||
251 | **/ | ||
252 | static inline void blk_add_trace_generic(struct request_queue *q, | ||
253 | struct bio *bio, int rw, u32 what) | ||
254 | { | ||
255 | struct blk_trace *bt = q->blk_trace; | ||
256 | |||
257 | if (likely(!bt)) | ||
258 | return; | ||
259 | |||
260 | if (bio) | ||
261 | blk_add_trace_bio(q, bio, what); | ||
262 | else | ||
263 | __blk_add_trace(bt, 0, 0, rw, what, 0, 0, NULL); | ||
264 | } | ||
265 | |||
266 | /** | ||
267 | * blk_add_trace_pdu_int - Add a trace for a bio with an integer payload | ||
268 | * @q: queue the io is for | ||
269 | * @what: the action | ||
270 | * @bio: the source bio | ||
271 | * @pdu: the integer payload | ||
272 | * | ||
273 | * Description: | ||
274 | * Adds a trace with some integer payload. This might be an unplug | ||
275 | * option given as the action, with the depth at unplug time given | ||
276 | * as the payload | ||
277 | * | ||
278 | **/ | ||
279 | static inline void blk_add_trace_pdu_int(struct request_queue *q, u32 what, | ||
280 | struct bio *bio, unsigned int pdu) | ||
281 | { | ||
282 | struct blk_trace *bt = q->blk_trace; | ||
283 | __be64 rpdu = cpu_to_be64(pdu); | ||
284 | |||
285 | if (likely(!bt)) | ||
286 | return; | ||
287 | |||
288 | if (bio) | ||
289 | __blk_add_trace(bt, bio->bi_sector, bio->bi_size, bio->bi_rw, what, !bio_flagged(bio, BIO_UPTODATE), sizeof(rpdu), &rpdu); | ||
290 | else | ||
291 | __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu); | ||
292 | } | ||
293 | |||
294 | /** | ||
295 | * blk_add_trace_remap - Add a trace for a remap operation | ||
296 | * @q: queue the io is for | ||
297 | * @bio: the source bio | ||
298 | * @dev: target device | ||
299 | * @from: source sector | ||
300 | * @to: target sector | ||
301 | * | ||
302 | * Description: | ||
303 | * Device mapper or raid target sometimes need to split a bio because | ||
304 | * it spans a stripe (or similar). Add a trace for that action. | ||
305 | * | ||
306 | **/ | ||
307 | static inline void blk_add_trace_remap(struct request_queue *q, struct bio *bio, | ||
308 | dev_t dev, sector_t from, sector_t to) | ||
309 | { | ||
310 | struct blk_trace *bt = q->blk_trace; | ||
311 | struct blk_io_trace_remap r; | ||
312 | |||
313 | if (likely(!bt)) | ||
314 | return; | ||
315 | |||
316 | r.device = cpu_to_be32(dev); | ||
317 | r.device_from = cpu_to_be32(bio->bi_bdev->bd_dev); | ||
318 | r.sector = cpu_to_be64(to); | ||
319 | |||
320 | __blk_add_trace(bt, from, bio->bi_size, bio->bi_rw, BLK_TA_REMAP, !bio_flagged(bio, BIO_UPTODATE), sizeof(r), &r); | ||
321 | } | ||
322 | |||
323 | /** | ||
324 | * blk_add_driver_data - Add binary message with driver-specific data | ||
325 | * @q: queue the io is for | ||
326 | * @rq: io request | ||
327 | * @data: driver-specific data | ||
328 | * @len: length of driver-specific data | ||
329 | * | ||
330 | * Description: | ||
331 | * Some drivers might want to write driver-specific data per request. | ||
332 | * | ||
333 | **/ | ||
334 | static inline void blk_add_driver_data(struct request_queue *q, | ||
335 | struct request *rq, | ||
336 | void *data, size_t len) | ||
337 | { | ||
338 | struct blk_trace *bt = q->blk_trace; | ||
339 | |||
340 | if (likely(!bt)) | ||
341 | return; | ||
342 | |||
343 | if (blk_pc_request(rq)) | ||
344 | __blk_add_trace(bt, 0, rq->data_len, 0, BLK_TA_DRV_DATA, | ||
345 | rq->errors, len, data); | ||
346 | else | ||
347 | __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, | ||
348 | 0, BLK_TA_DRV_DATA, rq->errors, len, data); | ||
349 | } | ||
350 | |||
351 | extern int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, | 190 | extern int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, |
352 | char __user *arg); | 191 | char __user *arg); |
353 | extern int blk_trace_startstop(struct request_queue *q, int start); | 192 | extern int blk_trace_startstop(struct request_queue *q, int start); |
@@ -356,13 +195,8 @@ extern int blk_trace_remove(struct request_queue *q); | |||
356 | #else /* !CONFIG_BLK_DEV_IO_TRACE */ | 195 | #else /* !CONFIG_BLK_DEV_IO_TRACE */ |
357 | #define blk_trace_ioctl(bdev, cmd, arg) (-ENOTTY) | 196 | #define blk_trace_ioctl(bdev, cmd, arg) (-ENOTTY) |
358 | #define blk_trace_shutdown(q) do { } while (0) | 197 | #define blk_trace_shutdown(q) do { } while (0) |
359 | #define blk_add_trace_rq(q, rq, what) do { } while (0) | ||
360 | #define blk_add_trace_bio(q, rq, what) do { } while (0) | ||
361 | #define blk_add_trace_generic(q, rq, rw, what) do { } while (0) | ||
362 | #define blk_add_trace_pdu_int(q, what, bio, pdu) do { } while (0) | ||
363 | #define blk_add_trace_remap(q, bio, dev, f, t) do {} while (0) | ||
364 | #define blk_add_driver_data(q, rq, data, len) do {} while (0) | ||
365 | #define do_blk_trace_setup(q, name, dev, buts) (-ENOTTY) | 198 | #define do_blk_trace_setup(q, name, dev, buts) (-ENOTTY) |
199 | #define blk_add_driver_data(q, rq, data, len) do {} while (0) | ||
366 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) | 200 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) |
367 | #define blk_trace_startstop(q, start) (-ENOTTY) | 201 | #define blk_trace_startstop(q, start) (-ENOTTY) |
368 | #define blk_trace_remove(q) (-ENOTTY) | 202 | #define blk_trace_remove(q) (-ENOTTY) |
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 7854d87b97b2..11cac81eed08 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
@@ -7,6 +7,8 @@ | |||
7 | #include <linux/init.h> | 7 | #include <linux/init.h> |
8 | #include <linux/types.h> | 8 | #include <linux/types.h> |
9 | #include <linux/kallsyms.h> | 9 | #include <linux/kallsyms.h> |
10 | #include <linux/bitops.h> | ||
11 | #include <linux/sched.h> | ||
10 | 12 | ||
11 | #ifdef CONFIG_FUNCTION_TRACER | 13 | #ifdef CONFIG_FUNCTION_TRACER |
12 | 14 | ||
@@ -115,8 +117,13 @@ extern int ftrace_update_ftrace_func(ftrace_func_t func); | |||
115 | extern void ftrace_caller(void); | 117 | extern void ftrace_caller(void); |
116 | extern void ftrace_call(void); | 118 | extern void ftrace_call(void); |
117 | extern void mcount_call(void); | 119 | extern void mcount_call(void); |
118 | #ifdef CONFIG_FUNCTION_RET_TRACER | 120 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
119 | extern void ftrace_return_caller(void); | 121 | extern void ftrace_graph_caller(void); |
122 | extern int ftrace_enable_ftrace_graph_caller(void); | ||
123 | extern int ftrace_disable_ftrace_graph_caller(void); | ||
124 | #else | ||
125 | static inline int ftrace_enable_ftrace_graph_caller(void) { return 0; } | ||
126 | static inline int ftrace_disable_ftrace_graph_caller(void) { return 0; } | ||
120 | #endif | 127 | #endif |
121 | 128 | ||
122 | /** | 129 | /** |
@@ -311,35 +318,158 @@ ftrace_init_module(struct module *mod, | |||
311 | unsigned long *start, unsigned long *end) { } | 318 | unsigned long *start, unsigned long *end) { } |
312 | #endif | 319 | #endif |
313 | 320 | ||
321 | enum { | ||
322 | POWER_NONE = 0, | ||
323 | POWER_CSTATE = 1, | ||
324 | POWER_PSTATE = 2, | ||
325 | }; | ||
326 | |||
327 | struct power_trace { | ||
328 | #ifdef CONFIG_POWER_TRACER | ||
329 | ktime_t stamp; | ||
330 | ktime_t end; | ||
331 | int type; | ||
332 | int state; | ||
333 | #endif | ||
334 | }; | ||
335 | |||
336 | #ifdef CONFIG_POWER_TRACER | ||
337 | extern void trace_power_start(struct power_trace *it, unsigned int type, | ||
338 | unsigned int state); | ||
339 | extern void trace_power_mark(struct power_trace *it, unsigned int type, | ||
340 | unsigned int state); | ||
341 | extern void trace_power_end(struct power_trace *it); | ||
342 | #else | ||
343 | static inline void trace_power_start(struct power_trace *it, unsigned int type, | ||
344 | unsigned int state) { } | ||
345 | static inline void trace_power_mark(struct power_trace *it, unsigned int type, | ||
346 | unsigned int state) { } | ||
347 | static inline void trace_power_end(struct power_trace *it) { } | ||
348 | #endif | ||
349 | |||
350 | |||
351 | /* | ||
352 | * Structure that defines an entry function trace. | ||
353 | */ | ||
354 | struct ftrace_graph_ent { | ||
355 | unsigned long func; /* Current function */ | ||
356 | int depth; | ||
357 | }; | ||
314 | 358 | ||
315 | /* | 359 | /* |
316 | * Structure that defines a return function trace. | 360 | * Structure that defines a return function trace. |
317 | */ | 361 | */ |
318 | struct ftrace_retfunc { | 362 | struct ftrace_graph_ret { |
319 | unsigned long ret; /* Return address */ | ||
320 | unsigned long func; /* Current function */ | 363 | unsigned long func; /* Current function */ |
321 | unsigned long long calltime; | 364 | unsigned long long calltime; |
322 | unsigned long long rettime; | 365 | unsigned long long rettime; |
323 | /* Number of functions that overran the depth limit for current task */ | 366 | /* Number of functions that overran the depth limit for current task */ |
324 | unsigned long overrun; | 367 | unsigned long overrun; |
368 | int depth; | ||
325 | }; | 369 | }; |
326 | 370 | ||
327 | #ifdef CONFIG_FUNCTION_RET_TRACER | 371 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
372 | |||
373 | /* | ||
374 | * Sometimes we don't want to trace a function with the function | ||
375 | * graph tracer but we want them to keep traced by the usual function | ||
376 | * tracer if the function graph tracer is not configured. | ||
377 | */ | ||
378 | #define __notrace_funcgraph notrace | ||
379 | |||
328 | #define FTRACE_RETFUNC_DEPTH 50 | 380 | #define FTRACE_RETFUNC_DEPTH 50 |
329 | #define FTRACE_RETSTACK_ALLOC_SIZE 32 | 381 | #define FTRACE_RETSTACK_ALLOC_SIZE 32 |
330 | /* Type of a callback handler of tracing return function */ | 382 | /* Type of the callback handlers for tracing function graph*/ |
331 | typedef void (*trace_function_return_t)(struct ftrace_retfunc *); | 383 | typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *); /* return */ |
384 | typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *); /* entry */ | ||
385 | |||
386 | extern int register_ftrace_graph(trace_func_graph_ret_t retfunc, | ||
387 | trace_func_graph_ent_t entryfunc); | ||
388 | |||
389 | extern void ftrace_graph_stop(void); | ||
390 | |||
391 | /* The current handlers in use */ | ||
392 | extern trace_func_graph_ret_t ftrace_graph_return; | ||
393 | extern trace_func_graph_ent_t ftrace_graph_entry; | ||
394 | |||
395 | extern void unregister_ftrace_graph(void); | ||
396 | |||
397 | extern void ftrace_graph_init_task(struct task_struct *t); | ||
398 | extern void ftrace_graph_exit_task(struct task_struct *t); | ||
332 | 399 | ||
333 | extern int register_ftrace_return(trace_function_return_t func); | 400 | static inline int task_curr_ret_stack(struct task_struct *t) |
334 | /* The current handler in use */ | 401 | { |
335 | extern trace_function_return_t ftrace_function_return; | 402 | return t->curr_ret_stack; |
336 | extern void unregister_ftrace_return(void); | 403 | } |
404 | |||
405 | static inline void pause_graph_tracing(void) | ||
406 | { | ||
407 | atomic_inc(¤t->tracing_graph_pause); | ||
408 | } | ||
337 | 409 | ||
338 | extern void ftrace_retfunc_init_task(struct task_struct *t); | 410 | static inline void unpause_graph_tracing(void) |
339 | extern void ftrace_retfunc_exit_task(struct task_struct *t); | 411 | { |
412 | atomic_dec(¤t->tracing_graph_pause); | ||
413 | } | ||
340 | #else | 414 | #else |
341 | static inline void ftrace_retfunc_init_task(struct task_struct *t) { } | 415 | |
342 | static inline void ftrace_retfunc_exit_task(struct task_struct *t) { } | 416 | #define __notrace_funcgraph |
417 | |||
418 | static inline void ftrace_graph_init_task(struct task_struct *t) { } | ||
419 | static inline void ftrace_graph_exit_task(struct task_struct *t) { } | ||
420 | |||
421 | static inline int task_curr_ret_stack(struct task_struct *tsk) | ||
422 | { | ||
423 | return -1; | ||
424 | } | ||
425 | |||
426 | static inline void pause_graph_tracing(void) { } | ||
427 | static inline void unpause_graph_tracing(void) { } | ||
343 | #endif | 428 | #endif |
344 | 429 | ||
430 | #ifdef CONFIG_TRACING | ||
431 | #include <linux/sched.h> | ||
432 | |||
433 | /* flags for current->trace */ | ||
434 | enum { | ||
435 | TSK_TRACE_FL_TRACE_BIT = 0, | ||
436 | TSK_TRACE_FL_GRAPH_BIT = 1, | ||
437 | }; | ||
438 | enum { | ||
439 | TSK_TRACE_FL_TRACE = 1 << TSK_TRACE_FL_TRACE_BIT, | ||
440 | TSK_TRACE_FL_GRAPH = 1 << TSK_TRACE_FL_GRAPH_BIT, | ||
441 | }; | ||
442 | |||
443 | static inline void set_tsk_trace_trace(struct task_struct *tsk) | ||
444 | { | ||
445 | set_bit(TSK_TRACE_FL_TRACE_BIT, &tsk->trace); | ||
446 | } | ||
447 | |||
448 | static inline void clear_tsk_trace_trace(struct task_struct *tsk) | ||
449 | { | ||
450 | clear_bit(TSK_TRACE_FL_TRACE_BIT, &tsk->trace); | ||
451 | } | ||
452 | |||
453 | static inline int test_tsk_trace_trace(struct task_struct *tsk) | ||
454 | { | ||
455 | return tsk->trace & TSK_TRACE_FL_TRACE; | ||
456 | } | ||
457 | |||
458 | static inline void set_tsk_trace_graph(struct task_struct *tsk) | ||
459 | { | ||
460 | set_bit(TSK_TRACE_FL_GRAPH_BIT, &tsk->trace); | ||
461 | } | ||
462 | |||
463 | static inline void clear_tsk_trace_graph(struct task_struct *tsk) | ||
464 | { | ||
465 | clear_bit(TSK_TRACE_FL_GRAPH_BIT, &tsk->trace); | ||
466 | } | ||
467 | |||
468 | static inline int test_tsk_trace_graph(struct task_struct *tsk) | ||
469 | { | ||
470 | return tsk->trace & TSK_TRACE_FL_GRAPH; | ||
471 | } | ||
472 | |||
473 | #endif /* CONFIG_TRACING */ | ||
474 | |||
345 | #endif /* _LINUX_FTRACE_H */ | 475 | #endif /* _LINUX_FTRACE_H */ |
diff --git a/include/linux/ftrace_irq.h b/include/linux/ftrace_irq.h index 0b4df55d7a74..366a054d0b05 100644 --- a/include/linux/ftrace_irq.h +++ b/include/linux/ftrace_irq.h | |||
@@ -2,7 +2,7 @@ | |||
2 | #define _LINUX_FTRACE_IRQ_H | 2 | #define _LINUX_FTRACE_IRQ_H |
3 | 3 | ||
4 | 4 | ||
5 | #if defined(CONFIG_DYNAMIC_FTRACE) || defined(CONFIG_FUNCTION_RET_TRACER) | 5 | #if defined(CONFIG_DYNAMIC_FTRACE) || defined(CONFIG_FUNCTION_GRAPH_TRACER) |
6 | extern void ftrace_nmi_enter(void); | 6 | extern void ftrace_nmi_enter(void); |
7 | extern void ftrace_nmi_exit(void); | 7 | extern void ftrace_nmi_exit(void); |
8 | #else | 8 | #else |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 54525be4b5f8..010fb26a1579 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -1296,6 +1296,13 @@ extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *o | |||
1296 | #define ide_pci_register_driver(d) pci_register_driver(d) | 1296 | #define ide_pci_register_driver(d) pci_register_driver(d) |
1297 | #endif | 1297 | #endif |
1298 | 1298 | ||
1299 | static inline int ide_pci_is_in_compatibility_mode(struct pci_dev *dev) | ||
1300 | { | ||
1301 | if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && (dev->class & 5) != 5) | ||
1302 | return 1; | ||
1303 | return 0; | ||
1304 | } | ||
1305 | |||
1299 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, | 1306 | void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, |
1300 | hw_regs_t *, hw_regs_t **); | 1307 | hw_regs_t *, hw_regs_t **); |
1301 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 1308 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); |
@@ -1375,6 +1382,7 @@ enum { | |||
1375 | IDE_HFLAG_IO_32BIT = (1 << 24), | 1382 | IDE_HFLAG_IO_32BIT = (1 << 24), |
1376 | /* unmask IRQs */ | 1383 | /* unmask IRQs */ |
1377 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), | 1384 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), |
1385 | IDE_HFLAG_BROKEN_ALTSTATUS = (1 << 26), | ||
1378 | /* serialize ports if DMA is possible (for sl82c105) */ | 1386 | /* serialize ports if DMA is possible (for sl82c105) */ |
1379 | IDE_HFLAG_SERIALIZE_DMA = (1 << 27), | 1387 | IDE_HFLAG_SERIALIZE_DMA = (1 << 27), |
1380 | /* force host out of "simplex" mode */ | 1388 | /* force host out of "simplex" mode */ |
diff --git a/include/linux/marker.h b/include/linux/marker.h index 34c14bc957f5..b85e74ca782f 100644 --- a/include/linux/marker.h +++ b/include/linux/marker.h | |||
@@ -211,8 +211,10 @@ extern void *marker_get_private_data(const char *name, marker_probe_func *probe, | |||
211 | 211 | ||
212 | /* | 212 | /* |
213 | * marker_synchronize_unregister must be called between the last marker probe | 213 | * marker_synchronize_unregister must be called between the last marker probe |
214 | * unregistration and the end of module exit to make sure there is no caller | 214 | * unregistration and the first one of |
215 | * executing a probe when it is freed. | 215 | * - the end of module exit function |
216 | * - the free of any resource used by the probes | ||
217 | * to ensure the code and data are valid for any possibly running probes. | ||
216 | */ | 218 | */ |
217 | #define marker_synchronize_unregister() synchronize_sched() | 219 | #define marker_synchronize_unregister() synchronize_sched() |
218 | 220 | ||
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index be41b609c88f..e52ce475d19f 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
@@ -251,7 +251,7 @@ struct xt_target_param { | |||
251 | */ | 251 | */ |
252 | struct xt_tgchk_param { | 252 | struct xt_tgchk_param { |
253 | const char *table; | 253 | const char *table; |
254 | void *entryinfo; | 254 | const void *entryinfo; |
255 | const struct xt_target *target; | 255 | const struct xt_target *target; |
256 | void *targinfo; | 256 | void *targinfo; |
257 | unsigned int hook_mask; | 257 | unsigned int hook_mask; |
diff --git a/include/linux/pid.h b/include/linux/pid.h index d7e98ff8021e..bb206c56d1f0 100644 --- a/include/linux/pid.h +++ b/include/linux/pid.h | |||
@@ -147,9 +147,9 @@ pid_t pid_vnr(struct pid *pid); | |||
147 | #define do_each_pid_task(pid, type, task) \ | 147 | #define do_each_pid_task(pid, type, task) \ |
148 | do { \ | 148 | do { \ |
149 | struct hlist_node *pos___; \ | 149 | struct hlist_node *pos___; \ |
150 | if (pid != NULL) \ | 150 | if ((pid) != NULL) \ |
151 | hlist_for_each_entry_rcu((task), pos___, \ | 151 | hlist_for_each_entry_rcu((task), pos___, \ |
152 | &pid->tasks[type], pids[type].node) { | 152 | &(pid)->tasks[type], pids[type].node) { |
153 | 153 | ||
154 | /* | 154 | /* |
155 | * Both old and new leaders may be attached to | 155 | * Both old and new leaders may be attached to |
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 3bb87a753fa3..d363467c8f13 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h | |||
@@ -28,17 +28,19 @@ struct ring_buffer_event { | |||
28 | * size = 8 bytes | 28 | * size = 8 bytes |
29 | * | 29 | * |
30 | * @RINGBUF_TYPE_TIME_STAMP: Sync time stamp with external clock | 30 | * @RINGBUF_TYPE_TIME_STAMP: Sync time stamp with external clock |
31 | * array[0] = tv_nsec | 31 | * array[0] = tv_nsec |
32 | * array[1] = tv_sec | 32 | * array[1..2] = tv_sec |
33 | * size = 16 bytes | 33 | * size = 16 bytes |
34 | * | 34 | * |
35 | * @RINGBUF_TYPE_DATA: Data record | 35 | * @RINGBUF_TYPE_DATA: Data record |
36 | * If len is zero: | 36 | * If len is zero: |
37 | * array[0] holds the actual length | 37 | * array[0] holds the actual length |
38 | * array[1..(length+3)/4-1] holds data | 38 | * array[1..(length+3)/4] holds data |
39 | * size = 4 + 4 + length (bytes) | ||
39 | * else | 40 | * else |
40 | * length = len << 2 | 41 | * length = len << 2 |
41 | * array[0..(length+3)/4] holds data | 42 | * array[0..(length+3)/4-1] holds data |
43 | * size = 4 + length (bytes) | ||
42 | */ | 44 | */ |
43 | enum ring_buffer_type { | 45 | enum ring_buffer_type { |
44 | RINGBUF_TYPE_PADDING, | 46 | RINGBUF_TYPE_PADDING, |
@@ -124,6 +126,11 @@ void tracing_on(void); | |||
124 | void tracing_off(void); | 126 | void tracing_off(void); |
125 | void tracing_off_permanent(void); | 127 | void tracing_off_permanent(void); |
126 | 128 | ||
129 | void *ring_buffer_alloc_read_page(struct ring_buffer *buffer); | ||
130 | void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data); | ||
131 | int ring_buffer_read_page(struct ring_buffer *buffer, | ||
132 | void **data_page, int cpu, int full); | ||
133 | |||
127 | enum ring_buffer_flags { | 134 | enum ring_buffer_flags { |
128 | RB_FL_OVERWRITE = 1 << 0, | 135 | RB_FL_OVERWRITE = 1 << 0, |
129 | }; | 136 | }; |
diff --git a/include/linux/sched.h b/include/linux/sched.h index bf953932e676..423830b6e6e9 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -96,6 +96,7 @@ struct exec_domain; | |||
96 | struct futex_pi_state; | 96 | struct futex_pi_state; |
97 | struct robust_list_head; | 97 | struct robust_list_head; |
98 | struct bio; | 98 | struct bio; |
99 | struct bts_tracer; | ||
99 | 100 | ||
100 | /* | 101 | /* |
101 | * List of flags we want to share for kernel threads, | 102 | * List of flags we want to share for kernel threads, |
@@ -1176,6 +1177,18 @@ struct task_struct { | |||
1176 | struct list_head ptraced; | 1177 | struct list_head ptraced; |
1177 | struct list_head ptrace_entry; | 1178 | struct list_head ptrace_entry; |
1178 | 1179 | ||
1180 | #ifdef CONFIG_X86_PTRACE_BTS | ||
1181 | /* | ||
1182 | * This is the tracer handle for the ptrace BTS extension. | ||
1183 | * This field actually belongs to the ptracer task. | ||
1184 | */ | ||
1185 | struct bts_tracer *bts; | ||
1186 | /* | ||
1187 | * The buffer to hold the BTS data. | ||
1188 | */ | ||
1189 | void *bts_buffer; | ||
1190 | #endif /* CONFIG_X86_PTRACE_BTS */ | ||
1191 | |||
1179 | /* PID/PID hash table linkage. */ | 1192 | /* PID/PID hash table linkage. */ |
1180 | struct pid_link pids[PIDTYPE_MAX]; | 1193 | struct pid_link pids[PIDTYPE_MAX]; |
1181 | struct list_head thread_group; | 1194 | struct list_head thread_group; |
@@ -1367,7 +1380,7 @@ struct task_struct { | |||
1367 | unsigned long default_timer_slack_ns; | 1380 | unsigned long default_timer_slack_ns; |
1368 | 1381 | ||
1369 | struct list_head *scm_work_list; | 1382 | struct list_head *scm_work_list; |
1370 | #ifdef CONFIG_FUNCTION_RET_TRACER | 1383 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
1371 | /* Index of current stored adress in ret_stack */ | 1384 | /* Index of current stored adress in ret_stack */ |
1372 | int curr_ret_stack; | 1385 | int curr_ret_stack; |
1373 | /* Stack of return addresses for return function tracing */ | 1386 | /* Stack of return addresses for return function tracing */ |
@@ -1377,6 +1390,12 @@ struct task_struct { | |||
1377 | * because of depth overrun. | 1390 | * because of depth overrun. |
1378 | */ | 1391 | */ |
1379 | atomic_t trace_overrun; | 1392 | atomic_t trace_overrun; |
1393 | /* Pause for the tracing */ | ||
1394 | atomic_t tracing_graph_pause; | ||
1395 | #endif | ||
1396 | #ifdef CONFIG_TRACING | ||
1397 | /* state flags for use by tracers */ | ||
1398 | unsigned long trace; | ||
1380 | #endif | 1399 | #endif |
1381 | }; | 1400 | }; |
1382 | 1401 | ||
diff --git a/include/linux/security.h b/include/linux/security.h index c13f1cec9abb..e3d4ecda2673 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -1818,17 +1818,21 @@ static inline int security_settime(struct timespec *ts, struct timezone *tz) | |||
1818 | 1818 | ||
1819 | static inline int security_vm_enough_memory(long pages) | 1819 | static inline int security_vm_enough_memory(long pages) |
1820 | { | 1820 | { |
1821 | WARN_ON(current->mm == NULL); | ||
1821 | return cap_vm_enough_memory(current->mm, pages); | 1822 | return cap_vm_enough_memory(current->mm, pages); |
1822 | } | 1823 | } |
1823 | 1824 | ||
1824 | static inline int security_vm_enough_memory_kern(long pages) | 1825 | static inline int security_vm_enough_memory_mm(struct mm_struct *mm, long pages) |
1825 | { | 1826 | { |
1826 | return cap_vm_enough_memory(current->mm, pages); | 1827 | WARN_ON(mm == NULL); |
1828 | return cap_vm_enough_memory(mm, pages); | ||
1827 | } | 1829 | } |
1828 | 1830 | ||
1829 | static inline int security_vm_enough_memory_mm(struct mm_struct *mm, long pages) | 1831 | static inline int security_vm_enough_memory_kern(long pages) |
1830 | { | 1832 | { |
1831 | return cap_vm_enough_memory(mm, pages); | 1833 | /* If current->mm is a kernel thread then we will pass NULL, |
1834 | for this specific case that is fine */ | ||
1835 | return cap_vm_enough_memory(current->mm, pages); | ||
1832 | } | 1836 | } |
1833 | 1837 | ||
1834 | static inline int security_bprm_alloc(struct linux_binprm *bprm) | 1838 | static inline int security_bprm_alloc(struct linux_binprm *bprm) |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 3b8121d4e36f..eaec37c9d83d 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -325,7 +325,7 @@ extern struct class *tty_class; | |||
325 | * go away | 325 | * go away |
326 | */ | 326 | */ |
327 | 327 | ||
328 | extern inline struct tty_struct *tty_kref_get(struct tty_struct *tty) | 328 | static inline struct tty_struct *tty_kref_get(struct tty_struct *tty) |
329 | { | 329 | { |
330 | if (tty) | 330 | if (tty) |
331 | kref_get(&tty->kref); | 331 | kref_get(&tty->kref); |
diff --git a/include/net/af_unix.h b/include/net/af_unix.h index c29ff1da8a18..1614d78c60ed 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h | |||
@@ -9,6 +9,7 @@ | |||
9 | extern void unix_inflight(struct file *fp); | 9 | extern void unix_inflight(struct file *fp); |
10 | extern void unix_notinflight(struct file *fp); | 10 | extern void unix_notinflight(struct file *fp); |
11 | extern void unix_gc(void); | 11 | extern void unix_gc(void); |
12 | extern void wait_for_unix_gc(void); | ||
12 | 13 | ||
13 | #define UNIX_HASH_SIZE 256 | 14 | #define UNIX_HASH_SIZE 256 |
14 | 15 | ||
diff --git a/include/net/request_sock.h b/include/net/request_sock.h index cac811e51f6d..c7190846e128 100644 --- a/include/net/request_sock.h +++ b/include/net/request_sock.h | |||
@@ -31,6 +31,7 @@ struct request_sock_ops { | |||
31 | int family; | 31 | int family; |
32 | int obj_size; | 32 | int obj_size; |
33 | struct kmem_cache *slab; | 33 | struct kmem_cache *slab; |
34 | char *slab_name; | ||
34 | int (*rtx_syn_ack)(struct sock *sk, | 35 | int (*rtx_syn_ack)(struct sock *sk, |
35 | struct request_sock *req); | 36 | struct request_sock *req); |
36 | void (*send_ack)(struct sock *sk, struct sk_buff *skb, | 37 | void (*send_ack)(struct sock *sk, struct sk_buff *skb, |
diff --git a/include/net/timewait_sock.h b/include/net/timewait_sock.h index 1e1ee3253fd8..97c3b14da55d 100644 --- a/include/net/timewait_sock.h +++ b/include/net/timewait_sock.h | |||
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | struct timewait_sock_ops { | 17 | struct timewait_sock_ops { |
18 | struct kmem_cache *twsk_slab; | 18 | struct kmem_cache *twsk_slab; |
19 | char *twsk_slab_name; | ||
19 | unsigned int twsk_obj_size; | 20 | unsigned int twsk_obj_size; |
20 | int (*twsk_unique)(struct sock *sk, | 21 | int (*twsk_unique)(struct sock *sk, |
21 | struct sock *sktw, void *twp); | 22 | struct sock *sktw, void *twp); |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 49d8913c4f86..6e04e6fe79c7 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
@@ -357,7 +357,7 @@ struct fc_rport { /* aka fc_starget_attrs */ | |||
357 | /* bit field values for struct fc_rport "flags" field: */ | 357 | /* bit field values for struct fc_rport "flags" field: */ |
358 | #define FC_RPORT_DEVLOSS_PENDING 0x01 | 358 | #define FC_RPORT_DEVLOSS_PENDING 0x01 |
359 | #define FC_RPORT_SCAN_PENDING 0x02 | 359 | #define FC_RPORT_SCAN_PENDING 0x02 |
360 | #define FC_RPORT_FAST_FAIL_TIMEDOUT 0x03 | 360 | #define FC_RPORT_FAST_FAIL_TIMEDOUT 0x04 |
361 | 361 | ||
362 | #define dev_to_rport(d) \ | 362 | #define dev_to_rport(d) \ |
363 | container_of(d, struct fc_rport, dev) | 363 | container_of(d, struct fc_rport, dev) |
diff --git a/include/trace/block.h b/include/trace/block.h new file mode 100644 index 000000000000..25c6a1fd5b77 --- /dev/null +++ b/include/trace/block.h | |||
@@ -0,0 +1,76 @@ | |||
1 | #ifndef _TRACE_BLOCK_H | ||
2 | #define _TRACE_BLOCK_H | ||
3 | |||
4 | #include <linux/blkdev.h> | ||
5 | #include <linux/tracepoint.h> | ||
6 | |||
7 | DECLARE_TRACE(block_rq_abort, | ||
8 | TPPROTO(struct request_queue *q, struct request *rq), | ||
9 | TPARGS(q, rq)); | ||
10 | |||
11 | DECLARE_TRACE(block_rq_insert, | ||
12 | TPPROTO(struct request_queue *q, struct request *rq), | ||
13 | TPARGS(q, rq)); | ||
14 | |||
15 | DECLARE_TRACE(block_rq_issue, | ||
16 | TPPROTO(struct request_queue *q, struct request *rq), | ||
17 | TPARGS(q, rq)); | ||
18 | |||
19 | DECLARE_TRACE(block_rq_requeue, | ||
20 | TPPROTO(struct request_queue *q, struct request *rq), | ||
21 | TPARGS(q, rq)); | ||
22 | |||
23 | DECLARE_TRACE(block_rq_complete, | ||
24 | TPPROTO(struct request_queue *q, struct request *rq), | ||
25 | TPARGS(q, rq)); | ||
26 | |||
27 | DECLARE_TRACE(block_bio_bounce, | ||
28 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
29 | TPARGS(q, bio)); | ||
30 | |||
31 | DECLARE_TRACE(block_bio_complete, | ||
32 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
33 | TPARGS(q, bio)); | ||
34 | |||
35 | DECLARE_TRACE(block_bio_backmerge, | ||
36 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
37 | TPARGS(q, bio)); | ||
38 | |||
39 | DECLARE_TRACE(block_bio_frontmerge, | ||
40 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
41 | TPARGS(q, bio)); | ||
42 | |||
43 | DECLARE_TRACE(block_bio_queue, | ||
44 | TPPROTO(struct request_queue *q, struct bio *bio), | ||
45 | TPARGS(q, bio)); | ||
46 | |||
47 | DECLARE_TRACE(block_getrq, | ||
48 | TPPROTO(struct request_queue *q, struct bio *bio, int rw), | ||
49 | TPARGS(q, bio, rw)); | ||
50 | |||
51 | DECLARE_TRACE(block_sleeprq, | ||
52 | TPPROTO(struct request_queue *q, struct bio *bio, int rw), | ||
53 | TPARGS(q, bio, rw)); | ||
54 | |||
55 | DECLARE_TRACE(block_plug, | ||
56 | TPPROTO(struct request_queue *q), | ||
57 | TPARGS(q)); | ||
58 | |||
59 | DECLARE_TRACE(block_unplug_timer, | ||
60 | TPPROTO(struct request_queue *q), | ||
61 | TPARGS(q)); | ||
62 | |||
63 | DECLARE_TRACE(block_unplug_io, | ||
64 | TPPROTO(struct request_queue *q), | ||
65 | TPARGS(q)); | ||
66 | |||
67 | DECLARE_TRACE(block_split, | ||
68 | TPPROTO(struct request_queue *q, struct bio *bio, unsigned int pdu), | ||
69 | TPARGS(q, bio, pdu)); | ||
70 | |||
71 | DECLARE_TRACE(block_remap, | ||
72 | TPPROTO(struct request_queue *q, struct bio *bio, dev_t dev, | ||
73 | sector_t from, sector_t to), | ||
74 | TPARGS(q, bio, dev, from, to)); | ||
75 | |||
76 | #endif | ||
diff --git a/include/trace/boot.h b/include/trace/boot.h index 6b54537eab02..088ea089e31d 100644 --- a/include/trace/boot.h +++ b/include/trace/boot.h | |||
@@ -1,6 +1,10 @@ | |||
1 | #ifndef _LINUX_TRACE_BOOT_H | 1 | #ifndef _LINUX_TRACE_BOOT_H |
2 | #define _LINUX_TRACE_BOOT_H | 2 | #define _LINUX_TRACE_BOOT_H |
3 | 3 | ||
4 | #include <linux/module.h> | ||
5 | #include <linux/kallsyms.h> | ||
6 | #include <linux/init.h> | ||
7 | |||
4 | /* | 8 | /* |
5 | * Structure which defines the trace of an initcall | 9 | * Structure which defines the trace of an initcall |
6 | * while it is called. | 10 | * while it is called. |
@@ -9,7 +13,7 @@ | |||
9 | */ | 13 | */ |
10 | struct boot_trace_call { | 14 | struct boot_trace_call { |
11 | pid_t caller; | 15 | pid_t caller; |
12 | char func[KSYM_NAME_LEN]; | 16 | char func[KSYM_SYMBOL_LEN]; |
13 | }; | 17 | }; |
14 | 18 | ||
15 | /* | 19 | /* |
@@ -17,7 +21,7 @@ struct boot_trace_call { | |||
17 | * while it returns. | 21 | * while it returns. |
18 | */ | 22 | */ |
19 | struct boot_trace_ret { | 23 | struct boot_trace_ret { |
20 | char func[KSYM_NAME_LEN]; | 24 | char func[KSYM_SYMBOL_LEN]; |
21 | int result; | 25 | int result; |
22 | unsigned long long duration; /* nsecs */ | 26 | unsigned long long duration; /* nsecs */ |
23 | }; | 27 | }; |
diff --git a/kernel/Makefile b/kernel/Makefile index 010ccb311166..6a212b842d86 100644 --- a/kernel/Makefile +++ b/kernel/Makefile | |||
@@ -20,10 +20,6 @@ CFLAGS_REMOVE_rtmutex-debug.o = -pg | |||
20 | CFLAGS_REMOVE_cgroup-debug.o = -pg | 20 | CFLAGS_REMOVE_cgroup-debug.o = -pg |
21 | CFLAGS_REMOVE_sched_clock.o = -pg | 21 | CFLAGS_REMOVE_sched_clock.o = -pg |
22 | endif | 22 | endif |
23 | ifdef CONFIG_FUNCTION_RET_TRACER | ||
24 | CFLAGS_REMOVE_extable.o = -pg # For __kernel_text_address() | ||
25 | CFLAGS_REMOVE_module.o = -pg # For __module_text_address() | ||
26 | endif | ||
27 | 23 | ||
28 | obj-$(CONFIG_FREEZER) += freezer.o | 24 | obj-$(CONFIG_FREEZER) += freezer.o |
29 | obj-$(CONFIG_PROFILING) += profile.o | 25 | obj-$(CONFIG_PROFILING) += profile.o |
diff --git a/kernel/extable.c b/kernel/extable.c index adf0cc9c02d6..e136ed8d82ba 100644 --- a/kernel/extable.c +++ b/kernel/extable.c | |||
@@ -17,6 +17,7 @@ | |||
17 | */ | 17 | */ |
18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/ftrace.h> | ||
20 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
21 | #include <asm/sections.h> | 22 | #include <asm/sections.h> |
22 | 23 | ||
@@ -40,7 +41,7 @@ const struct exception_table_entry *search_exception_tables(unsigned long addr) | |||
40 | return e; | 41 | return e; |
41 | } | 42 | } |
42 | 43 | ||
43 | int core_kernel_text(unsigned long addr) | 44 | __notrace_funcgraph int core_kernel_text(unsigned long addr) |
44 | { | 45 | { |
45 | if (addr >= (unsigned long)_stext && | 46 | if (addr >= (unsigned long)_stext && |
46 | addr <= (unsigned long)_etext) | 47 | addr <= (unsigned long)_etext) |
@@ -53,7 +54,7 @@ int core_kernel_text(unsigned long addr) | |||
53 | return 0; | 54 | return 0; |
54 | } | 55 | } |
55 | 56 | ||
56 | int __kernel_text_address(unsigned long addr) | 57 | __notrace_funcgraph int __kernel_text_address(unsigned long addr) |
57 | { | 58 | { |
58 | if (core_kernel_text(addr)) | 59 | if (core_kernel_text(addr)) |
59 | return 1; | 60 | return 1; |
diff --git a/kernel/fork.c b/kernel/fork.c index d6e1a3205f62..7407ab319875 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -140,7 +140,7 @@ void free_task(struct task_struct *tsk) | |||
140 | prop_local_destroy_single(&tsk->dirties); | 140 | prop_local_destroy_single(&tsk->dirties); |
141 | free_thread_info(tsk->stack); | 141 | free_thread_info(tsk->stack); |
142 | rt_mutex_debug_task_free(tsk); | 142 | rt_mutex_debug_task_free(tsk); |
143 | ftrace_retfunc_exit_task(tsk); | 143 | ftrace_graph_exit_task(tsk); |
144 | free_task_struct(tsk); | 144 | free_task_struct(tsk); |
145 | } | 145 | } |
146 | EXPORT_SYMBOL(free_task); | 146 | EXPORT_SYMBOL(free_task); |
@@ -1137,6 +1137,8 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1137 | } | 1137 | } |
1138 | } | 1138 | } |
1139 | 1139 | ||
1140 | ftrace_graph_init_task(p); | ||
1141 | |||
1140 | p->pid = pid_nr(pid); | 1142 | p->pid = pid_nr(pid); |
1141 | p->tgid = p->pid; | 1143 | p->tgid = p->pid; |
1142 | if (clone_flags & CLONE_THREAD) | 1144 | if (clone_flags & CLONE_THREAD) |
@@ -1145,7 +1147,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1145 | if (current->nsproxy != p->nsproxy) { | 1147 | if (current->nsproxy != p->nsproxy) { |
1146 | retval = ns_cgroup_clone(p, pid); | 1148 | retval = ns_cgroup_clone(p, pid); |
1147 | if (retval) | 1149 | if (retval) |
1148 | goto bad_fork_free_pid; | 1150 | goto bad_fork_free_graph; |
1149 | } | 1151 | } |
1150 | 1152 | ||
1151 | p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL; | 1153 | p->set_child_tid = (clone_flags & CLONE_CHILD_SETTID) ? child_tidptr : NULL; |
@@ -1238,7 +1240,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1238 | spin_unlock(¤t->sighand->siglock); | 1240 | spin_unlock(¤t->sighand->siglock); |
1239 | write_unlock_irq(&tasklist_lock); | 1241 | write_unlock_irq(&tasklist_lock); |
1240 | retval = -ERESTARTNOINTR; | 1242 | retval = -ERESTARTNOINTR; |
1241 | goto bad_fork_free_pid; | 1243 | goto bad_fork_free_graph; |
1242 | } | 1244 | } |
1243 | 1245 | ||
1244 | if (clone_flags & CLONE_THREAD) { | 1246 | if (clone_flags & CLONE_THREAD) { |
@@ -1271,11 +1273,12 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1271 | total_forks++; | 1273 | total_forks++; |
1272 | spin_unlock(¤t->sighand->siglock); | 1274 | spin_unlock(¤t->sighand->siglock); |
1273 | write_unlock_irq(&tasklist_lock); | 1275 | write_unlock_irq(&tasklist_lock); |
1274 | ftrace_retfunc_init_task(p); | ||
1275 | proc_fork_connector(p); | 1276 | proc_fork_connector(p); |
1276 | cgroup_post_fork(p); | 1277 | cgroup_post_fork(p); |
1277 | return p; | 1278 | return p; |
1278 | 1279 | ||
1280 | bad_fork_free_graph: | ||
1281 | ftrace_graph_exit_task(p); | ||
1279 | bad_fork_free_pid: | 1282 | bad_fork_free_pid: |
1280 | if (pid != &init_struct_pid) | 1283 | if (pid != &init_struct_pid) |
1281 | free_pid(pid); | 1284 | free_pid(pid); |
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index e4bdda8dcf04..c4c7df23f8c7 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
@@ -25,6 +25,7 @@ | |||
25 | * Thanks to Arjan van de Ven for coming up with the initial idea of | 25 | * Thanks to Arjan van de Ven for coming up with the initial idea of |
26 | * mapping lock dependencies runtime. | 26 | * mapping lock dependencies runtime. |
27 | */ | 27 | */ |
28 | #define DISABLE_BRANCH_PROFILING | ||
28 | #include <linux/mutex.h> | 29 | #include <linux/mutex.h> |
29 | #include <linux/sched.h> | 30 | #include <linux/sched.h> |
30 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
diff --git a/kernel/module.c b/kernel/module.c index 89bcf7c1327d..dd2a54155b54 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -2704,7 +2704,7 @@ int is_module_address(unsigned long addr) | |||
2704 | 2704 | ||
2705 | 2705 | ||
2706 | /* Is this a valid kernel address? */ | 2706 | /* Is this a valid kernel address? */ |
2707 | struct module *__module_text_address(unsigned long addr) | 2707 | __notrace_funcgraph struct module *__module_text_address(unsigned long addr) |
2708 | { | 2708 | { |
2709 | struct module *mod; | 2709 | struct module *mod; |
2710 | 2710 | ||
diff --git a/kernel/sched.c b/kernel/sched.c index 8050a61a7adb..4ed9f588faa6 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -5893,7 +5893,7 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu) | |||
5893 | * The idle tasks have their own, simple scheduling class: | 5893 | * The idle tasks have their own, simple scheduling class: |
5894 | */ | 5894 | */ |
5895 | idle->sched_class = &idle_sched_class; | 5895 | idle->sched_class = &idle_sched_class; |
5896 | ftrace_retfunc_init_task(idle); | 5896 | ftrace_graph_init_task(idle); |
5897 | } | 5897 | } |
5898 | 5898 | ||
5899 | /* | 5899 | /* |
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig index 9cbf7761f498..bde6f03512d5 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig | |||
@@ -12,7 +12,7 @@ config NOP_TRACER | |||
12 | config HAVE_FUNCTION_TRACER | 12 | config HAVE_FUNCTION_TRACER |
13 | bool | 13 | bool |
14 | 14 | ||
15 | config HAVE_FUNCTION_RET_TRACER | 15 | config HAVE_FUNCTION_GRAPH_TRACER |
16 | bool | 16 | bool |
17 | 17 | ||
18 | config HAVE_FUNCTION_TRACE_MCOUNT_TEST | 18 | config HAVE_FUNCTION_TRACE_MCOUNT_TEST |
@@ -28,6 +28,9 @@ config HAVE_DYNAMIC_FTRACE | |||
28 | config HAVE_FTRACE_MCOUNT_RECORD | 28 | config HAVE_FTRACE_MCOUNT_RECORD |
29 | bool | 29 | bool |
30 | 30 | ||
31 | config HAVE_HW_BRANCH_TRACER | ||
32 | bool | ||
33 | |||
31 | config TRACER_MAX_TRACE | 34 | config TRACER_MAX_TRACE |
32 | bool | 35 | bool |
33 | 36 | ||
@@ -60,15 +63,19 @@ config FUNCTION_TRACER | |||
60 | (the bootup default), then the overhead of the instructions is very | 63 | (the bootup default), then the overhead of the instructions is very |
61 | small and not measurable even in micro-benchmarks. | 64 | small and not measurable even in micro-benchmarks. |
62 | 65 | ||
63 | config FUNCTION_RET_TRACER | 66 | config FUNCTION_GRAPH_TRACER |
64 | bool "Kernel Function return Tracer" | 67 | bool "Kernel Function Graph Tracer" |
65 | depends on HAVE_FUNCTION_RET_TRACER | 68 | depends on HAVE_FUNCTION_GRAPH_TRACER |
66 | depends on FUNCTION_TRACER | 69 | depends on FUNCTION_TRACER |
70 | default y | ||
67 | help | 71 | help |
68 | Enable the kernel to trace a function at its return. | 72 | Enable the kernel to trace a function at both its return |
69 | It's first purpose is to trace the duration of functions. | 73 | and its entry. |
70 | This is done by setting the current return address on the thread | 74 | It's first purpose is to trace the duration of functions and |
71 | info structure of the current task. | 75 | draw a call graph for each thread with some informations like |
76 | the return value. | ||
77 | This is done by setting the current return address on the current | ||
78 | task structure into a stack of calls. | ||
72 | 79 | ||
73 | config IRQSOFF_TRACER | 80 | config IRQSOFF_TRACER |
74 | bool "Interrupts-off Latency Tracer" | 81 | bool "Interrupts-off Latency Tracer" |
@@ -214,6 +221,17 @@ config BRANCH_TRACER | |||
214 | 221 | ||
215 | Say N if unsure. | 222 | Say N if unsure. |
216 | 223 | ||
224 | config POWER_TRACER | ||
225 | bool "Trace power consumption behavior" | ||
226 | depends on DEBUG_KERNEL | ||
227 | depends on X86 | ||
228 | select TRACING | ||
229 | help | ||
230 | This tracer helps developers to analyze and optimize the kernels | ||
231 | power management decisions, specifically the C-state and P-state | ||
232 | behavior. | ||
233 | |||
234 | |||
217 | config STACK_TRACER | 235 | config STACK_TRACER |
218 | bool "Trace max stack" | 236 | bool "Trace max stack" |
219 | depends on HAVE_FUNCTION_TRACER | 237 | depends on HAVE_FUNCTION_TRACER |
@@ -233,6 +251,14 @@ config STACK_TRACER | |||
233 | 251 | ||
234 | Say N if unsure. | 252 | Say N if unsure. |
235 | 253 | ||
254 | config BTS_TRACER | ||
255 | depends on HAVE_HW_BRANCH_TRACER | ||
256 | bool "Trace branches" | ||
257 | select TRACING | ||
258 | help | ||
259 | This tracer records all branches on the system in a circular | ||
260 | buffer giving access to the last N branches for each cpu. | ||
261 | |||
236 | config DYNAMIC_FTRACE | 262 | config DYNAMIC_FTRACE |
237 | bool "enable/disable ftrace tracepoints dynamically" | 263 | bool "enable/disable ftrace tracepoints dynamically" |
238 | depends on FUNCTION_TRACER | 264 | depends on FUNCTION_TRACER |
diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile index 1a8c9259dc69..62dc561b6676 100644 --- a/kernel/trace/Makefile +++ b/kernel/trace/Makefile | |||
@@ -29,7 +29,9 @@ obj-$(CONFIG_NOP_TRACER) += trace_nop.o | |||
29 | obj-$(CONFIG_STACK_TRACER) += trace_stack.o | 29 | obj-$(CONFIG_STACK_TRACER) += trace_stack.o |
30 | obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o | 30 | obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o |
31 | obj-$(CONFIG_BOOT_TRACER) += trace_boot.o | 31 | obj-$(CONFIG_BOOT_TRACER) += trace_boot.o |
32 | obj-$(CONFIG_FUNCTION_RET_TRACER) += trace_functions_return.o | 32 | obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += trace_functions_graph.o |
33 | obj-$(CONFIG_TRACE_BRANCH_PROFILING) += trace_branch.o | 33 | obj-$(CONFIG_TRACE_BRANCH_PROFILING) += trace_branch.o |
34 | obj-$(CONFIG_BTS_TRACER) += trace_bts.o | ||
35 | obj-$(CONFIG_POWER_TRACER) += trace_power.o | ||
34 | 36 | ||
35 | libftrace-y := ftrace.o | 37 | libftrace-y := ftrace.o |
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 53042f118f23..a12f80efceaa 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
@@ -47,12 +47,13 @@ | |||
47 | int ftrace_enabled __read_mostly; | 47 | int ftrace_enabled __read_mostly; |
48 | static int last_ftrace_enabled; | 48 | static int last_ftrace_enabled; |
49 | 49 | ||
50 | /* set when tracing only a pid */ | ||
51 | struct pid *ftrace_pid_trace; | ||
52 | static struct pid * const ftrace_swapper_pid = &init_struct_pid; | ||
53 | |||
50 | /* Quick disabling of function tracer. */ | 54 | /* Quick disabling of function tracer. */ |
51 | int function_trace_stop; | 55 | int function_trace_stop; |
52 | 56 | ||
53 | /* By default, current tracing type is normal tracing. */ | ||
54 | enum ftrace_tracing_type_t ftrace_tracing_type = FTRACE_TYPE_ENTER; | ||
55 | |||
56 | /* | 57 | /* |
57 | * ftrace_disabled is set when an anomaly is discovered. | 58 | * ftrace_disabled is set when an anomaly is discovered. |
58 | * ftrace_disabled is much stronger than ftrace_enabled. | 59 | * ftrace_disabled is much stronger than ftrace_enabled. |
@@ -61,6 +62,7 @@ static int ftrace_disabled __read_mostly; | |||
61 | 62 | ||
62 | static DEFINE_SPINLOCK(ftrace_lock); | 63 | static DEFINE_SPINLOCK(ftrace_lock); |
63 | static DEFINE_MUTEX(ftrace_sysctl_lock); | 64 | static DEFINE_MUTEX(ftrace_sysctl_lock); |
65 | static DEFINE_MUTEX(ftrace_start_lock); | ||
64 | 66 | ||
65 | static struct ftrace_ops ftrace_list_end __read_mostly = | 67 | static struct ftrace_ops ftrace_list_end __read_mostly = |
66 | { | 68 | { |
@@ -70,6 +72,7 @@ static struct ftrace_ops ftrace_list_end __read_mostly = | |||
70 | static struct ftrace_ops *ftrace_list __read_mostly = &ftrace_list_end; | 72 | static struct ftrace_ops *ftrace_list __read_mostly = &ftrace_list_end; |
71 | ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub; | 73 | ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub; |
72 | ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub; | 74 | ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub; |
75 | ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub; | ||
73 | 76 | ||
74 | static void ftrace_list_func(unsigned long ip, unsigned long parent_ip) | 77 | static void ftrace_list_func(unsigned long ip, unsigned long parent_ip) |
75 | { | 78 | { |
@@ -86,6 +89,21 @@ static void ftrace_list_func(unsigned long ip, unsigned long parent_ip) | |||
86 | }; | 89 | }; |
87 | } | 90 | } |
88 | 91 | ||
92 | static void ftrace_pid_func(unsigned long ip, unsigned long parent_ip) | ||
93 | { | ||
94 | if (!test_tsk_trace_trace(current)) | ||
95 | return; | ||
96 | |||
97 | ftrace_pid_function(ip, parent_ip); | ||
98 | } | ||
99 | |||
100 | static void set_ftrace_pid_function(ftrace_func_t func) | ||
101 | { | ||
102 | /* do not set ftrace_pid_function to itself! */ | ||
103 | if (func != ftrace_pid_func) | ||
104 | ftrace_pid_function = func; | ||
105 | } | ||
106 | |||
89 | /** | 107 | /** |
90 | * clear_ftrace_function - reset the ftrace function | 108 | * clear_ftrace_function - reset the ftrace function |
91 | * | 109 | * |
@@ -96,6 +114,7 @@ void clear_ftrace_function(void) | |||
96 | { | 114 | { |
97 | ftrace_trace_function = ftrace_stub; | 115 | ftrace_trace_function = ftrace_stub; |
98 | __ftrace_trace_function = ftrace_stub; | 116 | __ftrace_trace_function = ftrace_stub; |
117 | ftrace_pid_function = ftrace_stub; | ||
99 | } | 118 | } |
100 | 119 | ||
101 | #ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST | 120 | #ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST |
@@ -128,20 +147,26 @@ static int __register_ftrace_function(struct ftrace_ops *ops) | |||
128 | ftrace_list = ops; | 147 | ftrace_list = ops; |
129 | 148 | ||
130 | if (ftrace_enabled) { | 149 | if (ftrace_enabled) { |
150 | ftrace_func_t func; | ||
151 | |||
152 | if (ops->next == &ftrace_list_end) | ||
153 | func = ops->func; | ||
154 | else | ||
155 | func = ftrace_list_func; | ||
156 | |||
157 | if (ftrace_pid_trace) { | ||
158 | set_ftrace_pid_function(func); | ||
159 | func = ftrace_pid_func; | ||
160 | } | ||
161 | |||
131 | /* | 162 | /* |
132 | * For one func, simply call it directly. | 163 | * For one func, simply call it directly. |
133 | * For more than one func, call the chain. | 164 | * For more than one func, call the chain. |
134 | */ | 165 | */ |
135 | #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST | 166 | #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST |
136 | if (ops->next == &ftrace_list_end) | 167 | ftrace_trace_function = func; |
137 | ftrace_trace_function = ops->func; | ||
138 | else | ||
139 | ftrace_trace_function = ftrace_list_func; | ||
140 | #else | 168 | #else |
141 | if (ops->next == &ftrace_list_end) | 169 | __ftrace_trace_function = func; |
142 | __ftrace_trace_function = ops->func; | ||
143 | else | ||
144 | __ftrace_trace_function = ftrace_list_func; | ||
145 | ftrace_trace_function = ftrace_test_stop_func; | 170 | ftrace_trace_function = ftrace_test_stop_func; |
146 | #endif | 171 | #endif |
147 | } | 172 | } |
@@ -182,8 +207,19 @@ static int __unregister_ftrace_function(struct ftrace_ops *ops) | |||
182 | 207 | ||
183 | if (ftrace_enabled) { | 208 | if (ftrace_enabled) { |
184 | /* If we only have one func left, then call that directly */ | 209 | /* If we only have one func left, then call that directly */ |
185 | if (ftrace_list->next == &ftrace_list_end) | 210 | if (ftrace_list->next == &ftrace_list_end) { |
186 | ftrace_trace_function = ftrace_list->func; | 211 | ftrace_func_t func = ftrace_list->func; |
212 | |||
213 | if (ftrace_pid_trace) { | ||
214 | set_ftrace_pid_function(func); | ||
215 | func = ftrace_pid_func; | ||
216 | } | ||
217 | #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST | ||
218 | ftrace_trace_function = func; | ||
219 | #else | ||
220 | __ftrace_trace_function = func; | ||
221 | #endif | ||
222 | } | ||
187 | } | 223 | } |
188 | 224 | ||
189 | out: | 225 | out: |
@@ -192,6 +228,36 @@ static int __unregister_ftrace_function(struct ftrace_ops *ops) | |||
192 | return ret; | 228 | return ret; |
193 | } | 229 | } |
194 | 230 | ||
231 | static void ftrace_update_pid_func(void) | ||
232 | { | ||
233 | ftrace_func_t func; | ||
234 | |||
235 | /* should not be called from interrupt context */ | ||
236 | spin_lock(&ftrace_lock); | ||
237 | |||
238 | if (ftrace_trace_function == ftrace_stub) | ||
239 | goto out; | ||
240 | |||
241 | func = ftrace_trace_function; | ||
242 | |||
243 | if (ftrace_pid_trace) { | ||
244 | set_ftrace_pid_function(func); | ||
245 | func = ftrace_pid_func; | ||
246 | } else { | ||
247 | if (func == ftrace_pid_func) | ||
248 | func = ftrace_pid_function; | ||
249 | } | ||
250 | |||
251 | #ifdef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST | ||
252 | ftrace_trace_function = func; | ||
253 | #else | ||
254 | __ftrace_trace_function = func; | ||
255 | #endif | ||
256 | |||
257 | out: | ||
258 | spin_unlock(&ftrace_lock); | ||
259 | } | ||
260 | |||
195 | #ifdef CONFIG_DYNAMIC_FTRACE | 261 | #ifdef CONFIG_DYNAMIC_FTRACE |
196 | #ifndef CONFIG_FTRACE_MCOUNT_RECORD | 262 | #ifndef CONFIG_FTRACE_MCOUNT_RECORD |
197 | # error Dynamic ftrace depends on MCOUNT_RECORD | 263 | # error Dynamic ftrace depends on MCOUNT_RECORD |
@@ -211,6 +277,8 @@ enum { | |||
211 | FTRACE_UPDATE_TRACE_FUNC = (1 << 2), | 277 | FTRACE_UPDATE_TRACE_FUNC = (1 << 2), |
212 | FTRACE_ENABLE_MCOUNT = (1 << 3), | 278 | FTRACE_ENABLE_MCOUNT = (1 << 3), |
213 | FTRACE_DISABLE_MCOUNT = (1 << 4), | 279 | FTRACE_DISABLE_MCOUNT = (1 << 4), |
280 | FTRACE_START_FUNC_RET = (1 << 5), | ||
281 | FTRACE_STOP_FUNC_RET = (1 << 6), | ||
214 | }; | 282 | }; |
215 | 283 | ||
216 | static int ftrace_filtered; | 284 | static int ftrace_filtered; |
@@ -395,14 +463,7 @@ __ftrace_replace_code(struct dyn_ftrace *rec, int enable) | |||
395 | unsigned long ip, fl; | 463 | unsigned long ip, fl; |
396 | unsigned long ftrace_addr; | 464 | unsigned long ftrace_addr; |
397 | 465 | ||
398 | #ifdef CONFIG_FUNCTION_RET_TRACER | ||
399 | if (ftrace_tracing_type == FTRACE_TYPE_ENTER) | ||
400 | ftrace_addr = (unsigned long)ftrace_caller; | ||
401 | else | ||
402 | ftrace_addr = (unsigned long)ftrace_return_caller; | ||
403 | #else | ||
404 | ftrace_addr = (unsigned long)ftrace_caller; | 466 | ftrace_addr = (unsigned long)ftrace_caller; |
405 | #endif | ||
406 | 467 | ||
407 | ip = rec->ip; | 468 | ip = rec->ip; |
408 | 469 | ||
@@ -535,6 +596,11 @@ static int __ftrace_modify_code(void *data) | |||
535 | if (*command & FTRACE_UPDATE_TRACE_FUNC) | 596 | if (*command & FTRACE_UPDATE_TRACE_FUNC) |
536 | ftrace_update_ftrace_func(ftrace_trace_function); | 597 | ftrace_update_ftrace_func(ftrace_trace_function); |
537 | 598 | ||
599 | if (*command & FTRACE_START_FUNC_RET) | ||
600 | ftrace_enable_ftrace_graph_caller(); | ||
601 | else if (*command & FTRACE_STOP_FUNC_RET) | ||
602 | ftrace_disable_ftrace_graph_caller(); | ||
603 | |||
538 | return 0; | 604 | return 0; |
539 | } | 605 | } |
540 | 606 | ||
@@ -545,12 +611,22 @@ static void ftrace_run_update_code(int command) | |||
545 | 611 | ||
546 | static ftrace_func_t saved_ftrace_func; | 612 | static ftrace_func_t saved_ftrace_func; |
547 | static int ftrace_start_up; | 613 | static int ftrace_start_up; |
548 | static DEFINE_MUTEX(ftrace_start_lock); | ||
549 | 614 | ||
550 | static void ftrace_startup(void) | 615 | static void ftrace_startup_enable(int command) |
551 | { | 616 | { |
552 | int command = 0; | 617 | if (saved_ftrace_func != ftrace_trace_function) { |
618 | saved_ftrace_func = ftrace_trace_function; | ||
619 | command |= FTRACE_UPDATE_TRACE_FUNC; | ||
620 | } | ||
553 | 621 | ||
622 | if (!command || !ftrace_enabled) | ||
623 | return; | ||
624 | |||
625 | ftrace_run_update_code(command); | ||
626 | } | ||
627 | |||
628 | static void ftrace_startup(int command) | ||
629 | { | ||
554 | if (unlikely(ftrace_disabled)) | 630 | if (unlikely(ftrace_disabled)) |
555 | return; | 631 | return; |
556 | 632 | ||
@@ -558,23 +634,13 @@ static void ftrace_startup(void) | |||
558 | ftrace_start_up++; | 634 | ftrace_start_up++; |
559 | command |= FTRACE_ENABLE_CALLS; | 635 | command |= FTRACE_ENABLE_CALLS; |
560 | 636 | ||
561 | if (saved_ftrace_func != ftrace_trace_function) { | 637 | ftrace_startup_enable(command); |
562 | saved_ftrace_func = ftrace_trace_function; | ||
563 | command |= FTRACE_UPDATE_TRACE_FUNC; | ||
564 | } | ||
565 | 638 | ||
566 | if (!command || !ftrace_enabled) | ||
567 | goto out; | ||
568 | |||
569 | ftrace_run_update_code(command); | ||
570 | out: | ||
571 | mutex_unlock(&ftrace_start_lock); | 639 | mutex_unlock(&ftrace_start_lock); |
572 | } | 640 | } |
573 | 641 | ||
574 | static void ftrace_shutdown(void) | 642 | static void ftrace_shutdown(int command) |
575 | { | 643 | { |
576 | int command = 0; | ||
577 | |||
578 | if (unlikely(ftrace_disabled)) | 644 | if (unlikely(ftrace_disabled)) |
579 | return; | 645 | return; |
580 | 646 | ||
@@ -719,7 +785,6 @@ enum { | |||
719 | #define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */ | 785 | #define FTRACE_BUFF_MAX (KSYM_SYMBOL_LEN+4) /* room for wildcards */ |
720 | 786 | ||
721 | struct ftrace_iterator { | 787 | struct ftrace_iterator { |
722 | loff_t pos; | ||
723 | struct ftrace_page *pg; | 788 | struct ftrace_page *pg; |
724 | unsigned idx; | 789 | unsigned idx; |
725 | unsigned flags; | 790 | unsigned flags; |
@@ -744,6 +809,8 @@ t_next(struct seq_file *m, void *v, loff_t *pos) | |||
744 | iter->pg = iter->pg->next; | 809 | iter->pg = iter->pg->next; |
745 | iter->idx = 0; | 810 | iter->idx = 0; |
746 | goto retry; | 811 | goto retry; |
812 | } else { | ||
813 | iter->idx = -1; | ||
747 | } | 814 | } |
748 | } else { | 815 | } else { |
749 | rec = &iter->pg->records[iter->idx++]; | 816 | rec = &iter->pg->records[iter->idx++]; |
@@ -766,8 +833,6 @@ t_next(struct seq_file *m, void *v, loff_t *pos) | |||
766 | } | 833 | } |
767 | spin_unlock(&ftrace_lock); | 834 | spin_unlock(&ftrace_lock); |
768 | 835 | ||
769 | iter->pos = *pos; | ||
770 | |||
771 | return rec; | 836 | return rec; |
772 | } | 837 | } |
773 | 838 | ||
@@ -775,13 +840,15 @@ static void *t_start(struct seq_file *m, loff_t *pos) | |||
775 | { | 840 | { |
776 | struct ftrace_iterator *iter = m->private; | 841 | struct ftrace_iterator *iter = m->private; |
777 | void *p = NULL; | 842 | void *p = NULL; |
778 | loff_t l = -1; | ||
779 | 843 | ||
780 | if (*pos > iter->pos) | 844 | if (*pos > 0) { |
781 | *pos = iter->pos; | 845 | if (iter->idx < 0) |
846 | return p; | ||
847 | (*pos)--; | ||
848 | iter->idx--; | ||
849 | } | ||
782 | 850 | ||
783 | l = *pos; | 851 | p = t_next(m, p, pos); |
784 | p = t_next(m, p, &l); | ||
785 | 852 | ||
786 | return p; | 853 | return p; |
787 | } | 854 | } |
@@ -792,21 +859,15 @@ static void t_stop(struct seq_file *m, void *p) | |||
792 | 859 | ||
793 | static int t_show(struct seq_file *m, void *v) | 860 | static int t_show(struct seq_file *m, void *v) |
794 | { | 861 | { |
795 | struct ftrace_iterator *iter = m->private; | ||
796 | struct dyn_ftrace *rec = v; | 862 | struct dyn_ftrace *rec = v; |
797 | char str[KSYM_SYMBOL_LEN]; | 863 | char str[KSYM_SYMBOL_LEN]; |
798 | int ret = 0; | ||
799 | 864 | ||
800 | if (!rec) | 865 | if (!rec) |
801 | return 0; | 866 | return 0; |
802 | 867 | ||
803 | kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); | 868 | kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); |
804 | 869 | ||
805 | ret = seq_printf(m, "%s\n", str); | 870 | seq_printf(m, "%s\n", str); |
806 | if (ret < 0) { | ||
807 | iter->pos--; | ||
808 | iter->idx--; | ||
809 | } | ||
810 | 871 | ||
811 | return 0; | 872 | return 0; |
812 | } | 873 | } |
@@ -832,7 +893,6 @@ ftrace_avail_open(struct inode *inode, struct file *file) | |||
832 | return -ENOMEM; | 893 | return -ENOMEM; |
833 | 894 | ||
834 | iter->pg = ftrace_pages_start; | 895 | iter->pg = ftrace_pages_start; |
835 | iter->pos = 0; | ||
836 | 896 | ||
837 | ret = seq_open(file, &show_ftrace_seq_ops); | 897 | ret = seq_open(file, &show_ftrace_seq_ops); |
838 | if (!ret) { | 898 | if (!ret) { |
@@ -919,7 +979,6 @@ ftrace_regex_open(struct inode *inode, struct file *file, int enable) | |||
919 | 979 | ||
920 | if (file->f_mode & FMODE_READ) { | 980 | if (file->f_mode & FMODE_READ) { |
921 | iter->pg = ftrace_pages_start; | 981 | iter->pg = ftrace_pages_start; |
922 | iter->pos = 0; | ||
923 | iter->flags = enable ? FTRACE_ITER_FILTER : | 982 | iter->flags = enable ? FTRACE_ITER_FILTER : |
924 | FTRACE_ITER_NOTRACE; | 983 | FTRACE_ITER_NOTRACE; |
925 | 984 | ||
@@ -1262,12 +1321,233 @@ static struct file_operations ftrace_notrace_fops = { | |||
1262 | .release = ftrace_notrace_release, | 1321 | .release = ftrace_notrace_release, |
1263 | }; | 1322 | }; |
1264 | 1323 | ||
1265 | static __init int ftrace_init_debugfs(void) | 1324 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
1325 | |||
1326 | static DEFINE_MUTEX(graph_lock); | ||
1327 | |||
1328 | int ftrace_graph_count; | ||
1329 | unsigned long ftrace_graph_funcs[FTRACE_GRAPH_MAX_FUNCS] __read_mostly; | ||
1330 | |||
1331 | static void * | ||
1332 | g_next(struct seq_file *m, void *v, loff_t *pos) | ||
1266 | { | 1333 | { |
1267 | struct dentry *d_tracer; | 1334 | unsigned long *array = m->private; |
1268 | struct dentry *entry; | 1335 | int index = *pos; |
1269 | 1336 | ||
1270 | d_tracer = tracing_init_dentry(); | 1337 | (*pos)++; |
1338 | |||
1339 | if (index >= ftrace_graph_count) | ||
1340 | return NULL; | ||
1341 | |||
1342 | return &array[index]; | ||
1343 | } | ||
1344 | |||
1345 | static void *g_start(struct seq_file *m, loff_t *pos) | ||
1346 | { | ||
1347 | void *p = NULL; | ||
1348 | |||
1349 | mutex_lock(&graph_lock); | ||
1350 | |||
1351 | p = g_next(m, p, pos); | ||
1352 | |||
1353 | return p; | ||
1354 | } | ||
1355 | |||
1356 | static void g_stop(struct seq_file *m, void *p) | ||
1357 | { | ||
1358 | mutex_unlock(&graph_lock); | ||
1359 | } | ||
1360 | |||
1361 | static int g_show(struct seq_file *m, void *v) | ||
1362 | { | ||
1363 | unsigned long *ptr = v; | ||
1364 | char str[KSYM_SYMBOL_LEN]; | ||
1365 | |||
1366 | if (!ptr) | ||
1367 | return 0; | ||
1368 | |||
1369 | kallsyms_lookup(*ptr, NULL, NULL, NULL, str); | ||
1370 | |||
1371 | seq_printf(m, "%s\n", str); | ||
1372 | |||
1373 | return 0; | ||
1374 | } | ||
1375 | |||
1376 | static struct seq_operations ftrace_graph_seq_ops = { | ||
1377 | .start = g_start, | ||
1378 | .next = g_next, | ||
1379 | .stop = g_stop, | ||
1380 | .show = g_show, | ||
1381 | }; | ||
1382 | |||
1383 | static int | ||
1384 | ftrace_graph_open(struct inode *inode, struct file *file) | ||
1385 | { | ||
1386 | int ret = 0; | ||
1387 | |||
1388 | if (unlikely(ftrace_disabled)) | ||
1389 | return -ENODEV; | ||
1390 | |||
1391 | mutex_lock(&graph_lock); | ||
1392 | if ((file->f_mode & FMODE_WRITE) && | ||
1393 | !(file->f_flags & O_APPEND)) { | ||
1394 | ftrace_graph_count = 0; | ||
1395 | memset(ftrace_graph_funcs, 0, sizeof(ftrace_graph_funcs)); | ||
1396 | } | ||
1397 | |||
1398 | if (file->f_mode & FMODE_READ) { | ||
1399 | ret = seq_open(file, &ftrace_graph_seq_ops); | ||
1400 | if (!ret) { | ||
1401 | struct seq_file *m = file->private_data; | ||
1402 | m->private = ftrace_graph_funcs; | ||
1403 | } | ||
1404 | } else | ||
1405 | file->private_data = ftrace_graph_funcs; | ||
1406 | mutex_unlock(&graph_lock); | ||
1407 | |||
1408 | return ret; | ||
1409 | } | ||
1410 | |||
1411 | static ssize_t | ||
1412 | ftrace_graph_read(struct file *file, char __user *ubuf, | ||
1413 | size_t cnt, loff_t *ppos) | ||
1414 | { | ||
1415 | if (file->f_mode & FMODE_READ) | ||
1416 | return seq_read(file, ubuf, cnt, ppos); | ||
1417 | else | ||
1418 | return -EPERM; | ||
1419 | } | ||
1420 | |||
1421 | static int | ||
1422 | ftrace_set_func(unsigned long *array, int idx, char *buffer) | ||
1423 | { | ||
1424 | char str[KSYM_SYMBOL_LEN]; | ||
1425 | struct dyn_ftrace *rec; | ||
1426 | struct ftrace_page *pg; | ||
1427 | int found = 0; | ||
1428 | int i, j; | ||
1429 | |||
1430 | if (ftrace_disabled) | ||
1431 | return -ENODEV; | ||
1432 | |||
1433 | /* should not be called from interrupt context */ | ||
1434 | spin_lock(&ftrace_lock); | ||
1435 | |||
1436 | for (pg = ftrace_pages_start; pg; pg = pg->next) { | ||
1437 | for (i = 0; i < pg->index; i++) { | ||
1438 | rec = &pg->records[i]; | ||
1439 | |||
1440 | if (rec->flags & (FTRACE_FL_FAILED | FTRACE_FL_FREE)) | ||
1441 | continue; | ||
1442 | |||
1443 | kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); | ||
1444 | if (strcmp(str, buffer) == 0) { | ||
1445 | found = 1; | ||
1446 | for (j = 0; j < idx; j++) | ||
1447 | if (array[j] == rec->ip) { | ||
1448 | found = 0; | ||
1449 | break; | ||
1450 | } | ||
1451 | if (found) | ||
1452 | array[idx] = rec->ip; | ||
1453 | break; | ||
1454 | } | ||
1455 | } | ||
1456 | } | ||
1457 | spin_unlock(&ftrace_lock); | ||
1458 | |||
1459 | return found ? 0 : -EINVAL; | ||
1460 | } | ||
1461 | |||
1462 | static ssize_t | ||
1463 | ftrace_graph_write(struct file *file, const char __user *ubuf, | ||
1464 | size_t cnt, loff_t *ppos) | ||
1465 | { | ||
1466 | unsigned char buffer[FTRACE_BUFF_MAX+1]; | ||
1467 | unsigned long *array; | ||
1468 | size_t read = 0; | ||
1469 | ssize_t ret; | ||
1470 | int index = 0; | ||
1471 | char ch; | ||
1472 | |||
1473 | if (!cnt || cnt < 0) | ||
1474 | return 0; | ||
1475 | |||
1476 | mutex_lock(&graph_lock); | ||
1477 | |||
1478 | if (ftrace_graph_count >= FTRACE_GRAPH_MAX_FUNCS) { | ||
1479 | ret = -EBUSY; | ||
1480 | goto out; | ||
1481 | } | ||
1482 | |||
1483 | if (file->f_mode & FMODE_READ) { | ||
1484 | struct seq_file *m = file->private_data; | ||
1485 | array = m->private; | ||
1486 | } else | ||
1487 | array = file->private_data; | ||
1488 | |||
1489 | ret = get_user(ch, ubuf++); | ||
1490 | if (ret) | ||
1491 | goto out; | ||
1492 | read++; | ||
1493 | cnt--; | ||
1494 | |||
1495 | /* skip white space */ | ||
1496 | while (cnt && isspace(ch)) { | ||
1497 | ret = get_user(ch, ubuf++); | ||
1498 | if (ret) | ||
1499 | goto out; | ||
1500 | read++; | ||
1501 | cnt--; | ||
1502 | } | ||
1503 | |||
1504 | if (isspace(ch)) { | ||
1505 | *ppos += read; | ||
1506 | ret = read; | ||
1507 | goto out; | ||
1508 | } | ||
1509 | |||
1510 | while (cnt && !isspace(ch)) { | ||
1511 | if (index < FTRACE_BUFF_MAX) | ||
1512 | buffer[index++] = ch; | ||
1513 | else { | ||
1514 | ret = -EINVAL; | ||
1515 | goto out; | ||
1516 | } | ||
1517 | ret = get_user(ch, ubuf++); | ||
1518 | if (ret) | ||
1519 | goto out; | ||
1520 | read++; | ||
1521 | cnt--; | ||
1522 | } | ||
1523 | buffer[index] = 0; | ||
1524 | |||
1525 | /* we allow only one at a time */ | ||
1526 | ret = ftrace_set_func(array, ftrace_graph_count, buffer); | ||
1527 | if (ret) | ||
1528 | goto out; | ||
1529 | |||
1530 | ftrace_graph_count++; | ||
1531 | |||
1532 | file->f_pos += read; | ||
1533 | |||
1534 | ret = read; | ||
1535 | out: | ||
1536 | mutex_unlock(&graph_lock); | ||
1537 | |||
1538 | return ret; | ||
1539 | } | ||
1540 | |||
1541 | static const struct file_operations ftrace_graph_fops = { | ||
1542 | .open = ftrace_graph_open, | ||
1543 | .read = ftrace_graph_read, | ||
1544 | .write = ftrace_graph_write, | ||
1545 | }; | ||
1546 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | ||
1547 | |||
1548 | static __init int ftrace_init_dyn_debugfs(struct dentry *d_tracer) | ||
1549 | { | ||
1550 | struct dentry *entry; | ||
1271 | 1551 | ||
1272 | entry = debugfs_create_file("available_filter_functions", 0444, | 1552 | entry = debugfs_create_file("available_filter_functions", 0444, |
1273 | d_tracer, NULL, &ftrace_avail_fops); | 1553 | d_tracer, NULL, &ftrace_avail_fops); |
@@ -1292,11 +1572,18 @@ static __init int ftrace_init_debugfs(void) | |||
1292 | pr_warning("Could not create debugfs " | 1572 | pr_warning("Could not create debugfs " |
1293 | "'set_ftrace_notrace' entry\n"); | 1573 | "'set_ftrace_notrace' entry\n"); |
1294 | 1574 | ||
1575 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
1576 | entry = debugfs_create_file("set_graph_function", 0444, d_tracer, | ||
1577 | NULL, | ||
1578 | &ftrace_graph_fops); | ||
1579 | if (!entry) | ||
1580 | pr_warning("Could not create debugfs " | ||
1581 | "'set_graph_function' entry\n"); | ||
1582 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | ||
1583 | |||
1295 | return 0; | 1584 | return 0; |
1296 | } | 1585 | } |
1297 | 1586 | ||
1298 | fs_initcall(ftrace_init_debugfs); | ||
1299 | |||
1300 | static int ftrace_convert_nops(struct module *mod, | 1587 | static int ftrace_convert_nops(struct module *mod, |
1301 | unsigned long *start, | 1588 | unsigned long *start, |
1302 | unsigned long *end) | 1589 | unsigned long *end) |
@@ -1382,12 +1669,186 @@ static int __init ftrace_nodyn_init(void) | |||
1382 | } | 1669 | } |
1383 | device_initcall(ftrace_nodyn_init); | 1670 | device_initcall(ftrace_nodyn_init); |
1384 | 1671 | ||
1385 | # define ftrace_startup() do { } while (0) | 1672 | static inline int ftrace_init_dyn_debugfs(struct dentry *d_tracer) { return 0; } |
1386 | # define ftrace_shutdown() do { } while (0) | 1673 | static inline void ftrace_startup_enable(int command) { } |
1674 | /* Keep as macros so we do not need to define the commands */ | ||
1675 | # define ftrace_startup(command) do { } while (0) | ||
1676 | # define ftrace_shutdown(command) do { } while (0) | ||
1387 | # define ftrace_startup_sysctl() do { } while (0) | 1677 | # define ftrace_startup_sysctl() do { } while (0) |
1388 | # define ftrace_shutdown_sysctl() do { } while (0) | 1678 | # define ftrace_shutdown_sysctl() do { } while (0) |
1389 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 1679 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
1390 | 1680 | ||
1681 | static ssize_t | ||
1682 | ftrace_pid_read(struct file *file, char __user *ubuf, | ||
1683 | size_t cnt, loff_t *ppos) | ||
1684 | { | ||
1685 | char buf[64]; | ||
1686 | int r; | ||
1687 | |||
1688 | if (ftrace_pid_trace == ftrace_swapper_pid) | ||
1689 | r = sprintf(buf, "swapper tasks\n"); | ||
1690 | else if (ftrace_pid_trace) | ||
1691 | r = sprintf(buf, "%u\n", pid_nr(ftrace_pid_trace)); | ||
1692 | else | ||
1693 | r = sprintf(buf, "no pid\n"); | ||
1694 | |||
1695 | return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); | ||
1696 | } | ||
1697 | |||
1698 | static void clear_ftrace_swapper(void) | ||
1699 | { | ||
1700 | struct task_struct *p; | ||
1701 | int cpu; | ||
1702 | |||
1703 | get_online_cpus(); | ||
1704 | for_each_online_cpu(cpu) { | ||
1705 | p = idle_task(cpu); | ||
1706 | clear_tsk_trace_trace(p); | ||
1707 | } | ||
1708 | put_online_cpus(); | ||
1709 | } | ||
1710 | |||
1711 | static void set_ftrace_swapper(void) | ||
1712 | { | ||
1713 | struct task_struct *p; | ||
1714 | int cpu; | ||
1715 | |||
1716 | get_online_cpus(); | ||
1717 | for_each_online_cpu(cpu) { | ||
1718 | p = idle_task(cpu); | ||
1719 | set_tsk_trace_trace(p); | ||
1720 | } | ||
1721 | put_online_cpus(); | ||
1722 | } | ||
1723 | |||
1724 | static void clear_ftrace_pid(struct pid *pid) | ||
1725 | { | ||
1726 | struct task_struct *p; | ||
1727 | |||
1728 | do_each_pid_task(pid, PIDTYPE_PID, p) { | ||
1729 | clear_tsk_trace_trace(p); | ||
1730 | } while_each_pid_task(pid, PIDTYPE_PID, p); | ||
1731 | put_pid(pid); | ||
1732 | } | ||
1733 | |||
1734 | static void set_ftrace_pid(struct pid *pid) | ||
1735 | { | ||
1736 | struct task_struct *p; | ||
1737 | |||
1738 | do_each_pid_task(pid, PIDTYPE_PID, p) { | ||
1739 | set_tsk_trace_trace(p); | ||
1740 | } while_each_pid_task(pid, PIDTYPE_PID, p); | ||
1741 | } | ||
1742 | |||
1743 | static void clear_ftrace_pid_task(struct pid **pid) | ||
1744 | { | ||
1745 | if (*pid == ftrace_swapper_pid) | ||
1746 | clear_ftrace_swapper(); | ||
1747 | else | ||
1748 | clear_ftrace_pid(*pid); | ||
1749 | |||
1750 | *pid = NULL; | ||
1751 | } | ||
1752 | |||
1753 | static void set_ftrace_pid_task(struct pid *pid) | ||
1754 | { | ||
1755 | if (pid == ftrace_swapper_pid) | ||
1756 | set_ftrace_swapper(); | ||
1757 | else | ||
1758 | set_ftrace_pid(pid); | ||
1759 | } | ||
1760 | |||
1761 | static ssize_t | ||
1762 | ftrace_pid_write(struct file *filp, const char __user *ubuf, | ||
1763 | size_t cnt, loff_t *ppos) | ||
1764 | { | ||
1765 | struct pid *pid; | ||
1766 | char buf[64]; | ||
1767 | long val; | ||
1768 | int ret; | ||
1769 | |||
1770 | if (cnt >= sizeof(buf)) | ||
1771 | return -EINVAL; | ||
1772 | |||
1773 | if (copy_from_user(&buf, ubuf, cnt)) | ||
1774 | return -EFAULT; | ||
1775 | |||
1776 | buf[cnt] = 0; | ||
1777 | |||
1778 | ret = strict_strtol(buf, 10, &val); | ||
1779 | if (ret < 0) | ||
1780 | return ret; | ||
1781 | |||
1782 | mutex_lock(&ftrace_start_lock); | ||
1783 | if (val < 0) { | ||
1784 | /* disable pid tracing */ | ||
1785 | if (!ftrace_pid_trace) | ||
1786 | goto out; | ||
1787 | |||
1788 | clear_ftrace_pid_task(&ftrace_pid_trace); | ||
1789 | |||
1790 | } else { | ||
1791 | /* swapper task is special */ | ||
1792 | if (!val) { | ||
1793 | pid = ftrace_swapper_pid; | ||
1794 | if (pid == ftrace_pid_trace) | ||
1795 | goto out; | ||
1796 | } else { | ||
1797 | pid = find_get_pid(val); | ||
1798 | |||
1799 | if (pid == ftrace_pid_trace) { | ||
1800 | put_pid(pid); | ||
1801 | goto out; | ||
1802 | } | ||
1803 | } | ||
1804 | |||
1805 | if (ftrace_pid_trace) | ||
1806 | clear_ftrace_pid_task(&ftrace_pid_trace); | ||
1807 | |||
1808 | if (!pid) | ||
1809 | goto out; | ||
1810 | |||
1811 | ftrace_pid_trace = pid; | ||
1812 | |||
1813 | set_ftrace_pid_task(ftrace_pid_trace); | ||
1814 | } | ||
1815 | |||
1816 | /* update the function call */ | ||
1817 | ftrace_update_pid_func(); | ||
1818 | ftrace_startup_enable(0); | ||
1819 | |||
1820 | out: | ||
1821 | mutex_unlock(&ftrace_start_lock); | ||
1822 | |||
1823 | return cnt; | ||
1824 | } | ||
1825 | |||
1826 | static struct file_operations ftrace_pid_fops = { | ||
1827 | .read = ftrace_pid_read, | ||
1828 | .write = ftrace_pid_write, | ||
1829 | }; | ||
1830 | |||
1831 | static __init int ftrace_init_debugfs(void) | ||
1832 | { | ||
1833 | struct dentry *d_tracer; | ||
1834 | struct dentry *entry; | ||
1835 | |||
1836 | d_tracer = tracing_init_dentry(); | ||
1837 | if (!d_tracer) | ||
1838 | return 0; | ||
1839 | |||
1840 | ftrace_init_dyn_debugfs(d_tracer); | ||
1841 | |||
1842 | entry = debugfs_create_file("set_ftrace_pid", 0644, d_tracer, | ||
1843 | NULL, &ftrace_pid_fops); | ||
1844 | if (!entry) | ||
1845 | pr_warning("Could not create debugfs " | ||
1846 | "'set_ftrace_pid' entry\n"); | ||
1847 | return 0; | ||
1848 | } | ||
1849 | |||
1850 | fs_initcall(ftrace_init_debugfs); | ||
1851 | |||
1391 | /** | 1852 | /** |
1392 | * ftrace_kill - kill ftrace | 1853 | * ftrace_kill - kill ftrace |
1393 | * | 1854 | * |
@@ -1422,15 +1883,9 @@ int register_ftrace_function(struct ftrace_ops *ops) | |||
1422 | 1883 | ||
1423 | mutex_lock(&ftrace_sysctl_lock); | 1884 | mutex_lock(&ftrace_sysctl_lock); |
1424 | 1885 | ||
1425 | if (ftrace_tracing_type == FTRACE_TYPE_RETURN) { | ||
1426 | ret = -EBUSY; | ||
1427 | goto out; | ||
1428 | } | ||
1429 | |||
1430 | ret = __register_ftrace_function(ops); | 1886 | ret = __register_ftrace_function(ops); |
1431 | ftrace_startup(); | 1887 | ftrace_startup(0); |
1432 | 1888 | ||
1433 | out: | ||
1434 | mutex_unlock(&ftrace_sysctl_lock); | 1889 | mutex_unlock(&ftrace_sysctl_lock); |
1435 | return ret; | 1890 | return ret; |
1436 | } | 1891 | } |
@@ -1447,7 +1902,7 @@ int unregister_ftrace_function(struct ftrace_ops *ops) | |||
1447 | 1902 | ||
1448 | mutex_lock(&ftrace_sysctl_lock); | 1903 | mutex_lock(&ftrace_sysctl_lock); |
1449 | ret = __unregister_ftrace_function(ops); | 1904 | ret = __unregister_ftrace_function(ops); |
1450 | ftrace_shutdown(); | 1905 | ftrace_shutdown(0); |
1451 | mutex_unlock(&ftrace_sysctl_lock); | 1906 | mutex_unlock(&ftrace_sysctl_lock); |
1452 | 1907 | ||
1453 | return ret; | 1908 | return ret; |
@@ -1496,14 +1951,19 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, | |||
1496 | return ret; | 1951 | return ret; |
1497 | } | 1952 | } |
1498 | 1953 | ||
1499 | #ifdef CONFIG_FUNCTION_RET_TRACER | 1954 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
1500 | 1955 | ||
1501 | static atomic_t ftrace_retfunc_active; | 1956 | static atomic_t ftrace_graph_active; |
1502 | 1957 | ||
1503 | /* The callback that hooks the return of a function */ | 1958 | int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) |
1504 | trace_function_return_t ftrace_function_return = | 1959 | { |
1505 | (trace_function_return_t)ftrace_stub; | 1960 | return 0; |
1961 | } | ||
1506 | 1962 | ||
1963 | /* The callbacks that hook a function */ | ||
1964 | trace_func_graph_ret_t ftrace_graph_return = | ||
1965 | (trace_func_graph_ret_t)ftrace_stub; | ||
1966 | trace_func_graph_ent_t ftrace_graph_entry = ftrace_graph_entry_stub; | ||
1507 | 1967 | ||
1508 | /* Try to assign a return stack array on FTRACE_RETSTACK_ALLOC_SIZE tasks. */ | 1968 | /* Try to assign a return stack array on FTRACE_RETSTACK_ALLOC_SIZE tasks. */ |
1509 | static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) | 1969 | static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) |
@@ -1534,8 +1994,11 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) | |||
1534 | } | 1994 | } |
1535 | 1995 | ||
1536 | if (t->ret_stack == NULL) { | 1996 | if (t->ret_stack == NULL) { |
1537 | t->ret_stack = ret_stack_list[start++]; | ||
1538 | t->curr_ret_stack = -1; | 1997 | t->curr_ret_stack = -1; |
1998 | /* Make sure IRQs see the -1 first: */ | ||
1999 | barrier(); | ||
2000 | t->ret_stack = ret_stack_list[start++]; | ||
2001 | atomic_set(&t->tracing_graph_pause, 0); | ||
1539 | atomic_set(&t->trace_overrun, 0); | 2002 | atomic_set(&t->trace_overrun, 0); |
1540 | } | 2003 | } |
1541 | } while_each_thread(g, t); | 2004 | } while_each_thread(g, t); |
@@ -1549,7 +2012,7 @@ free: | |||
1549 | } | 2012 | } |
1550 | 2013 | ||
1551 | /* Allocate a return stack for each task */ | 2014 | /* Allocate a return stack for each task */ |
1552 | static int start_return_tracing(void) | 2015 | static int start_graph_tracing(void) |
1553 | { | 2016 | { |
1554 | struct ftrace_ret_stack **ret_stack_list; | 2017 | struct ftrace_ret_stack **ret_stack_list; |
1555 | int ret; | 2018 | int ret; |
@@ -1569,64 +2032,59 @@ static int start_return_tracing(void) | |||
1569 | return ret; | 2032 | return ret; |
1570 | } | 2033 | } |
1571 | 2034 | ||
1572 | int register_ftrace_return(trace_function_return_t func) | 2035 | int register_ftrace_graph(trace_func_graph_ret_t retfunc, |
2036 | trace_func_graph_ent_t entryfunc) | ||
1573 | { | 2037 | { |
1574 | int ret = 0; | 2038 | int ret = 0; |
1575 | 2039 | ||
1576 | mutex_lock(&ftrace_sysctl_lock); | 2040 | mutex_lock(&ftrace_sysctl_lock); |
1577 | 2041 | ||
1578 | /* | 2042 | atomic_inc(&ftrace_graph_active); |
1579 | * Don't launch return tracing if normal function | 2043 | ret = start_graph_tracing(); |
1580 | * tracing is already running. | ||
1581 | */ | ||
1582 | if (ftrace_trace_function != ftrace_stub) { | ||
1583 | ret = -EBUSY; | ||
1584 | goto out; | ||
1585 | } | ||
1586 | atomic_inc(&ftrace_retfunc_active); | ||
1587 | ret = start_return_tracing(); | ||
1588 | if (ret) { | 2044 | if (ret) { |
1589 | atomic_dec(&ftrace_retfunc_active); | 2045 | atomic_dec(&ftrace_graph_active); |
1590 | goto out; | 2046 | goto out; |
1591 | } | 2047 | } |
1592 | ftrace_tracing_type = FTRACE_TYPE_RETURN; | 2048 | |
1593 | ftrace_function_return = func; | 2049 | ftrace_graph_return = retfunc; |
1594 | ftrace_startup(); | 2050 | ftrace_graph_entry = entryfunc; |
2051 | |||
2052 | ftrace_startup(FTRACE_START_FUNC_RET); | ||
1595 | 2053 | ||
1596 | out: | 2054 | out: |
1597 | mutex_unlock(&ftrace_sysctl_lock); | 2055 | mutex_unlock(&ftrace_sysctl_lock); |
1598 | return ret; | 2056 | return ret; |
1599 | } | 2057 | } |
1600 | 2058 | ||
1601 | void unregister_ftrace_return(void) | 2059 | void unregister_ftrace_graph(void) |
1602 | { | 2060 | { |
1603 | mutex_lock(&ftrace_sysctl_lock); | 2061 | mutex_lock(&ftrace_sysctl_lock); |
1604 | 2062 | ||
1605 | atomic_dec(&ftrace_retfunc_active); | 2063 | atomic_dec(&ftrace_graph_active); |
1606 | ftrace_function_return = (trace_function_return_t)ftrace_stub; | 2064 | ftrace_graph_return = (trace_func_graph_ret_t)ftrace_stub; |
1607 | ftrace_shutdown(); | 2065 | ftrace_graph_entry = ftrace_graph_entry_stub; |
1608 | /* Restore normal tracing type */ | 2066 | ftrace_shutdown(FTRACE_STOP_FUNC_RET); |
1609 | ftrace_tracing_type = FTRACE_TYPE_ENTER; | ||
1610 | 2067 | ||
1611 | mutex_unlock(&ftrace_sysctl_lock); | 2068 | mutex_unlock(&ftrace_sysctl_lock); |
1612 | } | 2069 | } |
1613 | 2070 | ||
1614 | /* Allocate a return stack for newly created task */ | 2071 | /* Allocate a return stack for newly created task */ |
1615 | void ftrace_retfunc_init_task(struct task_struct *t) | 2072 | void ftrace_graph_init_task(struct task_struct *t) |
1616 | { | 2073 | { |
1617 | if (atomic_read(&ftrace_retfunc_active)) { | 2074 | if (atomic_read(&ftrace_graph_active)) { |
1618 | t->ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH | 2075 | t->ret_stack = kmalloc(FTRACE_RETFUNC_DEPTH |
1619 | * sizeof(struct ftrace_ret_stack), | 2076 | * sizeof(struct ftrace_ret_stack), |
1620 | GFP_KERNEL); | 2077 | GFP_KERNEL); |
1621 | if (!t->ret_stack) | 2078 | if (!t->ret_stack) |
1622 | return; | 2079 | return; |
1623 | t->curr_ret_stack = -1; | 2080 | t->curr_ret_stack = -1; |
2081 | atomic_set(&t->tracing_graph_pause, 0); | ||
1624 | atomic_set(&t->trace_overrun, 0); | 2082 | atomic_set(&t->trace_overrun, 0); |
1625 | } else | 2083 | } else |
1626 | t->ret_stack = NULL; | 2084 | t->ret_stack = NULL; |
1627 | } | 2085 | } |
1628 | 2086 | ||
1629 | void ftrace_retfunc_exit_task(struct task_struct *t) | 2087 | void ftrace_graph_exit_task(struct task_struct *t) |
1630 | { | 2088 | { |
1631 | struct ftrace_ret_stack *ret_stack = t->ret_stack; | 2089 | struct ftrace_ret_stack *ret_stack = t->ret_stack; |
1632 | 2090 | ||
@@ -1636,7 +2094,10 @@ void ftrace_retfunc_exit_task(struct task_struct *t) | |||
1636 | 2094 | ||
1637 | kfree(ret_stack); | 2095 | kfree(ret_stack); |
1638 | } | 2096 | } |
1639 | #endif | ||
1640 | |||
1641 | 2097 | ||
2098 | void ftrace_graph_stop(void) | ||
2099 | { | ||
2100 | ftrace_stop(); | ||
2101 | } | ||
2102 | #endif | ||
1642 | 2103 | ||
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index e206951603c1..7f69cfeaadf7 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
@@ -195,20 +195,24 @@ void *ring_buffer_event_data(struct ring_buffer_event *event) | |||
195 | #define TS_MASK ((1ULL << TS_SHIFT) - 1) | 195 | #define TS_MASK ((1ULL << TS_SHIFT) - 1) |
196 | #define TS_DELTA_TEST (~TS_MASK) | 196 | #define TS_DELTA_TEST (~TS_MASK) |
197 | 197 | ||
198 | /* | 198 | struct buffer_data_page { |
199 | * This hack stolen from mm/slob.c. | ||
200 | * We can store per page timing information in the page frame of the page. | ||
201 | * Thanks to Peter Zijlstra for suggesting this idea. | ||
202 | */ | ||
203 | struct buffer_page { | ||
204 | u64 time_stamp; /* page time stamp */ | 199 | u64 time_stamp; /* page time stamp */ |
205 | local_t write; /* index for next write */ | ||
206 | local_t commit; /* write commited index */ | 200 | local_t commit; /* write commited index */ |
201 | unsigned char data[]; /* data of buffer page */ | ||
202 | }; | ||
203 | |||
204 | struct buffer_page { | ||
205 | local_t write; /* index for next write */ | ||
207 | unsigned read; /* index for next read */ | 206 | unsigned read; /* index for next read */ |
208 | struct list_head list; /* list of free pages */ | 207 | struct list_head list; /* list of free pages */ |
209 | void *page; /* Actual data page */ | 208 | struct buffer_data_page *page; /* Actual data page */ |
210 | }; | 209 | }; |
211 | 210 | ||
211 | static void rb_init_page(struct buffer_data_page *bpage) | ||
212 | { | ||
213 | local_set(&bpage->commit, 0); | ||
214 | } | ||
215 | |||
212 | /* | 216 | /* |
213 | * Also stolen from mm/slob.c. Thanks to Mathieu Desnoyers for pointing | 217 | * Also stolen from mm/slob.c. Thanks to Mathieu Desnoyers for pointing |
214 | * this issue out. | 218 | * this issue out. |
@@ -230,7 +234,7 @@ static inline int test_time_stamp(u64 delta) | |||
230 | return 0; | 234 | return 0; |
231 | } | 235 | } |
232 | 236 | ||
233 | #define BUF_PAGE_SIZE PAGE_SIZE | 237 | #define BUF_PAGE_SIZE (PAGE_SIZE - sizeof(struct buffer_data_page)) |
234 | 238 | ||
235 | /* | 239 | /* |
236 | * head_page == tail_page && head == tail then buffer is empty. | 240 | * head_page == tail_page && head == tail then buffer is empty. |
@@ -294,19 +298,19 @@ struct ring_buffer_iter { | |||
294 | static int rb_check_pages(struct ring_buffer_per_cpu *cpu_buffer) | 298 | static int rb_check_pages(struct ring_buffer_per_cpu *cpu_buffer) |
295 | { | 299 | { |
296 | struct list_head *head = &cpu_buffer->pages; | 300 | struct list_head *head = &cpu_buffer->pages; |
297 | struct buffer_page *page, *tmp; | 301 | struct buffer_page *bpage, *tmp; |
298 | 302 | ||
299 | if (RB_WARN_ON(cpu_buffer, head->next->prev != head)) | 303 | if (RB_WARN_ON(cpu_buffer, head->next->prev != head)) |
300 | return -1; | 304 | return -1; |
301 | if (RB_WARN_ON(cpu_buffer, head->prev->next != head)) | 305 | if (RB_WARN_ON(cpu_buffer, head->prev->next != head)) |
302 | return -1; | 306 | return -1; |
303 | 307 | ||
304 | list_for_each_entry_safe(page, tmp, head, list) { | 308 | list_for_each_entry_safe(bpage, tmp, head, list) { |
305 | if (RB_WARN_ON(cpu_buffer, | 309 | if (RB_WARN_ON(cpu_buffer, |
306 | page->list.next->prev != &page->list)) | 310 | bpage->list.next->prev != &bpage->list)) |
307 | return -1; | 311 | return -1; |
308 | if (RB_WARN_ON(cpu_buffer, | 312 | if (RB_WARN_ON(cpu_buffer, |
309 | page->list.prev->next != &page->list)) | 313 | bpage->list.prev->next != &bpage->list)) |
310 | return -1; | 314 | return -1; |
311 | } | 315 | } |
312 | 316 | ||
@@ -317,22 +321,23 @@ static int rb_allocate_pages(struct ring_buffer_per_cpu *cpu_buffer, | |||
317 | unsigned nr_pages) | 321 | unsigned nr_pages) |
318 | { | 322 | { |
319 | struct list_head *head = &cpu_buffer->pages; | 323 | struct list_head *head = &cpu_buffer->pages; |
320 | struct buffer_page *page, *tmp; | 324 | struct buffer_page *bpage, *tmp; |
321 | unsigned long addr; | 325 | unsigned long addr; |
322 | LIST_HEAD(pages); | 326 | LIST_HEAD(pages); |
323 | unsigned i; | 327 | unsigned i; |
324 | 328 | ||
325 | for (i = 0; i < nr_pages; i++) { | 329 | for (i = 0; i < nr_pages; i++) { |
326 | page = kzalloc_node(ALIGN(sizeof(*page), cache_line_size()), | 330 | bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()), |
327 | GFP_KERNEL, cpu_to_node(cpu_buffer->cpu)); | 331 | GFP_KERNEL, cpu_to_node(cpu_buffer->cpu)); |
328 | if (!page) | 332 | if (!bpage) |
329 | goto free_pages; | 333 | goto free_pages; |
330 | list_add(&page->list, &pages); | 334 | list_add(&bpage->list, &pages); |
331 | 335 | ||
332 | addr = __get_free_page(GFP_KERNEL); | 336 | addr = __get_free_page(GFP_KERNEL); |
333 | if (!addr) | 337 | if (!addr) |
334 | goto free_pages; | 338 | goto free_pages; |
335 | page->page = (void *)addr; | 339 | bpage->page = (void *)addr; |
340 | rb_init_page(bpage->page); | ||
336 | } | 341 | } |
337 | 342 | ||
338 | list_splice(&pages, head); | 343 | list_splice(&pages, head); |
@@ -342,9 +347,9 @@ static int rb_allocate_pages(struct ring_buffer_per_cpu *cpu_buffer, | |||
342 | return 0; | 347 | return 0; |
343 | 348 | ||
344 | free_pages: | 349 | free_pages: |
345 | list_for_each_entry_safe(page, tmp, &pages, list) { | 350 | list_for_each_entry_safe(bpage, tmp, &pages, list) { |
346 | list_del_init(&page->list); | 351 | list_del_init(&bpage->list); |
347 | free_buffer_page(page); | 352 | free_buffer_page(bpage); |
348 | } | 353 | } |
349 | return -ENOMEM; | 354 | return -ENOMEM; |
350 | } | 355 | } |
@@ -353,7 +358,7 @@ static struct ring_buffer_per_cpu * | |||
353 | rb_allocate_cpu_buffer(struct ring_buffer *buffer, int cpu) | 358 | rb_allocate_cpu_buffer(struct ring_buffer *buffer, int cpu) |
354 | { | 359 | { |
355 | struct ring_buffer_per_cpu *cpu_buffer; | 360 | struct ring_buffer_per_cpu *cpu_buffer; |
356 | struct buffer_page *page; | 361 | struct buffer_page *bpage; |
357 | unsigned long addr; | 362 | unsigned long addr; |
358 | int ret; | 363 | int ret; |
359 | 364 | ||
@@ -368,16 +373,17 @@ rb_allocate_cpu_buffer(struct ring_buffer *buffer, int cpu) | |||
368 | cpu_buffer->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; | 373 | cpu_buffer->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; |
369 | INIT_LIST_HEAD(&cpu_buffer->pages); | 374 | INIT_LIST_HEAD(&cpu_buffer->pages); |
370 | 375 | ||
371 | page = kzalloc_node(ALIGN(sizeof(*page), cache_line_size()), | 376 | bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()), |
372 | GFP_KERNEL, cpu_to_node(cpu)); | 377 | GFP_KERNEL, cpu_to_node(cpu)); |
373 | if (!page) | 378 | if (!bpage) |
374 | goto fail_free_buffer; | 379 | goto fail_free_buffer; |
375 | 380 | ||
376 | cpu_buffer->reader_page = page; | 381 | cpu_buffer->reader_page = bpage; |
377 | addr = __get_free_page(GFP_KERNEL); | 382 | addr = __get_free_page(GFP_KERNEL); |
378 | if (!addr) | 383 | if (!addr) |
379 | goto fail_free_reader; | 384 | goto fail_free_reader; |
380 | page->page = (void *)addr; | 385 | bpage->page = (void *)addr; |
386 | rb_init_page(bpage->page); | ||
381 | 387 | ||
382 | INIT_LIST_HEAD(&cpu_buffer->reader_page->list); | 388 | INIT_LIST_HEAD(&cpu_buffer->reader_page->list); |
383 | 389 | ||
@@ -402,14 +408,14 @@ rb_allocate_cpu_buffer(struct ring_buffer *buffer, int cpu) | |||
402 | static void rb_free_cpu_buffer(struct ring_buffer_per_cpu *cpu_buffer) | 408 | static void rb_free_cpu_buffer(struct ring_buffer_per_cpu *cpu_buffer) |
403 | { | 409 | { |
404 | struct list_head *head = &cpu_buffer->pages; | 410 | struct list_head *head = &cpu_buffer->pages; |
405 | struct buffer_page *page, *tmp; | 411 | struct buffer_page *bpage, *tmp; |
406 | 412 | ||
407 | list_del_init(&cpu_buffer->reader_page->list); | 413 | list_del_init(&cpu_buffer->reader_page->list); |
408 | free_buffer_page(cpu_buffer->reader_page); | 414 | free_buffer_page(cpu_buffer->reader_page); |
409 | 415 | ||
410 | list_for_each_entry_safe(page, tmp, head, list) { | 416 | list_for_each_entry_safe(bpage, tmp, head, list) { |
411 | list_del_init(&page->list); | 417 | list_del_init(&bpage->list); |
412 | free_buffer_page(page); | 418 | free_buffer_page(bpage); |
413 | } | 419 | } |
414 | kfree(cpu_buffer); | 420 | kfree(cpu_buffer); |
415 | } | 421 | } |
@@ -506,7 +512,7 @@ static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer); | |||
506 | static void | 512 | static void |
507 | rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages) | 513 | rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages) |
508 | { | 514 | { |
509 | struct buffer_page *page; | 515 | struct buffer_page *bpage; |
510 | struct list_head *p; | 516 | struct list_head *p; |
511 | unsigned i; | 517 | unsigned i; |
512 | 518 | ||
@@ -517,9 +523,9 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages) | |||
517 | if (RB_WARN_ON(cpu_buffer, list_empty(&cpu_buffer->pages))) | 523 | if (RB_WARN_ON(cpu_buffer, list_empty(&cpu_buffer->pages))) |
518 | return; | 524 | return; |
519 | p = cpu_buffer->pages.next; | 525 | p = cpu_buffer->pages.next; |
520 | page = list_entry(p, struct buffer_page, list); | 526 | bpage = list_entry(p, struct buffer_page, list); |
521 | list_del_init(&page->list); | 527 | list_del_init(&bpage->list); |
522 | free_buffer_page(page); | 528 | free_buffer_page(bpage); |
523 | } | 529 | } |
524 | if (RB_WARN_ON(cpu_buffer, list_empty(&cpu_buffer->pages))) | 530 | if (RB_WARN_ON(cpu_buffer, list_empty(&cpu_buffer->pages))) |
525 | return; | 531 | return; |
@@ -536,7 +542,7 @@ static void | |||
536 | rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer, | 542 | rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer, |
537 | struct list_head *pages, unsigned nr_pages) | 543 | struct list_head *pages, unsigned nr_pages) |
538 | { | 544 | { |
539 | struct buffer_page *page; | 545 | struct buffer_page *bpage; |
540 | struct list_head *p; | 546 | struct list_head *p; |
541 | unsigned i; | 547 | unsigned i; |
542 | 548 | ||
@@ -547,9 +553,9 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer, | |||
547 | if (RB_WARN_ON(cpu_buffer, list_empty(pages))) | 553 | if (RB_WARN_ON(cpu_buffer, list_empty(pages))) |
548 | return; | 554 | return; |
549 | p = pages->next; | 555 | p = pages->next; |
550 | page = list_entry(p, struct buffer_page, list); | 556 | bpage = list_entry(p, struct buffer_page, list); |
551 | list_del_init(&page->list); | 557 | list_del_init(&bpage->list); |
552 | list_add_tail(&page->list, &cpu_buffer->pages); | 558 | list_add_tail(&bpage->list, &cpu_buffer->pages); |
553 | } | 559 | } |
554 | rb_reset_cpu(cpu_buffer); | 560 | rb_reset_cpu(cpu_buffer); |
555 | 561 | ||
@@ -576,7 +582,7 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size) | |||
576 | { | 582 | { |
577 | struct ring_buffer_per_cpu *cpu_buffer; | 583 | struct ring_buffer_per_cpu *cpu_buffer; |
578 | unsigned nr_pages, rm_pages, new_pages; | 584 | unsigned nr_pages, rm_pages, new_pages; |
579 | struct buffer_page *page, *tmp; | 585 | struct buffer_page *bpage, *tmp; |
580 | unsigned long buffer_size; | 586 | unsigned long buffer_size; |
581 | unsigned long addr; | 587 | unsigned long addr; |
582 | LIST_HEAD(pages); | 588 | LIST_HEAD(pages); |
@@ -637,16 +643,17 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size) | |||
637 | 643 | ||
638 | for_each_buffer_cpu(buffer, cpu) { | 644 | for_each_buffer_cpu(buffer, cpu) { |
639 | for (i = 0; i < new_pages; i++) { | 645 | for (i = 0; i < new_pages; i++) { |
640 | page = kzalloc_node(ALIGN(sizeof(*page), | 646 | bpage = kzalloc_node(ALIGN(sizeof(*bpage), |
641 | cache_line_size()), | 647 | cache_line_size()), |
642 | GFP_KERNEL, cpu_to_node(cpu)); | 648 | GFP_KERNEL, cpu_to_node(cpu)); |
643 | if (!page) | 649 | if (!bpage) |
644 | goto free_pages; | 650 | goto free_pages; |
645 | list_add(&page->list, &pages); | 651 | list_add(&bpage->list, &pages); |
646 | addr = __get_free_page(GFP_KERNEL); | 652 | addr = __get_free_page(GFP_KERNEL); |
647 | if (!addr) | 653 | if (!addr) |
648 | goto free_pages; | 654 | goto free_pages; |
649 | page->page = (void *)addr; | 655 | bpage->page = (void *)addr; |
656 | rb_init_page(bpage->page); | ||
650 | } | 657 | } |
651 | } | 658 | } |
652 | 659 | ||
@@ -667,9 +674,9 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size) | |||
667 | return size; | 674 | return size; |
668 | 675 | ||
669 | free_pages: | 676 | free_pages: |
670 | list_for_each_entry_safe(page, tmp, &pages, list) { | 677 | list_for_each_entry_safe(bpage, tmp, &pages, list) { |
671 | list_del_init(&page->list); | 678 | list_del_init(&bpage->list); |
672 | free_buffer_page(page); | 679 | free_buffer_page(bpage); |
673 | } | 680 | } |
674 | mutex_unlock(&buffer->mutex); | 681 | mutex_unlock(&buffer->mutex); |
675 | return -ENOMEM; | 682 | return -ENOMEM; |
@@ -680,9 +687,15 @@ static inline int rb_null_event(struct ring_buffer_event *event) | |||
680 | return event->type == RINGBUF_TYPE_PADDING; | 687 | return event->type == RINGBUF_TYPE_PADDING; |
681 | } | 688 | } |
682 | 689 | ||
683 | static inline void *__rb_page_index(struct buffer_page *page, unsigned index) | 690 | static inline void * |
691 | __rb_data_page_index(struct buffer_data_page *bpage, unsigned index) | ||
684 | { | 692 | { |
685 | return page->page + index; | 693 | return bpage->data + index; |
694 | } | ||
695 | |||
696 | static inline void *__rb_page_index(struct buffer_page *bpage, unsigned index) | ||
697 | { | ||
698 | return bpage->page->data + index; | ||
686 | } | 699 | } |
687 | 700 | ||
688 | static inline struct ring_buffer_event * | 701 | static inline struct ring_buffer_event * |
@@ -712,7 +725,7 @@ static inline unsigned rb_page_write(struct buffer_page *bpage) | |||
712 | 725 | ||
713 | static inline unsigned rb_page_commit(struct buffer_page *bpage) | 726 | static inline unsigned rb_page_commit(struct buffer_page *bpage) |
714 | { | 727 | { |
715 | return local_read(&bpage->commit); | 728 | return local_read(&bpage->page->commit); |
716 | } | 729 | } |
717 | 730 | ||
718 | /* Size is determined by what has been commited */ | 731 | /* Size is determined by what has been commited */ |
@@ -758,14 +771,14 @@ static void rb_update_overflow(struct ring_buffer_per_cpu *cpu_buffer) | |||
758 | } | 771 | } |
759 | 772 | ||
760 | static inline void rb_inc_page(struct ring_buffer_per_cpu *cpu_buffer, | 773 | static inline void rb_inc_page(struct ring_buffer_per_cpu *cpu_buffer, |
761 | struct buffer_page **page) | 774 | struct buffer_page **bpage) |
762 | { | 775 | { |
763 | struct list_head *p = (*page)->list.next; | 776 | struct list_head *p = (*bpage)->list.next; |
764 | 777 | ||
765 | if (p == &cpu_buffer->pages) | 778 | if (p == &cpu_buffer->pages) |
766 | p = p->next; | 779 | p = p->next; |
767 | 780 | ||
768 | *page = list_entry(p, struct buffer_page, list); | 781 | *bpage = list_entry(p, struct buffer_page, list); |
769 | } | 782 | } |
770 | 783 | ||
771 | static inline unsigned | 784 | static inline unsigned |
@@ -804,14 +817,15 @@ rb_set_commit_event(struct ring_buffer_per_cpu *cpu_buffer, | |||
804 | if (RB_WARN_ON(cpu_buffer, | 817 | if (RB_WARN_ON(cpu_buffer, |
805 | cpu_buffer->commit_page == cpu_buffer->tail_page)) | 818 | cpu_buffer->commit_page == cpu_buffer->tail_page)) |
806 | return; | 819 | return; |
807 | cpu_buffer->commit_page->commit = | 820 | cpu_buffer->commit_page->page->commit = |
808 | cpu_buffer->commit_page->write; | 821 | cpu_buffer->commit_page->write; |
809 | rb_inc_page(cpu_buffer, &cpu_buffer->commit_page); | 822 | rb_inc_page(cpu_buffer, &cpu_buffer->commit_page); |
810 | cpu_buffer->write_stamp = cpu_buffer->commit_page->time_stamp; | 823 | cpu_buffer->write_stamp = |
824 | cpu_buffer->commit_page->page->time_stamp; | ||
811 | } | 825 | } |
812 | 826 | ||
813 | /* Now set the commit to the event's index */ | 827 | /* Now set the commit to the event's index */ |
814 | local_set(&cpu_buffer->commit_page->commit, index); | 828 | local_set(&cpu_buffer->commit_page->page->commit, index); |
815 | } | 829 | } |
816 | 830 | ||
817 | static inline void | 831 | static inline void |
@@ -826,16 +840,17 @@ rb_set_commit_to_write(struct ring_buffer_per_cpu *cpu_buffer) | |||
826 | * assign the commit to the tail. | 840 | * assign the commit to the tail. |
827 | */ | 841 | */ |
828 | while (cpu_buffer->commit_page != cpu_buffer->tail_page) { | 842 | while (cpu_buffer->commit_page != cpu_buffer->tail_page) { |
829 | cpu_buffer->commit_page->commit = | 843 | cpu_buffer->commit_page->page->commit = |
830 | cpu_buffer->commit_page->write; | 844 | cpu_buffer->commit_page->write; |
831 | rb_inc_page(cpu_buffer, &cpu_buffer->commit_page); | 845 | rb_inc_page(cpu_buffer, &cpu_buffer->commit_page); |
832 | cpu_buffer->write_stamp = cpu_buffer->commit_page->time_stamp; | 846 | cpu_buffer->write_stamp = |
847 | cpu_buffer->commit_page->page->time_stamp; | ||
833 | /* add barrier to keep gcc from optimizing too much */ | 848 | /* add barrier to keep gcc from optimizing too much */ |
834 | barrier(); | 849 | barrier(); |
835 | } | 850 | } |
836 | while (rb_commit_index(cpu_buffer) != | 851 | while (rb_commit_index(cpu_buffer) != |
837 | rb_page_write(cpu_buffer->commit_page)) { | 852 | rb_page_write(cpu_buffer->commit_page)) { |
838 | cpu_buffer->commit_page->commit = | 853 | cpu_buffer->commit_page->page->commit = |
839 | cpu_buffer->commit_page->write; | 854 | cpu_buffer->commit_page->write; |
840 | barrier(); | 855 | barrier(); |
841 | } | 856 | } |
@@ -843,7 +858,7 @@ rb_set_commit_to_write(struct ring_buffer_per_cpu *cpu_buffer) | |||
843 | 858 | ||
844 | static void rb_reset_reader_page(struct ring_buffer_per_cpu *cpu_buffer) | 859 | static void rb_reset_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
845 | { | 860 | { |
846 | cpu_buffer->read_stamp = cpu_buffer->reader_page->time_stamp; | 861 | cpu_buffer->read_stamp = cpu_buffer->reader_page->page->time_stamp; |
847 | cpu_buffer->reader_page->read = 0; | 862 | cpu_buffer->reader_page->read = 0; |
848 | } | 863 | } |
849 | 864 | ||
@@ -862,7 +877,7 @@ static inline void rb_inc_iter(struct ring_buffer_iter *iter) | |||
862 | else | 877 | else |
863 | rb_inc_page(cpu_buffer, &iter->head_page); | 878 | rb_inc_page(cpu_buffer, &iter->head_page); |
864 | 879 | ||
865 | iter->read_stamp = iter->head_page->time_stamp; | 880 | iter->read_stamp = iter->head_page->page->time_stamp; |
866 | iter->head = 0; | 881 | iter->head = 0; |
867 | } | 882 | } |
868 | 883 | ||
@@ -998,12 +1013,12 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, | |||
998 | */ | 1013 | */ |
999 | if (tail_page == cpu_buffer->tail_page) { | 1014 | if (tail_page == cpu_buffer->tail_page) { |
1000 | local_set(&next_page->write, 0); | 1015 | local_set(&next_page->write, 0); |
1001 | local_set(&next_page->commit, 0); | 1016 | local_set(&next_page->page->commit, 0); |
1002 | cpu_buffer->tail_page = next_page; | 1017 | cpu_buffer->tail_page = next_page; |
1003 | 1018 | ||
1004 | /* reread the time stamp */ | 1019 | /* reread the time stamp */ |
1005 | *ts = ring_buffer_time_stamp(cpu_buffer->cpu); | 1020 | *ts = ring_buffer_time_stamp(cpu_buffer->cpu); |
1006 | cpu_buffer->tail_page->time_stamp = *ts; | 1021 | cpu_buffer->tail_page->page->time_stamp = *ts; |
1007 | } | 1022 | } |
1008 | 1023 | ||
1009 | /* | 1024 | /* |
@@ -1048,7 +1063,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, | |||
1048 | * this page's time stamp. | 1063 | * this page's time stamp. |
1049 | */ | 1064 | */ |
1050 | if (!tail && rb_is_commit(cpu_buffer, event)) | 1065 | if (!tail && rb_is_commit(cpu_buffer, event)) |
1051 | cpu_buffer->commit_page->time_stamp = *ts; | 1066 | cpu_buffer->commit_page->page->time_stamp = *ts; |
1052 | 1067 | ||
1053 | return event; | 1068 | return event; |
1054 | 1069 | ||
@@ -1099,7 +1114,7 @@ rb_add_time_stamp(struct ring_buffer_per_cpu *cpu_buffer, | |||
1099 | event->time_delta = *delta & TS_MASK; | 1114 | event->time_delta = *delta & TS_MASK; |
1100 | event->array[0] = *delta >> TS_SHIFT; | 1115 | event->array[0] = *delta >> TS_SHIFT; |
1101 | } else { | 1116 | } else { |
1102 | cpu_buffer->commit_page->time_stamp = *ts; | 1117 | cpu_buffer->commit_page->page->time_stamp = *ts; |
1103 | event->time_delta = 0; | 1118 | event->time_delta = 0; |
1104 | event->array[0] = 0; | 1119 | event->array[0] = 0; |
1105 | } | 1120 | } |
@@ -1552,7 +1567,7 @@ static void rb_iter_reset(struct ring_buffer_iter *iter) | |||
1552 | if (iter->head) | 1567 | if (iter->head) |
1553 | iter->read_stamp = cpu_buffer->read_stamp; | 1568 | iter->read_stamp = cpu_buffer->read_stamp; |
1554 | else | 1569 | else |
1555 | iter->read_stamp = iter->head_page->time_stamp; | 1570 | iter->read_stamp = iter->head_page->page->time_stamp; |
1556 | } | 1571 | } |
1557 | 1572 | ||
1558 | /** | 1573 | /** |
@@ -1696,7 +1711,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) | |||
1696 | cpu_buffer->reader_page->list.prev = reader->list.prev; | 1711 | cpu_buffer->reader_page->list.prev = reader->list.prev; |
1697 | 1712 | ||
1698 | local_set(&cpu_buffer->reader_page->write, 0); | 1713 | local_set(&cpu_buffer->reader_page->write, 0); |
1699 | local_set(&cpu_buffer->reader_page->commit, 0); | 1714 | local_set(&cpu_buffer->reader_page->page->commit, 0); |
1700 | 1715 | ||
1701 | /* Make the reader page now replace the head */ | 1716 | /* Make the reader page now replace the head */ |
1702 | reader->list.prev->next = &cpu_buffer->reader_page->list; | 1717 | reader->list.prev->next = &cpu_buffer->reader_page->list; |
@@ -2088,7 +2103,7 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) | |||
2088 | cpu_buffer->head_page | 2103 | cpu_buffer->head_page |
2089 | = list_entry(cpu_buffer->pages.next, struct buffer_page, list); | 2104 | = list_entry(cpu_buffer->pages.next, struct buffer_page, list); |
2090 | local_set(&cpu_buffer->head_page->write, 0); | 2105 | local_set(&cpu_buffer->head_page->write, 0); |
2091 | local_set(&cpu_buffer->head_page->commit, 0); | 2106 | local_set(&cpu_buffer->head_page->page->commit, 0); |
2092 | 2107 | ||
2093 | cpu_buffer->head_page->read = 0; | 2108 | cpu_buffer->head_page->read = 0; |
2094 | 2109 | ||
@@ -2097,7 +2112,7 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) | |||
2097 | 2112 | ||
2098 | INIT_LIST_HEAD(&cpu_buffer->reader_page->list); | 2113 | INIT_LIST_HEAD(&cpu_buffer->reader_page->list); |
2099 | local_set(&cpu_buffer->reader_page->write, 0); | 2114 | local_set(&cpu_buffer->reader_page->write, 0); |
2100 | local_set(&cpu_buffer->reader_page->commit, 0); | 2115 | local_set(&cpu_buffer->reader_page->page->commit, 0); |
2101 | cpu_buffer->reader_page->read = 0; | 2116 | cpu_buffer->reader_page->read = 0; |
2102 | 2117 | ||
2103 | cpu_buffer->overrun = 0; | 2118 | cpu_buffer->overrun = 0; |
@@ -2223,6 +2238,166 @@ int ring_buffer_swap_cpu(struct ring_buffer *buffer_a, | |||
2223 | return 0; | 2238 | return 0; |
2224 | } | 2239 | } |
2225 | 2240 | ||
2241 | static void rb_remove_entries(struct ring_buffer_per_cpu *cpu_buffer, | ||
2242 | struct buffer_data_page *bpage) | ||
2243 | { | ||
2244 | struct ring_buffer_event *event; | ||
2245 | unsigned long head; | ||
2246 | |||
2247 | __raw_spin_lock(&cpu_buffer->lock); | ||
2248 | for (head = 0; head < local_read(&bpage->commit); | ||
2249 | head += rb_event_length(event)) { | ||
2250 | |||
2251 | event = __rb_data_page_index(bpage, head); | ||
2252 | if (RB_WARN_ON(cpu_buffer, rb_null_event(event))) | ||
2253 | return; | ||
2254 | /* Only count data entries */ | ||
2255 | if (event->type != RINGBUF_TYPE_DATA) | ||
2256 | continue; | ||
2257 | cpu_buffer->entries--; | ||
2258 | } | ||
2259 | __raw_spin_unlock(&cpu_buffer->lock); | ||
2260 | } | ||
2261 | |||
2262 | /** | ||
2263 | * ring_buffer_alloc_read_page - allocate a page to read from buffer | ||
2264 | * @buffer: the buffer to allocate for. | ||
2265 | * | ||
2266 | * This function is used in conjunction with ring_buffer_read_page. | ||
2267 | * When reading a full page from the ring buffer, these functions | ||
2268 | * can be used to speed up the process. The calling function should | ||
2269 | * allocate a few pages first with this function. Then when it | ||
2270 | * needs to get pages from the ring buffer, it passes the result | ||
2271 | * of this function into ring_buffer_read_page, which will swap | ||
2272 | * the page that was allocated, with the read page of the buffer. | ||
2273 | * | ||
2274 | * Returns: | ||
2275 | * The page allocated, or NULL on error. | ||
2276 | */ | ||
2277 | void *ring_buffer_alloc_read_page(struct ring_buffer *buffer) | ||
2278 | { | ||
2279 | unsigned long addr; | ||
2280 | struct buffer_data_page *bpage; | ||
2281 | |||
2282 | addr = __get_free_page(GFP_KERNEL); | ||
2283 | if (!addr) | ||
2284 | return NULL; | ||
2285 | |||
2286 | bpage = (void *)addr; | ||
2287 | |||
2288 | return bpage; | ||
2289 | } | ||
2290 | |||
2291 | /** | ||
2292 | * ring_buffer_free_read_page - free an allocated read page | ||
2293 | * @buffer: the buffer the page was allocate for | ||
2294 | * @data: the page to free | ||
2295 | * | ||
2296 | * Free a page allocated from ring_buffer_alloc_read_page. | ||
2297 | */ | ||
2298 | void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data) | ||
2299 | { | ||
2300 | free_page((unsigned long)data); | ||
2301 | } | ||
2302 | |||
2303 | /** | ||
2304 | * ring_buffer_read_page - extract a page from the ring buffer | ||
2305 | * @buffer: buffer to extract from | ||
2306 | * @data_page: the page to use allocated from ring_buffer_alloc_read_page | ||
2307 | * @cpu: the cpu of the buffer to extract | ||
2308 | * @full: should the extraction only happen when the page is full. | ||
2309 | * | ||
2310 | * This function will pull out a page from the ring buffer and consume it. | ||
2311 | * @data_page must be the address of the variable that was returned | ||
2312 | * from ring_buffer_alloc_read_page. This is because the page might be used | ||
2313 | * to swap with a page in the ring buffer. | ||
2314 | * | ||
2315 | * for example: | ||
2316 | * rpage = ring_buffer_alloc_page(buffer); | ||
2317 | * if (!rpage) | ||
2318 | * return error; | ||
2319 | * ret = ring_buffer_read_page(buffer, &rpage, cpu, 0); | ||
2320 | * if (ret) | ||
2321 | * process_page(rpage); | ||
2322 | * | ||
2323 | * When @full is set, the function will not return true unless | ||
2324 | * the writer is off the reader page. | ||
2325 | * | ||
2326 | * Note: it is up to the calling functions to handle sleeps and wakeups. | ||
2327 | * The ring buffer can be used anywhere in the kernel and can not | ||
2328 | * blindly call wake_up. The layer that uses the ring buffer must be | ||
2329 | * responsible for that. | ||
2330 | * | ||
2331 | * Returns: | ||
2332 | * 1 if data has been transferred | ||
2333 | * 0 if no data has been transferred. | ||
2334 | */ | ||
2335 | int ring_buffer_read_page(struct ring_buffer *buffer, | ||
2336 | void **data_page, int cpu, int full) | ||
2337 | { | ||
2338 | struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu]; | ||
2339 | struct ring_buffer_event *event; | ||
2340 | struct buffer_data_page *bpage; | ||
2341 | unsigned long flags; | ||
2342 | int ret = 0; | ||
2343 | |||
2344 | if (!data_page) | ||
2345 | return 0; | ||
2346 | |||
2347 | bpage = *data_page; | ||
2348 | if (!bpage) | ||
2349 | return 0; | ||
2350 | |||
2351 | spin_lock_irqsave(&cpu_buffer->reader_lock, flags); | ||
2352 | |||
2353 | /* | ||
2354 | * rb_buffer_peek will get the next ring buffer if | ||
2355 | * the current reader page is empty. | ||
2356 | */ | ||
2357 | event = rb_buffer_peek(buffer, cpu, NULL); | ||
2358 | if (!event) | ||
2359 | goto out; | ||
2360 | |||
2361 | /* check for data */ | ||
2362 | if (!local_read(&cpu_buffer->reader_page->page->commit)) | ||
2363 | goto out; | ||
2364 | /* | ||
2365 | * If the writer is already off of the read page, then simply | ||
2366 | * switch the read page with the given page. Otherwise | ||
2367 | * we need to copy the data from the reader to the writer. | ||
2368 | */ | ||
2369 | if (cpu_buffer->reader_page == cpu_buffer->commit_page) { | ||
2370 | unsigned int read = cpu_buffer->reader_page->read; | ||
2371 | |||
2372 | if (full) | ||
2373 | goto out; | ||
2374 | /* The writer is still on the reader page, we must copy */ | ||
2375 | bpage = cpu_buffer->reader_page->page; | ||
2376 | memcpy(bpage->data, | ||
2377 | cpu_buffer->reader_page->page->data + read, | ||
2378 | local_read(&bpage->commit) - read); | ||
2379 | |||
2380 | /* consume what was read */ | ||
2381 | cpu_buffer->reader_page += read; | ||
2382 | |||
2383 | } else { | ||
2384 | /* swap the pages */ | ||
2385 | rb_init_page(bpage); | ||
2386 | bpage = cpu_buffer->reader_page->page; | ||
2387 | cpu_buffer->reader_page->page = *data_page; | ||
2388 | cpu_buffer->reader_page->read = 0; | ||
2389 | *data_page = bpage; | ||
2390 | } | ||
2391 | ret = 1; | ||
2392 | |||
2393 | /* update the entry counter */ | ||
2394 | rb_remove_entries(cpu_buffer, bpage); | ||
2395 | out: | ||
2396 | spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); | ||
2397 | |||
2398 | return ret; | ||
2399 | } | ||
2400 | |||
2226 | static ssize_t | 2401 | static ssize_t |
2227 | rb_simple_read(struct file *filp, char __user *ubuf, | 2402 | rb_simple_read(struct file *filp, char __user *ubuf, |
2228 | size_t cnt, loff_t *ppos) | 2403 | size_t cnt, loff_t *ppos) |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index a45b59e53fbc..8ebe0070c47a 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -44,6 +44,15 @@ | |||
44 | unsigned long __read_mostly tracing_max_latency = (cycle_t)ULONG_MAX; | 44 | unsigned long __read_mostly tracing_max_latency = (cycle_t)ULONG_MAX; |
45 | unsigned long __read_mostly tracing_thresh; | 45 | unsigned long __read_mostly tracing_thresh; |
46 | 46 | ||
47 | /* | ||
48 | * We need to change this state when a selftest is running. | ||
49 | * A selftest will lurk into the ring-buffer to count the | ||
50 | * entries inserted during the selftest although some concurrent | ||
51 | * insertions into the ring-buffer such as ftrace_printk could occurred | ||
52 | * at the same time, giving false positive or negative results. | ||
53 | */ | ||
54 | static bool __read_mostly tracing_selftest_running; | ||
55 | |||
47 | /* For tracers that don't implement custom flags */ | 56 | /* For tracers that don't implement custom flags */ |
48 | static struct tracer_opt dummy_tracer_opt[] = { | 57 | static struct tracer_opt dummy_tracer_opt[] = { |
49 | { } | 58 | { } |
@@ -566,6 +575,8 @@ int register_tracer(struct tracer *type) | |||
566 | unlock_kernel(); | 575 | unlock_kernel(); |
567 | mutex_lock(&trace_types_lock); | 576 | mutex_lock(&trace_types_lock); |
568 | 577 | ||
578 | tracing_selftest_running = true; | ||
579 | |||
569 | for (t = trace_types; t; t = t->next) { | 580 | for (t = trace_types; t; t = t->next) { |
570 | if (strcmp(type->name, t->name) == 0) { | 581 | if (strcmp(type->name, t->name) == 0) { |
571 | /* already found */ | 582 | /* already found */ |
@@ -589,6 +600,7 @@ int register_tracer(struct tracer *type) | |||
589 | struct tracer *saved_tracer = current_trace; | 600 | struct tracer *saved_tracer = current_trace; |
590 | struct trace_array *tr = &global_trace; | 601 | struct trace_array *tr = &global_trace; |
591 | int i; | 602 | int i; |
603 | |||
592 | /* | 604 | /* |
593 | * Run a selftest on this tracer. | 605 | * Run a selftest on this tracer. |
594 | * Here we reset the trace buffer, and set the current | 606 | * Here we reset the trace buffer, and set the current |
@@ -624,6 +636,7 @@ int register_tracer(struct tracer *type) | |||
624 | max_tracer_type_len = len; | 636 | max_tracer_type_len = len; |
625 | 637 | ||
626 | out: | 638 | out: |
639 | tracing_selftest_running = false; | ||
627 | mutex_unlock(&trace_types_lock); | 640 | mutex_unlock(&trace_types_lock); |
628 | lock_kernel(); | 641 | lock_kernel(); |
629 | 642 | ||
@@ -804,7 +817,7 @@ static void trace_save_cmdline(struct task_struct *tsk) | |||
804 | spin_unlock(&trace_cmdline_lock); | 817 | spin_unlock(&trace_cmdline_lock); |
805 | } | 818 | } |
806 | 819 | ||
807 | static char *trace_find_cmdline(int pid) | 820 | char *trace_find_cmdline(int pid) |
808 | { | 821 | { |
809 | char *cmdline = "<...>"; | 822 | char *cmdline = "<...>"; |
810 | unsigned map; | 823 | unsigned map; |
@@ -878,15 +891,39 @@ trace_function(struct trace_array *tr, struct trace_array_cpu *data, | |||
878 | ring_buffer_unlock_commit(tr->buffer, event, irq_flags); | 891 | ring_buffer_unlock_commit(tr->buffer, event, irq_flags); |
879 | } | 892 | } |
880 | 893 | ||
881 | #ifdef CONFIG_FUNCTION_RET_TRACER | 894 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
882 | static void __trace_function_return(struct trace_array *tr, | 895 | static void __trace_graph_entry(struct trace_array *tr, |
896 | struct trace_array_cpu *data, | ||
897 | struct ftrace_graph_ent *trace, | ||
898 | unsigned long flags, | ||
899 | int pc) | ||
900 | { | ||
901 | struct ring_buffer_event *event; | ||
902 | struct ftrace_graph_ent_entry *entry; | ||
903 | unsigned long irq_flags; | ||
904 | |||
905 | if (unlikely(local_read(&__get_cpu_var(ftrace_cpu_disabled)))) | ||
906 | return; | ||
907 | |||
908 | event = ring_buffer_lock_reserve(global_trace.buffer, sizeof(*entry), | ||
909 | &irq_flags); | ||
910 | if (!event) | ||
911 | return; | ||
912 | entry = ring_buffer_event_data(event); | ||
913 | tracing_generic_entry_update(&entry->ent, flags, pc); | ||
914 | entry->ent.type = TRACE_GRAPH_ENT; | ||
915 | entry->graph_ent = *trace; | ||
916 | ring_buffer_unlock_commit(global_trace.buffer, event, irq_flags); | ||
917 | } | ||
918 | |||
919 | static void __trace_graph_return(struct trace_array *tr, | ||
883 | struct trace_array_cpu *data, | 920 | struct trace_array_cpu *data, |
884 | struct ftrace_retfunc *trace, | 921 | struct ftrace_graph_ret *trace, |
885 | unsigned long flags, | 922 | unsigned long flags, |
886 | int pc) | 923 | int pc) |
887 | { | 924 | { |
888 | struct ring_buffer_event *event; | 925 | struct ring_buffer_event *event; |
889 | struct ftrace_ret_entry *entry; | 926 | struct ftrace_graph_ret_entry *entry; |
890 | unsigned long irq_flags; | 927 | unsigned long irq_flags; |
891 | 928 | ||
892 | if (unlikely(local_read(&__get_cpu_var(ftrace_cpu_disabled)))) | 929 | if (unlikely(local_read(&__get_cpu_var(ftrace_cpu_disabled)))) |
@@ -898,12 +935,8 @@ static void __trace_function_return(struct trace_array *tr, | |||
898 | return; | 935 | return; |
899 | entry = ring_buffer_event_data(event); | 936 | entry = ring_buffer_event_data(event); |
900 | tracing_generic_entry_update(&entry->ent, flags, pc); | 937 | tracing_generic_entry_update(&entry->ent, flags, pc); |
901 | entry->ent.type = TRACE_FN_RET; | 938 | entry->ent.type = TRACE_GRAPH_RET; |
902 | entry->ip = trace->func; | 939 | entry->ret = *trace; |
903 | entry->parent_ip = trace->ret; | ||
904 | entry->rettime = trace->rettime; | ||
905 | entry->calltime = trace->calltime; | ||
906 | entry->overrun = trace->overrun; | ||
907 | ring_buffer_unlock_commit(global_trace.buffer, event, irq_flags); | 940 | ring_buffer_unlock_commit(global_trace.buffer, event, irq_flags); |
908 | } | 941 | } |
909 | #endif | 942 | #endif |
@@ -963,6 +996,7 @@ static void ftrace_trace_userstack(struct trace_array *tr, | |||
963 | struct trace_array_cpu *data, | 996 | struct trace_array_cpu *data, |
964 | unsigned long flags, int pc) | 997 | unsigned long flags, int pc) |
965 | { | 998 | { |
999 | #ifdef CONFIG_STACKTRACE | ||
966 | struct ring_buffer_event *event; | 1000 | struct ring_buffer_event *event; |
967 | struct userstack_entry *entry; | 1001 | struct userstack_entry *entry; |
968 | struct stack_trace trace; | 1002 | struct stack_trace trace; |
@@ -988,6 +1022,7 @@ static void ftrace_trace_userstack(struct trace_array *tr, | |||
988 | 1022 | ||
989 | save_stack_trace_user(&trace); | 1023 | save_stack_trace_user(&trace); |
990 | ring_buffer_unlock_commit(tr->buffer, event, irq_flags); | 1024 | ring_buffer_unlock_commit(tr->buffer, event, irq_flags); |
1025 | #endif | ||
991 | } | 1026 | } |
992 | 1027 | ||
993 | void __trace_userstack(struct trace_array *tr, | 1028 | void __trace_userstack(struct trace_array *tr, |
@@ -1177,8 +1212,8 @@ function_trace_call(unsigned long ip, unsigned long parent_ip) | |||
1177 | local_irq_restore(flags); | 1212 | local_irq_restore(flags); |
1178 | } | 1213 | } |
1179 | 1214 | ||
1180 | #ifdef CONFIG_FUNCTION_RET_TRACER | 1215 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
1181 | void trace_function_return(struct ftrace_retfunc *trace) | 1216 | int trace_graph_entry(struct ftrace_graph_ent *trace) |
1182 | { | 1217 | { |
1183 | struct trace_array *tr = &global_trace; | 1218 | struct trace_array *tr = &global_trace; |
1184 | struct trace_array_cpu *data; | 1219 | struct trace_array_cpu *data; |
@@ -1187,18 +1222,52 @@ void trace_function_return(struct ftrace_retfunc *trace) | |||
1187 | int cpu; | 1222 | int cpu; |
1188 | int pc; | 1223 | int pc; |
1189 | 1224 | ||
1190 | raw_local_irq_save(flags); | 1225 | if (!ftrace_trace_task(current)) |
1226 | return 0; | ||
1227 | |||
1228 | if (!ftrace_graph_addr(trace->func)) | ||
1229 | return 0; | ||
1230 | |||
1231 | local_irq_save(flags); | ||
1191 | cpu = raw_smp_processor_id(); | 1232 | cpu = raw_smp_processor_id(); |
1192 | data = tr->data[cpu]; | 1233 | data = tr->data[cpu]; |
1193 | disabled = atomic_inc_return(&data->disabled); | 1234 | disabled = atomic_inc_return(&data->disabled); |
1194 | if (likely(disabled == 1)) { | 1235 | if (likely(disabled == 1)) { |
1195 | pc = preempt_count(); | 1236 | pc = preempt_count(); |
1196 | __trace_function_return(tr, data, trace, flags, pc); | 1237 | __trace_graph_entry(tr, data, trace, flags, pc); |
1197 | } | 1238 | } |
1239 | /* Only do the atomic if it is not already set */ | ||
1240 | if (!test_tsk_trace_graph(current)) | ||
1241 | set_tsk_trace_graph(current); | ||
1198 | atomic_dec(&data->disabled); | 1242 | atomic_dec(&data->disabled); |
1199 | raw_local_irq_restore(flags); | 1243 | local_irq_restore(flags); |
1244 | |||
1245 | return 1; | ||
1200 | } | 1246 | } |
1201 | #endif /* CONFIG_FUNCTION_RET_TRACER */ | 1247 | |
1248 | void trace_graph_return(struct ftrace_graph_ret *trace) | ||
1249 | { | ||
1250 | struct trace_array *tr = &global_trace; | ||
1251 | struct trace_array_cpu *data; | ||
1252 | unsigned long flags; | ||
1253 | long disabled; | ||
1254 | int cpu; | ||
1255 | int pc; | ||
1256 | |||
1257 | local_irq_save(flags); | ||
1258 | cpu = raw_smp_processor_id(); | ||
1259 | data = tr->data[cpu]; | ||
1260 | disabled = atomic_inc_return(&data->disabled); | ||
1261 | if (likely(disabled == 1)) { | ||
1262 | pc = preempt_count(); | ||
1263 | __trace_graph_return(tr, data, trace, flags, pc); | ||
1264 | } | ||
1265 | if (!trace->depth) | ||
1266 | clear_tsk_trace_graph(current); | ||
1267 | atomic_dec(&data->disabled); | ||
1268 | local_irq_restore(flags); | ||
1269 | } | ||
1270 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | ||
1202 | 1271 | ||
1203 | static struct ftrace_ops trace_ops __read_mostly = | 1272 | static struct ftrace_ops trace_ops __read_mostly = |
1204 | { | 1273 | { |
@@ -2000,9 +2069,11 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | |||
2000 | trace_seq_print_cont(s, iter); | 2069 | trace_seq_print_cont(s, iter); |
2001 | break; | 2070 | break; |
2002 | } | 2071 | } |
2003 | case TRACE_FN_RET: { | 2072 | case TRACE_GRAPH_RET: { |
2004 | return print_return_function(iter); | 2073 | return print_graph_function(iter); |
2005 | break; | 2074 | } |
2075 | case TRACE_GRAPH_ENT: { | ||
2076 | return print_graph_function(iter); | ||
2006 | } | 2077 | } |
2007 | case TRACE_BRANCH: { | 2078 | case TRACE_BRANCH: { |
2008 | struct trace_branch *field; | 2079 | struct trace_branch *field; |
@@ -2298,7 +2369,9 @@ static int s_show(struct seq_file *m, void *v) | |||
2298 | seq_printf(m, "# tracer: %s\n", iter->trace->name); | 2369 | seq_printf(m, "# tracer: %s\n", iter->trace->name); |
2299 | seq_puts(m, "#\n"); | 2370 | seq_puts(m, "#\n"); |
2300 | } | 2371 | } |
2301 | if (iter->iter_flags & TRACE_FILE_LAT_FMT) { | 2372 | if (iter->trace && iter->trace->print_header) |
2373 | iter->trace->print_header(m); | ||
2374 | else if (iter->iter_flags & TRACE_FILE_LAT_FMT) { | ||
2302 | /* print nothing if the buffers are empty */ | 2375 | /* print nothing if the buffers are empty */ |
2303 | if (trace_empty(iter)) | 2376 | if (trace_empty(iter)) |
2304 | return 0; | 2377 | return 0; |
@@ -2350,6 +2423,10 @@ __tracing_open(struct inode *inode, struct file *file, int *ret) | |||
2350 | iter->trace = current_trace; | 2423 | iter->trace = current_trace; |
2351 | iter->pos = -1; | 2424 | iter->pos = -1; |
2352 | 2425 | ||
2426 | /* Notify the tracer early; before we stop tracing. */ | ||
2427 | if (iter->trace && iter->trace->open) | ||
2428 | iter->trace->open(iter); | ||
2429 | |||
2353 | /* Annotate start of buffers if we had overruns */ | 2430 | /* Annotate start of buffers if we had overruns */ |
2354 | if (ring_buffer_overruns(iter->tr->buffer)) | 2431 | if (ring_buffer_overruns(iter->tr->buffer)) |
2355 | iter->iter_flags |= TRACE_FILE_ANNOTATE; | 2432 | iter->iter_flags |= TRACE_FILE_ANNOTATE; |
@@ -2375,9 +2452,6 @@ __tracing_open(struct inode *inode, struct file *file, int *ret) | |||
2375 | /* stop the trace while dumping */ | 2452 | /* stop the trace while dumping */ |
2376 | tracing_stop(); | 2453 | tracing_stop(); |
2377 | 2454 | ||
2378 | if (iter->trace && iter->trace->open) | ||
2379 | iter->trace->open(iter); | ||
2380 | |||
2381 | mutex_unlock(&trace_types_lock); | 2455 | mutex_unlock(&trace_types_lock); |
2382 | 2456 | ||
2383 | out: | 2457 | out: |
@@ -2597,7 +2671,7 @@ tracing_cpumask_write(struct file *filp, const char __user *ubuf, | |||
2597 | if (err) | 2671 | if (err) |
2598 | goto err_unlock; | 2672 | goto err_unlock; |
2599 | 2673 | ||
2600 | raw_local_irq_disable(); | 2674 | local_irq_disable(); |
2601 | __raw_spin_lock(&ftrace_max_lock); | 2675 | __raw_spin_lock(&ftrace_max_lock); |
2602 | for_each_tracing_cpu(cpu) { | 2676 | for_each_tracing_cpu(cpu) { |
2603 | /* | 2677 | /* |
@@ -2614,7 +2688,7 @@ tracing_cpumask_write(struct file *filp, const char __user *ubuf, | |||
2614 | } | 2688 | } |
2615 | } | 2689 | } |
2616 | __raw_spin_unlock(&ftrace_max_lock); | 2690 | __raw_spin_unlock(&ftrace_max_lock); |
2617 | raw_local_irq_enable(); | 2691 | local_irq_enable(); |
2618 | 2692 | ||
2619 | tracing_cpumask = tracing_cpumask_new; | 2693 | tracing_cpumask = tracing_cpumask_new; |
2620 | 2694 | ||
@@ -3285,7 +3359,7 @@ static int mark_printk(const char *fmt, ...) | |||
3285 | int ret; | 3359 | int ret; |
3286 | va_list args; | 3360 | va_list args; |
3287 | va_start(args, fmt); | 3361 | va_start(args, fmt); |
3288 | ret = trace_vprintk(0, fmt, args); | 3362 | ret = trace_vprintk(0, -1, fmt, args); |
3289 | va_end(args); | 3363 | va_end(args); |
3290 | return ret; | 3364 | return ret; |
3291 | } | 3365 | } |
@@ -3514,7 +3588,7 @@ static __init int tracer_init_debugfs(void) | |||
3514 | return 0; | 3588 | return 0; |
3515 | } | 3589 | } |
3516 | 3590 | ||
3517 | int trace_vprintk(unsigned long ip, const char *fmt, va_list args) | 3591 | int trace_vprintk(unsigned long ip, int depth, const char *fmt, va_list args) |
3518 | { | 3592 | { |
3519 | static DEFINE_SPINLOCK(trace_buf_lock); | 3593 | static DEFINE_SPINLOCK(trace_buf_lock); |
3520 | static char trace_buf[TRACE_BUF_SIZE]; | 3594 | static char trace_buf[TRACE_BUF_SIZE]; |
@@ -3522,11 +3596,11 @@ int trace_vprintk(unsigned long ip, const char *fmt, va_list args) | |||
3522 | struct ring_buffer_event *event; | 3596 | struct ring_buffer_event *event; |
3523 | struct trace_array *tr = &global_trace; | 3597 | struct trace_array *tr = &global_trace; |
3524 | struct trace_array_cpu *data; | 3598 | struct trace_array_cpu *data; |
3525 | struct print_entry *entry; | ||
3526 | unsigned long flags, irq_flags; | ||
3527 | int cpu, len = 0, size, pc; | 3599 | int cpu, len = 0, size, pc; |
3600 | struct print_entry *entry; | ||
3601 | unsigned long irq_flags; | ||
3528 | 3602 | ||
3529 | if (tracing_disabled) | 3603 | if (tracing_disabled || tracing_selftest_running) |
3530 | return 0; | 3604 | return 0; |
3531 | 3605 | ||
3532 | pc = preempt_count(); | 3606 | pc = preempt_count(); |
@@ -3537,7 +3611,8 @@ int trace_vprintk(unsigned long ip, const char *fmt, va_list args) | |||
3537 | if (unlikely(atomic_read(&data->disabled))) | 3611 | if (unlikely(atomic_read(&data->disabled))) |
3538 | goto out; | 3612 | goto out; |
3539 | 3613 | ||
3540 | spin_lock_irqsave(&trace_buf_lock, flags); | 3614 | pause_graph_tracing(); |
3615 | spin_lock_irqsave(&trace_buf_lock, irq_flags); | ||
3541 | len = vsnprintf(trace_buf, TRACE_BUF_SIZE, fmt, args); | 3616 | len = vsnprintf(trace_buf, TRACE_BUF_SIZE, fmt, args); |
3542 | 3617 | ||
3543 | len = min(len, TRACE_BUF_SIZE-1); | 3618 | len = min(len, TRACE_BUF_SIZE-1); |
@@ -3548,17 +3623,18 @@ int trace_vprintk(unsigned long ip, const char *fmt, va_list args) | |||
3548 | if (!event) | 3623 | if (!event) |
3549 | goto out_unlock; | 3624 | goto out_unlock; |
3550 | entry = ring_buffer_event_data(event); | 3625 | entry = ring_buffer_event_data(event); |
3551 | tracing_generic_entry_update(&entry->ent, flags, pc); | 3626 | tracing_generic_entry_update(&entry->ent, irq_flags, pc); |
3552 | entry->ent.type = TRACE_PRINT; | 3627 | entry->ent.type = TRACE_PRINT; |
3553 | entry->ip = ip; | 3628 | entry->ip = ip; |
3629 | entry->depth = depth; | ||
3554 | 3630 | ||
3555 | memcpy(&entry->buf, trace_buf, len); | 3631 | memcpy(&entry->buf, trace_buf, len); |
3556 | entry->buf[len] = 0; | 3632 | entry->buf[len] = 0; |
3557 | ring_buffer_unlock_commit(tr->buffer, event, irq_flags); | 3633 | ring_buffer_unlock_commit(tr->buffer, event, irq_flags); |
3558 | 3634 | ||
3559 | out_unlock: | 3635 | out_unlock: |
3560 | spin_unlock_irqrestore(&trace_buf_lock, flags); | 3636 | spin_unlock_irqrestore(&trace_buf_lock, irq_flags); |
3561 | 3637 | unpause_graph_tracing(); | |
3562 | out: | 3638 | out: |
3563 | preempt_enable_notrace(); | 3639 | preempt_enable_notrace(); |
3564 | 3640 | ||
@@ -3575,7 +3651,7 @@ int __ftrace_printk(unsigned long ip, const char *fmt, ...) | |||
3575 | return 0; | 3651 | return 0; |
3576 | 3652 | ||
3577 | va_start(ap, fmt); | 3653 | va_start(ap, fmt); |
3578 | ret = trace_vprintk(ip, fmt, ap); | 3654 | ret = trace_vprintk(ip, task_curr_ret_stack(current), fmt, ap); |
3579 | va_end(ap); | 3655 | va_end(ap); |
3580 | return ret; | 3656 | return ret; |
3581 | } | 3657 | } |
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 28c15c2ebc22..5ac697065a48 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
@@ -25,8 +25,11 @@ enum trace_type { | |||
25 | TRACE_BRANCH, | 25 | TRACE_BRANCH, |
26 | TRACE_BOOT_CALL, | 26 | TRACE_BOOT_CALL, |
27 | TRACE_BOOT_RET, | 27 | TRACE_BOOT_RET, |
28 | TRACE_FN_RET, | 28 | TRACE_GRAPH_RET, |
29 | TRACE_GRAPH_ENT, | ||
29 | TRACE_USER_STACK, | 30 | TRACE_USER_STACK, |
31 | TRACE_BTS, | ||
32 | TRACE_POWER, | ||
30 | 33 | ||
31 | __TRACE_LAST_TYPE | 34 | __TRACE_LAST_TYPE |
32 | }; | 35 | }; |
@@ -55,14 +58,16 @@ struct ftrace_entry { | |||
55 | unsigned long parent_ip; | 58 | unsigned long parent_ip; |
56 | }; | 59 | }; |
57 | 60 | ||
61 | /* Function call entry */ | ||
62 | struct ftrace_graph_ent_entry { | ||
63 | struct trace_entry ent; | ||
64 | struct ftrace_graph_ent graph_ent; | ||
65 | }; | ||
66 | |||
58 | /* Function return entry */ | 67 | /* Function return entry */ |
59 | struct ftrace_ret_entry { | 68 | struct ftrace_graph_ret_entry { |
60 | struct trace_entry ent; | 69 | struct trace_entry ent; |
61 | unsigned long ip; | 70 | struct ftrace_graph_ret ret; |
62 | unsigned long parent_ip; | ||
63 | unsigned long long calltime; | ||
64 | unsigned long long rettime; | ||
65 | unsigned long overrun; | ||
66 | }; | 71 | }; |
67 | extern struct tracer boot_tracer; | 72 | extern struct tracer boot_tracer; |
68 | 73 | ||
@@ -112,6 +117,7 @@ struct userstack_entry { | |||
112 | struct print_entry { | 117 | struct print_entry { |
113 | struct trace_entry ent; | 118 | struct trace_entry ent; |
114 | unsigned long ip; | 119 | unsigned long ip; |
120 | int depth; | ||
115 | char buf[]; | 121 | char buf[]; |
116 | }; | 122 | }; |
117 | 123 | ||
@@ -153,6 +159,17 @@ struct trace_branch { | |||
153 | char correct; | 159 | char correct; |
154 | }; | 160 | }; |
155 | 161 | ||
162 | struct bts_entry { | ||
163 | struct trace_entry ent; | ||
164 | unsigned long from; | ||
165 | unsigned long to; | ||
166 | }; | ||
167 | |||
168 | struct trace_power { | ||
169 | struct trace_entry ent; | ||
170 | struct power_trace state_data; | ||
171 | }; | ||
172 | |||
156 | /* | 173 | /* |
157 | * trace_flag_type is an enumeration that holds different | 174 | * trace_flag_type is an enumeration that holds different |
158 | * states when a trace occurs. These are: | 175 | * states when a trace occurs. These are: |
@@ -257,7 +274,12 @@ extern void __ftrace_bad_type(void); | |||
257 | IF_ASSIGN(var, ent, struct trace_boot_call, TRACE_BOOT_CALL);\ | 274 | IF_ASSIGN(var, ent, struct trace_boot_call, TRACE_BOOT_CALL);\ |
258 | IF_ASSIGN(var, ent, struct trace_boot_ret, TRACE_BOOT_RET);\ | 275 | IF_ASSIGN(var, ent, struct trace_boot_ret, TRACE_BOOT_RET);\ |
259 | IF_ASSIGN(var, ent, struct trace_branch, TRACE_BRANCH); \ | 276 | IF_ASSIGN(var, ent, struct trace_branch, TRACE_BRANCH); \ |
260 | IF_ASSIGN(var, ent, struct ftrace_ret_entry, TRACE_FN_RET);\ | 277 | IF_ASSIGN(var, ent, struct ftrace_graph_ent_entry, \ |
278 | TRACE_GRAPH_ENT); \ | ||
279 | IF_ASSIGN(var, ent, struct ftrace_graph_ret_entry, \ | ||
280 | TRACE_GRAPH_RET); \ | ||
281 | IF_ASSIGN(var, ent, struct bts_entry, TRACE_BTS);\ | ||
282 | IF_ASSIGN(var, ent, struct trace_power, TRACE_POWER); \ | ||
261 | __ftrace_bad_type(); \ | 283 | __ftrace_bad_type(); \ |
262 | } while (0) | 284 | } while (0) |
263 | 285 | ||
@@ -311,6 +333,7 @@ struct tracer { | |||
311 | int (*selftest)(struct tracer *trace, | 333 | int (*selftest)(struct tracer *trace, |
312 | struct trace_array *tr); | 334 | struct trace_array *tr); |
313 | #endif | 335 | #endif |
336 | void (*print_header)(struct seq_file *m); | ||
314 | enum print_line_t (*print_line)(struct trace_iterator *iter); | 337 | enum print_line_t (*print_line)(struct trace_iterator *iter); |
315 | /* If you handled the flag setting, return 0 */ | 338 | /* If you handled the flag setting, return 0 */ |
316 | int (*set_flag)(u32 old_flags, u32 bit, int set); | 339 | int (*set_flag)(u32 old_flags, u32 bit, int set); |
@@ -388,8 +411,12 @@ void trace_function(struct trace_array *tr, | |||
388 | unsigned long ip, | 411 | unsigned long ip, |
389 | unsigned long parent_ip, | 412 | unsigned long parent_ip, |
390 | unsigned long flags, int pc); | 413 | unsigned long flags, int pc); |
391 | void | 414 | |
392 | trace_function_return(struct ftrace_retfunc *trace); | 415 | void trace_graph_return(struct ftrace_graph_ret *trace); |
416 | int trace_graph_entry(struct ftrace_graph_ent *trace); | ||
417 | void trace_bts(struct trace_array *tr, | ||
418 | unsigned long from, | ||
419 | unsigned long to); | ||
393 | 420 | ||
394 | void tracing_start_cmdline_record(void); | 421 | void tracing_start_cmdline_record(void); |
395 | void tracing_stop_cmdline_record(void); | 422 | void tracing_stop_cmdline_record(void); |
@@ -431,6 +458,7 @@ struct tracer_switch_ops { | |||
431 | struct tracer_switch_ops *next; | 458 | struct tracer_switch_ops *next; |
432 | }; | 459 | }; |
433 | 460 | ||
461 | char *trace_find_cmdline(int pid); | ||
434 | #endif /* CONFIG_CONTEXT_SWITCH_TRACER */ | 462 | #endif /* CONFIG_CONTEXT_SWITCH_TRACER */ |
435 | 463 | ||
436 | #ifdef CONFIG_DYNAMIC_FTRACE | 464 | #ifdef CONFIG_DYNAMIC_FTRACE |
@@ -471,20 +499,63 @@ seq_print_ip_sym(struct trace_seq *s, unsigned long ip, | |||
471 | extern ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf, | 499 | extern ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf, |
472 | size_t cnt); | 500 | size_t cnt); |
473 | extern long ns2usecs(cycle_t nsec); | 501 | extern long ns2usecs(cycle_t nsec); |
474 | extern int trace_vprintk(unsigned long ip, const char *fmt, va_list args); | 502 | extern int |
503 | trace_vprintk(unsigned long ip, int depth, const char *fmt, va_list args); | ||
475 | 504 | ||
476 | extern unsigned long trace_flags; | 505 | extern unsigned long trace_flags; |
477 | 506 | ||
478 | /* Standard output formatting function used for function return traces */ | 507 | /* Standard output formatting function used for function return traces */ |
479 | #ifdef CONFIG_FUNCTION_RET_TRACER | 508 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
480 | extern enum print_line_t print_return_function(struct trace_iterator *iter); | 509 | extern enum print_line_t print_graph_function(struct trace_iterator *iter); |
510 | |||
511 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
512 | /* TODO: make this variable */ | ||
513 | #define FTRACE_GRAPH_MAX_FUNCS 32 | ||
514 | extern int ftrace_graph_count; | ||
515 | extern unsigned long ftrace_graph_funcs[FTRACE_GRAPH_MAX_FUNCS]; | ||
516 | |||
517 | static inline int ftrace_graph_addr(unsigned long addr) | ||
518 | { | ||
519 | int i; | ||
520 | |||
521 | if (!ftrace_graph_count || test_tsk_trace_graph(current)) | ||
522 | return 1; | ||
523 | |||
524 | for (i = 0; i < ftrace_graph_count; i++) { | ||
525 | if (addr == ftrace_graph_funcs[i]) | ||
526 | return 1; | ||
527 | } | ||
528 | |||
529 | return 0; | ||
530 | } | ||
481 | #else | 531 | #else |
532 | static inline int ftrace_trace_addr(unsigned long addr) | ||
533 | { | ||
534 | return 1; | ||
535 | } | ||
536 | static inline int ftrace_graph_addr(unsigned long addr) | ||
537 | { | ||
538 | return 1; | ||
539 | } | ||
540 | #endif /* CONFIG_DYNAMIC_FTRACE */ | ||
541 | |||
542 | #else /* CONFIG_FUNCTION_GRAPH_TRACER */ | ||
482 | static inline enum print_line_t | 543 | static inline enum print_line_t |
483 | print_return_function(struct trace_iterator *iter) | 544 | print_graph_function(struct trace_iterator *iter) |
484 | { | 545 | { |
485 | return TRACE_TYPE_UNHANDLED; | 546 | return TRACE_TYPE_UNHANDLED; |
486 | } | 547 | } |
487 | #endif | 548 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
549 | |||
550 | extern struct pid *ftrace_pid_trace; | ||
551 | |||
552 | static inline int ftrace_trace_task(struct task_struct *task) | ||
553 | { | ||
554 | if (!ftrace_pid_trace) | ||
555 | return 1; | ||
556 | |||
557 | return test_tsk_trace_trace(task); | ||
558 | } | ||
488 | 559 | ||
489 | /* | 560 | /* |
490 | * trace_iterator_flags is an enumeration that defines bit | 561 | * trace_iterator_flags is an enumeration that defines bit |
diff --git a/kernel/trace/trace_branch.c b/kernel/trace/trace_branch.c index 877ee88e6a74..6c00feb3bac7 100644 --- a/kernel/trace/trace_branch.c +++ b/kernel/trace/trace_branch.c | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <linux/kallsyms.h> | 6 | #include <linux/kallsyms.h> |
7 | #include <linux/seq_file.h> | 7 | #include <linux/seq_file.h> |
8 | #include <linux/spinlock.h> | 8 | #include <linux/spinlock.h> |
9 | #include <linux/irqflags.h> | ||
9 | #include <linux/debugfs.h> | 10 | #include <linux/debugfs.h> |
10 | #include <linux/uaccess.h> | 11 | #include <linux/uaccess.h> |
11 | #include <linux/module.h> | 12 | #include <linux/module.h> |
@@ -41,7 +42,7 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) | |||
41 | if (unlikely(!tr)) | 42 | if (unlikely(!tr)) |
42 | return; | 43 | return; |
43 | 44 | ||
44 | raw_local_irq_save(flags); | 45 | local_irq_save(flags); |
45 | cpu = raw_smp_processor_id(); | 46 | cpu = raw_smp_processor_id(); |
46 | if (atomic_inc_return(&tr->data[cpu]->disabled) != 1) | 47 | if (atomic_inc_return(&tr->data[cpu]->disabled) != 1) |
47 | goto out; | 48 | goto out; |
@@ -73,7 +74,7 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) | |||
73 | 74 | ||
74 | out: | 75 | out: |
75 | atomic_dec(&tr->data[cpu]->disabled); | 76 | atomic_dec(&tr->data[cpu]->disabled); |
76 | raw_local_irq_restore(flags); | 77 | local_irq_restore(flags); |
77 | } | 78 | } |
78 | 79 | ||
79 | static inline | 80 | static inline |
diff --git a/kernel/trace/trace_bts.c b/kernel/trace/trace_bts.c new file mode 100644 index 000000000000..23b76e4690ef --- /dev/null +++ b/kernel/trace/trace_bts.c | |||
@@ -0,0 +1,276 @@ | |||
1 | /* | ||
2 | * BTS tracer | ||
3 | * | ||
4 | * Copyright (C) 2008 Markus Metzger <markus.t.metzger@gmail.com> | ||
5 | * | ||
6 | */ | ||
7 | |||
8 | #include <linux/module.h> | ||
9 | #include <linux/fs.h> | ||
10 | #include <linux/debugfs.h> | ||
11 | #include <linux/ftrace.h> | ||
12 | #include <linux/kallsyms.h> | ||
13 | |||
14 | #include <asm/ds.h> | ||
15 | |||
16 | #include "trace.h" | ||
17 | |||
18 | |||
19 | #define SIZEOF_BTS (1 << 13) | ||
20 | |||
21 | static DEFINE_PER_CPU(struct bts_tracer *, tracer); | ||
22 | static DEFINE_PER_CPU(unsigned char[SIZEOF_BTS], buffer); | ||
23 | |||
24 | #define this_tracer per_cpu(tracer, smp_processor_id()) | ||
25 | #define this_buffer per_cpu(buffer, smp_processor_id()) | ||
26 | |||
27 | |||
28 | /* | ||
29 | * Information to interpret a BTS record. | ||
30 | * This will go into an in-kernel BTS interface. | ||
31 | */ | ||
32 | static unsigned char sizeof_field; | ||
33 | static unsigned long debugctl_mask; | ||
34 | |||
35 | #define sizeof_bts (3 * sizeof_field) | ||
36 | |||
37 | static void bts_trace_cpuinit(struct cpuinfo_x86 *c) | ||
38 | { | ||
39 | switch (c->x86) { | ||
40 | case 0x6: | ||
41 | switch (c->x86_model) { | ||
42 | case 0x0 ... 0xC: | ||
43 | break; | ||
44 | case 0xD: | ||
45 | case 0xE: /* Pentium M */ | ||
46 | sizeof_field = sizeof(long); | ||
47 | debugctl_mask = (1<<6)|(1<<7); | ||
48 | break; | ||
49 | default: | ||
50 | sizeof_field = 8; | ||
51 | debugctl_mask = (1<<6)|(1<<7); | ||
52 | break; | ||
53 | } | ||
54 | break; | ||
55 | case 0xF: | ||
56 | switch (c->x86_model) { | ||
57 | case 0x0: | ||
58 | case 0x1: | ||
59 | case 0x2: /* Netburst */ | ||
60 | sizeof_field = sizeof(long); | ||
61 | debugctl_mask = (1<<2)|(1<<3); | ||
62 | break; | ||
63 | default: | ||
64 | /* sorry, don't know about them */ | ||
65 | break; | ||
66 | } | ||
67 | break; | ||
68 | default: | ||
69 | /* sorry, don't know about them */ | ||
70 | break; | ||
71 | } | ||
72 | } | ||
73 | |||
74 | static inline void bts_enable(void) | ||
75 | { | ||
76 | unsigned long debugctl; | ||
77 | |||
78 | rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl); | ||
79 | wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl | debugctl_mask); | ||
80 | } | ||
81 | |||
82 | static inline void bts_disable(void) | ||
83 | { | ||
84 | unsigned long debugctl; | ||
85 | |||
86 | rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl); | ||
87 | wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl & ~debugctl_mask); | ||
88 | } | ||
89 | |||
90 | static void bts_trace_reset(struct trace_array *tr) | ||
91 | { | ||
92 | int cpu; | ||
93 | |||
94 | tr->time_start = ftrace_now(tr->cpu); | ||
95 | |||
96 | for_each_online_cpu(cpu) | ||
97 | tracing_reset(tr, cpu); | ||
98 | } | ||
99 | |||
100 | static void bts_trace_start_cpu(void *arg) | ||
101 | { | ||
102 | this_tracer = | ||
103 | ds_request_bts(/* task = */ NULL, this_buffer, SIZEOF_BTS, | ||
104 | /* ovfl = */ NULL, /* th = */ (size_t)-1); | ||
105 | if (IS_ERR(this_tracer)) { | ||
106 | this_tracer = NULL; | ||
107 | return; | ||
108 | } | ||
109 | |||
110 | bts_enable(); | ||
111 | } | ||
112 | |||
113 | static void bts_trace_start(struct trace_array *tr) | ||
114 | { | ||
115 | int cpu; | ||
116 | |||
117 | bts_trace_reset(tr); | ||
118 | |||
119 | for_each_cpu_mask(cpu, cpu_possible_map) | ||
120 | smp_call_function_single(cpu, bts_trace_start_cpu, NULL, 1); | ||
121 | } | ||
122 | |||
123 | static void bts_trace_stop_cpu(void *arg) | ||
124 | { | ||
125 | if (this_tracer) { | ||
126 | bts_disable(); | ||
127 | |||
128 | ds_release_bts(this_tracer); | ||
129 | this_tracer = NULL; | ||
130 | } | ||
131 | } | ||
132 | |||
133 | static void bts_trace_stop(struct trace_array *tr) | ||
134 | { | ||
135 | int cpu; | ||
136 | |||
137 | for_each_cpu_mask(cpu, cpu_possible_map) | ||
138 | smp_call_function_single(cpu, bts_trace_stop_cpu, NULL, 1); | ||
139 | } | ||
140 | |||
141 | static int bts_trace_init(struct trace_array *tr) | ||
142 | { | ||
143 | bts_trace_cpuinit(&boot_cpu_data); | ||
144 | bts_trace_reset(tr); | ||
145 | bts_trace_start(tr); | ||
146 | |||
147 | return 0; | ||
148 | } | ||
149 | |||
150 | static void bts_trace_print_header(struct seq_file *m) | ||
151 | { | ||
152 | #ifdef __i386__ | ||
153 | seq_puts(m, "# CPU# FROM TO FUNCTION\n"); | ||
154 | seq_puts(m, "# | | | |\n"); | ||
155 | #else | ||
156 | seq_puts(m, | ||
157 | "# CPU# FROM TO FUNCTION\n"); | ||
158 | seq_puts(m, | ||
159 | "# | | | |\n"); | ||
160 | #endif | ||
161 | } | ||
162 | |||
163 | static enum print_line_t bts_trace_print_line(struct trace_iterator *iter) | ||
164 | { | ||
165 | struct trace_entry *entry = iter->ent; | ||
166 | struct trace_seq *seq = &iter->seq; | ||
167 | struct bts_entry *it; | ||
168 | |||
169 | trace_assign_type(it, entry); | ||
170 | |||
171 | if (entry->type == TRACE_BTS) { | ||
172 | int ret; | ||
173 | #ifdef CONFIG_KALLSYMS | ||
174 | char function[KSYM_SYMBOL_LEN]; | ||
175 | sprint_symbol(function, it->from); | ||
176 | #else | ||
177 | char *function = "<unknown>"; | ||
178 | #endif | ||
179 | |||
180 | ret = trace_seq_printf(seq, "%4d 0x%lx -> 0x%lx [%s]\n", | ||
181 | entry->cpu, it->from, it->to, function); | ||
182 | if (!ret) | ||
183 | return TRACE_TYPE_PARTIAL_LINE;; | ||
184 | return TRACE_TYPE_HANDLED; | ||
185 | } | ||
186 | return TRACE_TYPE_UNHANDLED; | ||
187 | } | ||
188 | |||
189 | void trace_bts(struct trace_array *tr, unsigned long from, unsigned long to) | ||
190 | { | ||
191 | struct ring_buffer_event *event; | ||
192 | struct bts_entry *entry; | ||
193 | unsigned long irq; | ||
194 | |||
195 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), &irq); | ||
196 | if (!event) | ||
197 | return; | ||
198 | entry = ring_buffer_event_data(event); | ||
199 | tracing_generic_entry_update(&entry->ent, 0, from); | ||
200 | entry->ent.type = TRACE_BTS; | ||
201 | entry->ent.cpu = smp_processor_id(); | ||
202 | entry->from = from; | ||
203 | entry->to = to; | ||
204 | ring_buffer_unlock_commit(tr->buffer, event, irq); | ||
205 | } | ||
206 | |||
207 | static void trace_bts_at(struct trace_array *tr, size_t index) | ||
208 | { | ||
209 | const void *raw = NULL; | ||
210 | unsigned long from, to; | ||
211 | int err; | ||
212 | |||
213 | err = ds_access_bts(this_tracer, index, &raw); | ||
214 | if (err < 0) | ||
215 | return; | ||
216 | |||
217 | from = *(const unsigned long *)raw; | ||
218 | to = *(const unsigned long *)((const char *)raw + sizeof_field); | ||
219 | |||
220 | trace_bts(tr, from, to); | ||
221 | } | ||
222 | |||
223 | static void trace_bts_cpu(void *arg) | ||
224 | { | ||
225 | struct trace_array *tr = (struct trace_array *) arg; | ||
226 | size_t index = 0, end = 0, i; | ||
227 | int err; | ||
228 | |||
229 | if (!this_tracer) | ||
230 | return; | ||
231 | |||
232 | bts_disable(); | ||
233 | |||
234 | err = ds_get_bts_index(this_tracer, &index); | ||
235 | if (err < 0) | ||
236 | goto out; | ||
237 | |||
238 | err = ds_get_bts_end(this_tracer, &end); | ||
239 | if (err < 0) | ||
240 | goto out; | ||
241 | |||
242 | for (i = index; i < end; i++) | ||
243 | trace_bts_at(tr, i); | ||
244 | |||
245 | for (i = 0; i < index; i++) | ||
246 | trace_bts_at(tr, i); | ||
247 | |||
248 | out: | ||
249 | bts_enable(); | ||
250 | } | ||
251 | |||
252 | static void trace_bts_prepare(struct trace_iterator *iter) | ||
253 | { | ||
254 | int cpu; | ||
255 | |||
256 | for_each_cpu_mask(cpu, cpu_possible_map) | ||
257 | smp_call_function_single(cpu, trace_bts_cpu, iter->tr, 1); | ||
258 | } | ||
259 | |||
260 | struct tracer bts_tracer __read_mostly = | ||
261 | { | ||
262 | .name = "bts", | ||
263 | .init = bts_trace_init, | ||
264 | .reset = bts_trace_stop, | ||
265 | .print_header = bts_trace_print_header, | ||
266 | .print_line = bts_trace_print_line, | ||
267 | .start = bts_trace_start, | ||
268 | .stop = bts_trace_stop, | ||
269 | .open = trace_bts_prepare | ||
270 | }; | ||
271 | |||
272 | __init static int init_bts_trace(void) | ||
273 | { | ||
274 | return register_tracer(&bts_tracer); | ||
275 | } | ||
276 | device_initcall(init_bts_trace); | ||
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c new file mode 100644 index 000000000000..af60eef4cbcc --- /dev/null +++ b/kernel/trace/trace_functions_graph.c | |||
@@ -0,0 +1,611 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Function graph tracer. | ||
4 | * Copyright (c) 2008 Frederic Weisbecker <fweisbec@gmail.com> | ||
5 | * Mostly borrowed from function tracer which | ||
6 | * is Copyright (c) Steven Rostedt <srostedt@redhat.com> | ||
7 | * | ||
8 | */ | ||
9 | #include <linux/debugfs.h> | ||
10 | #include <linux/uaccess.h> | ||
11 | #include <linux/ftrace.h> | ||
12 | #include <linux/fs.h> | ||
13 | |||
14 | #include "trace.h" | ||
15 | |||
16 | #define TRACE_GRAPH_INDENT 2 | ||
17 | |||
18 | /* Flag options */ | ||
19 | #define TRACE_GRAPH_PRINT_OVERRUN 0x1 | ||
20 | #define TRACE_GRAPH_PRINT_CPU 0x2 | ||
21 | #define TRACE_GRAPH_PRINT_OVERHEAD 0x4 | ||
22 | #define TRACE_GRAPH_PRINT_PROC 0x8 | ||
23 | |||
24 | static struct tracer_opt trace_opts[] = { | ||
25 | /* Display overruns ? */ | ||
26 | { TRACER_OPT(funcgraph-overrun, TRACE_GRAPH_PRINT_OVERRUN) }, | ||
27 | /* Display CPU ? */ | ||
28 | { TRACER_OPT(funcgraph-cpu, TRACE_GRAPH_PRINT_CPU) }, | ||
29 | /* Display Overhead ? */ | ||
30 | { TRACER_OPT(funcgraph-overhead, TRACE_GRAPH_PRINT_OVERHEAD) }, | ||
31 | /* Display proc name/pid */ | ||
32 | { TRACER_OPT(funcgraph-proc, TRACE_GRAPH_PRINT_PROC) }, | ||
33 | { } /* Empty entry */ | ||
34 | }; | ||
35 | |||
36 | static struct tracer_flags tracer_flags = { | ||
37 | /* Don't display overruns and proc by default */ | ||
38 | .val = TRACE_GRAPH_PRINT_CPU | TRACE_GRAPH_PRINT_OVERHEAD, | ||
39 | .opts = trace_opts | ||
40 | }; | ||
41 | |||
42 | /* pid on the last trace processed */ | ||
43 | static pid_t last_pid[NR_CPUS] = { [0 ... NR_CPUS-1] = -1 }; | ||
44 | |||
45 | static int graph_trace_init(struct trace_array *tr) | ||
46 | { | ||
47 | int cpu, ret; | ||
48 | |||
49 | for_each_online_cpu(cpu) | ||
50 | tracing_reset(tr, cpu); | ||
51 | |||
52 | ret = register_ftrace_graph(&trace_graph_return, | ||
53 | &trace_graph_entry); | ||
54 | if (ret) | ||
55 | return ret; | ||
56 | tracing_start_cmdline_record(); | ||
57 | |||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | static void graph_trace_reset(struct trace_array *tr) | ||
62 | { | ||
63 | tracing_stop_cmdline_record(); | ||
64 | unregister_ftrace_graph(); | ||
65 | } | ||
66 | |||
67 | static inline int log10_cpu(int nb) | ||
68 | { | ||
69 | if (nb / 100) | ||
70 | return 3; | ||
71 | if (nb / 10) | ||
72 | return 2; | ||
73 | return 1; | ||
74 | } | ||
75 | |||
76 | static enum print_line_t | ||
77 | print_graph_cpu(struct trace_seq *s, int cpu) | ||
78 | { | ||
79 | int i; | ||
80 | int ret; | ||
81 | int log10_this = log10_cpu(cpu); | ||
82 | int log10_all = log10_cpu(cpus_weight_nr(cpu_online_map)); | ||
83 | |||
84 | |||
85 | /* | ||
86 | * Start with a space character - to make it stand out | ||
87 | * to the right a bit when trace output is pasted into | ||
88 | * email: | ||
89 | */ | ||
90 | ret = trace_seq_printf(s, " "); | ||
91 | |||
92 | /* | ||
93 | * Tricky - we space the CPU field according to the max | ||
94 | * number of online CPUs. On a 2-cpu system it would take | ||
95 | * a maximum of 1 digit - on a 128 cpu system it would | ||
96 | * take up to 3 digits: | ||
97 | */ | ||
98 | for (i = 0; i < log10_all - log10_this; i++) { | ||
99 | ret = trace_seq_printf(s, " "); | ||
100 | if (!ret) | ||
101 | return TRACE_TYPE_PARTIAL_LINE; | ||
102 | } | ||
103 | ret = trace_seq_printf(s, "%d) ", cpu); | ||
104 | if (!ret) | ||
105 | return TRACE_TYPE_PARTIAL_LINE; | ||
106 | |||
107 | return TRACE_TYPE_HANDLED; | ||
108 | } | ||
109 | |||
110 | #define TRACE_GRAPH_PROCINFO_LENGTH 14 | ||
111 | |||
112 | static enum print_line_t | ||
113 | print_graph_proc(struct trace_seq *s, pid_t pid) | ||
114 | { | ||
115 | int i; | ||
116 | int ret; | ||
117 | int len; | ||
118 | char comm[8]; | ||
119 | int spaces = 0; | ||
120 | /* sign + log10(MAX_INT) + '\0' */ | ||
121 | char pid_str[11]; | ||
122 | |||
123 | strncpy(comm, trace_find_cmdline(pid), 7); | ||
124 | comm[7] = '\0'; | ||
125 | sprintf(pid_str, "%d", pid); | ||
126 | |||
127 | /* 1 stands for the "-" character */ | ||
128 | len = strlen(comm) + strlen(pid_str) + 1; | ||
129 | |||
130 | if (len < TRACE_GRAPH_PROCINFO_LENGTH) | ||
131 | spaces = TRACE_GRAPH_PROCINFO_LENGTH - len; | ||
132 | |||
133 | /* First spaces to align center */ | ||
134 | for (i = 0; i < spaces / 2; i++) { | ||
135 | ret = trace_seq_printf(s, " "); | ||
136 | if (!ret) | ||
137 | return TRACE_TYPE_PARTIAL_LINE; | ||
138 | } | ||
139 | |||
140 | ret = trace_seq_printf(s, "%s-%s", comm, pid_str); | ||
141 | if (!ret) | ||
142 | return TRACE_TYPE_PARTIAL_LINE; | ||
143 | |||
144 | /* Last spaces to align center */ | ||
145 | for (i = 0; i < spaces - (spaces / 2); i++) { | ||
146 | ret = trace_seq_printf(s, " "); | ||
147 | if (!ret) | ||
148 | return TRACE_TYPE_PARTIAL_LINE; | ||
149 | } | ||
150 | return TRACE_TYPE_HANDLED; | ||
151 | } | ||
152 | |||
153 | |||
154 | /* If the pid changed since the last trace, output this event */ | ||
155 | static enum print_line_t | ||
156 | verif_pid(struct trace_seq *s, pid_t pid, int cpu) | ||
157 | { | ||
158 | pid_t prev_pid; | ||
159 | int ret; | ||
160 | |||
161 | if (last_pid[cpu] != -1 && last_pid[cpu] == pid) | ||
162 | return TRACE_TYPE_HANDLED; | ||
163 | |||
164 | prev_pid = last_pid[cpu]; | ||
165 | last_pid[cpu] = pid; | ||
166 | |||
167 | /* | ||
168 | * Context-switch trace line: | ||
169 | |||
170 | ------------------------------------------ | ||
171 | | 1) migration/0--1 => sshd-1755 | ||
172 | ------------------------------------------ | ||
173 | |||
174 | */ | ||
175 | ret = trace_seq_printf(s, | ||
176 | " ------------------------------------------\n"); | ||
177 | if (!ret) | ||
178 | TRACE_TYPE_PARTIAL_LINE; | ||
179 | |||
180 | ret = print_graph_cpu(s, cpu); | ||
181 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
182 | TRACE_TYPE_PARTIAL_LINE; | ||
183 | |||
184 | ret = print_graph_proc(s, prev_pid); | ||
185 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
186 | TRACE_TYPE_PARTIAL_LINE; | ||
187 | |||
188 | ret = trace_seq_printf(s, " => "); | ||
189 | if (!ret) | ||
190 | TRACE_TYPE_PARTIAL_LINE; | ||
191 | |||
192 | ret = print_graph_proc(s, pid); | ||
193 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
194 | TRACE_TYPE_PARTIAL_LINE; | ||
195 | |||
196 | ret = trace_seq_printf(s, | ||
197 | "\n ------------------------------------------\n\n"); | ||
198 | if (!ret) | ||
199 | TRACE_TYPE_PARTIAL_LINE; | ||
200 | |||
201 | return ret; | ||
202 | } | ||
203 | |||
204 | static bool | ||
205 | trace_branch_is_leaf(struct trace_iterator *iter, | ||
206 | struct ftrace_graph_ent_entry *curr) | ||
207 | { | ||
208 | struct ring_buffer_iter *ring_iter; | ||
209 | struct ring_buffer_event *event; | ||
210 | struct ftrace_graph_ret_entry *next; | ||
211 | |||
212 | ring_iter = iter->buffer_iter[iter->cpu]; | ||
213 | |||
214 | if (!ring_iter) | ||
215 | return false; | ||
216 | |||
217 | event = ring_buffer_iter_peek(ring_iter, NULL); | ||
218 | |||
219 | if (!event) | ||
220 | return false; | ||
221 | |||
222 | next = ring_buffer_event_data(event); | ||
223 | |||
224 | if (next->ent.type != TRACE_GRAPH_RET) | ||
225 | return false; | ||
226 | |||
227 | if (curr->ent.pid != next->ent.pid || | ||
228 | curr->graph_ent.func != next->ret.func) | ||
229 | return false; | ||
230 | |||
231 | return true; | ||
232 | } | ||
233 | |||
234 | |||
235 | static enum print_line_t | ||
236 | print_graph_duration(unsigned long long duration, struct trace_seq *s) | ||
237 | { | ||
238 | unsigned long nsecs_rem = do_div(duration, 1000); | ||
239 | /* log10(ULONG_MAX) + '\0' */ | ||
240 | char msecs_str[21]; | ||
241 | char nsecs_str[5]; | ||
242 | int ret, len; | ||
243 | int i; | ||
244 | |||
245 | sprintf(msecs_str, "%lu", (unsigned long) duration); | ||
246 | |||
247 | /* Print msecs */ | ||
248 | ret = trace_seq_printf(s, msecs_str); | ||
249 | if (!ret) | ||
250 | return TRACE_TYPE_PARTIAL_LINE; | ||
251 | |||
252 | len = strlen(msecs_str); | ||
253 | |||
254 | /* Print nsecs (we don't want to exceed 7 numbers) */ | ||
255 | if (len < 7) { | ||
256 | snprintf(nsecs_str, 8 - len, "%03lu", nsecs_rem); | ||
257 | ret = trace_seq_printf(s, ".%s", nsecs_str); | ||
258 | if (!ret) | ||
259 | return TRACE_TYPE_PARTIAL_LINE; | ||
260 | len += strlen(nsecs_str); | ||
261 | } | ||
262 | |||
263 | ret = trace_seq_printf(s, " us "); | ||
264 | if (!ret) | ||
265 | return TRACE_TYPE_PARTIAL_LINE; | ||
266 | |||
267 | /* Print remaining spaces to fit the row's width */ | ||
268 | for (i = len; i < 7; i++) { | ||
269 | ret = trace_seq_printf(s, " "); | ||
270 | if (!ret) | ||
271 | return TRACE_TYPE_PARTIAL_LINE; | ||
272 | } | ||
273 | |||
274 | ret = trace_seq_printf(s, "| "); | ||
275 | if (!ret) | ||
276 | return TRACE_TYPE_PARTIAL_LINE; | ||
277 | return TRACE_TYPE_HANDLED; | ||
278 | |||
279 | } | ||
280 | |||
281 | /* Signal a overhead of time execution to the output */ | ||
282 | static int | ||
283 | print_graph_overhead(unsigned long long duration, struct trace_seq *s) | ||
284 | { | ||
285 | /* Duration exceeded 100 msecs */ | ||
286 | if (duration > 100000ULL) | ||
287 | return trace_seq_printf(s, "! "); | ||
288 | |||
289 | /* Duration exceeded 10 msecs */ | ||
290 | if (duration > 10000ULL) | ||
291 | return trace_seq_printf(s, "+ "); | ||
292 | |||
293 | return trace_seq_printf(s, " "); | ||
294 | } | ||
295 | |||
296 | /* Case of a leaf function on its call entry */ | ||
297 | static enum print_line_t | ||
298 | print_graph_entry_leaf(struct trace_iterator *iter, | ||
299 | struct ftrace_graph_ent_entry *entry, struct trace_seq *s) | ||
300 | { | ||
301 | struct ftrace_graph_ret_entry *ret_entry; | ||
302 | struct ftrace_graph_ret *graph_ret; | ||
303 | struct ring_buffer_event *event; | ||
304 | struct ftrace_graph_ent *call; | ||
305 | unsigned long long duration; | ||
306 | int ret; | ||
307 | int i; | ||
308 | |||
309 | event = ring_buffer_read(iter->buffer_iter[iter->cpu], NULL); | ||
310 | ret_entry = ring_buffer_event_data(event); | ||
311 | graph_ret = &ret_entry->ret; | ||
312 | call = &entry->graph_ent; | ||
313 | duration = graph_ret->rettime - graph_ret->calltime; | ||
314 | |||
315 | /* Overhead */ | ||
316 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERHEAD) { | ||
317 | ret = print_graph_overhead(duration, s); | ||
318 | if (!ret) | ||
319 | return TRACE_TYPE_PARTIAL_LINE; | ||
320 | } | ||
321 | |||
322 | /* Duration */ | ||
323 | ret = print_graph_duration(duration, s); | ||
324 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
325 | return TRACE_TYPE_PARTIAL_LINE; | ||
326 | |||
327 | /* Function */ | ||
328 | for (i = 0; i < call->depth * TRACE_GRAPH_INDENT; i++) { | ||
329 | ret = trace_seq_printf(s, " "); | ||
330 | if (!ret) | ||
331 | return TRACE_TYPE_PARTIAL_LINE; | ||
332 | } | ||
333 | |||
334 | ret = seq_print_ip_sym(s, call->func, 0); | ||
335 | if (!ret) | ||
336 | return TRACE_TYPE_PARTIAL_LINE; | ||
337 | |||
338 | ret = trace_seq_printf(s, "();\n"); | ||
339 | if (!ret) | ||
340 | return TRACE_TYPE_PARTIAL_LINE; | ||
341 | |||
342 | return TRACE_TYPE_HANDLED; | ||
343 | } | ||
344 | |||
345 | static enum print_line_t | ||
346 | print_graph_entry_nested(struct ftrace_graph_ent_entry *entry, | ||
347 | struct trace_seq *s) | ||
348 | { | ||
349 | int i; | ||
350 | int ret; | ||
351 | struct ftrace_graph_ent *call = &entry->graph_ent; | ||
352 | |||
353 | /* No overhead */ | ||
354 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERHEAD) { | ||
355 | ret = trace_seq_printf(s, " "); | ||
356 | if (!ret) | ||
357 | return TRACE_TYPE_PARTIAL_LINE; | ||
358 | } | ||
359 | |||
360 | /* No time */ | ||
361 | ret = trace_seq_printf(s, " | "); | ||
362 | |||
363 | /* Function */ | ||
364 | for (i = 0; i < call->depth * TRACE_GRAPH_INDENT; i++) { | ||
365 | ret = trace_seq_printf(s, " "); | ||
366 | if (!ret) | ||
367 | return TRACE_TYPE_PARTIAL_LINE; | ||
368 | } | ||
369 | |||
370 | ret = seq_print_ip_sym(s, call->func, 0); | ||
371 | if (!ret) | ||
372 | return TRACE_TYPE_PARTIAL_LINE; | ||
373 | |||
374 | ret = trace_seq_printf(s, "() {\n"); | ||
375 | if (!ret) | ||
376 | return TRACE_TYPE_PARTIAL_LINE; | ||
377 | |||
378 | return TRACE_TYPE_HANDLED; | ||
379 | } | ||
380 | |||
381 | static enum print_line_t | ||
382 | print_graph_entry(struct ftrace_graph_ent_entry *field, struct trace_seq *s, | ||
383 | struct trace_iterator *iter, int cpu) | ||
384 | { | ||
385 | int ret; | ||
386 | struct trace_entry *ent = iter->ent; | ||
387 | |||
388 | /* Pid */ | ||
389 | if (verif_pid(s, ent->pid, cpu) == TRACE_TYPE_PARTIAL_LINE) | ||
390 | return TRACE_TYPE_PARTIAL_LINE; | ||
391 | |||
392 | /* Cpu */ | ||
393 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) { | ||
394 | ret = print_graph_cpu(s, cpu); | ||
395 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
396 | return TRACE_TYPE_PARTIAL_LINE; | ||
397 | } | ||
398 | |||
399 | /* Proc */ | ||
400 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) { | ||
401 | ret = print_graph_proc(s, ent->pid); | ||
402 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
403 | return TRACE_TYPE_PARTIAL_LINE; | ||
404 | |||
405 | ret = trace_seq_printf(s, " | "); | ||
406 | if (!ret) | ||
407 | return TRACE_TYPE_PARTIAL_LINE; | ||
408 | } | ||
409 | |||
410 | if (trace_branch_is_leaf(iter, field)) | ||
411 | return print_graph_entry_leaf(iter, field, s); | ||
412 | else | ||
413 | return print_graph_entry_nested(field, s); | ||
414 | |||
415 | } | ||
416 | |||
417 | static enum print_line_t | ||
418 | print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s, | ||
419 | struct trace_entry *ent, int cpu) | ||
420 | { | ||
421 | int i; | ||
422 | int ret; | ||
423 | unsigned long long duration = trace->rettime - trace->calltime; | ||
424 | |||
425 | /* Pid */ | ||
426 | if (verif_pid(s, ent->pid, cpu) == TRACE_TYPE_PARTIAL_LINE) | ||
427 | return TRACE_TYPE_PARTIAL_LINE; | ||
428 | |||
429 | /* Cpu */ | ||
430 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) { | ||
431 | ret = print_graph_cpu(s, cpu); | ||
432 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
433 | return TRACE_TYPE_PARTIAL_LINE; | ||
434 | } | ||
435 | |||
436 | /* Proc */ | ||
437 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) { | ||
438 | ret = print_graph_proc(s, ent->pid); | ||
439 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
440 | return TRACE_TYPE_PARTIAL_LINE; | ||
441 | |||
442 | ret = trace_seq_printf(s, " | "); | ||
443 | if (!ret) | ||
444 | return TRACE_TYPE_PARTIAL_LINE; | ||
445 | } | ||
446 | |||
447 | /* Overhead */ | ||
448 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERHEAD) { | ||
449 | ret = print_graph_overhead(duration, s); | ||
450 | if (!ret) | ||
451 | return TRACE_TYPE_PARTIAL_LINE; | ||
452 | } | ||
453 | |||
454 | /* Duration */ | ||
455 | ret = print_graph_duration(duration, s); | ||
456 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
457 | return TRACE_TYPE_PARTIAL_LINE; | ||
458 | |||
459 | /* Closing brace */ | ||
460 | for (i = 0; i < trace->depth * TRACE_GRAPH_INDENT; i++) { | ||
461 | ret = trace_seq_printf(s, " "); | ||
462 | if (!ret) | ||
463 | return TRACE_TYPE_PARTIAL_LINE; | ||
464 | } | ||
465 | |||
466 | ret = trace_seq_printf(s, "}\n"); | ||
467 | if (!ret) | ||
468 | return TRACE_TYPE_PARTIAL_LINE; | ||
469 | |||
470 | /* Overrun */ | ||
471 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERRUN) { | ||
472 | ret = trace_seq_printf(s, " (Overruns: %lu)\n", | ||
473 | trace->overrun); | ||
474 | if (!ret) | ||
475 | return TRACE_TYPE_PARTIAL_LINE; | ||
476 | } | ||
477 | return TRACE_TYPE_HANDLED; | ||
478 | } | ||
479 | |||
480 | static enum print_line_t | ||
481 | print_graph_comment(struct print_entry *trace, struct trace_seq *s, | ||
482 | struct trace_entry *ent, struct trace_iterator *iter) | ||
483 | { | ||
484 | int i; | ||
485 | int ret; | ||
486 | |||
487 | /* Pid */ | ||
488 | if (verif_pid(s, ent->pid, iter->cpu) == TRACE_TYPE_PARTIAL_LINE) | ||
489 | return TRACE_TYPE_PARTIAL_LINE; | ||
490 | |||
491 | /* Cpu */ | ||
492 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) { | ||
493 | ret = print_graph_cpu(s, iter->cpu); | ||
494 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
495 | return TRACE_TYPE_PARTIAL_LINE; | ||
496 | } | ||
497 | |||
498 | /* Proc */ | ||
499 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) { | ||
500 | ret = print_graph_proc(s, ent->pid); | ||
501 | if (ret == TRACE_TYPE_PARTIAL_LINE) | ||
502 | return TRACE_TYPE_PARTIAL_LINE; | ||
503 | |||
504 | ret = trace_seq_printf(s, " | "); | ||
505 | if (!ret) | ||
506 | return TRACE_TYPE_PARTIAL_LINE; | ||
507 | } | ||
508 | |||
509 | /* No overhead */ | ||
510 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERHEAD) { | ||
511 | ret = trace_seq_printf(s, " "); | ||
512 | if (!ret) | ||
513 | return TRACE_TYPE_PARTIAL_LINE; | ||
514 | } | ||
515 | |||
516 | /* No time */ | ||
517 | ret = trace_seq_printf(s, " | "); | ||
518 | if (!ret) | ||
519 | return TRACE_TYPE_PARTIAL_LINE; | ||
520 | |||
521 | /* Indentation */ | ||
522 | if (trace->depth > 0) | ||
523 | for (i = 0; i < (trace->depth + 1) * TRACE_GRAPH_INDENT; i++) { | ||
524 | ret = trace_seq_printf(s, " "); | ||
525 | if (!ret) | ||
526 | return TRACE_TYPE_PARTIAL_LINE; | ||
527 | } | ||
528 | |||
529 | /* The comment */ | ||
530 | ret = trace_seq_printf(s, "/* %s", trace->buf); | ||
531 | if (!ret) | ||
532 | return TRACE_TYPE_PARTIAL_LINE; | ||
533 | |||
534 | if (ent->flags & TRACE_FLAG_CONT) | ||
535 | trace_seq_print_cont(s, iter); | ||
536 | |||
537 | ret = trace_seq_printf(s, " */\n"); | ||
538 | if (!ret) | ||
539 | return TRACE_TYPE_PARTIAL_LINE; | ||
540 | |||
541 | return TRACE_TYPE_HANDLED; | ||
542 | } | ||
543 | |||
544 | |||
545 | enum print_line_t | ||
546 | print_graph_function(struct trace_iterator *iter) | ||
547 | { | ||
548 | struct trace_seq *s = &iter->seq; | ||
549 | struct trace_entry *entry = iter->ent; | ||
550 | |||
551 | switch (entry->type) { | ||
552 | case TRACE_GRAPH_ENT: { | ||
553 | struct ftrace_graph_ent_entry *field; | ||
554 | trace_assign_type(field, entry); | ||
555 | return print_graph_entry(field, s, iter, | ||
556 | iter->cpu); | ||
557 | } | ||
558 | case TRACE_GRAPH_RET: { | ||
559 | struct ftrace_graph_ret_entry *field; | ||
560 | trace_assign_type(field, entry); | ||
561 | return print_graph_return(&field->ret, s, entry, iter->cpu); | ||
562 | } | ||
563 | case TRACE_PRINT: { | ||
564 | struct print_entry *field; | ||
565 | trace_assign_type(field, entry); | ||
566 | return print_graph_comment(field, s, entry, iter); | ||
567 | } | ||
568 | default: | ||
569 | return TRACE_TYPE_UNHANDLED; | ||
570 | } | ||
571 | } | ||
572 | |||
573 | static void print_graph_headers(struct seq_file *s) | ||
574 | { | ||
575 | /* 1st line */ | ||
576 | seq_printf(s, "# "); | ||
577 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) | ||
578 | seq_printf(s, "CPU "); | ||
579 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) | ||
580 | seq_printf(s, "TASK/PID "); | ||
581 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERHEAD) | ||
582 | seq_printf(s, "OVERHEAD/"); | ||
583 | seq_printf(s, "DURATION FUNCTION CALLS\n"); | ||
584 | |||
585 | /* 2nd line */ | ||
586 | seq_printf(s, "# "); | ||
587 | if (tracer_flags.val & TRACE_GRAPH_PRINT_CPU) | ||
588 | seq_printf(s, "| "); | ||
589 | if (tracer_flags.val & TRACE_GRAPH_PRINT_PROC) | ||
590 | seq_printf(s, "| | "); | ||
591 | if (tracer_flags.val & TRACE_GRAPH_PRINT_OVERHEAD) { | ||
592 | seq_printf(s, "| "); | ||
593 | seq_printf(s, "| | | | |\n"); | ||
594 | } else | ||
595 | seq_printf(s, " | | | | |\n"); | ||
596 | } | ||
597 | static struct tracer graph_trace __read_mostly = { | ||
598 | .name = "function_graph", | ||
599 | .init = graph_trace_init, | ||
600 | .reset = graph_trace_reset, | ||
601 | .print_line = print_graph_function, | ||
602 | .print_header = print_graph_headers, | ||
603 | .flags = &tracer_flags, | ||
604 | }; | ||
605 | |||
606 | static __init int init_graph_trace(void) | ||
607 | { | ||
608 | return register_tracer(&graph_trace); | ||
609 | } | ||
610 | |||
611 | device_initcall(init_graph_trace); | ||
diff --git a/kernel/trace/trace_functions_return.c b/kernel/trace/trace_functions_return.c deleted file mode 100644 index e00d64509c9c..000000000000 --- a/kernel/trace/trace_functions_return.c +++ /dev/null | |||
@@ -1,98 +0,0 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Function return tracer. | ||
4 | * Copyright (c) 2008 Frederic Weisbecker <fweisbec@gmail.com> | ||
5 | * Mostly borrowed from function tracer which | ||
6 | * is Copyright (c) Steven Rostedt <srostedt@redhat.com> | ||
7 | * | ||
8 | */ | ||
9 | #include <linux/debugfs.h> | ||
10 | #include <linux/uaccess.h> | ||
11 | #include <linux/ftrace.h> | ||
12 | #include <linux/fs.h> | ||
13 | |||
14 | #include "trace.h" | ||
15 | |||
16 | |||
17 | #define TRACE_RETURN_PRINT_OVERRUN 0x1 | ||
18 | static struct tracer_opt trace_opts[] = { | ||
19 | /* Display overruns or not */ | ||
20 | { TRACER_OPT(overrun, TRACE_RETURN_PRINT_OVERRUN) }, | ||
21 | { } /* Empty entry */ | ||
22 | }; | ||
23 | |||
24 | static struct tracer_flags tracer_flags = { | ||
25 | .val = 0, /* Don't display overruns by default */ | ||
26 | .opts = trace_opts | ||
27 | }; | ||
28 | |||
29 | |||
30 | static int return_trace_init(struct trace_array *tr) | ||
31 | { | ||
32 | int cpu; | ||
33 | for_each_online_cpu(cpu) | ||
34 | tracing_reset(tr, cpu); | ||
35 | |||
36 | return register_ftrace_return(&trace_function_return); | ||
37 | } | ||
38 | |||
39 | static void return_trace_reset(struct trace_array *tr) | ||
40 | { | ||
41 | unregister_ftrace_return(); | ||
42 | } | ||
43 | |||
44 | |||
45 | enum print_line_t | ||
46 | print_return_function(struct trace_iterator *iter) | ||
47 | { | ||
48 | struct trace_seq *s = &iter->seq; | ||
49 | struct trace_entry *entry = iter->ent; | ||
50 | struct ftrace_ret_entry *field; | ||
51 | int ret; | ||
52 | |||
53 | if (entry->type == TRACE_FN_RET) { | ||
54 | trace_assign_type(field, entry); | ||
55 | ret = trace_seq_printf(s, "%pF -> ", (void *)field->parent_ip); | ||
56 | if (!ret) | ||
57 | return TRACE_TYPE_PARTIAL_LINE; | ||
58 | |||
59 | ret = seq_print_ip_sym(s, field->ip, | ||
60 | trace_flags & TRACE_ITER_SYM_MASK); | ||
61 | if (!ret) | ||
62 | return TRACE_TYPE_PARTIAL_LINE; | ||
63 | |||
64 | ret = trace_seq_printf(s, " (%llu ns)", | ||
65 | field->rettime - field->calltime); | ||
66 | if (!ret) | ||
67 | return TRACE_TYPE_PARTIAL_LINE; | ||
68 | |||
69 | if (tracer_flags.val & TRACE_RETURN_PRINT_OVERRUN) { | ||
70 | ret = trace_seq_printf(s, " (Overruns: %lu)", | ||
71 | field->overrun); | ||
72 | if (!ret) | ||
73 | return TRACE_TYPE_PARTIAL_LINE; | ||
74 | } | ||
75 | |||
76 | ret = trace_seq_printf(s, "\n"); | ||
77 | if (!ret) | ||
78 | return TRACE_TYPE_PARTIAL_LINE; | ||
79 | |||
80 | return TRACE_TYPE_HANDLED; | ||
81 | } | ||
82 | return TRACE_TYPE_UNHANDLED; | ||
83 | } | ||
84 | |||
85 | static struct tracer return_trace __read_mostly = { | ||
86 | .name = "return", | ||
87 | .init = return_trace_init, | ||
88 | .reset = return_trace_reset, | ||
89 | .print_line = print_return_function, | ||
90 | .flags = &tracer_flags, | ||
91 | }; | ||
92 | |||
93 | static __init int init_return_trace(void) | ||
94 | { | ||
95 | return register_tracer(&return_trace); | ||
96 | } | ||
97 | |||
98 | device_initcall(init_return_trace); | ||
diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c index 2a98a206acc2..2fb6da6523b3 100644 --- a/kernel/trace/trace_mmiotrace.c +++ b/kernel/trace/trace_mmiotrace.c | |||
@@ -366,5 +366,5 @@ void mmio_trace_mapping(struct mmiotrace_map *map) | |||
366 | 366 | ||
367 | int mmio_trace_printk(const char *fmt, va_list args) | 367 | int mmio_trace_printk(const char *fmt, va_list args) |
368 | { | 368 | { |
369 | return trace_vprintk(0, fmt, args); | 369 | return trace_vprintk(0, -1, fmt, args); |
370 | } | 370 | } |
diff --git a/kernel/trace/trace_power.c b/kernel/trace/trace_power.c new file mode 100644 index 000000000000..a7172a352f62 --- /dev/null +++ b/kernel/trace/trace_power.c | |||
@@ -0,0 +1,179 @@ | |||
1 | /* | ||
2 | * ring buffer based C-state tracer | ||
3 | * | ||
4 | * Arjan van de Ven <arjan@linux.intel.com> | ||
5 | * Copyright (C) 2008 Intel Corporation | ||
6 | * | ||
7 | * Much is borrowed from trace_boot.c which is | ||
8 | * Copyright (C) 2008 Frederic Weisbecker <fweisbec@gmail.com> | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | #include <linux/debugfs.h> | ||
14 | #include <linux/ftrace.h> | ||
15 | #include <linux/kallsyms.h> | ||
16 | #include <linux/module.h> | ||
17 | |||
18 | #include "trace.h" | ||
19 | |||
20 | static struct trace_array *power_trace; | ||
21 | static int __read_mostly trace_power_enabled; | ||
22 | |||
23 | |||
24 | static void start_power_trace(struct trace_array *tr) | ||
25 | { | ||
26 | trace_power_enabled = 1; | ||
27 | } | ||
28 | |||
29 | static void stop_power_trace(struct trace_array *tr) | ||
30 | { | ||
31 | trace_power_enabled = 0; | ||
32 | } | ||
33 | |||
34 | |||
35 | static int power_trace_init(struct trace_array *tr) | ||
36 | { | ||
37 | int cpu; | ||
38 | power_trace = tr; | ||
39 | |||
40 | trace_power_enabled = 1; | ||
41 | |||
42 | for_each_cpu_mask(cpu, cpu_possible_map) | ||
43 | tracing_reset(tr, cpu); | ||
44 | return 0; | ||
45 | } | ||
46 | |||
47 | static enum print_line_t power_print_line(struct trace_iterator *iter) | ||
48 | { | ||
49 | int ret = 0; | ||
50 | struct trace_entry *entry = iter->ent; | ||
51 | struct trace_power *field ; | ||
52 | struct power_trace *it; | ||
53 | struct trace_seq *s = &iter->seq; | ||
54 | struct timespec stamp; | ||
55 | struct timespec duration; | ||
56 | |||
57 | trace_assign_type(field, entry); | ||
58 | it = &field->state_data; | ||
59 | stamp = ktime_to_timespec(it->stamp); | ||
60 | duration = ktime_to_timespec(ktime_sub(it->end, it->stamp)); | ||
61 | |||
62 | if (entry->type == TRACE_POWER) { | ||
63 | if (it->type == POWER_CSTATE) | ||
64 | ret = trace_seq_printf(s, "[%5ld.%09ld] CSTATE: Going to C%i on cpu %i for %ld.%09ld\n", | ||
65 | stamp.tv_sec, | ||
66 | stamp.tv_nsec, | ||
67 | it->state, iter->cpu, | ||
68 | duration.tv_sec, | ||
69 | duration.tv_nsec); | ||
70 | if (it->type == POWER_PSTATE) | ||
71 | ret = trace_seq_printf(s, "[%5ld.%09ld] PSTATE: Going to P%i on cpu %i\n", | ||
72 | stamp.tv_sec, | ||
73 | stamp.tv_nsec, | ||
74 | it->state, iter->cpu); | ||
75 | if (!ret) | ||
76 | return TRACE_TYPE_PARTIAL_LINE; | ||
77 | return TRACE_TYPE_HANDLED; | ||
78 | } | ||
79 | return TRACE_TYPE_UNHANDLED; | ||
80 | } | ||
81 | |||
82 | static struct tracer power_tracer __read_mostly = | ||
83 | { | ||
84 | .name = "power", | ||
85 | .init = power_trace_init, | ||
86 | .start = start_power_trace, | ||
87 | .stop = stop_power_trace, | ||
88 | .reset = stop_power_trace, | ||
89 | .print_line = power_print_line, | ||
90 | }; | ||
91 | |||
92 | static int init_power_trace(void) | ||
93 | { | ||
94 | return register_tracer(&power_tracer); | ||
95 | } | ||
96 | device_initcall(init_power_trace); | ||
97 | |||
98 | void trace_power_start(struct power_trace *it, unsigned int type, | ||
99 | unsigned int level) | ||
100 | { | ||
101 | if (!trace_power_enabled) | ||
102 | return; | ||
103 | |||
104 | memset(it, 0, sizeof(struct power_trace)); | ||
105 | it->state = level; | ||
106 | it->type = type; | ||
107 | it->stamp = ktime_get(); | ||
108 | } | ||
109 | EXPORT_SYMBOL_GPL(trace_power_start); | ||
110 | |||
111 | |||
112 | void trace_power_end(struct power_trace *it) | ||
113 | { | ||
114 | struct ring_buffer_event *event; | ||
115 | struct trace_power *entry; | ||
116 | struct trace_array_cpu *data; | ||
117 | unsigned long irq_flags; | ||
118 | struct trace_array *tr = power_trace; | ||
119 | |||
120 | if (!trace_power_enabled) | ||
121 | return; | ||
122 | |||
123 | preempt_disable(); | ||
124 | it->end = ktime_get(); | ||
125 | data = tr->data[smp_processor_id()]; | ||
126 | |||
127 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), | ||
128 | &irq_flags); | ||
129 | if (!event) | ||
130 | goto out; | ||
131 | entry = ring_buffer_event_data(event); | ||
132 | tracing_generic_entry_update(&entry->ent, 0, 0); | ||
133 | entry->ent.type = TRACE_POWER; | ||
134 | entry->state_data = *it; | ||
135 | ring_buffer_unlock_commit(tr->buffer, event, irq_flags); | ||
136 | |||
137 | trace_wake_up(); | ||
138 | |||
139 | out: | ||
140 | preempt_enable(); | ||
141 | } | ||
142 | EXPORT_SYMBOL_GPL(trace_power_end); | ||
143 | |||
144 | void trace_power_mark(struct power_trace *it, unsigned int type, | ||
145 | unsigned int level) | ||
146 | { | ||
147 | struct ring_buffer_event *event; | ||
148 | struct trace_power *entry; | ||
149 | struct trace_array_cpu *data; | ||
150 | unsigned long irq_flags; | ||
151 | struct trace_array *tr = power_trace; | ||
152 | |||
153 | if (!trace_power_enabled) | ||
154 | return; | ||
155 | |||
156 | memset(it, 0, sizeof(struct power_trace)); | ||
157 | it->state = level; | ||
158 | it->type = type; | ||
159 | it->stamp = ktime_get(); | ||
160 | preempt_disable(); | ||
161 | it->end = it->stamp; | ||
162 | data = tr->data[smp_processor_id()]; | ||
163 | |||
164 | event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry), | ||
165 | &irq_flags); | ||
166 | if (!event) | ||
167 | goto out; | ||
168 | entry = ring_buffer_event_data(event); | ||
169 | tracing_generic_entry_update(&entry->ent, 0, 0); | ||
170 | entry->ent.type = TRACE_POWER; | ||
171 | entry->state_data = *it; | ||
172 | ring_buffer_unlock_commit(tr->buffer, event, irq_flags); | ||
173 | |||
174 | trace_wake_up(); | ||
175 | |||
176 | out: | ||
177 | preempt_enable(); | ||
178 | } | ||
179 | EXPORT_SYMBOL_GPL(trace_power_mark); | ||
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c index fde3be15c642..0b863f2cbc8e 100644 --- a/kernel/trace/trace_stack.c +++ b/kernel/trace/trace_stack.c | |||
@@ -48,7 +48,7 @@ static inline void check_stack(void) | |||
48 | if (!object_is_on_stack(&this_size)) | 48 | if (!object_is_on_stack(&this_size)) |
49 | return; | 49 | return; |
50 | 50 | ||
51 | raw_local_irq_save(flags); | 51 | local_irq_save(flags); |
52 | __raw_spin_lock(&max_stack_lock); | 52 | __raw_spin_lock(&max_stack_lock); |
53 | 53 | ||
54 | /* a race could have already updated it */ | 54 | /* a race could have already updated it */ |
@@ -78,6 +78,7 @@ static inline void check_stack(void) | |||
78 | * on a new max, so it is far from a fast path. | 78 | * on a new max, so it is far from a fast path. |
79 | */ | 79 | */ |
80 | while (i < max_stack_trace.nr_entries) { | 80 | while (i < max_stack_trace.nr_entries) { |
81 | int found = 0; | ||
81 | 82 | ||
82 | stack_dump_index[i] = this_size; | 83 | stack_dump_index[i] = this_size; |
83 | p = start; | 84 | p = start; |
@@ -86,17 +87,19 @@ static inline void check_stack(void) | |||
86 | if (*p == stack_dump_trace[i]) { | 87 | if (*p == stack_dump_trace[i]) { |
87 | this_size = stack_dump_index[i++] = | 88 | this_size = stack_dump_index[i++] = |
88 | (top - p) * sizeof(unsigned long); | 89 | (top - p) * sizeof(unsigned long); |
90 | found = 1; | ||
89 | /* Start the search from here */ | 91 | /* Start the search from here */ |
90 | start = p + 1; | 92 | start = p + 1; |
91 | } | 93 | } |
92 | } | 94 | } |
93 | 95 | ||
94 | i++; | 96 | if (!found) |
97 | i++; | ||
95 | } | 98 | } |
96 | 99 | ||
97 | out: | 100 | out: |
98 | __raw_spin_unlock(&max_stack_lock); | 101 | __raw_spin_unlock(&max_stack_lock); |
99 | raw_local_irq_restore(flags); | 102 | local_irq_restore(flags); |
100 | } | 103 | } |
101 | 104 | ||
102 | static void | 105 | static void |
@@ -162,11 +165,11 @@ stack_max_size_write(struct file *filp, const char __user *ubuf, | |||
162 | if (ret < 0) | 165 | if (ret < 0) |
163 | return ret; | 166 | return ret; |
164 | 167 | ||
165 | raw_local_irq_save(flags); | 168 | local_irq_save(flags); |
166 | __raw_spin_lock(&max_stack_lock); | 169 | __raw_spin_lock(&max_stack_lock); |
167 | *ptr = val; | 170 | *ptr = val; |
168 | __raw_spin_unlock(&max_stack_lock); | 171 | __raw_spin_unlock(&max_stack_lock); |
169 | raw_local_irq_restore(flags); | 172 | local_irq_restore(flags); |
170 | 173 | ||
171 | return count; | 174 | return count; |
172 | } | 175 | } |
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index f2e574dbc300..2a56124dbc28 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c | |||
@@ -176,6 +176,9 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent, | |||
176 | int ret = 0; | 176 | int ret = 0; |
177 | struct device *dev; | 177 | struct device *dev; |
178 | 178 | ||
179 | if (WARN_ON(bdi->dev)) | ||
180 | goto exit; | ||
181 | |||
179 | va_start(args, fmt); | 182 | va_start(args, fmt); |
180 | dev = device_create_vargs(bdi_class, parent, MKDEV(0, 0), bdi, fmt, args); | 183 | dev = device_create_vargs(bdi_class, parent, MKDEV(0, 0), bdi, fmt, args); |
181 | va_end(args); | 184 | va_end(args); |
diff --git a/mm/bounce.c b/mm/bounce.c index 06722c403058..bf0cf7c8387b 100644 --- a/mm/bounce.c +++ b/mm/bounce.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/hash.h> | 14 | #include <linux/hash.h> |
15 | #include <linux/highmem.h> | 15 | #include <linux/highmem.h> |
16 | #include <linux/blktrace_api.h> | 16 | #include <linux/blktrace_api.h> |
17 | #include <trace/block.h> | ||
17 | #include <asm/tlbflush.h> | 18 | #include <asm/tlbflush.h> |
18 | 19 | ||
19 | #define POOL_SIZE 64 | 20 | #define POOL_SIZE 64 |
@@ -21,6 +22,8 @@ | |||
21 | 22 | ||
22 | static mempool_t *page_pool, *isa_page_pool; | 23 | static mempool_t *page_pool, *isa_page_pool; |
23 | 24 | ||
25 | DEFINE_TRACE(block_bio_bounce); | ||
26 | |||
24 | #ifdef CONFIG_HIGHMEM | 27 | #ifdef CONFIG_HIGHMEM |
25 | static __init int init_emergency_pool(void) | 28 | static __init int init_emergency_pool(void) |
26 | { | 29 | { |
@@ -222,7 +225,7 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig, | |||
222 | if (!bio) | 225 | if (!bio) |
223 | return; | 226 | return; |
224 | 227 | ||
225 | blk_add_trace_bio(q, *bio_orig, BLK_TA_BOUNCE); | 228 | trace_block_bio_bounce(q, *bio_orig); |
226 | 229 | ||
227 | /* | 230 | /* |
228 | * at least one page was bounced, fill in possible non-highmem | 231 | * at least one page was bounced, fill in possible non-highmem |
@@ -445,6 +445,7 @@ void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru) | |||
445 | for (i = 0; i < pagevec_count(pvec); i++) { | 445 | for (i = 0; i < pagevec_count(pvec); i++) { |
446 | struct page *page = pvec->pages[i]; | 446 | struct page *page = pvec->pages[i]; |
447 | struct zone *pagezone = page_zone(page); | 447 | struct zone *pagezone = page_zone(page); |
448 | int file; | ||
448 | 449 | ||
449 | if (pagezone != zone) { | 450 | if (pagezone != zone) { |
450 | if (zone) | 451 | if (zone) |
@@ -456,8 +457,12 @@ void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru) | |||
456 | VM_BUG_ON(PageUnevictable(page)); | 457 | VM_BUG_ON(PageUnevictable(page)); |
457 | VM_BUG_ON(PageLRU(page)); | 458 | VM_BUG_ON(PageLRU(page)); |
458 | SetPageLRU(page); | 459 | SetPageLRU(page); |
459 | if (is_active_lru(lru)) | 460 | file = is_file_lru(lru); |
461 | zone->recent_scanned[file]++; | ||
462 | if (is_active_lru(lru)) { | ||
460 | SetPageActive(page); | 463 | SetPageActive(page); |
464 | zone->recent_rotated[file]++; | ||
465 | } | ||
461 | add_page_to_lru_list(zone, page, lru); | 466 | add_page_to_lru_list(zone, page, lru); |
462 | } | 467 | } |
463 | if (zone) | 468 | if (zone) |
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c index fa5cda4e552a..45f61c348e36 100644 --- a/net/bridge/br_netfilter.c +++ b/net/bridge/br_netfilter.c | |||
@@ -101,6 +101,18 @@ static inline __be16 pppoe_proto(const struct sk_buff *skb) | |||
101 | pppoe_proto(skb) == htons(PPP_IPV6) && \ | 101 | pppoe_proto(skb) == htons(PPP_IPV6) && \ |
102 | brnf_filter_pppoe_tagged) | 102 | brnf_filter_pppoe_tagged) |
103 | 103 | ||
104 | static void fake_update_pmtu(struct dst_entry *dst, u32 mtu) | ||
105 | { | ||
106 | } | ||
107 | |||
108 | static struct dst_ops fake_dst_ops = { | ||
109 | .family = AF_INET, | ||
110 | .protocol = __constant_htons(ETH_P_IP), | ||
111 | .update_pmtu = fake_update_pmtu, | ||
112 | .entry_size = sizeof(struct rtable), | ||
113 | .entries = ATOMIC_INIT(0), | ||
114 | }; | ||
115 | |||
104 | /* | 116 | /* |
105 | * Initialize bogus route table used to keep netfilter happy. | 117 | * Initialize bogus route table used to keep netfilter happy. |
106 | * Currently, we fill in the PMTU entry because netfilter | 118 | * Currently, we fill in the PMTU entry because netfilter |
@@ -117,6 +129,7 @@ void br_netfilter_rtable_init(struct net_bridge *br) | |||
117 | rt->u.dst.path = &rt->u.dst; | 129 | rt->u.dst.path = &rt->u.dst; |
118 | rt->u.dst.metrics[RTAX_MTU - 1] = 1500; | 130 | rt->u.dst.metrics[RTAX_MTU - 1] = 1500; |
119 | rt->u.dst.flags = DST_NOXFRM; | 131 | rt->u.dst.flags = DST_NOXFRM; |
132 | rt->u.dst.ops = &fake_dst_ops; | ||
120 | } | 133 | } |
121 | 134 | ||
122 | static inline struct rtable *bridge_parent_rtable(const struct net_device *dev) | 135 | static inline struct rtable *bridge_parent_rtable(const struct net_device *dev) |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index d49ef8301b5b..65f7757465bd 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -149,7 +149,7 @@ void skb_under_panic(struct sk_buff *skb, int sz, void *here) | |||
149 | 149 | ||
150 | void skb_truesize_bug(struct sk_buff *skb) | 150 | void skb_truesize_bug(struct sk_buff *skb) |
151 | { | 151 | { |
152 | printk(KERN_ERR "SKB BUG: Invalid truesize (%u) " | 152 | WARN(net_ratelimit(), KERN_ERR "SKB BUG: Invalid truesize (%u) " |
153 | "len=%u, sizeof(sk_buff)=%Zd\n", | 153 | "len=%u, sizeof(sk_buff)=%Zd\n", |
154 | skb->truesize, skb->len, sizeof(struct sk_buff)); | 154 | skb->truesize, skb->len, sizeof(struct sk_buff)); |
155 | } | 155 | } |
diff --git a/net/core/sock.c b/net/core/sock.c index 341e39456952..edf7220889a4 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -2035,9 +2035,6 @@ static inline void release_proto_idx(struct proto *prot) | |||
2035 | 2035 | ||
2036 | int proto_register(struct proto *prot, int alloc_slab) | 2036 | int proto_register(struct proto *prot, int alloc_slab) |
2037 | { | 2037 | { |
2038 | char *request_sock_slab_name = NULL; | ||
2039 | char *timewait_sock_slab_name; | ||
2040 | |||
2041 | if (alloc_slab) { | 2038 | if (alloc_slab) { |
2042 | prot->slab = kmem_cache_create(prot->name, prot->obj_size, 0, | 2039 | prot->slab = kmem_cache_create(prot->name, prot->obj_size, 0, |
2043 | SLAB_HWCACHE_ALIGN, NULL); | 2040 | SLAB_HWCACHE_ALIGN, NULL); |
@@ -2051,12 +2048,12 @@ int proto_register(struct proto *prot, int alloc_slab) | |||
2051 | if (prot->rsk_prot != NULL) { | 2048 | if (prot->rsk_prot != NULL) { |
2052 | static const char mask[] = "request_sock_%s"; | 2049 | static const char mask[] = "request_sock_%s"; |
2053 | 2050 | ||
2054 | request_sock_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); | 2051 | prot->rsk_prot->slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); |
2055 | if (request_sock_slab_name == NULL) | 2052 | if (prot->rsk_prot->slab_name == NULL) |
2056 | goto out_free_sock_slab; | 2053 | goto out_free_sock_slab; |
2057 | 2054 | ||
2058 | sprintf(request_sock_slab_name, mask, prot->name); | 2055 | sprintf(prot->rsk_prot->slab_name, mask, prot->name); |
2059 | prot->rsk_prot->slab = kmem_cache_create(request_sock_slab_name, | 2056 | prot->rsk_prot->slab = kmem_cache_create(prot->rsk_prot->slab_name, |
2060 | prot->rsk_prot->obj_size, 0, | 2057 | prot->rsk_prot->obj_size, 0, |
2061 | SLAB_HWCACHE_ALIGN, NULL); | 2058 | SLAB_HWCACHE_ALIGN, NULL); |
2062 | 2059 | ||
@@ -2070,14 +2067,14 @@ int proto_register(struct proto *prot, int alloc_slab) | |||
2070 | if (prot->twsk_prot != NULL) { | 2067 | if (prot->twsk_prot != NULL) { |
2071 | static const char mask[] = "tw_sock_%s"; | 2068 | static const char mask[] = "tw_sock_%s"; |
2072 | 2069 | ||
2073 | timewait_sock_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); | 2070 | prot->twsk_prot->twsk_slab_name = kmalloc(strlen(prot->name) + sizeof(mask) - 1, GFP_KERNEL); |
2074 | 2071 | ||
2075 | if (timewait_sock_slab_name == NULL) | 2072 | if (prot->twsk_prot->twsk_slab_name == NULL) |
2076 | goto out_free_request_sock_slab; | 2073 | goto out_free_request_sock_slab; |
2077 | 2074 | ||
2078 | sprintf(timewait_sock_slab_name, mask, prot->name); | 2075 | sprintf(prot->twsk_prot->twsk_slab_name, mask, prot->name); |
2079 | prot->twsk_prot->twsk_slab = | 2076 | prot->twsk_prot->twsk_slab = |
2080 | kmem_cache_create(timewait_sock_slab_name, | 2077 | kmem_cache_create(prot->twsk_prot->twsk_slab_name, |
2081 | prot->twsk_prot->twsk_obj_size, | 2078 | prot->twsk_prot->twsk_obj_size, |
2082 | 0, SLAB_HWCACHE_ALIGN, | 2079 | 0, SLAB_HWCACHE_ALIGN, |
2083 | NULL); | 2080 | NULL); |
@@ -2093,14 +2090,14 @@ int proto_register(struct proto *prot, int alloc_slab) | |||
2093 | return 0; | 2090 | return 0; |
2094 | 2091 | ||
2095 | out_free_timewait_sock_slab_name: | 2092 | out_free_timewait_sock_slab_name: |
2096 | kfree(timewait_sock_slab_name); | 2093 | kfree(prot->twsk_prot->twsk_slab_name); |
2097 | out_free_request_sock_slab: | 2094 | out_free_request_sock_slab: |
2098 | if (prot->rsk_prot && prot->rsk_prot->slab) { | 2095 | if (prot->rsk_prot && prot->rsk_prot->slab) { |
2099 | kmem_cache_destroy(prot->rsk_prot->slab); | 2096 | kmem_cache_destroy(prot->rsk_prot->slab); |
2100 | prot->rsk_prot->slab = NULL; | 2097 | prot->rsk_prot->slab = NULL; |
2101 | } | 2098 | } |
2102 | out_free_request_sock_slab_name: | 2099 | out_free_request_sock_slab_name: |
2103 | kfree(request_sock_slab_name); | 2100 | kfree(prot->rsk_prot->slab_name); |
2104 | out_free_sock_slab: | 2101 | out_free_sock_slab: |
2105 | kmem_cache_destroy(prot->slab); | 2102 | kmem_cache_destroy(prot->slab); |
2106 | prot->slab = NULL; | 2103 | prot->slab = NULL; |
@@ -2123,18 +2120,14 @@ void proto_unregister(struct proto *prot) | |||
2123 | } | 2120 | } |
2124 | 2121 | ||
2125 | if (prot->rsk_prot != NULL && prot->rsk_prot->slab != NULL) { | 2122 | if (prot->rsk_prot != NULL && prot->rsk_prot->slab != NULL) { |
2126 | const char *name = kmem_cache_name(prot->rsk_prot->slab); | ||
2127 | |||
2128 | kmem_cache_destroy(prot->rsk_prot->slab); | 2123 | kmem_cache_destroy(prot->rsk_prot->slab); |
2129 | kfree(name); | 2124 | kfree(prot->rsk_prot->slab_name); |
2130 | prot->rsk_prot->slab = NULL; | 2125 | prot->rsk_prot->slab = NULL; |
2131 | } | 2126 | } |
2132 | 2127 | ||
2133 | if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) { | 2128 | if (prot->twsk_prot != NULL && prot->twsk_prot->twsk_slab != NULL) { |
2134 | const char *name = kmem_cache_name(prot->twsk_prot->twsk_slab); | ||
2135 | |||
2136 | kmem_cache_destroy(prot->twsk_prot->twsk_slab); | 2129 | kmem_cache_destroy(prot->twsk_prot->twsk_slab); |
2137 | kfree(name); | 2130 | kfree(prot->twsk_prot->twsk_slab_name); |
2138 | prot->twsk_prot->twsk_slab = NULL; | 2131 | prot->twsk_prot->twsk_slab = NULL; |
2139 | } | 2132 | } |
2140 | } | 2133 | } |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index ba85d8831893..85b07eba1879 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -722,7 +722,8 @@ static void tcp_queue_skb(struct sock *sk, struct sk_buff *skb) | |||
722 | static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb, | 722 | static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb, |
723 | unsigned int mss_now) | 723 | unsigned int mss_now) |
724 | { | 724 | { |
725 | if (skb->len <= mss_now || !sk_can_gso(sk)) { | 725 | if (skb->len <= mss_now || !sk_can_gso(sk) || |
726 | tcp_urg_mode(tcp_sk(sk))) { | ||
726 | /* Avoid the costly divide in the normal | 727 | /* Avoid the costly divide in the normal |
727 | * non-TSO case. | 728 | * non-TSO case. |
728 | */ | 729 | */ |
@@ -1163,7 +1164,9 @@ static int tcp_init_tso_segs(struct sock *sk, struct sk_buff *skb, | |||
1163 | { | 1164 | { |
1164 | int tso_segs = tcp_skb_pcount(skb); | 1165 | int tso_segs = tcp_skb_pcount(skb); |
1165 | 1166 | ||
1166 | if (!tso_segs || (tso_segs > 1 && tcp_skb_mss(skb) != mss_now)) { | 1167 | if (!tso_segs || |
1168 | (tso_segs > 1 && (tcp_skb_mss(skb) != mss_now || | ||
1169 | tcp_urg_mode(tcp_sk(sk))))) { | ||
1167 | tcp_set_skb_tso_segs(sk, skb, mss_now); | 1170 | tcp_set_skb_tso_segs(sk, skb, mss_now); |
1168 | tso_segs = tcp_skb_pcount(skb); | 1171 | tso_segs = tcp_skb_pcount(skb); |
1169 | } | 1172 | } |
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c index 742f811ca416..ab4ddba874be 100644 --- a/net/mac80211/wext.c +++ b/net/mac80211/wext.c | |||
@@ -271,6 +271,7 @@ static int ieee80211_ioctl_siwmode(struct net_device *dev, | |||
271 | __u32 *mode, char *extra) | 271 | __u32 *mode, char *extra) |
272 | { | 272 | { |
273 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 273 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
274 | struct ieee80211_local *local = sdata->local; | ||
274 | int type; | 275 | int type; |
275 | 276 | ||
276 | if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | 277 | if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) |
@@ -281,6 +282,13 @@ static int ieee80211_ioctl_siwmode(struct net_device *dev, | |||
281 | type = NL80211_IFTYPE_STATION; | 282 | type = NL80211_IFTYPE_STATION; |
282 | break; | 283 | break; |
283 | case IW_MODE_ADHOC: | 284 | case IW_MODE_ADHOC: |
285 | /* Setting ad-hoc mode on non ibss channel is not | ||
286 | * supported. | ||
287 | */ | ||
288 | if (local->oper_channel && | ||
289 | (local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS)) | ||
290 | return -EOPNOTSUPP; | ||
291 | |||
284 | type = NL80211_IFTYPE_ADHOC; | 292 | type = NL80211_IFTYPE_ADHOC; |
285 | break; | 293 | break; |
286 | case IW_MODE_REPEAT: | 294 | case IW_MODE_REPEAT: |
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index 622d7c671cb7..233fdd2d7d21 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c | |||
@@ -305,9 +305,7 @@ void nf_conntrack_hash_insert(struct nf_conn *ct) | |||
305 | hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); | 305 | hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); |
306 | repl_hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple); | 306 | repl_hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple); |
307 | 307 | ||
308 | spin_lock_bh(&nf_conntrack_lock); | ||
309 | __nf_conntrack_hash_insert(ct, hash, repl_hash); | 308 | __nf_conntrack_hash_insert(ct, hash, repl_hash); |
310 | spin_unlock_bh(&nf_conntrack_lock); | ||
311 | } | 309 | } |
312 | EXPORT_SYMBOL_GPL(nf_conntrack_hash_insert); | 310 | EXPORT_SYMBOL_GPL(nf_conntrack_hash_insert); |
313 | 311 | ||
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index a040d46f85d6..5f4a6516b3b6 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
@@ -1090,7 +1090,7 @@ ctnetlink_create_conntrack(struct nlattr *cda[], | |||
1090 | struct nf_conn_help *help; | 1090 | struct nf_conn_help *help; |
1091 | struct nf_conntrack_helper *helper; | 1091 | struct nf_conntrack_helper *helper; |
1092 | 1092 | ||
1093 | ct = nf_conntrack_alloc(&init_net, otuple, rtuple, GFP_KERNEL); | 1093 | ct = nf_conntrack_alloc(&init_net, otuple, rtuple, GFP_ATOMIC); |
1094 | if (ct == NULL || IS_ERR(ct)) | 1094 | if (ct == NULL || IS_ERR(ct)) |
1095 | return -ENOMEM; | 1095 | return -ENOMEM; |
1096 | 1096 | ||
@@ -1138,7 +1138,7 @@ ctnetlink_create_conntrack(struct nlattr *cda[], | |||
1138 | } | 1138 | } |
1139 | } | 1139 | } |
1140 | 1140 | ||
1141 | nf_ct_acct_ext_add(ct, GFP_KERNEL); | 1141 | nf_ct_acct_ext_add(ct, GFP_ATOMIC); |
1142 | 1142 | ||
1143 | #if defined(CONFIG_NF_CONNTRACK_MARK) | 1143 | #if defined(CONFIG_NF_CONNTRACK_MARK) |
1144 | if (cda[CTA_MARK]) | 1144 | if (cda[CTA_MARK]) |
@@ -1212,13 +1212,14 @@ ctnetlink_new_conntrack(struct sock *ctnl, struct sk_buff *skb, | |||
1212 | atomic_inc(&master_ct->ct_general.use); | 1212 | atomic_inc(&master_ct->ct_general.use); |
1213 | } | 1213 | } |
1214 | 1214 | ||
1215 | spin_unlock_bh(&nf_conntrack_lock); | ||
1216 | err = -ENOENT; | 1215 | err = -ENOENT; |
1217 | if (nlh->nlmsg_flags & NLM_F_CREATE) | 1216 | if (nlh->nlmsg_flags & NLM_F_CREATE) |
1218 | err = ctnetlink_create_conntrack(cda, | 1217 | err = ctnetlink_create_conntrack(cda, |
1219 | &otuple, | 1218 | &otuple, |
1220 | &rtuple, | 1219 | &rtuple, |
1221 | master_ct); | 1220 | master_ct); |
1221 | spin_unlock_bh(&nf_conntrack_lock); | ||
1222 | |||
1222 | if (err < 0 && master_ct) | 1223 | if (err < 0 && master_ct) |
1223 | nf_ct_put(master_ct); | 1224 | nf_ct_put(master_ct); |
1224 | 1225 | ||
diff --git a/net/phonet/pn_dev.c b/net/phonet/pn_dev.c index 53be9fc82aaa..f93ff8ef47d0 100644 --- a/net/phonet/pn_dev.c +++ b/net/phonet/pn_dev.c | |||
@@ -115,7 +115,7 @@ int phonet_address_del(struct net_device *dev, u8 addr) | |||
115 | pnd = __phonet_get(dev); | 115 | pnd = __phonet_get(dev); |
116 | if (!pnd || !test_and_clear_bit(addr >> 2, pnd->addrs)) | 116 | if (!pnd || !test_and_clear_bit(addr >> 2, pnd->addrs)) |
117 | err = -EADDRNOTAVAIL; | 117 | err = -EADDRNOTAVAIL; |
118 | if (bitmap_empty(pnd->addrs, 64)) | 118 | else if (bitmap_empty(pnd->addrs, 64)) |
119 | __phonet_device_free(pnd); | 119 | __phonet_device_free(pnd); |
120 | spin_unlock_bh(&pndevs.lock); | 120 | spin_unlock_bh(&pndevs.lock); |
121 | return err; | 121 | return err; |
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index a7f1ce11bc22..0c1cc7612800 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c | |||
@@ -1072,6 +1072,10 @@ static int rose_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
1072 | unsigned char *asmptr; | 1072 | unsigned char *asmptr; |
1073 | int n, size, qbit = 0; | 1073 | int n, size, qbit = 0; |
1074 | 1074 | ||
1075 | /* ROSE empty frame has no meaning : don't send */ | ||
1076 | if (len == 0) | ||
1077 | return 0; | ||
1078 | |||
1075 | if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT)) | 1079 | if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT)) |
1076 | return -EINVAL; | 1080 | return -EINVAL; |
1077 | 1081 | ||
@@ -1265,6 +1269,12 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock, | |||
1265 | skb_reset_transport_header(skb); | 1269 | skb_reset_transport_header(skb); |
1266 | copied = skb->len; | 1270 | copied = skb->len; |
1267 | 1271 | ||
1272 | /* ROSE empty frame has no meaning : ignore it */ | ||
1273 | if (copied == 0) { | ||
1274 | skb_free_datagram(sk, skb); | ||
1275 | return copied; | ||
1276 | } | ||
1277 | |||
1268 | if (copied > size) { | 1278 | if (copied > size) { |
1269 | copied = size; | 1279 | copied = size; |
1270 | msg->msg_flags |= MSG_TRUNC; | 1280 | msg->msg_flags |= MSG_TRUNC; |
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 95293f549e9c..a1951dcc5776 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c | |||
@@ -1183,7 +1183,11 @@ int svc_addsock(struct svc_serv *serv, | |||
1183 | else if (so->state > SS_UNCONNECTED) | 1183 | else if (so->state > SS_UNCONNECTED) |
1184 | err = -EISCONN; | 1184 | err = -EISCONN; |
1185 | else { | 1185 | else { |
1186 | svsk = svc_setup_socket(serv, so, &err, SVC_SOCK_DEFAULTS); | 1186 | if (!try_module_get(THIS_MODULE)) |
1187 | err = -ENOENT; | ||
1188 | else | ||
1189 | svsk = svc_setup_socket(serv, so, &err, | ||
1190 | SVC_SOCK_DEFAULTS); | ||
1187 | if (svsk) { | 1191 | if (svsk) { |
1188 | struct sockaddr_storage addr; | 1192 | struct sockaddr_storage addr; |
1189 | struct sockaddr *sin = (struct sockaddr *)&addr; | 1193 | struct sockaddr *sin = (struct sockaddr *)&addr; |
@@ -1196,7 +1200,8 @@ int svc_addsock(struct svc_serv *serv, | |||
1196 | spin_unlock_bh(&serv->sv_lock); | 1200 | spin_unlock_bh(&serv->sv_lock); |
1197 | svc_xprt_received(&svsk->sk_xprt); | 1201 | svc_xprt_received(&svsk->sk_xprt); |
1198 | err = 0; | 1202 | err = 0; |
1199 | } | 1203 | } else |
1204 | module_put(THIS_MODULE); | ||
1200 | } | 1205 | } |
1201 | if (err) { | 1206 | if (err) { |
1202 | sockfd_put(so); | 1207 | sockfd_put(so); |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index eb90f77bb0e2..66d5ac4773ab 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -1343,6 +1343,7 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock, | |||
1343 | 1343 | ||
1344 | if (NULL == siocb->scm) | 1344 | if (NULL == siocb->scm) |
1345 | siocb->scm = &tmp_scm; | 1345 | siocb->scm = &tmp_scm; |
1346 | wait_for_unix_gc(); | ||
1346 | err = scm_send(sock, msg, siocb->scm); | 1347 | err = scm_send(sock, msg, siocb->scm); |
1347 | if (err < 0) | 1348 | if (err < 0) |
1348 | return err; | 1349 | return err; |
@@ -1493,6 +1494,7 @@ static int unix_stream_sendmsg(struct kiocb *kiocb, struct socket *sock, | |||
1493 | 1494 | ||
1494 | if (NULL == siocb->scm) | 1495 | if (NULL == siocb->scm) |
1495 | siocb->scm = &tmp_scm; | 1496 | siocb->scm = &tmp_scm; |
1497 | wait_for_unix_gc(); | ||
1496 | err = scm_send(sock, msg, siocb->scm); | 1498 | err = scm_send(sock, msg, siocb->scm); |
1497 | if (err < 0) | 1499 | if (err < 0) |
1498 | return err; | 1500 | return err; |
diff --git a/net/unix/garbage.c b/net/unix/garbage.c index 6d4a9a8de5ef..abb3ab34cb1e 100644 --- a/net/unix/garbage.c +++ b/net/unix/garbage.c | |||
@@ -80,6 +80,7 @@ | |||
80 | #include <linux/file.h> | 80 | #include <linux/file.h> |
81 | #include <linux/proc_fs.h> | 81 | #include <linux/proc_fs.h> |
82 | #include <linux/mutex.h> | 82 | #include <linux/mutex.h> |
83 | #include <linux/wait.h> | ||
83 | 84 | ||
84 | #include <net/sock.h> | 85 | #include <net/sock.h> |
85 | #include <net/af_unix.h> | 86 | #include <net/af_unix.h> |
@@ -91,6 +92,7 @@ | |||
91 | static LIST_HEAD(gc_inflight_list); | 92 | static LIST_HEAD(gc_inflight_list); |
92 | static LIST_HEAD(gc_candidates); | 93 | static LIST_HEAD(gc_candidates); |
93 | static DEFINE_SPINLOCK(unix_gc_lock); | 94 | static DEFINE_SPINLOCK(unix_gc_lock); |
95 | static DECLARE_WAIT_QUEUE_HEAD(unix_gc_wait); | ||
94 | 96 | ||
95 | unsigned int unix_tot_inflight; | 97 | unsigned int unix_tot_inflight; |
96 | 98 | ||
@@ -266,12 +268,16 @@ static void inc_inflight_move_tail(struct unix_sock *u) | |||
266 | list_move_tail(&u->link, &gc_candidates); | 268 | list_move_tail(&u->link, &gc_candidates); |
267 | } | 269 | } |
268 | 270 | ||
269 | /* The external entry point: unix_gc() */ | 271 | static bool gc_in_progress = false; |
270 | 272 | ||
271 | void unix_gc(void) | 273 | void wait_for_unix_gc(void) |
272 | { | 274 | { |
273 | static bool gc_in_progress = false; | 275 | wait_event(unix_gc_wait, gc_in_progress == false); |
276 | } | ||
274 | 277 | ||
278 | /* The external entry point: unix_gc() */ | ||
279 | void unix_gc(void) | ||
280 | { | ||
275 | struct unix_sock *u; | 281 | struct unix_sock *u; |
276 | struct unix_sock *next; | 282 | struct unix_sock *next; |
277 | struct sk_buff_head hitlist; | 283 | struct sk_buff_head hitlist; |
@@ -376,6 +382,7 @@ void unix_gc(void) | |||
376 | /* All candidates should have been detached by now. */ | 382 | /* All candidates should have been detached by now. */ |
377 | BUG_ON(!list_empty(&gc_candidates)); | 383 | BUG_ON(!list_empty(&gc_candidates)); |
378 | gc_in_progress = false; | 384 | gc_in_progress = false; |
385 | wake_up(&unix_gc_wait); | ||
379 | 386 | ||
380 | out: | 387 | out: |
381 | spin_unlock(&unix_gc_lock); | 388 | spin_unlock(&unix_gc_lock); |
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 626dbb688499..eb3b1a9f9b12 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c | |||
@@ -343,9 +343,9 @@ static int ignore_request(struct wiphy *wiphy, enum reg_set_by set_by, | |||
343 | return 0; | 343 | return 0; |
344 | return -EALREADY; | 344 | return -EALREADY; |
345 | } | 345 | } |
346 | if (WARN_ON(!is_alpha2_set(alpha2) || !is_an_alpha2(alpha2)), | 346 | if (WARN(!is_alpha2_set(alpha2) || !is_an_alpha2(alpha2), |
347 | "Invalid Country IE regulatory hint passed " | 347 | "Invalid Country IE regulatory hint passed " |
348 | "to the wireless core\n") | 348 | "to the wireless core\n")) |
349 | return -EINVAL; | 349 | return -EINVAL; |
350 | /* We ignore Country IE hints for now, as we haven't yet | 350 | /* We ignore Country IE hints for now, as we haven't yet |
351 | * added the dot11MultiDomainCapabilityEnabled flag | 351 | * added the dot11MultiDomainCapabilityEnabled flag |
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl index 0197e2f6b544..0b1dc9f9bb06 100755 --- a/scripts/recordmcount.pl +++ b/scripts/recordmcount.pl | |||
@@ -112,6 +112,8 @@ my ($arch, $bits, $objdump, $objcopy, $cc, | |||
112 | # Acceptable sections to record. | 112 | # Acceptable sections to record. |
113 | my %text_sections = ( | 113 | my %text_sections = ( |
114 | ".text" => 1, | 114 | ".text" => 1, |
115 | ".sched.text" => 1, | ||
116 | ".spinlock.text" => 1, | ||
115 | ); | 117 | ); |
116 | 118 | ||
117 | $objdump = "objdump" if ((length $objdump) == 0); | 119 | $objdump = "objdump" if ((length $objdump) == 0); |
diff --git a/scripts/trace/power.pl b/scripts/trace/power.pl new file mode 100644 index 000000000000..4f729b3501e0 --- /dev/null +++ b/scripts/trace/power.pl | |||
@@ -0,0 +1,108 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # Copyright 2008, Intel Corporation | ||
4 | # | ||
5 | # This file is part of the Linux kernel | ||
6 | # | ||
7 | # This program file is free software; you can redistribute it and/or modify it | ||
8 | # under the terms of the GNU General Public License as published by the | ||
9 | # Free Software Foundation; version 2 of the License. | ||
10 | # | ||
11 | # This program is distributed in the hope that it will be useful, but WITHOUT | ||
12 | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
13 | # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
14 | # for more details. | ||
15 | # | ||
16 | # You should have received a copy of the GNU General Public License | ||
17 | # along with this program in a file named COPYING; if not, write to the | ||
18 | # Free Software Foundation, Inc., | ||
19 | # 51 Franklin Street, Fifth Floor, | ||
20 | # Boston, MA 02110-1301 USA | ||
21 | # | ||
22 | # Authors: | ||
23 | # Arjan van de Ven <arjan@linux.intel.com> | ||
24 | |||
25 | |||
26 | # | ||
27 | # This script turns a cstate ftrace output into a SVG graphic that shows | ||
28 | # historic C-state information | ||
29 | # | ||
30 | # | ||
31 | # cat /sys/kernel/debug/tracing/trace | perl power.pl > out.svg | ||
32 | # | ||
33 | |||
34 | my @styles; | ||
35 | my $base = 0; | ||
36 | |||
37 | my @pstate_last; | ||
38 | my @pstate_level; | ||
39 | |||
40 | $styles[0] = "fill:rgb(0,0,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
41 | $styles[1] = "fill:rgb(0,255,0);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
42 | $styles[2] = "fill:rgb(255,0,20);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
43 | $styles[3] = "fill:rgb(255,255,20);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
44 | $styles[4] = "fill:rgb(255,0,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
45 | $styles[5] = "fill:rgb(0,255,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
46 | $styles[6] = "fill:rgb(0,128,255);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
47 | $styles[7] = "fill:rgb(0,255,128);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
48 | $styles[8] = "fill:rgb(0,25,20);fill-opacity:0.5;stroke-width:1;stroke:rgb(0,0,0)"; | ||
49 | |||
50 | |||
51 | print "<?xml version=\"1.0\" standalone=\"no\"?> \n"; | ||
52 | print "<svg width=\"10000\" height=\"100%\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n"; | ||
53 | |||
54 | my $scale = 30000.0; | ||
55 | while (<>) { | ||
56 | my $line = $_; | ||
57 | if ($line =~ /([0-9\.]+)\] CSTATE: Going to C([0-9]) on cpu ([0-9]+) for ([0-9\.]+)/) { | ||
58 | if ($base == 0) { | ||
59 | $base = $1; | ||
60 | } | ||
61 | my $time = $1 - $base; | ||
62 | $time = $time * $scale; | ||
63 | my $C = $2; | ||
64 | my $cpu = $3; | ||
65 | my $y = 400 * $cpu; | ||
66 | my $duration = $4 * $scale; | ||
67 | my $msec = int($4 * 100000)/100.0; | ||
68 | my $height = $C * 20; | ||
69 | $style = $styles[$C]; | ||
70 | |||
71 | $y = $y + 140 - $height; | ||
72 | |||
73 | $x2 = $time + 4; | ||
74 | $y2 = $y + 4; | ||
75 | |||
76 | |||
77 | print "<rect x=\"$time\" width=\"$duration\" y=\"$y\" height=\"$height\" style=\"$style\"/>\n"; | ||
78 | print "<text transform=\"translate($x2,$y2) rotate(90)\">C$C $msec</text>\n"; | ||
79 | } | ||
80 | if ($line =~ /([0-9\.]+)\] PSTATE: Going to P([0-9]) on cpu ([0-9]+)/) { | ||
81 | my $time = $1 - $base; | ||
82 | my $state = $2; | ||
83 | my $cpu = $3; | ||
84 | |||
85 | if (defined($pstate_last[$cpu])) { | ||
86 | my $from = $pstate_last[$cpu]; | ||
87 | my $oldstate = $pstate_state[$cpu]; | ||
88 | my $duration = ($time-$from) * $scale; | ||
89 | |||
90 | $from = $from * $scale; | ||
91 | my $to = $from + $duration; | ||
92 | my $height = 140 - ($oldstate * (140/8)); | ||
93 | |||
94 | my $y = 400 * $cpu + 200 + $height; | ||
95 | my $y2 = $y+4; | ||
96 | my $style = $styles[8]; | ||
97 | |||
98 | print "<rect x=\"$from\" y=\"$y\" width=\"$duration\" height=\"5\" style=\"$style\"/>\n"; | ||
99 | print "<text transform=\"translate($from,$y2)\">P$oldstate (cpu $cpu)</text>\n"; | ||
100 | }; | ||
101 | |||
102 | $pstate_last[$cpu] = $time; | ||
103 | $pstate_state[$cpu] = $state; | ||
104 | } | ||
105 | } | ||
106 | |||
107 | |||
108 | print "</svg>\n"; | ||