diff options
Diffstat (limited to 'arch/x86')
178 files changed, 4389 insertions, 6072 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index dcb0593b4a66..cea0cd9a316f 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -55,6 +55,7 @@ config X86 | |||
55 | select HAVE_HW_BREAKPOINT | 55 | select HAVE_HW_BREAKPOINT |
56 | select HAVE_MIXED_BREAKPOINTS_REGS | 56 | select HAVE_MIXED_BREAKPOINTS_REGS |
57 | select PERF_EVENTS | 57 | select PERF_EVENTS |
58 | select HAVE_PERF_EVENTS_NMI | ||
58 | select ANON_INODES | 59 | select ANON_INODES |
59 | select HAVE_ARCH_KMEMCHECK | 60 | select HAVE_ARCH_KMEMCHECK |
60 | select HAVE_USER_RETURN_NOTIFIER | 61 | select HAVE_USER_RETURN_NOTIFIER |
@@ -72,9 +73,6 @@ config ARCH_DEFCONFIG | |||
72 | default "arch/x86/configs/i386_defconfig" if X86_32 | 73 | default "arch/x86/configs/i386_defconfig" if X86_32 |
73 | default "arch/x86/configs/x86_64_defconfig" if X86_64 | 74 | default "arch/x86/configs/x86_64_defconfig" if X86_64 |
74 | 75 | ||
75 | config GENERIC_TIME | ||
76 | def_bool y | ||
77 | |||
78 | config GENERIC_CMOS_UPDATE | 76 | config GENERIC_CMOS_UPDATE |
79 | def_bool y | 77 | def_bool y |
80 | 78 | ||
@@ -247,6 +245,11 @@ config ARCH_HWEIGHT_CFLAGS | |||
247 | 245 | ||
248 | config KTIME_SCALAR | 246 | config KTIME_SCALAR |
249 | def_bool X86_32 | 247 | def_bool X86_32 |
248 | |||
249 | config ARCH_CPU_PROBE_RELEASE | ||
250 | def_bool y | ||
251 | depends on HOTPLUG_CPU | ||
252 | |||
250 | source "init/Kconfig" | 253 | source "init/Kconfig" |
251 | source "kernel/Kconfig.freezer" | 254 | source "kernel/Kconfig.freezer" |
252 | 255 | ||
@@ -751,11 +754,11 @@ config IOMMU_API | |||
751 | def_bool (AMD_IOMMU || DMAR) | 754 | def_bool (AMD_IOMMU || DMAR) |
752 | 755 | ||
753 | config MAXSMP | 756 | config MAXSMP |
754 | bool "Configure Maximum number of SMP Processors and NUMA Nodes" | 757 | bool "Enable Maximum number of SMP Processors and NUMA Nodes" |
755 | depends on X86_64 && SMP && DEBUG_KERNEL && EXPERIMENTAL | 758 | depends on X86_64 && SMP && DEBUG_KERNEL && EXPERIMENTAL |
756 | select CPUMASK_OFFSTACK | 759 | select CPUMASK_OFFSTACK |
757 | ---help--- | 760 | ---help--- |
758 | Configure maximum number of CPUS and NUMA Nodes for this architecture. | 761 | Enable maximum number of CPUS and NUMA Nodes for this architecture. |
759 | If unsure, say N. | 762 | If unsure, say N. |
760 | 763 | ||
761 | config NR_CPUS | 764 | config NR_CPUS |
@@ -2046,7 +2049,7 @@ config SCx200 | |||
2046 | 2049 | ||
2047 | config SCx200HR_TIMER | 2050 | config SCx200HR_TIMER |
2048 | tristate "NatSemi SCx200 27MHz High-Resolution Timer Support" | 2051 | tristate "NatSemi SCx200 27MHz High-Resolution Timer Support" |
2049 | depends on SCx200 && GENERIC_TIME | 2052 | depends on SCx200 |
2050 | default y | 2053 | default y |
2051 | ---help--- | 2054 | ---help--- |
2052 | This driver provides a clocksource built upon the on-chip | 2055 | This driver provides a clocksource built upon the on-chip |
@@ -2062,6 +2065,15 @@ config OLPC | |||
2062 | Add support for detecting the unique features of the OLPC | 2065 | Add support for detecting the unique features of the OLPC |
2063 | XO hardware. | 2066 | XO hardware. |
2064 | 2067 | ||
2068 | config OLPC_OPENFIRMWARE | ||
2069 | bool "Support for OLPC's Open Firmware" | ||
2070 | depends on !X86_64 && !X86_PAE | ||
2071 | default y if OLPC | ||
2072 | help | ||
2073 | This option adds support for the implementation of Open Firmware | ||
2074 | that is used on the OLPC XO-1 Children's Machine. | ||
2075 | If unsure, say N here. | ||
2076 | |||
2065 | endif # X86_32 | 2077 | endif # X86_32 |
2066 | 2078 | ||
2067 | config K8_NB | 2079 | config K8_NB |
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile index ec749c2bfdd7..f7cb086b4add 100644 --- a/arch/x86/boot/Makefile +++ b/arch/x86/boot/Makefile | |||
@@ -26,10 +26,10 @@ targets := vmlinux.bin setup.bin setup.elf bzImage | |||
26 | targets += fdimage fdimage144 fdimage288 image.iso mtools.conf | 26 | targets += fdimage fdimage144 fdimage288 image.iso mtools.conf |
27 | subdir- := compressed | 27 | subdir- := compressed |
28 | 28 | ||
29 | setup-y += a20.o bioscall.o cmdline.o copy.o cpu.o cpucheck.o edd.o | 29 | setup-y += a20.o bioscall.o cmdline.o copy.o cpu.o cpucheck.o |
30 | setup-y += header.o main.o mca.o memory.o pm.o pmjump.o | 30 | setup-y += early_serial_console.o edd.o header.o main.o mca.o memory.o |
31 | setup-y += printf.o regs.o string.o tty.o video.o video-mode.o | 31 | setup-y += pm.o pmjump.o printf.o regs.o string.o tty.o video.o |
32 | setup-y += version.o | 32 | setup-y += video-mode.o version.o |
33 | setup-$(CONFIG_X86_APM_BOOT) += apm.o | 33 | setup-$(CONFIG_X86_APM_BOOT) += apm.o |
34 | 34 | ||
35 | # The link order of the video-*.o modules can matter. In particular, | 35 | # The link order of the video-*.o modules can matter. In particular, |
diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h index 98239d2658f2..c7093bd9f2d3 100644 --- a/arch/x86/boot/boot.h +++ b/arch/x86/boot/boot.h | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "bitops.h" | 28 | #include "bitops.h" |
29 | #include <asm/cpufeature.h> | 29 | #include <asm/cpufeature.h> |
30 | #include <asm/processor-flags.h> | 30 | #include <asm/processor-flags.h> |
31 | #include "ctype.h" | ||
31 | 32 | ||
32 | /* Useful macros */ | 33 | /* Useful macros */ |
33 | #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) | 34 | #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) |
@@ -37,6 +38,8 @@ | |||
37 | extern struct setup_header hdr; | 38 | extern struct setup_header hdr; |
38 | extern struct boot_params boot_params; | 39 | extern struct boot_params boot_params; |
39 | 40 | ||
41 | #define cpu_relax() asm volatile("rep; nop") | ||
42 | |||
40 | /* Basic port I/O */ | 43 | /* Basic port I/O */ |
41 | static inline void outb(u8 v, u16 port) | 44 | static inline void outb(u8 v, u16 port) |
42 | { | 45 | { |
@@ -198,11 +201,6 @@ static inline int memcmp_gs(const void *s1, addr_t s2, size_t len) | |||
198 | return diff; | 201 | return diff; |
199 | } | 202 | } |
200 | 203 | ||
201 | static inline int isdigit(int ch) | ||
202 | { | ||
203 | return (ch >= '0') && (ch <= '9'); | ||
204 | } | ||
205 | |||
206 | /* Heap -- available for dynamic lists. */ | 204 | /* Heap -- available for dynamic lists. */ |
207 | extern char _end[]; | 205 | extern char _end[]; |
208 | extern char *HEAP; | 206 | extern char *HEAP; |
@@ -287,8 +285,18 @@ struct biosregs { | |||
287 | void intcall(u8 int_no, const struct biosregs *ireg, struct biosregs *oreg); | 285 | void intcall(u8 int_no, const struct biosregs *ireg, struct biosregs *oreg); |
288 | 286 | ||
289 | /* cmdline.c */ | 287 | /* cmdline.c */ |
290 | int cmdline_find_option(const char *option, char *buffer, int bufsize); | 288 | int __cmdline_find_option(u32 cmdline_ptr, const char *option, char *buffer, int bufsize); |
291 | int cmdline_find_option_bool(const char *option); | 289 | int __cmdline_find_option_bool(u32 cmdline_ptr, const char *option); |
290 | static inline int cmdline_find_option(const char *option, char *buffer, int bufsize) | ||
291 | { | ||
292 | return __cmdline_find_option(boot_params.hdr.cmd_line_ptr, option, buffer, bufsize); | ||
293 | } | ||
294 | |||
295 | static inline int cmdline_find_option_bool(const char *option) | ||
296 | { | ||
297 | return __cmdline_find_option_bool(boot_params.hdr.cmd_line_ptr, option); | ||
298 | } | ||
299 | |||
292 | 300 | ||
293 | /* cpu.c, cpucheck.c */ | 301 | /* cpu.c, cpucheck.c */ |
294 | struct cpu_features { | 302 | struct cpu_features { |
@@ -300,6 +308,10 @@ extern struct cpu_features cpu; | |||
300 | int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr); | 308 | int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr); |
301 | int validate_cpu(void); | 309 | int validate_cpu(void); |
302 | 310 | ||
311 | /* early_serial_console.c */ | ||
312 | extern int early_serial_base; | ||
313 | void console_init(void); | ||
314 | |||
303 | /* edd.c */ | 315 | /* edd.c */ |
304 | void query_edd(void); | 316 | void query_edd(void); |
305 | 317 | ||
@@ -329,8 +341,10 @@ void initregs(struct biosregs *regs); | |||
329 | 341 | ||
330 | /* string.c */ | 342 | /* string.c */ |
331 | int strcmp(const char *str1, const char *str2); | 343 | int strcmp(const char *str1, const char *str2); |
344 | int strncmp(const char *cs, const char *ct, size_t count); | ||
332 | size_t strnlen(const char *s, size_t maxlen); | 345 | size_t strnlen(const char *s, size_t maxlen); |
333 | unsigned int atou(const char *s); | 346 | unsigned int atou(const char *s); |
347 | unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base); | ||
334 | 348 | ||
335 | /* tty.c */ | 349 | /* tty.c */ |
336 | void puts(const char *); | 350 | void puts(const char *); |
diff --git a/arch/x86/boot/cmdline.c b/arch/x86/boot/cmdline.c index a1d35634bce0..6b3b6f708c04 100644 --- a/arch/x86/boot/cmdline.c +++ b/arch/x86/boot/cmdline.c | |||
@@ -27,9 +27,8 @@ static inline int myisspace(u8 c) | |||
27 | * Returns the length of the argument (regardless of if it was | 27 | * Returns the length of the argument (regardless of if it was |
28 | * truncated to fit in the buffer), or -1 on not found. | 28 | * truncated to fit in the buffer), or -1 on not found. |
29 | */ | 29 | */ |
30 | int cmdline_find_option(const char *option, char *buffer, int bufsize) | 30 | int __cmdline_find_option(u32 cmdline_ptr, const char *option, char *buffer, int bufsize) |
31 | { | 31 | { |
32 | u32 cmdline_ptr = boot_params.hdr.cmd_line_ptr; | ||
33 | addr_t cptr; | 32 | addr_t cptr; |
34 | char c; | 33 | char c; |
35 | int len = -1; | 34 | int len = -1; |
@@ -100,9 +99,8 @@ int cmdline_find_option(const char *option, char *buffer, int bufsize) | |||
100 | * Returns the position of that option (starts counting with 1) | 99 | * Returns the position of that option (starts counting with 1) |
101 | * or 0 on not found | 100 | * or 0 on not found |
102 | */ | 101 | */ |
103 | int cmdline_find_option_bool(const char *option) | 102 | int __cmdline_find_option_bool(u32 cmdline_ptr, const char *option) |
104 | { | 103 | { |
105 | u32 cmdline_ptr = boot_params.hdr.cmd_line_ptr; | ||
106 | addr_t cptr; | 104 | addr_t cptr; |
107 | char c; | 105 | char c; |
108 | int pos = 0, wstart = 0; | 106 | int pos = 0, wstart = 0; |
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile index fbb47daf2459..0c229551eead 100644 --- a/arch/x86/boot/compressed/Makefile +++ b/arch/x86/boot/compressed/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | # create a compressed vmlinux image from the original vmlinux | 4 | # create a compressed vmlinux image from the original vmlinux |
5 | # | 5 | # |
6 | 6 | ||
7 | targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o piggy.o | 7 | targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o |
8 | 8 | ||
9 | KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 | 9 | KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 |
10 | KBUILD_CFLAGS += -fno-strict-aliasing -fPIC | 10 | KBUILD_CFLAGS += -fno-strict-aliasing -fPIC |
@@ -23,7 +23,7 @@ LDFLAGS_vmlinux := -T | |||
23 | 23 | ||
24 | hostprogs-y := mkpiggy | 24 | hostprogs-y := mkpiggy |
25 | 25 | ||
26 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/piggy.o FORCE | 26 | $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o $(obj)/string.o $(obj)/cmdline.o $(obj)/early_serial_console.o $(obj)/piggy.o FORCE |
27 | $(call if_changed,ld) | 27 | $(call if_changed,ld) |
28 | @: | 28 | @: |
29 | 29 | ||
diff --git a/arch/x86/boot/compressed/cmdline.c b/arch/x86/boot/compressed/cmdline.c new file mode 100644 index 000000000000..cb62f786990d --- /dev/null +++ b/arch/x86/boot/compressed/cmdline.c | |||
@@ -0,0 +1,21 @@ | |||
1 | #include "misc.h" | ||
2 | |||
3 | static unsigned long fs; | ||
4 | static inline void set_fs(unsigned long seg) | ||
5 | { | ||
6 | fs = seg << 4; /* shift it back */ | ||
7 | } | ||
8 | typedef unsigned long addr_t; | ||
9 | static inline char rdfs8(addr_t addr) | ||
10 | { | ||
11 | return *((char *)(fs + addr)); | ||
12 | } | ||
13 | #include "../cmdline.c" | ||
14 | int cmdline_find_option(const char *option, char *buffer, int bufsize) | ||
15 | { | ||
16 | return __cmdline_find_option(real_mode->hdr.cmd_line_ptr, option, buffer, bufsize); | ||
17 | } | ||
18 | int cmdline_find_option_bool(const char *option) | ||
19 | { | ||
20 | return __cmdline_find_option_bool(real_mode->hdr.cmd_line_ptr, option); | ||
21 | } | ||
diff --git a/arch/x86/boot/compressed/early_serial_console.c b/arch/x86/boot/compressed/early_serial_console.c new file mode 100644 index 000000000000..261e81fb9582 --- /dev/null +++ b/arch/x86/boot/compressed/early_serial_console.c | |||
@@ -0,0 +1,5 @@ | |||
1 | #include "misc.h" | ||
2 | |||
3 | int early_serial_base; | ||
4 | |||
5 | #include "../early_serial_console.c" | ||
diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S index f543b70ffae2..67a655a39ce4 100644 --- a/arch/x86/boot/compressed/head_32.S +++ b/arch/x86/boot/compressed/head_32.S | |||
@@ -124,6 +124,19 @@ relocated: | |||
124 | rep stosl | 124 | rep stosl |
125 | 125 | ||
126 | /* | 126 | /* |
127 | * Adjust our own GOT | ||
128 | */ | ||
129 | leal _got(%ebx), %edx | ||
130 | leal _egot(%ebx), %ecx | ||
131 | 1: | ||
132 | cmpl %ecx, %edx | ||
133 | jae 2f | ||
134 | addl %ebx, (%edx) | ||
135 | addl $4, %edx | ||
136 | jmp 1b | ||
137 | 2: | ||
138 | |||
139 | /* | ||
127 | * Do the decompression, and jump to the new kernel.. | 140 | * Do the decompression, and jump to the new kernel.. |
128 | */ | 141 | */ |
129 | leal z_extract_offset_negative(%ebx), %ebp | 142 | leal z_extract_offset_negative(%ebx), %ebp |
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index faff0dc9c06a..52f85a196fa0 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S | |||
@@ -280,6 +280,19 @@ relocated: | |||
280 | rep stosq | 280 | rep stosq |
281 | 281 | ||
282 | /* | 282 | /* |
283 | * Adjust our own GOT | ||
284 | */ | ||
285 | leaq _got(%rip), %rdx | ||
286 | leaq _egot(%rip), %rcx | ||
287 | 1: | ||
288 | cmpq %rcx, %rdx | ||
289 | jae 2f | ||
290 | addq %rbx, (%rdx) | ||
291 | addq $8, %rdx | ||
292 | jmp 1b | ||
293 | 2: | ||
294 | |||
295 | /* | ||
283 | * Do the decompression, and jump to the new kernel.. | 296 | * Do the decompression, and jump to the new kernel.. |
284 | */ | 297 | */ |
285 | pushq %rsi /* Save the real mode argument */ | 298 | pushq %rsi /* Save the real mode argument */ |
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c index 51e240779a44..8f7bef8e9fff 100644 --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c | |||
@@ -9,23 +9,7 @@ | |||
9 | * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 | 9 | * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 |
10 | */ | 10 | */ |
11 | 11 | ||
12 | /* | 12 | #include "misc.h" |
13 | * we have to be careful, because no indirections are allowed here, and | ||
14 | * paravirt_ops is a kind of one. As it will only run in baremetal anyway, | ||
15 | * we just keep it from happening | ||
16 | */ | ||
17 | #undef CONFIG_PARAVIRT | ||
18 | #ifdef CONFIG_X86_32 | ||
19 | #define _ASM_X86_DESC_H 1 | ||
20 | #endif | ||
21 | |||
22 | #include <linux/linkage.h> | ||
23 | #include <linux/screen_info.h> | ||
24 | #include <linux/elf.h> | ||
25 | #include <linux/io.h> | ||
26 | #include <asm/page.h> | ||
27 | #include <asm/boot.h> | ||
28 | #include <asm/bootparam.h> | ||
29 | 13 | ||
30 | /* WARNING!! | 14 | /* WARNING!! |
31 | * This code is compiled with -fPIC and it is relocated dynamically | 15 | * This code is compiled with -fPIC and it is relocated dynamically |
@@ -123,15 +107,13 @@ static void error(char *m); | |||
123 | /* | 107 | /* |
124 | * This is set up by the setup-routine at boot-time | 108 | * This is set up by the setup-routine at boot-time |
125 | */ | 109 | */ |
126 | static struct boot_params *real_mode; /* Pointer to real-mode data */ | 110 | struct boot_params *real_mode; /* Pointer to real-mode data */ |
127 | static int quiet; | 111 | static int quiet; |
112 | static int debug; | ||
128 | 113 | ||
129 | void *memset(void *s, int c, size_t n); | 114 | void *memset(void *s, int c, size_t n); |
130 | void *memcpy(void *dest, const void *src, size_t n); | 115 | void *memcpy(void *dest, const void *src, size_t n); |
131 | 116 | ||
132 | static void __putstr(int, const char *); | ||
133 | #define putstr(__x) __putstr(0, __x) | ||
134 | |||
135 | #ifdef CONFIG_X86_64 | 117 | #ifdef CONFIG_X86_64 |
136 | #define memptr long | 118 | #define memptr long |
137 | #else | 119 | #else |
@@ -170,7 +152,21 @@ static void scroll(void) | |||
170 | vidmem[i] = ' '; | 152 | vidmem[i] = ' '; |
171 | } | 153 | } |
172 | 154 | ||
173 | static void __putstr(int error, const char *s) | 155 | #define XMTRDY 0x20 |
156 | |||
157 | #define TXR 0 /* Transmit register (WRITE) */ | ||
158 | #define LSR 5 /* Line Status */ | ||
159 | static void serial_putchar(int ch) | ||
160 | { | ||
161 | unsigned timeout = 0xffff; | ||
162 | |||
163 | while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout) | ||
164 | cpu_relax(); | ||
165 | |||
166 | outb(ch, early_serial_base + TXR); | ||
167 | } | ||
168 | |||
169 | void __putstr(int error, const char *s) | ||
174 | { | 170 | { |
175 | int x, y, pos; | 171 | int x, y, pos; |
176 | char c; | 172 | char c; |
@@ -179,6 +175,14 @@ static void __putstr(int error, const char *s) | |||
179 | if (!error) | 175 | if (!error) |
180 | return; | 176 | return; |
181 | #endif | 177 | #endif |
178 | if (early_serial_base) { | ||
179 | const char *str = s; | ||
180 | while (*str) { | ||
181 | if (*str == '\n') | ||
182 | serial_putchar('\r'); | ||
183 | serial_putchar(*str++); | ||
184 | } | ||
185 | } | ||
182 | 186 | ||
183 | if (real_mode->screen_info.orig_video_mode == 0 && | 187 | if (real_mode->screen_info.orig_video_mode == 0 && |
184 | lines == 0 && cols == 0) | 188 | lines == 0 && cols == 0) |
@@ -305,8 +309,10 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap, | |||
305 | { | 309 | { |
306 | real_mode = rmode; | 310 | real_mode = rmode; |
307 | 311 | ||
308 | if (real_mode->hdr.loadflags & QUIET_FLAG) | 312 | if (cmdline_find_option_bool("quiet")) |
309 | quiet = 1; | 313 | quiet = 1; |
314 | if (cmdline_find_option_bool("debug")) | ||
315 | debug = 1; | ||
310 | 316 | ||
311 | if (real_mode->screen_info.orig_video_mode == 7) { | 317 | if (real_mode->screen_info.orig_video_mode == 7) { |
312 | vidmem = (char *) 0xb0000; | 318 | vidmem = (char *) 0xb0000; |
@@ -319,6 +325,10 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap, | |||
319 | lines = real_mode->screen_info.orig_video_lines; | 325 | lines = real_mode->screen_info.orig_video_lines; |
320 | cols = real_mode->screen_info.orig_video_cols; | 326 | cols = real_mode->screen_info.orig_video_cols; |
321 | 327 | ||
328 | console_init(); | ||
329 | if (debug) | ||
330 | putstr("early console in decompress_kernel\n"); | ||
331 | |||
322 | free_mem_ptr = heap; /* Heap */ | 332 | free_mem_ptr = heap; /* Heap */ |
323 | free_mem_end_ptr = heap + BOOT_HEAP_SIZE; | 333 | free_mem_end_ptr = heap + BOOT_HEAP_SIZE; |
324 | 334 | ||
diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h new file mode 100644 index 000000000000..3f19c81a6203 --- /dev/null +++ b/arch/x86/boot/compressed/misc.h | |||
@@ -0,0 +1,39 @@ | |||
1 | #ifndef BOOT_COMPRESSED_MISC_H | ||
2 | #define BOOT_COMPRESSED_MISC_H | ||
3 | |||
4 | /* | ||
5 | * we have to be careful, because no indirections are allowed here, and | ||
6 | * paravirt_ops is a kind of one. As it will only run in baremetal anyway, | ||
7 | * we just keep it from happening | ||
8 | */ | ||
9 | #undef CONFIG_PARAVIRT | ||
10 | #ifdef CONFIG_X86_32 | ||
11 | #define _ASM_X86_DESC_H 1 | ||
12 | #endif | ||
13 | |||
14 | #include <linux/linkage.h> | ||
15 | #include <linux/screen_info.h> | ||
16 | #include <linux/elf.h> | ||
17 | #include <linux/io.h> | ||
18 | #include <asm/page.h> | ||
19 | #include <asm/boot.h> | ||
20 | #include <asm/bootparam.h> | ||
21 | |||
22 | #define BOOT_BOOT_H | ||
23 | #include "../ctype.h" | ||
24 | |||
25 | /* misc.c */ | ||
26 | extern struct boot_params *real_mode; /* Pointer to real-mode data */ | ||
27 | void __putstr(int error, const char *s); | ||
28 | #define putstr(__x) __putstr(0, __x) | ||
29 | #define puts(__x) __putstr(0, __x) | ||
30 | |||
31 | /* cmdline.c */ | ||
32 | int cmdline_find_option(const char *option, char *buffer, int bufsize); | ||
33 | int cmdline_find_option_bool(const char *option); | ||
34 | |||
35 | /* early_serial_console.c */ | ||
36 | extern int early_serial_base; | ||
37 | void console_init(void); | ||
38 | |||
39 | #endif | ||
diff --git a/arch/x86/boot/compressed/string.c b/arch/x86/boot/compressed/string.c new file mode 100644 index 000000000000..19b3e693cd72 --- /dev/null +++ b/arch/x86/boot/compressed/string.c | |||
@@ -0,0 +1,2 @@ | |||
1 | #include "misc.h" | ||
2 | #include "../string.c" | ||
diff --git a/arch/x86/boot/compressed/vmlinux.lds.S b/arch/x86/boot/compressed/vmlinux.lds.S index 5ddabceee124..34d047c98284 100644 --- a/arch/x86/boot/compressed/vmlinux.lds.S +++ b/arch/x86/boot/compressed/vmlinux.lds.S | |||
@@ -41,6 +41,12 @@ SECTIONS | |||
41 | *(.rodata.*) | 41 | *(.rodata.*) |
42 | _erodata = . ; | 42 | _erodata = . ; |
43 | } | 43 | } |
44 | .got : { | ||
45 | _got = .; | ||
46 | KEEP(*(.got.plt)) | ||
47 | KEEP(*(.got)) | ||
48 | _egot = .; | ||
49 | } | ||
44 | .data : { | 50 | .data : { |
45 | _data = . ; | 51 | _data = . ; |
46 | *(.data) | 52 | *(.data) |
diff --git a/arch/x86/boot/ctype.h b/arch/x86/boot/ctype.h new file mode 100644 index 000000000000..25e13403193c --- /dev/null +++ b/arch/x86/boot/ctype.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef BOOT_ISDIGIT_H | ||
2 | |||
3 | #define BOOT_ISDIGIT_H | ||
4 | |||
5 | static inline int isdigit(int ch) | ||
6 | { | ||
7 | return (ch >= '0') && (ch <= '9'); | ||
8 | } | ||
9 | |||
10 | static inline int isxdigit(int ch) | ||
11 | { | ||
12 | if (isdigit(ch)) | ||
13 | return true; | ||
14 | |||
15 | if ((ch >= 'a') && (ch <= 'f')) | ||
16 | return true; | ||
17 | |||
18 | return (ch >= 'A') && (ch <= 'F'); | ||
19 | } | ||
20 | |||
21 | #endif | ||
diff --git a/arch/x86/boot/early_serial_console.c b/arch/x86/boot/early_serial_console.c new file mode 100644 index 000000000000..030f4b93e255 --- /dev/null +++ b/arch/x86/boot/early_serial_console.c | |||
@@ -0,0 +1,139 @@ | |||
1 | #include "boot.h" | ||
2 | |||
3 | #define DEFAULT_SERIAL_PORT 0x3f8 /* ttyS0 */ | ||
4 | |||
5 | #define XMTRDY 0x20 | ||
6 | |||
7 | #define DLAB 0x80 | ||
8 | |||
9 | #define TXR 0 /* Transmit register (WRITE) */ | ||
10 | #define RXR 0 /* Receive register (READ) */ | ||
11 | #define IER 1 /* Interrupt Enable */ | ||
12 | #define IIR 2 /* Interrupt ID */ | ||
13 | #define FCR 2 /* FIFO control */ | ||
14 | #define LCR 3 /* Line control */ | ||
15 | #define MCR 4 /* Modem control */ | ||
16 | #define LSR 5 /* Line Status */ | ||
17 | #define MSR 6 /* Modem Status */ | ||
18 | #define DLL 0 /* Divisor Latch Low */ | ||
19 | #define DLH 1 /* Divisor latch High */ | ||
20 | |||
21 | #define DEFAULT_BAUD 9600 | ||
22 | |||
23 | static void early_serial_init(int port, int baud) | ||
24 | { | ||
25 | unsigned char c; | ||
26 | unsigned divisor; | ||
27 | |||
28 | outb(0x3, port + LCR); /* 8n1 */ | ||
29 | outb(0, port + IER); /* no interrupt */ | ||
30 | outb(0, port + FCR); /* no fifo */ | ||
31 | outb(0x3, port + MCR); /* DTR + RTS */ | ||
32 | |||
33 | divisor = 115200 / baud; | ||
34 | c = inb(port + LCR); | ||
35 | outb(c | DLAB, port + LCR); | ||
36 | outb(divisor & 0xff, port + DLL); | ||
37 | outb((divisor >> 8) & 0xff, port + DLH); | ||
38 | outb(c & ~DLAB, port + LCR); | ||
39 | |||
40 | early_serial_base = port; | ||
41 | } | ||
42 | |||
43 | static void parse_earlyprintk(void) | ||
44 | { | ||
45 | int baud = DEFAULT_BAUD; | ||
46 | char arg[32]; | ||
47 | int pos = 0; | ||
48 | int port = 0; | ||
49 | |||
50 | if (cmdline_find_option("earlyprintk", arg, sizeof arg) > 0) { | ||
51 | char *e; | ||
52 | |||
53 | if (!strncmp(arg, "serial", 6)) { | ||
54 | port = DEFAULT_SERIAL_PORT; | ||
55 | pos += 6; | ||
56 | } | ||
57 | |||
58 | if (arg[pos] == ',') | ||
59 | pos++; | ||
60 | |||
61 | if (!strncmp(arg, "ttyS", 4)) { | ||
62 | static const int bases[] = { 0x3f8, 0x2f8 }; | ||
63 | int idx = 0; | ||
64 | |||
65 | if (!strncmp(arg + pos, "ttyS", 4)) | ||
66 | pos += 4; | ||
67 | |||
68 | if (arg[pos++] == '1') | ||
69 | idx = 1; | ||
70 | |||
71 | port = bases[idx]; | ||
72 | } | ||
73 | |||
74 | if (arg[pos] == ',') | ||
75 | pos++; | ||
76 | |||
77 | baud = simple_strtoull(arg + pos, &e, 0); | ||
78 | if (baud == 0 || arg + pos == e) | ||
79 | baud = DEFAULT_BAUD; | ||
80 | } | ||
81 | |||
82 | if (port) | ||
83 | early_serial_init(port, baud); | ||
84 | } | ||
85 | |||
86 | #define BASE_BAUD (1843200/16) | ||
87 | static unsigned int probe_baud(int port) | ||
88 | { | ||
89 | unsigned char lcr, dll, dlh; | ||
90 | unsigned int quot; | ||
91 | |||
92 | lcr = inb(port + LCR); | ||
93 | outb(lcr | DLAB, port + LCR); | ||
94 | dll = inb(port + DLL); | ||
95 | dlh = inb(port + DLH); | ||
96 | outb(lcr, port + LCR); | ||
97 | quot = (dlh << 8) | dll; | ||
98 | |||
99 | return BASE_BAUD / quot; | ||
100 | } | ||
101 | |||
102 | static void parse_console_uart8250(void) | ||
103 | { | ||
104 | char optstr[64], *options; | ||
105 | int baud = DEFAULT_BAUD; | ||
106 | int port = 0; | ||
107 | |||
108 | /* | ||
109 | * console=uart8250,io,0x3f8,115200n8 | ||
110 | * need to make sure it is last one console ! | ||
111 | */ | ||
112 | if (cmdline_find_option("console", optstr, sizeof optstr) <= 0) | ||
113 | return; | ||
114 | |||
115 | options = optstr; | ||
116 | |||
117 | if (!strncmp(options, "uart8250,io,", 12)) | ||
118 | port = simple_strtoull(options + 12, &options, 0); | ||
119 | else if (!strncmp(options, "uart,io,", 8)) | ||
120 | port = simple_strtoull(options + 8, &options, 0); | ||
121 | else | ||
122 | return; | ||
123 | |||
124 | if (options && (options[0] == ',')) | ||
125 | baud = simple_strtoull(options + 1, &options, 0); | ||
126 | else | ||
127 | baud = probe_baud(port); | ||
128 | |||
129 | if (port) | ||
130 | early_serial_init(port, baud); | ||
131 | } | ||
132 | |||
133 | void console_init(void) | ||
134 | { | ||
135 | parse_earlyprintk(); | ||
136 | |||
137 | if (!early_serial_base) | ||
138 | parse_console_uart8250(); | ||
139 | } | ||
diff --git a/arch/x86/boot/main.c b/arch/x86/boot/main.c index 140172b895bd..40358c8905be 100644 --- a/arch/x86/boot/main.c +++ b/arch/x86/boot/main.c | |||
@@ -130,6 +130,11 @@ void main(void) | |||
130 | /* First, copy the boot header into the "zeropage" */ | 130 | /* First, copy the boot header into the "zeropage" */ |
131 | copy_boot_params(); | 131 | copy_boot_params(); |
132 | 132 | ||
133 | /* Initialize the early-boot console */ | ||
134 | console_init(); | ||
135 | if (cmdline_find_option_bool("debug")) | ||
136 | puts("early console in setup code\n"); | ||
137 | |||
133 | /* End of heap check */ | 138 | /* End of heap check */ |
134 | init_heap(); | 139 | init_heap(); |
135 | 140 | ||
@@ -168,10 +173,6 @@ void main(void) | |||
168 | /* Set the video mode */ | 173 | /* Set the video mode */ |
169 | set_video(); | 174 | set_video(); |
170 | 175 | ||
171 | /* Parse command line for 'quiet' and pass it to decompressor. */ | ||
172 | if (cmdline_find_option_bool("quiet")) | ||
173 | boot_params.hdr.loadflags |= QUIET_FLAG; | ||
174 | |||
175 | /* Do the last things and invoke protected mode */ | 176 | /* Do the last things and invoke protected mode */ |
176 | go_to_protected_mode(); | 177 | go_to_protected_mode(); |
177 | } | 178 | } |
diff --git a/arch/x86/boot/printf.c b/arch/x86/boot/printf.c index 50e47cdbdddd..cdac91ca55d3 100644 --- a/arch/x86/boot/printf.c +++ b/arch/x86/boot/printf.c | |||
@@ -34,7 +34,7 @@ static int skip_atoi(const char **s) | |||
34 | #define SMALL 32 /* Must be 32 == 0x20 */ | 34 | #define SMALL 32 /* Must be 32 == 0x20 */ |
35 | #define SPECIAL 64 /* 0x */ | 35 | #define SPECIAL 64 /* 0x */ |
36 | 36 | ||
37 | #define do_div(n,base) ({ \ | 37 | #define __do_div(n, base) ({ \ |
38 | int __res; \ | 38 | int __res; \ |
39 | __res = ((unsigned long) n) % (unsigned) base; \ | 39 | __res = ((unsigned long) n) % (unsigned) base; \ |
40 | n = ((unsigned long) n) / (unsigned) base; \ | 40 | n = ((unsigned long) n) / (unsigned) base; \ |
@@ -83,7 +83,7 @@ static char *number(char *str, long num, int base, int size, int precision, | |||
83 | tmp[i++] = '0'; | 83 | tmp[i++] = '0'; |
84 | else | 84 | else |
85 | while (num != 0) | 85 | while (num != 0) |
86 | tmp[i++] = (digits[do_div(num, base)] | locase); | 86 | tmp[i++] = (digits[__do_div(num, base)] | locase); |
87 | if (i > precision) | 87 | if (i > precision) |
88 | precision = i; | 88 | precision = i; |
89 | size -= precision; | 89 | size -= precision; |
diff --git a/arch/x86/boot/string.c b/arch/x86/boot/string.c index f94b7a0c2abf..3cbc4058dd26 100644 --- a/arch/x86/boot/string.c +++ b/arch/x86/boot/string.c | |||
@@ -30,6 +30,22 @@ int strcmp(const char *str1, const char *str2) | |||
30 | return 0; | 30 | return 0; |
31 | } | 31 | } |
32 | 32 | ||
33 | int strncmp(const char *cs, const char *ct, size_t count) | ||
34 | { | ||
35 | unsigned char c1, c2; | ||
36 | |||
37 | while (count) { | ||
38 | c1 = *cs++; | ||
39 | c2 = *ct++; | ||
40 | if (c1 != c2) | ||
41 | return c1 < c2 ? -1 : 1; | ||
42 | if (!c1) | ||
43 | break; | ||
44 | count--; | ||
45 | } | ||
46 | return 0; | ||
47 | } | ||
48 | |||
33 | size_t strnlen(const char *s, size_t maxlen) | 49 | size_t strnlen(const char *s, size_t maxlen) |
34 | { | 50 | { |
35 | const char *es = s; | 51 | const char *es = s; |
@@ -48,3 +64,50 @@ unsigned int atou(const char *s) | |||
48 | i = i * 10 + (*s++ - '0'); | 64 | i = i * 10 + (*s++ - '0'); |
49 | return i; | 65 | return i; |
50 | } | 66 | } |
67 | |||
68 | /* Works only for digits and letters, but small and fast */ | ||
69 | #define TOLOWER(x) ((x) | 0x20) | ||
70 | |||
71 | static unsigned int simple_guess_base(const char *cp) | ||
72 | { | ||
73 | if (cp[0] == '0') { | ||
74 | if (TOLOWER(cp[1]) == 'x' && isxdigit(cp[2])) | ||
75 | return 16; | ||
76 | else | ||
77 | return 8; | ||
78 | } else { | ||
79 | return 10; | ||
80 | } | ||
81 | } | ||
82 | |||
83 | /** | ||
84 | * simple_strtoull - convert a string to an unsigned long long | ||
85 | * @cp: The start of the string | ||
86 | * @endp: A pointer to the end of the parsed string will be placed here | ||
87 | * @base: The number base to use | ||
88 | */ | ||
89 | |||
90 | unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) | ||
91 | { | ||
92 | unsigned long long result = 0; | ||
93 | |||
94 | if (!base) | ||
95 | base = simple_guess_base(cp); | ||
96 | |||
97 | if (base == 16 && cp[0] == '0' && TOLOWER(cp[1]) == 'x') | ||
98 | cp += 2; | ||
99 | |||
100 | while (isxdigit(*cp)) { | ||
101 | unsigned int value; | ||
102 | |||
103 | value = isdigit(*cp) ? *cp - '0' : TOLOWER(*cp) - 'a' + 10; | ||
104 | if (value >= base) | ||
105 | break; | ||
106 | result = result * base + value; | ||
107 | cp++; | ||
108 | } | ||
109 | if (endp) | ||
110 | *endp = (char *)cp; | ||
111 | |||
112 | return result; | ||
113 | } | ||
diff --git a/arch/x86/boot/tty.c b/arch/x86/boot/tty.c index 01ec69c901c7..def2451f46ae 100644 --- a/arch/x86/boot/tty.c +++ b/arch/x86/boot/tty.c | |||
@@ -10,23 +10,36 @@ | |||
10 | * ----------------------------------------------------------------------- */ | 10 | * ----------------------------------------------------------------------- */ |
11 | 11 | ||
12 | /* | 12 | /* |
13 | * Very simple screen I/O | 13 | * Very simple screen and serial I/O |
14 | * XXX: Probably should add very simple serial I/O? | ||
15 | */ | 14 | */ |
16 | 15 | ||
17 | #include "boot.h" | 16 | #include "boot.h" |
18 | 17 | ||
18 | int early_serial_base; | ||
19 | |||
20 | #define XMTRDY 0x20 | ||
21 | |||
22 | #define TXR 0 /* Transmit register (WRITE) */ | ||
23 | #define LSR 5 /* Line Status */ | ||
24 | |||
19 | /* | 25 | /* |
20 | * These functions are in .inittext so they can be used to signal | 26 | * These functions are in .inittext so they can be used to signal |
21 | * error during initialization. | 27 | * error during initialization. |
22 | */ | 28 | */ |
23 | 29 | ||
24 | void __attribute__((section(".inittext"))) putchar(int ch) | 30 | static void __attribute__((section(".inittext"))) serial_putchar(int ch) |
25 | { | 31 | { |
26 | struct biosregs ireg; | 32 | unsigned timeout = 0xffff; |
27 | 33 | ||
28 | if (ch == '\n') | 34 | while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout) |
29 | putchar('\r'); /* \n -> \r\n */ | 35 | cpu_relax(); |
36 | |||
37 | outb(ch, early_serial_base + TXR); | ||
38 | } | ||
39 | |||
40 | static void __attribute__((section(".inittext"))) bios_putchar(int ch) | ||
41 | { | ||
42 | struct biosregs ireg; | ||
30 | 43 | ||
31 | initregs(&ireg); | 44 | initregs(&ireg); |
32 | ireg.bx = 0x0007; | 45 | ireg.bx = 0x0007; |
@@ -36,6 +49,17 @@ void __attribute__((section(".inittext"))) putchar(int ch) | |||
36 | intcall(0x10, &ireg, NULL); | 49 | intcall(0x10, &ireg, NULL); |
37 | } | 50 | } |
38 | 51 | ||
52 | void __attribute__((section(".inittext"))) putchar(int ch) | ||
53 | { | ||
54 | if (ch == '\n') | ||
55 | putchar('\r'); /* \n -> \r\n */ | ||
56 | |||
57 | bios_putchar(ch); | ||
58 | |||
59 | if (early_serial_base != 0) | ||
60 | serial_putchar(ch); | ||
61 | } | ||
62 | |||
39 | void __attribute__((section(".inittext"))) puts(const char *str) | 63 | void __attribute__((section(".inittext"))) puts(const char *str) |
40 | { | 64 | { |
41 | while (*str) | 65 | while (*str) |
@@ -112,3 +136,4 @@ int getchar_timeout(void) | |||
112 | 136 | ||
113 | return 0; /* Timeout! */ | 137 | return 0; /* Timeout! */ |
114 | } | 138 | } |
139 | |||
diff --git a/arch/x86/configs/i386_defconfig b/arch/x86/configs/i386_defconfig index d28fad19654a..6f9872658dd2 100644 --- a/arch/x86/configs/i386_defconfig +++ b/arch/x86/configs/i386_defconfig | |||
@@ -1,524 +1,84 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.30-rc2 | ||
4 | # Mon May 11 16:21:55 2009 | ||
5 | # | ||
6 | # CONFIG_64BIT is not set | ||
7 | CONFIG_X86_32=y | ||
8 | # CONFIG_X86_64 is not set | ||
9 | CONFIG_X86=y | ||
10 | CONFIG_OUTPUT_FORMAT="elf32-i386" | ||
11 | CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" | ||
12 | CONFIG_GENERIC_TIME=y | ||
13 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
14 | CONFIG_CLOCKSOURCE_WATCHDOG=y | ||
15 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
16 | CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y | ||
17 | CONFIG_LOCKDEP_SUPPORT=y | ||
18 | CONFIG_STACKTRACE_SUPPORT=y | ||
19 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
20 | CONFIG_FAST_CMPXCHG_LOCAL=y | ||
21 | CONFIG_MMU=y | ||
22 | CONFIG_ZONE_DMA=y | ||
23 | CONFIG_GENERIC_ISA_DMA=y | ||
24 | CONFIG_GENERIC_IOMAP=y | ||
25 | CONFIG_GENERIC_BUG=y | ||
26 | CONFIG_GENERIC_HWEIGHT=y | ||
27 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
28 | # CONFIG_RWSEM_GENERIC_SPINLOCK is not set | ||
29 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
30 | CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y | ||
31 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
32 | # CONFIG_GENERIC_TIME_VSYSCALL is not set | ||
33 | CONFIG_ARCH_HAS_CPU_RELAX=y | ||
34 | CONFIG_ARCH_HAS_DEFAULT_IDLE=y | ||
35 | CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y | ||
36 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | ||
37 | CONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y | ||
38 | # CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set | ||
39 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
40 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
41 | # CONFIG_ZONE_DMA32 is not set | ||
42 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
43 | # CONFIG_AUDIT_ARCH is not set | ||
44 | CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y | ||
45 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
46 | CONFIG_GENERIC_HARDIRQS=y | ||
47 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
48 | CONFIG_GENERIC_IRQ_PROBE=y | ||
49 | CONFIG_GENERIC_PENDING_IRQ=y | ||
50 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
51 | CONFIG_X86_32_SMP=y | ||
52 | CONFIG_X86_HT=y | ||
53 | CONFIG_X86_TRAMPOLINE=y | ||
54 | CONFIG_X86_32_LAZY_GS=y | ||
55 | CONFIG_KTIME_SCALAR=y | ||
56 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
57 | |||
58 | # | ||
59 | # General setup | ||
60 | # | ||
61 | CONFIG_EXPERIMENTAL=y | 1 | CONFIG_EXPERIMENTAL=y |
62 | CONFIG_LOCK_KERNEL=y | ||
63 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
64 | CONFIG_LOCALVERSION="" | ||
65 | # CONFIG_LOCALVERSION_AUTO is not set | 2 | # CONFIG_LOCALVERSION_AUTO is not set |
66 | CONFIG_HAVE_KERNEL_GZIP=y | ||
67 | CONFIG_HAVE_KERNEL_BZIP2=y | ||
68 | CONFIG_HAVE_KERNEL_LZMA=y | ||
69 | CONFIG_KERNEL_GZIP=y | ||
70 | # CONFIG_KERNEL_BZIP2 is not set | ||
71 | # CONFIG_KERNEL_LZMA is not set | ||
72 | CONFIG_SWAP=y | ||
73 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
74 | CONFIG_SYSVIPC_SYSCTL=y | ||
75 | CONFIG_POSIX_MQUEUE=y | 4 | CONFIG_POSIX_MQUEUE=y |
76 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
77 | CONFIG_BSD_PROCESS_ACCT=y | 5 | CONFIG_BSD_PROCESS_ACCT=y |
78 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
79 | CONFIG_TASKSTATS=y | 6 | CONFIG_TASKSTATS=y |
80 | CONFIG_TASK_DELAY_ACCT=y | 7 | CONFIG_TASK_DELAY_ACCT=y |
81 | CONFIG_TASK_XACCT=y | 8 | CONFIG_TASK_XACCT=y |
82 | CONFIG_TASK_IO_ACCOUNTING=y | 9 | CONFIG_TASK_IO_ACCOUNTING=y |
83 | CONFIG_AUDIT=y | 10 | CONFIG_AUDIT=y |
84 | CONFIG_AUDITSYSCALL=y | ||
85 | CONFIG_AUDIT_TREE=y | ||
86 | |||
87 | # | ||
88 | # RCU Subsystem | ||
89 | # | ||
90 | # CONFIG_CLASSIC_RCU is not set | ||
91 | CONFIG_TREE_RCU=y | ||
92 | # CONFIG_PREEMPT_RCU is not set | ||
93 | # CONFIG_RCU_TRACE is not set | ||
94 | CONFIG_RCU_FANOUT=32 | ||
95 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
96 | # CONFIG_TREE_RCU_TRACE is not set | ||
97 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
98 | # CONFIG_IKCONFIG is not set | ||
99 | CONFIG_LOG_BUF_SHIFT=18 | 11 | CONFIG_LOG_BUF_SHIFT=18 |
100 | CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y | ||
101 | CONFIG_GROUP_SCHED=y | ||
102 | CONFIG_FAIR_GROUP_SCHED=y | ||
103 | # CONFIG_RT_GROUP_SCHED is not set | ||
104 | # CONFIG_USER_SCHED is not set | ||
105 | CONFIG_CGROUP_SCHED=y | ||
106 | CONFIG_CGROUPS=y | 12 | CONFIG_CGROUPS=y |
107 | # CONFIG_CGROUP_DEBUG is not set | ||
108 | CONFIG_CGROUP_NS=y | 13 | CONFIG_CGROUP_NS=y |
109 | CONFIG_CGROUP_FREEZER=y | 14 | CONFIG_CGROUP_FREEZER=y |
110 | # CONFIG_CGROUP_DEVICE is not set | ||
111 | CONFIG_CPUSETS=y | 15 | CONFIG_CPUSETS=y |
112 | CONFIG_PROC_PID_CPUSET=y | ||
113 | CONFIG_CGROUP_CPUACCT=y | 16 | CONFIG_CGROUP_CPUACCT=y |
114 | CONFIG_RESOURCE_COUNTERS=y | 17 | CONFIG_RESOURCE_COUNTERS=y |
115 | # CONFIG_CGROUP_MEM_RES_CTLR is not set | 18 | CONFIG_CGROUP_SCHED=y |
116 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
117 | CONFIG_RELAY=y | ||
118 | CONFIG_NAMESPACES=y | ||
119 | CONFIG_UTS_NS=y | 19 | CONFIG_UTS_NS=y |
120 | CONFIG_IPC_NS=y | 20 | CONFIG_IPC_NS=y |
121 | CONFIG_USER_NS=y | 21 | CONFIG_USER_NS=y |
122 | CONFIG_PID_NS=y | 22 | CONFIG_PID_NS=y |
123 | CONFIG_NET_NS=y | 23 | CONFIG_NET_NS=y |
124 | CONFIG_BLK_DEV_INITRD=y | 24 | CONFIG_BLK_DEV_INITRD=y |
125 | CONFIG_INITRAMFS_SOURCE="" | ||
126 | CONFIG_RD_GZIP=y | ||
127 | CONFIG_RD_BZIP2=y | ||
128 | CONFIG_RD_LZMA=y | ||
129 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
130 | CONFIG_SYSCTL=y | ||
131 | CONFIG_ANON_INODES=y | ||
132 | # CONFIG_EMBEDDED is not set | ||
133 | CONFIG_UID16=y | ||
134 | CONFIG_SYSCTL_SYSCALL=y | ||
135 | CONFIG_KALLSYMS=y | ||
136 | CONFIG_KALLSYMS_ALL=y | ||
137 | CONFIG_KALLSYMS_EXTRA_PASS=y | 25 | CONFIG_KALLSYMS_EXTRA_PASS=y |
138 | # CONFIG_STRIP_ASM_SYMS is not set | ||
139 | CONFIG_HOTPLUG=y | ||
140 | CONFIG_PRINTK=y | ||
141 | CONFIG_BUG=y | ||
142 | CONFIG_ELF_CORE=y | ||
143 | CONFIG_PCSPKR_PLATFORM=y | ||
144 | CONFIG_BASE_FULL=y | ||
145 | CONFIG_FUTEX=y | ||
146 | CONFIG_EPOLL=y | ||
147 | CONFIG_SIGNALFD=y | ||
148 | CONFIG_TIMERFD=y | ||
149 | CONFIG_EVENTFD=y | ||
150 | CONFIG_SHMEM=y | ||
151 | CONFIG_AIO=y | ||
152 | CONFIG_VM_EVENT_COUNTERS=y | ||
153 | CONFIG_PCI_QUIRKS=y | ||
154 | CONFIG_SLUB_DEBUG=y | ||
155 | # CONFIG_COMPAT_BRK is not set | 26 | # CONFIG_COMPAT_BRK is not set |
156 | # CONFIG_SLAB is not set | ||
157 | CONFIG_SLUB=y | ||
158 | # CONFIG_SLOB is not set | ||
159 | CONFIG_PROFILING=y | 27 | CONFIG_PROFILING=y |
160 | CONFIG_TRACEPOINTS=y | ||
161 | CONFIG_MARKERS=y | ||
162 | # CONFIG_OPROFILE is not set | ||
163 | CONFIG_HAVE_OPROFILE=y | ||
164 | CONFIG_KPROBES=y | 28 | CONFIG_KPROBES=y |
165 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | ||
166 | CONFIG_KRETPROBES=y | ||
167 | CONFIG_HAVE_IOREMAP_PROT=y | ||
168 | CONFIG_HAVE_KPROBES=y | ||
169 | CONFIG_HAVE_KRETPROBES=y | ||
170 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
171 | CONFIG_HAVE_DMA_API_DEBUG=y | ||
172 | # CONFIG_SLOW_WORK is not set | ||
173 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
174 | CONFIG_SLABINFO=y | ||
175 | CONFIG_RT_MUTEXES=y | ||
176 | CONFIG_BASE_SMALL=0 | ||
177 | CONFIG_MODULES=y | 29 | CONFIG_MODULES=y |
178 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
179 | CONFIG_MODULE_UNLOAD=y | 30 | CONFIG_MODULE_UNLOAD=y |
180 | CONFIG_MODULE_FORCE_UNLOAD=y | 31 | CONFIG_MODULE_FORCE_UNLOAD=y |
181 | # CONFIG_MODVERSIONS is not set | ||
182 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
183 | CONFIG_STOP_MACHINE=y | ||
184 | CONFIG_BLOCK=y | ||
185 | # CONFIG_LBD is not set | ||
186 | CONFIG_BLK_DEV_BSG=y | ||
187 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
188 | |||
189 | # | ||
190 | # IO Schedulers | ||
191 | # | ||
192 | CONFIG_IOSCHED_NOOP=y | ||
193 | CONFIG_IOSCHED_AS=y | ||
194 | CONFIG_IOSCHED_DEADLINE=y | ||
195 | CONFIG_IOSCHED_CFQ=y | ||
196 | # CONFIG_DEFAULT_AS is not set | ||
197 | # CONFIG_DEFAULT_DEADLINE is not set | ||
198 | CONFIG_DEFAULT_CFQ=y | ||
199 | # CONFIG_DEFAULT_NOOP is not set | ||
200 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
201 | CONFIG_FREEZER=y | ||
202 | |||
203 | # | ||
204 | # Processor type and features | ||
205 | # | ||
206 | CONFIG_TICK_ONESHOT=y | ||
207 | CONFIG_NO_HZ=y | 32 | CONFIG_NO_HZ=y |
208 | CONFIG_HIGH_RES_TIMERS=y | 33 | CONFIG_HIGH_RES_TIMERS=y |
209 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
210 | CONFIG_SMP=y | 34 | CONFIG_SMP=y |
211 | CONFIG_SPARSE_IRQ=y | 35 | CONFIG_SPARSE_IRQ=y |
212 | CONFIG_X86_MPPARSE=y | ||
213 | # CONFIG_X86_BIGSMP is not set | ||
214 | CONFIG_X86_EXTENDED_PLATFORM=y | ||
215 | # CONFIG_X86_ELAN is not set | ||
216 | # CONFIG_X86_RDC321X is not set | ||
217 | # CONFIG_X86_32_NON_STANDARD is not set | ||
218 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
219 | # CONFIG_PARAVIRT_GUEST is not set | ||
220 | # CONFIG_MEMTEST is not set | ||
221 | # CONFIG_M386 is not set | ||
222 | # CONFIG_M486 is not set | ||
223 | # CONFIG_M586 is not set | ||
224 | # CONFIG_M586TSC is not set | ||
225 | # CONFIG_M586MMX is not set | ||
226 | CONFIG_M686=y | ||
227 | # CONFIG_MPENTIUMII is not set | ||
228 | # CONFIG_MPENTIUMIII is not set | ||
229 | # CONFIG_MPENTIUMM is not set | ||
230 | # CONFIG_MPENTIUM4 is not set | ||
231 | # CONFIG_MK6 is not set | ||
232 | # CONFIG_MK7 is not set | ||
233 | # CONFIG_MK8 is not set | ||
234 | # CONFIG_MCRUSOE is not set | ||
235 | # CONFIG_MEFFICEON is not set | ||
236 | # CONFIG_MWINCHIPC6 is not set | ||
237 | # CONFIG_MWINCHIP3D is not set | ||
238 | # CONFIG_MGEODEGX1 is not set | ||
239 | # CONFIG_MGEODE_LX is not set | ||
240 | # CONFIG_MCYRIXIII is not set | ||
241 | # CONFIG_MVIAC3_2 is not set | ||
242 | # CONFIG_MVIAC7 is not set | ||
243 | # CONFIG_MPSC is not set | ||
244 | # CONFIG_MCORE2 is not set | ||
245 | # CONFIG_GENERIC_CPU is not set | ||
246 | CONFIG_X86_GENERIC=y | 36 | CONFIG_X86_GENERIC=y |
247 | CONFIG_X86_CPU=y | ||
248 | CONFIG_X86_L1_CACHE_BYTES=64 | ||
249 | CONFIG_X86_INTERNODE_CACHE_BYTES=64 | ||
250 | CONFIG_X86_CMPXCHG=y | ||
251 | CONFIG_X86_L1_CACHE_SHIFT=5 | ||
252 | CONFIG_X86_XADD=y | ||
253 | # CONFIG_X86_PPRO_FENCE is not set | ||
254 | CONFIG_X86_WP_WORKS_OK=y | ||
255 | CONFIG_X86_INVLPG=y | ||
256 | CONFIG_X86_BSWAP=y | ||
257 | CONFIG_X86_POPAD_OK=y | ||
258 | CONFIG_X86_INTEL_USERCOPY=y | ||
259 | CONFIG_X86_USE_PPRO_CHECKSUM=y | ||
260 | CONFIG_X86_TSC=y | ||
261 | CONFIG_X86_CMOV=y | ||
262 | CONFIG_X86_MINIMUM_CPU_FAMILY=4 | ||
263 | CONFIG_X86_DEBUGCTLMSR=y | ||
264 | CONFIG_CPU_SUP_INTEL=y | ||
265 | CONFIG_CPU_SUP_CYRIX_32=y | ||
266 | CONFIG_CPU_SUP_AMD=y | ||
267 | CONFIG_CPU_SUP_CENTAUR=y | ||
268 | CONFIG_CPU_SUP_TRANSMETA_32=y | ||
269 | CONFIG_CPU_SUP_UMC_32=y | ||
270 | CONFIG_X86_DS=y | ||
271 | CONFIG_X86_PTRACE_BTS=y | ||
272 | CONFIG_HPET_TIMER=y | 37 | CONFIG_HPET_TIMER=y |
273 | CONFIG_HPET_EMULATE_RTC=y | ||
274 | CONFIG_DMI=y | ||
275 | # CONFIG_IOMMU_HELPER is not set | ||
276 | # CONFIG_IOMMU_API is not set | ||
277 | CONFIG_NR_CPUS=64 | ||
278 | CONFIG_SCHED_SMT=y | 38 | CONFIG_SCHED_SMT=y |
279 | CONFIG_SCHED_MC=y | ||
280 | # CONFIG_PREEMPT_NONE is not set | ||
281 | CONFIG_PREEMPT_VOLUNTARY=y | 39 | CONFIG_PREEMPT_VOLUNTARY=y |
282 | # CONFIG_PREEMPT is not set | ||
283 | CONFIG_X86_LOCAL_APIC=y | ||
284 | CONFIG_X86_IO_APIC=y | ||
285 | CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y | 40 | CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y |
286 | CONFIG_X86_MCE=y | 41 | CONFIG_X86_MCE=y |
287 | CONFIG_X86_MCE_NONFATAL=y | ||
288 | CONFIG_X86_MCE_P4THERMAL=y | ||
289 | CONFIG_VM86=y | ||
290 | # CONFIG_TOSHIBA is not set | ||
291 | # CONFIG_I8K is not set | ||
292 | CONFIG_X86_REBOOTFIXUPS=y | 42 | CONFIG_X86_REBOOTFIXUPS=y |
293 | CONFIG_MICROCODE=y | 43 | CONFIG_MICROCODE=y |
294 | CONFIG_MICROCODE_INTEL=y | ||
295 | CONFIG_MICROCODE_AMD=y | 44 | CONFIG_MICROCODE_AMD=y |
296 | CONFIG_MICROCODE_OLD_INTERFACE=y | ||
297 | CONFIG_X86_MSR=y | 45 | CONFIG_X86_MSR=y |
298 | CONFIG_X86_CPUID=y | 46 | CONFIG_X86_CPUID=y |
299 | # CONFIG_X86_CPU_DEBUG is not set | ||
300 | # CONFIG_NOHIGHMEM is not set | ||
301 | CONFIG_HIGHMEM4G=y | ||
302 | # CONFIG_HIGHMEM64G is not set | ||
303 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
304 | CONFIG_HIGHMEM=y | ||
305 | # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set | ||
306 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
307 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
308 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
309 | CONFIG_SELECT_MEMORY_MODEL=y | ||
310 | CONFIG_FLATMEM_MANUAL=y | ||
311 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
312 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
313 | CONFIG_FLATMEM=y | ||
314 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
315 | CONFIG_SPARSEMEM_STATIC=y | ||
316 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
317 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
318 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
319 | CONFIG_ZONE_DMA_FLAG=1 | ||
320 | CONFIG_BOUNCE=y | ||
321 | CONFIG_VIRT_TO_BUS=y | ||
322 | CONFIG_UNEVICTABLE_LRU=y | ||
323 | CONFIG_HAVE_MLOCK=y | ||
324 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
325 | CONFIG_HIGHPTE=y | 47 | CONFIG_HIGHPTE=y |
326 | CONFIG_X86_CHECK_BIOS_CORRUPTION=y | 48 | CONFIG_X86_CHECK_BIOS_CORRUPTION=y |
327 | CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y | ||
328 | CONFIG_X86_RESERVE_LOW_64K=y | ||
329 | # CONFIG_MATH_EMULATION is not set | ||
330 | CONFIG_MTRR=y | ||
331 | # CONFIG_MTRR_SANITIZER is not set | 49 | # CONFIG_MTRR_SANITIZER is not set |
332 | CONFIG_X86_PAT=y | ||
333 | CONFIG_EFI=y | 50 | CONFIG_EFI=y |
334 | CONFIG_SECCOMP=y | ||
335 | # CONFIG_CC_STACKPROTECTOR is not set | ||
336 | # CONFIG_HZ_100 is not set | ||
337 | # CONFIG_HZ_250 is not set | ||
338 | # CONFIG_HZ_300 is not set | ||
339 | CONFIG_HZ_1000=y | 51 | CONFIG_HZ_1000=y |
340 | CONFIG_HZ=1000 | ||
341 | CONFIG_SCHED_HRTICK=y | ||
342 | CONFIG_KEXEC=y | 52 | CONFIG_KEXEC=y |
343 | CONFIG_CRASH_DUMP=y | 53 | CONFIG_CRASH_DUMP=y |
344 | # CONFIG_KEXEC_JUMP is not set | ||
345 | CONFIG_PHYSICAL_START=0x1000000 | ||
346 | CONFIG_RELOCATABLE=y | ||
347 | CONFIG_X86_NEED_RELOCS=y | ||
348 | CONFIG_PHYSICAL_ALIGN=0x1000000 | ||
349 | CONFIG_HOTPLUG_CPU=y | ||
350 | # CONFIG_COMPAT_VDSO is not set | 54 | # CONFIG_COMPAT_VDSO is not set |
351 | # CONFIG_CMDLINE_BOOL is not set | ||
352 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
353 | |||
354 | # | ||
355 | # Power management and ACPI options | ||
356 | # | ||
357 | CONFIG_PM=y | 55 | CONFIG_PM=y |
358 | CONFIG_PM_DEBUG=y | 56 | CONFIG_PM_DEBUG=y |
359 | # CONFIG_PM_VERBOSE is not set | ||
360 | CONFIG_CAN_PM_TRACE=y | ||
361 | CONFIG_PM_TRACE=y | ||
362 | CONFIG_PM_TRACE_RTC=y | 57 | CONFIG_PM_TRACE_RTC=y |
363 | CONFIG_PM_SLEEP_SMP=y | ||
364 | CONFIG_PM_SLEEP=y | ||
365 | CONFIG_SUSPEND=y | ||
366 | # CONFIG_PM_TEST_SUSPEND is not set | ||
367 | CONFIG_SUSPEND_FREEZER=y | ||
368 | CONFIG_HIBERNATION=y | 58 | CONFIG_HIBERNATION=y |
369 | CONFIG_PM_STD_PARTITION="" | ||
370 | CONFIG_ACPI=y | ||
371 | CONFIG_ACPI_SLEEP=y | ||
372 | CONFIG_ACPI_PROCFS=y | 59 | CONFIG_ACPI_PROCFS=y |
373 | CONFIG_ACPI_PROCFS_POWER=y | ||
374 | CONFIG_ACPI_SYSFS_POWER=y | ||
375 | CONFIG_ACPI_PROC_EVENT=y | ||
376 | CONFIG_ACPI_AC=y | ||
377 | CONFIG_ACPI_BATTERY=y | ||
378 | CONFIG_ACPI_BUTTON=y | ||
379 | CONFIG_ACPI_FAN=y | ||
380 | CONFIG_ACPI_DOCK=y | 60 | CONFIG_ACPI_DOCK=y |
381 | CONFIG_ACPI_PROCESSOR=y | ||
382 | CONFIG_ACPI_HOTPLUG_CPU=y | ||
383 | CONFIG_ACPI_THERMAL=y | ||
384 | # CONFIG_ACPI_CUSTOM_DSDT is not set | ||
385 | CONFIG_ACPI_BLACKLIST_YEAR=0 | ||
386 | # CONFIG_ACPI_DEBUG is not set | ||
387 | # CONFIG_ACPI_PCI_SLOT is not set | ||
388 | CONFIG_X86_PM_TIMER=y | ||
389 | CONFIG_ACPI_CONTAINER=y | ||
390 | # CONFIG_ACPI_SBS is not set | ||
391 | # CONFIG_APM is not set | ||
392 | |||
393 | # | ||
394 | # CPU Frequency scaling | ||
395 | # | ||
396 | CONFIG_CPU_FREQ=y | 61 | CONFIG_CPU_FREQ=y |
397 | CONFIG_CPU_FREQ_TABLE=y | ||
398 | CONFIG_CPU_FREQ_DEBUG=y | 62 | CONFIG_CPU_FREQ_DEBUG=y |
399 | # CONFIG_CPU_FREQ_STAT is not set | 63 | # CONFIG_CPU_FREQ_STAT is not set |
400 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set | ||
401 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
402 | CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y | 64 | CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y |
403 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | ||
404 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | ||
405 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 65 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
406 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | ||
407 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | ||
408 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y | 66 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y |
409 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | ||
410 | |||
411 | # | ||
412 | # CPUFreq processor drivers | ||
413 | # | ||
414 | CONFIG_X86_ACPI_CPUFREQ=y | 67 | CONFIG_X86_ACPI_CPUFREQ=y |
415 | # CONFIG_X86_POWERNOW_K6 is not set | ||
416 | # CONFIG_X86_POWERNOW_K7 is not set | ||
417 | # CONFIG_X86_POWERNOW_K8 is not set | ||
418 | # CONFIG_X86_GX_SUSPMOD is not set | ||
419 | # CONFIG_X86_SPEEDSTEP_CENTRINO is not set | ||
420 | # CONFIG_X86_SPEEDSTEP_ICH is not set | ||
421 | # CONFIG_X86_SPEEDSTEP_SMI is not set | ||
422 | # CONFIG_X86_P4_CLOCKMOD is not set | ||
423 | # CONFIG_X86_CPUFREQ_NFORCE2 is not set | ||
424 | # CONFIG_X86_LONGRUN is not set | ||
425 | # CONFIG_X86_LONGHAUL is not set | ||
426 | # CONFIG_X86_E_POWERSAVER is not set | ||
427 | |||
428 | # | ||
429 | # shared options | ||
430 | # | ||
431 | # CONFIG_X86_SPEEDSTEP_LIB is not set | ||
432 | CONFIG_CPU_IDLE=y | ||
433 | CONFIG_CPU_IDLE_GOV_LADDER=y | ||
434 | CONFIG_CPU_IDLE_GOV_MENU=y | ||
435 | |||
436 | # | ||
437 | # Bus options (PCI etc.) | ||
438 | # | ||
439 | CONFIG_PCI=y | ||
440 | # CONFIG_PCI_GOBIOS is not set | ||
441 | # CONFIG_PCI_GOMMCONFIG is not set | ||
442 | # CONFIG_PCI_GODIRECT is not set | ||
443 | # CONFIG_PCI_GOOLPC is not set | ||
444 | CONFIG_PCI_GOANY=y | ||
445 | CONFIG_PCI_BIOS=y | ||
446 | CONFIG_PCI_DIRECT=y | ||
447 | CONFIG_PCI_MMCONFIG=y | ||
448 | CONFIG_PCI_DOMAINS=y | ||
449 | # CONFIG_DMAR is not set | ||
450 | CONFIG_PCIEPORTBUS=y | 68 | CONFIG_PCIEPORTBUS=y |
451 | # CONFIG_HOTPLUG_PCI_PCIE is not set | ||
452 | CONFIG_PCIEAER=y | ||
453 | # CONFIG_PCIEASPM is not set | ||
454 | CONFIG_ARCH_SUPPORTS_MSI=y | ||
455 | CONFIG_PCI_MSI=y | 69 | CONFIG_PCI_MSI=y |
456 | # CONFIG_PCI_LEGACY is not set | ||
457 | # CONFIG_PCI_DEBUG is not set | ||
458 | # CONFIG_PCI_STUB is not set | ||
459 | CONFIG_HT_IRQ=y | ||
460 | # CONFIG_PCI_IOV is not set | ||
461 | CONFIG_ISA_DMA_API=y | ||
462 | # CONFIG_ISA is not set | ||
463 | # CONFIG_MCA is not set | ||
464 | # CONFIG_SCx200 is not set | ||
465 | # CONFIG_OLPC is not set | ||
466 | CONFIG_K8_NB=y | ||
467 | CONFIG_PCCARD=y | 70 | CONFIG_PCCARD=y |
468 | # CONFIG_PCMCIA_DEBUG is not set | ||
469 | CONFIG_PCMCIA=y | ||
470 | CONFIG_PCMCIA_LOAD_CIS=y | ||
471 | CONFIG_PCMCIA_IOCTL=y | ||
472 | CONFIG_CARDBUS=y | ||
473 | |||
474 | # | ||
475 | # PC-card bridges | ||
476 | # | ||
477 | CONFIG_YENTA=y | 71 | CONFIG_YENTA=y |
478 | CONFIG_YENTA_O2=y | ||
479 | CONFIG_YENTA_RICOH=y | ||
480 | CONFIG_YENTA_TI=y | ||
481 | CONFIG_YENTA_ENE_TUNE=y | ||
482 | CONFIG_YENTA_TOSHIBA=y | ||
483 | # CONFIG_PD6729 is not set | ||
484 | # CONFIG_I82092 is not set | ||
485 | CONFIG_PCCARD_NONSTATIC=y | ||
486 | CONFIG_HOTPLUG_PCI=y | 72 | CONFIG_HOTPLUG_PCI=y |
487 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
488 | # CONFIG_HOTPLUG_PCI_IBM is not set | ||
489 | # CONFIG_HOTPLUG_PCI_ACPI is not set | ||
490 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
491 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
492 | |||
493 | # | ||
494 | # Executable file formats / Emulations | ||
495 | # | ||
496 | CONFIG_BINFMT_ELF=y | ||
497 | CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y | 73 | CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y |
498 | CONFIG_HAVE_AOUT=y | ||
499 | # CONFIG_BINFMT_AOUT is not set | ||
500 | CONFIG_BINFMT_MISC=y | 74 | CONFIG_BINFMT_MISC=y |
501 | CONFIG_HAVE_ATOMIC_IOMAP=y | ||
502 | CONFIG_NET=y | 75 | CONFIG_NET=y |
503 | |||
504 | # | ||
505 | # Networking options | ||
506 | # | ||
507 | CONFIG_PACKET=y | 76 | CONFIG_PACKET=y |
508 | CONFIG_PACKET_MMAP=y | ||
509 | CONFIG_UNIX=y | 77 | CONFIG_UNIX=y |
510 | CONFIG_XFRM=y | ||
511 | CONFIG_XFRM_USER=y | 78 | CONFIG_XFRM_USER=y |
512 | # CONFIG_XFRM_SUB_POLICY is not set | ||
513 | # CONFIG_XFRM_MIGRATE is not set | ||
514 | # CONFIG_XFRM_STATISTICS is not set | ||
515 | # CONFIG_NET_KEY is not set | ||
516 | CONFIG_INET=y | 79 | CONFIG_INET=y |
517 | CONFIG_IP_MULTICAST=y | 80 | CONFIG_IP_MULTICAST=y |
518 | CONFIG_IP_ADVANCED_ROUTER=y | 81 | CONFIG_IP_ADVANCED_ROUTER=y |
519 | CONFIG_ASK_IP_FIB_HASH=y | ||
520 | # CONFIG_IP_FIB_TRIE is not set | ||
521 | CONFIG_IP_FIB_HASH=y | ||
522 | CONFIG_IP_MULTIPLE_TABLES=y | 82 | CONFIG_IP_MULTIPLE_TABLES=y |
523 | CONFIG_IP_ROUTE_MULTIPATH=y | 83 | CONFIG_IP_ROUTE_MULTIPATH=y |
524 | CONFIG_IP_ROUTE_VERBOSE=y | 84 | CONFIG_IP_ROUTE_VERBOSE=y |
@@ -526,118 +86,46 @@ CONFIG_IP_PNP=y | |||
526 | CONFIG_IP_PNP_DHCP=y | 86 | CONFIG_IP_PNP_DHCP=y |
527 | CONFIG_IP_PNP_BOOTP=y | 87 | CONFIG_IP_PNP_BOOTP=y |
528 | CONFIG_IP_PNP_RARP=y | 88 | CONFIG_IP_PNP_RARP=y |
529 | # CONFIG_NET_IPIP is not set | ||
530 | # CONFIG_NET_IPGRE is not set | ||
531 | CONFIG_IP_MROUTE=y | 89 | CONFIG_IP_MROUTE=y |
532 | CONFIG_IP_PIMSM_V1=y | 90 | CONFIG_IP_PIMSM_V1=y |
533 | CONFIG_IP_PIMSM_V2=y | 91 | CONFIG_IP_PIMSM_V2=y |
534 | # CONFIG_ARPD is not set | ||
535 | CONFIG_SYN_COOKIES=y | 92 | CONFIG_SYN_COOKIES=y |
536 | # CONFIG_INET_AH is not set | ||
537 | # CONFIG_INET_ESP is not set | ||
538 | # CONFIG_INET_IPCOMP is not set | ||
539 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
540 | CONFIG_INET_TUNNEL=y | ||
541 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | 93 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
542 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | 94 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
543 | # CONFIG_INET_XFRM_MODE_BEET is not set | 95 | # CONFIG_INET_XFRM_MODE_BEET is not set |
544 | CONFIG_INET_LRO=y | ||
545 | # CONFIG_INET_DIAG is not set | 96 | # CONFIG_INET_DIAG is not set |
546 | CONFIG_TCP_CONG_ADVANCED=y | 97 | CONFIG_TCP_CONG_ADVANCED=y |
547 | # CONFIG_TCP_CONG_BIC is not set | 98 | # CONFIG_TCP_CONG_BIC is not set |
548 | CONFIG_TCP_CONG_CUBIC=y | ||
549 | # CONFIG_TCP_CONG_WESTWOOD is not set | 99 | # CONFIG_TCP_CONG_WESTWOOD is not set |
550 | # CONFIG_TCP_CONG_HTCP is not set | 100 | # CONFIG_TCP_CONG_HTCP is not set |
551 | # CONFIG_TCP_CONG_HSTCP is not set | ||
552 | # CONFIG_TCP_CONG_HYBLA is not set | ||
553 | # CONFIG_TCP_CONG_VEGAS is not set | ||
554 | # CONFIG_TCP_CONG_SCALABLE is not set | ||
555 | # CONFIG_TCP_CONG_LP is not set | ||
556 | # CONFIG_TCP_CONG_VENO is not set | ||
557 | # CONFIG_TCP_CONG_YEAH is not set | ||
558 | # CONFIG_TCP_CONG_ILLINOIS is not set | ||
559 | # CONFIG_DEFAULT_BIC is not set | ||
560 | CONFIG_DEFAULT_CUBIC=y | ||
561 | # CONFIG_DEFAULT_HTCP is not set | ||
562 | # CONFIG_DEFAULT_VEGAS is not set | ||
563 | # CONFIG_DEFAULT_WESTWOOD is not set | ||
564 | # CONFIG_DEFAULT_RENO is not set | ||
565 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
566 | CONFIG_TCP_MD5SIG=y | 101 | CONFIG_TCP_MD5SIG=y |
567 | CONFIG_IPV6=y | 102 | CONFIG_IPV6=y |
568 | # CONFIG_IPV6_PRIVACY is not set | ||
569 | # CONFIG_IPV6_ROUTER_PREF is not set | ||
570 | # CONFIG_IPV6_OPTIMISTIC_DAD is not set | ||
571 | CONFIG_INET6_AH=y | 103 | CONFIG_INET6_AH=y |
572 | CONFIG_INET6_ESP=y | 104 | CONFIG_INET6_ESP=y |
573 | # CONFIG_INET6_IPCOMP is not set | ||
574 | # CONFIG_IPV6_MIP6 is not set | ||
575 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
576 | # CONFIG_INET6_TUNNEL is not set | ||
577 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y | ||
578 | CONFIG_INET6_XFRM_MODE_TUNNEL=y | ||
579 | CONFIG_INET6_XFRM_MODE_BEET=y | ||
580 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | ||
581 | CONFIG_IPV6_SIT=y | ||
582 | CONFIG_IPV6_NDISC_NODETYPE=y | ||
583 | # CONFIG_IPV6_TUNNEL is not set | ||
584 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | ||
585 | # CONFIG_IPV6_MROUTE is not set | ||
586 | CONFIG_NETLABEL=y | 105 | CONFIG_NETLABEL=y |
587 | CONFIG_NETWORK_SECMARK=y | ||
588 | CONFIG_NETFILTER=y | 106 | CONFIG_NETFILTER=y |
589 | # CONFIG_NETFILTER_DEBUG is not set | ||
590 | # CONFIG_NETFILTER_ADVANCED is not set | 107 | # CONFIG_NETFILTER_ADVANCED is not set |
591 | |||
592 | # | ||
593 | # Core Netfilter Configuration | ||
594 | # | ||
595 | CONFIG_NETFILTER_NETLINK=y | ||
596 | CONFIG_NETFILTER_NETLINK_LOG=y | ||
597 | CONFIG_NF_CONNTRACK=y | 108 | CONFIG_NF_CONNTRACK=y |
598 | CONFIG_NF_CONNTRACK_SECMARK=y | ||
599 | CONFIG_NF_CONNTRACK_FTP=y | 109 | CONFIG_NF_CONNTRACK_FTP=y |
600 | CONFIG_NF_CONNTRACK_IRC=y | 110 | CONFIG_NF_CONNTRACK_IRC=y |
601 | CONFIG_NF_CONNTRACK_SIP=y | 111 | CONFIG_NF_CONNTRACK_SIP=y |
602 | CONFIG_NF_CT_NETLINK=y | 112 | CONFIG_NF_CT_NETLINK=y |
603 | CONFIG_NETFILTER_XTABLES=y | ||
604 | CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y | 113 | CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y |
605 | CONFIG_NETFILTER_XT_TARGET_MARK=y | ||
606 | CONFIG_NETFILTER_XT_TARGET_NFLOG=y | 114 | CONFIG_NETFILTER_XT_TARGET_NFLOG=y |
607 | CONFIG_NETFILTER_XT_TARGET_SECMARK=y | 115 | CONFIG_NETFILTER_XT_TARGET_SECMARK=y |
608 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=y | 116 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=y |
609 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y | 117 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y |
610 | CONFIG_NETFILTER_XT_MATCH_MARK=y | ||
611 | CONFIG_NETFILTER_XT_MATCH_POLICY=y | 118 | CONFIG_NETFILTER_XT_MATCH_POLICY=y |
612 | CONFIG_NETFILTER_XT_MATCH_STATE=y | 119 | CONFIG_NETFILTER_XT_MATCH_STATE=y |
613 | # CONFIG_IP_VS is not set | ||
614 | |||
615 | # | ||
616 | # IP: Netfilter Configuration | ||
617 | # | ||
618 | CONFIG_NF_DEFRAG_IPV4=y | ||
619 | CONFIG_NF_CONNTRACK_IPV4=y | 120 | CONFIG_NF_CONNTRACK_IPV4=y |
620 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | ||
621 | CONFIG_IP_NF_IPTABLES=y | 121 | CONFIG_IP_NF_IPTABLES=y |
622 | CONFIG_IP_NF_FILTER=y | 122 | CONFIG_IP_NF_FILTER=y |
623 | CONFIG_IP_NF_TARGET_REJECT=y | 123 | CONFIG_IP_NF_TARGET_REJECT=y |
624 | CONFIG_IP_NF_TARGET_LOG=y | 124 | CONFIG_IP_NF_TARGET_LOG=y |
625 | CONFIG_IP_NF_TARGET_ULOG=y | 125 | CONFIG_IP_NF_TARGET_ULOG=y |
626 | CONFIG_NF_NAT=y | 126 | CONFIG_NF_NAT=y |
627 | CONFIG_NF_NAT_NEEDED=y | ||
628 | CONFIG_IP_NF_TARGET_MASQUERADE=y | 127 | CONFIG_IP_NF_TARGET_MASQUERADE=y |
629 | CONFIG_NF_NAT_FTP=y | ||
630 | CONFIG_NF_NAT_IRC=y | ||
631 | # CONFIG_NF_NAT_TFTP is not set | ||
632 | # CONFIG_NF_NAT_AMANDA is not set | ||
633 | # CONFIG_NF_NAT_PPTP is not set | ||
634 | # CONFIG_NF_NAT_H323 is not set | ||
635 | CONFIG_NF_NAT_SIP=y | ||
636 | CONFIG_IP_NF_MANGLE=y | 128 | CONFIG_IP_NF_MANGLE=y |
637 | |||
638 | # | ||
639 | # IPv6: Netfilter Configuration | ||
640 | # | ||
641 | CONFIG_NF_CONNTRACK_IPV6=y | 129 | CONFIG_NF_CONNTRACK_IPV6=y |
642 | CONFIG_IP6_NF_IPTABLES=y | 130 | CONFIG_IP6_NF_IPTABLES=y |
643 | CONFIG_IP6_NF_MATCH_IPV6HEADER=y | 131 | CONFIG_IP6_NF_MATCH_IPV6HEADER=y |
@@ -645,1228 +133,115 @@ CONFIG_IP6_NF_TARGET_LOG=y | |||
645 | CONFIG_IP6_NF_FILTER=y | 133 | CONFIG_IP6_NF_FILTER=y |
646 | CONFIG_IP6_NF_TARGET_REJECT=y | 134 | CONFIG_IP6_NF_TARGET_REJECT=y |
647 | CONFIG_IP6_NF_MANGLE=y | 135 | CONFIG_IP6_NF_MANGLE=y |
648 | # CONFIG_IP_DCCP is not set | ||
649 | # CONFIG_IP_SCTP is not set | ||
650 | # CONFIG_TIPC is not set | ||
651 | # CONFIG_ATM is not set | ||
652 | # CONFIG_BRIDGE is not set | ||
653 | # CONFIG_NET_DSA is not set | ||
654 | # CONFIG_VLAN_8021Q is not set | ||
655 | # CONFIG_DECNET is not set | ||
656 | CONFIG_LLC=y | ||
657 | # CONFIG_LLC2 is not set | ||
658 | # CONFIG_IPX is not set | ||
659 | # CONFIG_ATALK is not set | ||
660 | # CONFIG_X25 is not set | ||
661 | # CONFIG_LAPB is not set | ||
662 | # CONFIG_ECONET is not set | ||
663 | # CONFIG_WAN_ROUTER is not set | ||
664 | # CONFIG_PHONET is not set | ||
665 | CONFIG_NET_SCHED=y | 136 | CONFIG_NET_SCHED=y |
666 | |||
667 | # | ||
668 | # Queueing/Scheduling | ||
669 | # | ||
670 | # CONFIG_NET_SCH_CBQ is not set | ||
671 | # CONFIG_NET_SCH_HTB is not set | ||
672 | # CONFIG_NET_SCH_HFSC is not set | ||
673 | # CONFIG_NET_SCH_PRIO is not set | ||
674 | # CONFIG_NET_SCH_MULTIQ is not set | ||
675 | # CONFIG_NET_SCH_RED is not set | ||
676 | # CONFIG_NET_SCH_SFQ is not set | ||
677 | # CONFIG_NET_SCH_TEQL is not set | ||
678 | # CONFIG_NET_SCH_TBF is not set | ||
679 | # CONFIG_NET_SCH_GRED is not set | ||
680 | # CONFIG_NET_SCH_DSMARK is not set | ||
681 | # CONFIG_NET_SCH_NETEM is not set | ||
682 | # CONFIG_NET_SCH_DRR is not set | ||
683 | # CONFIG_NET_SCH_INGRESS is not set | ||
684 | |||
685 | # | ||
686 | # Classification | ||
687 | # | ||
688 | CONFIG_NET_CLS=y | ||
689 | # CONFIG_NET_CLS_BASIC is not set | ||
690 | # CONFIG_NET_CLS_TCINDEX is not set | ||
691 | # CONFIG_NET_CLS_ROUTE4 is not set | ||
692 | # CONFIG_NET_CLS_FW is not set | ||
693 | # CONFIG_NET_CLS_U32 is not set | ||
694 | # CONFIG_NET_CLS_RSVP is not set | ||
695 | # CONFIG_NET_CLS_RSVP6 is not set | ||
696 | # CONFIG_NET_CLS_FLOW is not set | ||
697 | # CONFIG_NET_CLS_CGROUP is not set | ||
698 | CONFIG_NET_EMATCH=y | 137 | CONFIG_NET_EMATCH=y |
699 | CONFIG_NET_EMATCH_STACK=32 | ||
700 | # CONFIG_NET_EMATCH_CMP is not set | ||
701 | # CONFIG_NET_EMATCH_NBYTE is not set | ||
702 | # CONFIG_NET_EMATCH_U32 is not set | ||
703 | # CONFIG_NET_EMATCH_META is not set | ||
704 | # CONFIG_NET_EMATCH_TEXT is not set | ||
705 | CONFIG_NET_CLS_ACT=y | 138 | CONFIG_NET_CLS_ACT=y |
706 | # CONFIG_NET_ACT_POLICE is not set | ||
707 | # CONFIG_NET_ACT_GACT is not set | ||
708 | # CONFIG_NET_ACT_MIRRED is not set | ||
709 | # CONFIG_NET_ACT_IPT is not set | ||
710 | # CONFIG_NET_ACT_NAT is not set | ||
711 | # CONFIG_NET_ACT_PEDIT is not set | ||
712 | # CONFIG_NET_ACT_SIMP is not set | ||
713 | # CONFIG_NET_ACT_SKBEDIT is not set | ||
714 | CONFIG_NET_SCH_FIFO=y | ||
715 | # CONFIG_DCB is not set | ||
716 | |||
717 | # | ||
718 | # Network testing | ||
719 | # | ||
720 | # CONFIG_NET_PKTGEN is not set | ||
721 | # CONFIG_NET_TCPPROBE is not set | ||
722 | # CONFIG_NET_DROP_MONITOR is not set | ||
723 | CONFIG_HAMRADIO=y | 139 | CONFIG_HAMRADIO=y |
724 | |||
725 | # | ||
726 | # Packet Radio protocols | ||
727 | # | ||
728 | # CONFIG_AX25 is not set | ||
729 | # CONFIG_CAN is not set | ||
730 | # CONFIG_IRDA is not set | ||
731 | # CONFIG_BT is not set | ||
732 | # CONFIG_AF_RXRPC is not set | ||
733 | CONFIG_FIB_RULES=y | ||
734 | CONFIG_WIRELESS=y | ||
735 | CONFIG_CFG80211=y | 140 | CONFIG_CFG80211=y |
736 | # CONFIG_CFG80211_REG_DEBUG is not set | ||
737 | CONFIG_WIRELESS_OLD_REGULATORY=y | ||
738 | CONFIG_WIRELESS_EXT=y | ||
739 | CONFIG_WIRELESS_EXT_SYSFS=y | ||
740 | # CONFIG_LIB80211 is not set | ||
741 | CONFIG_MAC80211=y | 141 | CONFIG_MAC80211=y |
742 | |||
743 | # | ||
744 | # Rate control algorithm selection | ||
745 | # | ||
746 | CONFIG_MAC80211_RC_MINSTREL=y | ||
747 | # CONFIG_MAC80211_RC_DEFAULT_PID is not set | ||
748 | CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y | ||
749 | CONFIG_MAC80211_RC_DEFAULT="minstrel" | ||
750 | # CONFIG_MAC80211_MESH is not set | ||
751 | CONFIG_MAC80211_LEDS=y | 142 | CONFIG_MAC80211_LEDS=y |
752 | # CONFIG_MAC80211_DEBUGFS is not set | ||
753 | # CONFIG_MAC80211_DEBUG_MENU is not set | ||
754 | # CONFIG_WIMAX is not set | ||
755 | CONFIG_RFKILL=y | 143 | CONFIG_RFKILL=y |
756 | # CONFIG_RFKILL_INPUT is not set | ||
757 | CONFIG_RFKILL_LEDS=y | ||
758 | # CONFIG_NET_9P is not set | ||
759 | |||
760 | # | ||
761 | # Device Drivers | ||
762 | # | ||
763 | |||
764 | # | ||
765 | # Generic Driver Options | ||
766 | # | ||
767 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 144 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
768 | CONFIG_STANDALONE=y | ||
769 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
770 | CONFIG_FW_LOADER=y | ||
771 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
772 | CONFIG_EXTRA_FIRMWARE="" | ||
773 | # CONFIG_DEBUG_DRIVER is not set | ||
774 | CONFIG_DEBUG_DEVRES=y | 145 | CONFIG_DEBUG_DEVRES=y |
775 | # CONFIG_SYS_HYPERVISOR is not set | ||
776 | CONFIG_CONNECTOR=y | 146 | CONFIG_CONNECTOR=y |
777 | CONFIG_PROC_EVENTS=y | ||
778 | # CONFIG_MTD is not set | ||
779 | # CONFIG_PARPORT is not set | ||
780 | CONFIG_PNP=y | ||
781 | CONFIG_PNP_DEBUG_MESSAGES=y | ||
782 | |||
783 | # | ||
784 | # Protocols | ||
785 | # | ||
786 | CONFIG_PNPACPI=y | ||
787 | CONFIG_BLK_DEV=y | ||
788 | # CONFIG_BLK_DEV_FD is not set | ||
789 | # CONFIG_BLK_CPQ_DA is not set | ||
790 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
791 | # CONFIG_BLK_DEV_DAC960 is not set | ||
792 | # CONFIG_BLK_DEV_UMEM is not set | ||
793 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
794 | CONFIG_BLK_DEV_LOOP=y | 147 | CONFIG_BLK_DEV_LOOP=y |
795 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
796 | # CONFIG_BLK_DEV_NBD is not set | ||
797 | # CONFIG_BLK_DEV_SX8 is not set | ||
798 | # CONFIG_BLK_DEV_UB is not set | ||
799 | CONFIG_BLK_DEV_RAM=y | 148 | CONFIG_BLK_DEV_RAM=y |
800 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
801 | CONFIG_BLK_DEV_RAM_SIZE=16384 | 149 | CONFIG_BLK_DEV_RAM_SIZE=16384 |
802 | # CONFIG_BLK_DEV_XIP is not set | ||
803 | # CONFIG_CDROM_PKTCDVD is not set | ||
804 | # CONFIG_ATA_OVER_ETH is not set | ||
805 | # CONFIG_BLK_DEV_HD is not set | ||
806 | CONFIG_MISC_DEVICES=y | ||
807 | # CONFIG_IBM_ASM is not set | ||
808 | # CONFIG_PHANTOM is not set | ||
809 | # CONFIG_SGI_IOC4 is not set | ||
810 | # CONFIG_TIFM_CORE is not set | ||
811 | # CONFIG_ICS932S401 is not set | ||
812 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
813 | # CONFIG_HP_ILO is not set | ||
814 | # CONFIG_ISL29003 is not set | ||
815 | # CONFIG_C2PORT is not set | ||
816 | |||
817 | # | ||
818 | # EEPROM support | ||
819 | # | ||
820 | # CONFIG_EEPROM_AT24 is not set | ||
821 | # CONFIG_EEPROM_LEGACY is not set | ||
822 | # CONFIG_EEPROM_93CX6 is not set | ||
823 | CONFIG_HAVE_IDE=y | ||
824 | # CONFIG_IDE is not set | ||
825 | |||
826 | # | ||
827 | # SCSI device support | ||
828 | # | ||
829 | # CONFIG_RAID_ATTRS is not set | ||
830 | CONFIG_SCSI=y | ||
831 | CONFIG_SCSI_DMA=y | ||
832 | # CONFIG_SCSI_TGT is not set | ||
833 | # CONFIG_SCSI_NETLINK is not set | ||
834 | CONFIG_SCSI_PROC_FS=y | ||
835 | |||
836 | # | ||
837 | # SCSI support type (disk, tape, CD-ROM) | ||
838 | # | ||
839 | CONFIG_BLK_DEV_SD=y | 150 | CONFIG_BLK_DEV_SD=y |
840 | # CONFIG_CHR_DEV_ST is not set | ||
841 | # CONFIG_CHR_DEV_OSST is not set | ||
842 | CONFIG_BLK_DEV_SR=y | 151 | CONFIG_BLK_DEV_SR=y |
843 | CONFIG_BLK_DEV_SR_VENDOR=y | 152 | CONFIG_BLK_DEV_SR_VENDOR=y |
844 | CONFIG_CHR_DEV_SG=y | 153 | CONFIG_CHR_DEV_SG=y |
845 | # CONFIG_CHR_DEV_SCH is not set | ||
846 | |||
847 | # | ||
848 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
849 | # | ||
850 | # CONFIG_SCSI_MULTI_LUN is not set | ||
851 | CONFIG_SCSI_CONSTANTS=y | 154 | CONFIG_SCSI_CONSTANTS=y |
852 | # CONFIG_SCSI_LOGGING is not set | ||
853 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
854 | CONFIG_SCSI_WAIT_SCAN=m | ||
855 | |||
856 | # | ||
857 | # SCSI Transports | ||
858 | # | ||
859 | CONFIG_SCSI_SPI_ATTRS=y | 155 | CONFIG_SCSI_SPI_ATTRS=y |
860 | # CONFIG_SCSI_FC_ATTRS is not set | ||
861 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
862 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
863 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
864 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
865 | # CONFIG_SCSI_LOWLEVEL is not set | 156 | # CONFIG_SCSI_LOWLEVEL is not set |
866 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set | ||
867 | # CONFIG_SCSI_DH is not set | ||
868 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
869 | CONFIG_ATA=y | 157 | CONFIG_ATA=y |
870 | # CONFIG_ATA_NONSTANDARD is not set | ||
871 | CONFIG_ATA_ACPI=y | ||
872 | CONFIG_SATA_PMP=y | ||
873 | CONFIG_SATA_AHCI=y | 158 | CONFIG_SATA_AHCI=y |
874 | # CONFIG_SATA_SIL24 is not set | ||
875 | CONFIG_ATA_SFF=y | ||
876 | # CONFIG_SATA_SVW is not set | ||
877 | CONFIG_ATA_PIIX=y | 159 | CONFIG_ATA_PIIX=y |
878 | # CONFIG_SATA_MV is not set | ||
879 | # CONFIG_SATA_NV is not set | ||
880 | # CONFIG_PDC_ADMA is not set | ||
881 | # CONFIG_SATA_QSTOR is not set | ||
882 | # CONFIG_SATA_PROMISE is not set | ||
883 | # CONFIG_SATA_SX4 is not set | ||
884 | # CONFIG_SATA_SIL is not set | ||
885 | # CONFIG_SATA_SIS is not set | ||
886 | # CONFIG_SATA_ULI is not set | ||
887 | # CONFIG_SATA_VIA is not set | ||
888 | # CONFIG_SATA_VITESSE is not set | ||
889 | # CONFIG_SATA_INIC162X is not set | ||
890 | # CONFIG_PATA_ACPI is not set | ||
891 | # CONFIG_PATA_ALI is not set | ||
892 | CONFIG_PATA_AMD=y | 160 | CONFIG_PATA_AMD=y |
893 | # CONFIG_PATA_ARTOP is not set | ||
894 | # CONFIG_PATA_ATIIXP is not set | ||
895 | # CONFIG_PATA_CMD640_PCI is not set | ||
896 | # CONFIG_PATA_CMD64X is not set | ||
897 | # CONFIG_PATA_CS5520 is not set | ||
898 | # CONFIG_PATA_CS5530 is not set | ||
899 | # CONFIG_PATA_CS5535 is not set | ||
900 | # CONFIG_PATA_CS5536 is not set | ||
901 | # CONFIG_PATA_CYPRESS is not set | ||
902 | # CONFIG_PATA_EFAR is not set | ||
903 | CONFIG_ATA_GENERIC=y | ||
904 | # CONFIG_PATA_HPT366 is not set | ||
905 | # CONFIG_PATA_HPT37X is not set | ||
906 | # CONFIG_PATA_HPT3X2N is not set | ||
907 | # CONFIG_PATA_HPT3X3 is not set | ||
908 | # CONFIG_PATA_IT821X is not set | ||
909 | # CONFIG_PATA_IT8213 is not set | ||
910 | # CONFIG_PATA_JMICRON is not set | ||
911 | # CONFIG_PATA_TRIFLEX is not set | ||
912 | # CONFIG_PATA_MARVELL is not set | ||
913 | CONFIG_PATA_MPIIX=y | ||
914 | CONFIG_PATA_OLDPIIX=y | 161 | CONFIG_PATA_OLDPIIX=y |
915 | # CONFIG_PATA_NETCELL is not set | ||
916 | # CONFIG_PATA_NINJA32 is not set | ||
917 | # CONFIG_PATA_NS87410 is not set | ||
918 | # CONFIG_PATA_NS87415 is not set | ||
919 | # CONFIG_PATA_OPTI is not set | ||
920 | # CONFIG_PATA_OPTIDMA is not set | ||
921 | # CONFIG_PATA_PCMCIA is not set | ||
922 | # CONFIG_PATA_PDC_OLD is not set | ||
923 | # CONFIG_PATA_RADISYS is not set | ||
924 | # CONFIG_PATA_RZ1000 is not set | ||
925 | # CONFIG_PATA_SC1200 is not set | ||
926 | # CONFIG_PATA_SERVERWORKS is not set | ||
927 | # CONFIG_PATA_PDC2027X is not set | ||
928 | # CONFIG_PATA_SIL680 is not set | ||
929 | # CONFIG_PATA_SIS is not set | ||
930 | # CONFIG_PATA_VIA is not set | ||
931 | # CONFIG_PATA_WINBOND is not set | ||
932 | CONFIG_PATA_SCH=y | 162 | CONFIG_PATA_SCH=y |
163 | CONFIG_PATA_MPIIX=y | ||
164 | CONFIG_ATA_GENERIC=y | ||
933 | CONFIG_MD=y | 165 | CONFIG_MD=y |
934 | CONFIG_BLK_DEV_MD=y | 166 | CONFIG_BLK_DEV_MD=y |
935 | CONFIG_MD_AUTODETECT=y | ||
936 | # CONFIG_MD_LINEAR is not set | ||
937 | # CONFIG_MD_RAID0 is not set | ||
938 | # CONFIG_MD_RAID1 is not set | ||
939 | # CONFIG_MD_RAID10 is not set | ||
940 | # CONFIG_MD_RAID456 is not set | ||
941 | # CONFIG_MD_MULTIPATH is not set | ||
942 | # CONFIG_MD_FAULTY is not set | ||
943 | CONFIG_BLK_DEV_DM=y | 167 | CONFIG_BLK_DEV_DM=y |
944 | # CONFIG_DM_DEBUG is not set | ||
945 | # CONFIG_DM_CRYPT is not set | ||
946 | # CONFIG_DM_SNAPSHOT is not set | ||
947 | CONFIG_DM_MIRROR=y | 168 | CONFIG_DM_MIRROR=y |
948 | CONFIG_DM_ZERO=y | 169 | CONFIG_DM_ZERO=y |
949 | # CONFIG_DM_MULTIPATH is not set | ||
950 | # CONFIG_DM_DELAY is not set | ||
951 | # CONFIG_DM_UEVENT is not set | ||
952 | # CONFIG_FUSION is not set | ||
953 | |||
954 | # | ||
955 | # IEEE 1394 (FireWire) support | ||
956 | # | ||
957 | |||
958 | # | ||
959 | # Enable only one of the two stacks, unless you know what you are doing | ||
960 | # | ||
961 | # CONFIG_FIREWIRE is not set | ||
962 | # CONFIG_IEEE1394 is not set | ||
963 | # CONFIG_I2O is not set | ||
964 | CONFIG_MACINTOSH_DRIVERS=y | 170 | CONFIG_MACINTOSH_DRIVERS=y |
965 | CONFIG_MAC_EMUMOUSEBTN=y | 171 | CONFIG_MAC_EMUMOUSEBTN=y |
966 | CONFIG_NETDEVICES=y | 172 | CONFIG_NETDEVICES=y |
967 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
968 | # CONFIG_IFB is not set | ||
969 | # CONFIG_DUMMY is not set | ||
970 | # CONFIG_BONDING is not set | ||
971 | # CONFIG_MACVLAN is not set | ||
972 | # CONFIG_EQUALIZER is not set | ||
973 | # CONFIG_TUN is not set | ||
974 | # CONFIG_VETH is not set | ||
975 | # CONFIG_NET_SB1000 is not set | ||
976 | # CONFIG_ARCNET is not set | ||
977 | CONFIG_PHYLIB=y | ||
978 | |||
979 | # | ||
980 | # MII PHY device drivers | ||
981 | # | ||
982 | # CONFIG_MARVELL_PHY is not set | ||
983 | # CONFIG_DAVICOM_PHY is not set | ||
984 | # CONFIG_QSEMI_PHY is not set | ||
985 | # CONFIG_LXT_PHY is not set | ||
986 | # CONFIG_CICADA_PHY is not set | ||
987 | # CONFIG_VITESSE_PHY is not set | ||
988 | # CONFIG_SMSC_PHY is not set | ||
989 | # CONFIG_BROADCOM_PHY is not set | ||
990 | # CONFIG_ICPLUS_PHY is not set | ||
991 | # CONFIG_REALTEK_PHY is not set | ||
992 | # CONFIG_NATIONAL_PHY is not set | ||
993 | # CONFIG_STE10XP is not set | ||
994 | # CONFIG_LSI_ET1011C_PHY is not set | ||
995 | # CONFIG_FIXED_PHY is not set | ||
996 | # CONFIG_MDIO_BITBANG is not set | ||
997 | CONFIG_NET_ETHERNET=y | 173 | CONFIG_NET_ETHERNET=y |
998 | CONFIG_MII=y | ||
999 | # CONFIG_HAPPYMEAL is not set | ||
1000 | # CONFIG_SUNGEM is not set | ||
1001 | # CONFIG_CASSINI is not set | ||
1002 | CONFIG_NET_VENDOR_3COM=y | 174 | CONFIG_NET_VENDOR_3COM=y |
1003 | # CONFIG_VORTEX is not set | ||
1004 | # CONFIG_TYPHOON is not set | ||
1005 | # CONFIG_ETHOC is not set | ||
1006 | # CONFIG_DNET is not set | ||
1007 | CONFIG_NET_TULIP=y | 175 | CONFIG_NET_TULIP=y |
1008 | # CONFIG_DE2104X is not set | ||
1009 | # CONFIG_TULIP is not set | ||
1010 | # CONFIG_DE4X5 is not set | ||
1011 | # CONFIG_WINBOND_840 is not set | ||
1012 | # CONFIG_DM9102 is not set | ||
1013 | # CONFIG_ULI526X is not set | ||
1014 | # CONFIG_PCMCIA_XIRCOM is not set | ||
1015 | # CONFIG_HP100 is not set | ||
1016 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
1017 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
1018 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
1019 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
1020 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
1021 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
1022 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
1023 | CONFIG_NET_PCI=y | 176 | CONFIG_NET_PCI=y |
1024 | # CONFIG_PCNET32 is not set | ||
1025 | # CONFIG_AMD8111_ETH is not set | ||
1026 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
1027 | # CONFIG_B44 is not set | ||
1028 | CONFIG_FORCEDETH=y | 177 | CONFIG_FORCEDETH=y |
1029 | # CONFIG_FORCEDETH_NAPI is not set | ||
1030 | CONFIG_E100=y | 178 | CONFIG_E100=y |
1031 | # CONFIG_FEALNX is not set | ||
1032 | # CONFIG_NATSEMI is not set | ||
1033 | CONFIG_NE2K_PCI=y | 179 | CONFIG_NE2K_PCI=y |
1034 | # CONFIG_8139CP is not set | ||
1035 | CONFIG_8139TOO=y | 180 | CONFIG_8139TOO=y |
1036 | # CONFIG_8139TOO_PIO is not set | 181 | # CONFIG_8139TOO_PIO is not set |
1037 | # CONFIG_8139TOO_TUNE_TWISTER is not set | ||
1038 | # CONFIG_8139TOO_8129 is not set | ||
1039 | # CONFIG_8139_OLD_RX_RESET is not set | ||
1040 | # CONFIG_R6040 is not set | ||
1041 | # CONFIG_SIS900 is not set | ||
1042 | # CONFIG_EPIC100 is not set | ||
1043 | # CONFIG_SMSC9420 is not set | ||
1044 | # CONFIG_SUNDANCE is not set | ||
1045 | # CONFIG_TLAN is not set | ||
1046 | # CONFIG_VIA_RHINE is not set | ||
1047 | # CONFIG_SC92031 is not set | ||
1048 | # CONFIG_ATL2 is not set | ||
1049 | CONFIG_NETDEV_1000=y | ||
1050 | # CONFIG_ACENIC is not set | ||
1051 | # CONFIG_DL2K is not set | ||
1052 | CONFIG_E1000=y | 182 | CONFIG_E1000=y |
1053 | CONFIG_E1000E=y | 183 | CONFIG_E1000E=y |
1054 | # CONFIG_IP1000 is not set | ||
1055 | # CONFIG_IGB is not set | ||
1056 | # CONFIG_IGBVF is not set | ||
1057 | # CONFIG_NS83820 is not set | ||
1058 | # CONFIG_HAMACHI is not set | ||
1059 | # CONFIG_YELLOWFIN is not set | ||
1060 | CONFIG_R8169=y | 184 | CONFIG_R8169=y |
1061 | # CONFIG_SIS190 is not set | ||
1062 | # CONFIG_SKGE is not set | ||
1063 | CONFIG_SKY2=y | 185 | CONFIG_SKY2=y |
1064 | # CONFIG_SKY2_DEBUG is not set | ||
1065 | # CONFIG_VIA_VELOCITY is not set | ||
1066 | CONFIG_TIGON3=y | 186 | CONFIG_TIGON3=y |
1067 | CONFIG_BNX2=y | 187 | CONFIG_BNX2=y |
1068 | # CONFIG_QLA3XXX is not set | ||
1069 | # CONFIG_ATL1 is not set | ||
1070 | # CONFIG_ATL1E is not set | ||
1071 | # CONFIG_ATL1C is not set | ||
1072 | # CONFIG_JME is not set | ||
1073 | CONFIG_NETDEV_10000=y | ||
1074 | # CONFIG_CHELSIO_T1 is not set | ||
1075 | CONFIG_CHELSIO_T3_DEPENDS=y | ||
1076 | # CONFIG_CHELSIO_T3 is not set | ||
1077 | # CONFIG_ENIC is not set | ||
1078 | # CONFIG_IXGBE is not set | ||
1079 | # CONFIG_IXGB is not set | ||
1080 | # CONFIG_S2IO is not set | ||
1081 | # CONFIG_VXGE is not set | ||
1082 | # CONFIG_MYRI10GE is not set | ||
1083 | # CONFIG_NETXEN_NIC is not set | ||
1084 | # CONFIG_NIU is not set | ||
1085 | # CONFIG_MLX4_EN is not set | ||
1086 | # CONFIG_MLX4_CORE is not set | ||
1087 | # CONFIG_TEHUTI is not set | ||
1088 | # CONFIG_BNX2X is not set | ||
1089 | # CONFIG_QLGE is not set | ||
1090 | # CONFIG_SFC is not set | ||
1091 | # CONFIG_BE2NET is not set | ||
1092 | CONFIG_TR=y | 188 | CONFIG_TR=y |
1093 | # CONFIG_IBMOL is not set | ||
1094 | # CONFIG_IBMLS is not set | ||
1095 | # CONFIG_3C359 is not set | ||
1096 | # CONFIG_TMS380TR is not set | ||
1097 | |||
1098 | # | ||
1099 | # Wireless LAN | ||
1100 | # | ||
1101 | # CONFIG_WLAN_PRE80211 is not set | ||
1102 | CONFIG_WLAN_80211=y | ||
1103 | # CONFIG_PCMCIA_RAYCS is not set | ||
1104 | # CONFIG_LIBERTAS is not set | ||
1105 | # CONFIG_LIBERTAS_THINFIRM is not set | ||
1106 | # CONFIG_AIRO is not set | ||
1107 | # CONFIG_ATMEL is not set | ||
1108 | # CONFIG_AT76C50X_USB is not set | ||
1109 | # CONFIG_AIRO_CS is not set | ||
1110 | # CONFIG_PCMCIA_WL3501 is not set | ||
1111 | # CONFIG_PRISM54 is not set | ||
1112 | # CONFIG_USB_ZD1201 is not set | ||
1113 | # CONFIG_USB_NET_RNDIS_WLAN is not set | ||
1114 | # CONFIG_RTL8180 is not set | ||
1115 | # CONFIG_RTL8187 is not set | ||
1116 | # CONFIG_ADM8211 is not set | ||
1117 | # CONFIG_MAC80211_HWSIM is not set | ||
1118 | # CONFIG_MWL8K is not set | ||
1119 | # CONFIG_P54_COMMON is not set | ||
1120 | CONFIG_ATH5K=y | ||
1121 | # CONFIG_ATH5K_DEBUG is not set | ||
1122 | # CONFIG_ATH9K is not set | ||
1123 | # CONFIG_AR9170_USB is not set | ||
1124 | # CONFIG_IPW2100 is not set | ||
1125 | # CONFIG_IPW2200 is not set | ||
1126 | # CONFIG_IWLWIFI is not set | ||
1127 | # CONFIG_HOSTAP is not set | ||
1128 | # CONFIG_B43 is not set | ||
1129 | # CONFIG_B43LEGACY is not set | ||
1130 | # CONFIG_ZD1211RW is not set | ||
1131 | # CONFIG_RT2X00 is not set | ||
1132 | # CONFIG_HERMES is not set | ||
1133 | |||
1134 | # | ||
1135 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
1136 | # | ||
1137 | |||
1138 | # | ||
1139 | # USB Network Adapters | ||
1140 | # | ||
1141 | # CONFIG_USB_CATC is not set | ||
1142 | # CONFIG_USB_KAWETH is not set | ||
1143 | # CONFIG_USB_PEGASUS is not set | ||
1144 | # CONFIG_USB_RTL8150 is not set | ||
1145 | # CONFIG_USB_USBNET is not set | ||
1146 | # CONFIG_USB_HSO is not set | ||
1147 | CONFIG_NET_PCMCIA=y | 189 | CONFIG_NET_PCMCIA=y |
1148 | # CONFIG_PCMCIA_3C589 is not set | ||
1149 | # CONFIG_PCMCIA_3C574 is not set | ||
1150 | # CONFIG_PCMCIA_FMVJ18X is not set | ||
1151 | # CONFIG_PCMCIA_PCNET is not set | ||
1152 | # CONFIG_PCMCIA_NMCLAN is not set | ||
1153 | # CONFIG_PCMCIA_SMC91C92 is not set | ||
1154 | # CONFIG_PCMCIA_XIRC2PS is not set | ||
1155 | # CONFIG_PCMCIA_AXNET is not set | ||
1156 | # CONFIG_PCMCIA_IBMTR is not set | ||
1157 | # CONFIG_WAN is not set | ||
1158 | CONFIG_FDDI=y | 190 | CONFIG_FDDI=y |
1159 | # CONFIG_DEFXX is not set | ||
1160 | # CONFIG_SKFP is not set | ||
1161 | # CONFIG_HIPPI is not set | ||
1162 | # CONFIG_PPP is not set | ||
1163 | # CONFIG_SLIP is not set | ||
1164 | # CONFIG_NET_FC is not set | ||
1165 | CONFIG_NETCONSOLE=y | 191 | CONFIG_NETCONSOLE=y |
1166 | # CONFIG_NETCONSOLE_DYNAMIC is not set | ||
1167 | CONFIG_NETPOLL=y | ||
1168 | # CONFIG_NETPOLL_TRAP is not set | ||
1169 | CONFIG_NET_POLL_CONTROLLER=y | ||
1170 | # CONFIG_ISDN is not set | ||
1171 | # CONFIG_PHONE is not set | ||
1172 | |||
1173 | # | ||
1174 | # Input device support | ||
1175 | # | ||
1176 | CONFIG_INPUT=y | ||
1177 | CONFIG_INPUT_FF_MEMLESS=y | ||
1178 | CONFIG_INPUT_POLLDEV=y | 192 | CONFIG_INPUT_POLLDEV=y |
1179 | |||
1180 | # | ||
1181 | # Userland interfaces | ||
1182 | # | ||
1183 | CONFIG_INPUT_MOUSEDEV=y | ||
1184 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | 193 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set |
1185 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
1186 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
1187 | # CONFIG_INPUT_JOYDEV is not set | ||
1188 | CONFIG_INPUT_EVDEV=y | 194 | CONFIG_INPUT_EVDEV=y |
1189 | # CONFIG_INPUT_EVBUG is not set | ||
1190 | |||
1191 | # | ||
1192 | # Input Device Drivers | ||
1193 | # | ||
1194 | CONFIG_INPUT_KEYBOARD=y | ||
1195 | CONFIG_KEYBOARD_ATKBD=y | ||
1196 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
1197 | # CONFIG_KEYBOARD_LKKBD is not set | ||
1198 | # CONFIG_KEYBOARD_XTKBD is not set | ||
1199 | # CONFIG_KEYBOARD_NEWTON is not set | ||
1200 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
1201 | CONFIG_INPUT_MOUSE=y | ||
1202 | CONFIG_MOUSE_PS2=y | ||
1203 | CONFIG_MOUSE_PS2_ALPS=y | ||
1204 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
1205 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
1206 | CONFIG_MOUSE_PS2_LIFEBOOK=y | ||
1207 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
1208 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
1209 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
1210 | # CONFIG_MOUSE_SERIAL is not set | ||
1211 | # CONFIG_MOUSE_APPLETOUCH is not set | ||
1212 | # CONFIG_MOUSE_BCM5974 is not set | ||
1213 | # CONFIG_MOUSE_VSXXXAA is not set | ||
1214 | CONFIG_INPUT_JOYSTICK=y | 195 | CONFIG_INPUT_JOYSTICK=y |
1215 | # CONFIG_JOYSTICK_ANALOG is not set | ||
1216 | # CONFIG_JOYSTICK_A3D is not set | ||
1217 | # CONFIG_JOYSTICK_ADI is not set | ||
1218 | # CONFIG_JOYSTICK_COBRA is not set | ||
1219 | # CONFIG_JOYSTICK_GF2K is not set | ||
1220 | # CONFIG_JOYSTICK_GRIP is not set | ||
1221 | # CONFIG_JOYSTICK_GRIP_MP is not set | ||
1222 | # CONFIG_JOYSTICK_GUILLEMOT is not set | ||
1223 | # CONFIG_JOYSTICK_INTERACT is not set | ||
1224 | # CONFIG_JOYSTICK_SIDEWINDER is not set | ||
1225 | # CONFIG_JOYSTICK_TMDC is not set | ||
1226 | # CONFIG_JOYSTICK_IFORCE is not set | ||
1227 | # CONFIG_JOYSTICK_WARRIOR is not set | ||
1228 | # CONFIG_JOYSTICK_MAGELLAN is not set | ||
1229 | # CONFIG_JOYSTICK_SPACEORB is not set | ||
1230 | # CONFIG_JOYSTICK_SPACEBALL is not set | ||
1231 | # CONFIG_JOYSTICK_STINGER is not set | ||
1232 | # CONFIG_JOYSTICK_TWIDJOY is not set | ||
1233 | # CONFIG_JOYSTICK_ZHENHUA is not set | ||
1234 | # CONFIG_JOYSTICK_JOYDUMP is not set | ||
1235 | # CONFIG_JOYSTICK_XPAD is not set | ||
1236 | CONFIG_INPUT_TABLET=y | 196 | CONFIG_INPUT_TABLET=y |
1237 | # CONFIG_TABLET_USB_ACECAD is not set | ||
1238 | # CONFIG_TABLET_USB_AIPTEK is not set | ||
1239 | # CONFIG_TABLET_USB_GTCO is not set | ||
1240 | # CONFIG_TABLET_USB_KBTAB is not set | ||
1241 | # CONFIG_TABLET_USB_WACOM is not set | ||
1242 | CONFIG_INPUT_TOUCHSCREEN=y | 197 | CONFIG_INPUT_TOUCHSCREEN=y |
1243 | # CONFIG_TOUCHSCREEN_AD7879_I2C is not set | ||
1244 | # CONFIG_TOUCHSCREEN_AD7879 is not set | ||
1245 | # CONFIG_TOUCHSCREEN_FUJITSU is not set | ||
1246 | # CONFIG_TOUCHSCREEN_GUNZE is not set | ||
1247 | # CONFIG_TOUCHSCREEN_ELO is not set | ||
1248 | # CONFIG_TOUCHSCREEN_WACOM_W8001 is not set | ||
1249 | # CONFIG_TOUCHSCREEN_MTOUCH is not set | ||
1250 | # CONFIG_TOUCHSCREEN_INEXIO is not set | ||
1251 | # CONFIG_TOUCHSCREEN_MK712 is not set | ||
1252 | # CONFIG_TOUCHSCREEN_PENMOUNT is not set | ||
1253 | # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set | ||
1254 | # CONFIG_TOUCHSCREEN_TOUCHWIN is not set | ||
1255 | # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set | ||
1256 | # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set | ||
1257 | # CONFIG_TOUCHSCREEN_TSC2007 is not set | ||
1258 | CONFIG_INPUT_MISC=y | 198 | CONFIG_INPUT_MISC=y |
1259 | # CONFIG_INPUT_PCSPKR is not set | ||
1260 | # CONFIG_INPUT_APANEL is not set | ||
1261 | # CONFIG_INPUT_WISTRON_BTNS is not set | ||
1262 | # CONFIG_INPUT_ATLAS_BTNS is not set | ||
1263 | # CONFIG_INPUT_ATI_REMOTE is not set | ||
1264 | # CONFIG_INPUT_ATI_REMOTE2 is not set | ||
1265 | # CONFIG_INPUT_KEYSPAN_REMOTE is not set | ||
1266 | # CONFIG_INPUT_POWERMATE is not set | ||
1267 | # CONFIG_INPUT_YEALINK is not set | ||
1268 | # CONFIG_INPUT_CM109 is not set | ||
1269 | # CONFIG_INPUT_UINPUT is not set | ||
1270 | |||
1271 | # | ||
1272 | # Hardware I/O ports | ||
1273 | # | ||
1274 | CONFIG_SERIO=y | ||
1275 | CONFIG_SERIO_I8042=y | ||
1276 | CONFIG_SERIO_SERPORT=y | ||
1277 | # CONFIG_SERIO_CT82C710 is not set | ||
1278 | # CONFIG_SERIO_PCIPS2 is not set | ||
1279 | CONFIG_SERIO_LIBPS2=y | ||
1280 | # CONFIG_SERIO_RAW is not set | ||
1281 | # CONFIG_GAMEPORT is not set | ||
1282 | |||
1283 | # | ||
1284 | # Character devices | ||
1285 | # | ||
1286 | CONFIG_VT=y | ||
1287 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
1288 | CONFIG_VT_CONSOLE=y | ||
1289 | CONFIG_HW_CONSOLE=y | ||
1290 | CONFIG_VT_HW_CONSOLE_BINDING=y | 199 | CONFIG_VT_HW_CONSOLE_BINDING=y |
1291 | CONFIG_DEVKMEM=y | ||
1292 | CONFIG_SERIAL_NONSTANDARD=y | 200 | CONFIG_SERIAL_NONSTANDARD=y |
1293 | # CONFIG_COMPUTONE is not set | ||
1294 | # CONFIG_ROCKETPORT is not set | ||
1295 | # CONFIG_CYCLADES is not set | ||
1296 | # CONFIG_DIGIEPCA is not set | ||
1297 | # CONFIG_MOXA_INTELLIO is not set | ||
1298 | # CONFIG_MOXA_SMARTIO is not set | ||
1299 | # CONFIG_ISI is not set | ||
1300 | # CONFIG_SYNCLINK is not set | ||
1301 | # CONFIG_SYNCLINKMP is not set | ||
1302 | # CONFIG_SYNCLINK_GT is not set | ||
1303 | # CONFIG_N_HDLC is not set | ||
1304 | # CONFIG_RISCOM8 is not set | ||
1305 | # CONFIG_SPECIALIX is not set | ||
1306 | # CONFIG_SX is not set | ||
1307 | # CONFIG_RIO is not set | ||
1308 | # CONFIG_STALDRV is not set | ||
1309 | # CONFIG_NOZOMI is not set | ||
1310 | |||
1311 | # | ||
1312 | # Serial drivers | ||
1313 | # | ||
1314 | CONFIG_SERIAL_8250=y | 201 | CONFIG_SERIAL_8250=y |
1315 | CONFIG_SERIAL_8250_CONSOLE=y | 202 | CONFIG_SERIAL_8250_CONSOLE=y |
1316 | CONFIG_FIX_EARLYCON_MEM=y | ||
1317 | CONFIG_SERIAL_8250_PCI=y | ||
1318 | CONFIG_SERIAL_8250_PNP=y | ||
1319 | # CONFIG_SERIAL_8250_CS is not set | ||
1320 | CONFIG_SERIAL_8250_NR_UARTS=32 | 203 | CONFIG_SERIAL_8250_NR_UARTS=32 |
1321 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
1322 | CONFIG_SERIAL_8250_EXTENDED=y | 204 | CONFIG_SERIAL_8250_EXTENDED=y |
1323 | CONFIG_SERIAL_8250_MANY_PORTS=y | 205 | CONFIG_SERIAL_8250_MANY_PORTS=y |
1324 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 206 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
1325 | CONFIG_SERIAL_8250_DETECT_IRQ=y | 207 | CONFIG_SERIAL_8250_DETECT_IRQ=y |
1326 | CONFIG_SERIAL_8250_RSA=y | 208 | CONFIG_SERIAL_8250_RSA=y |
1327 | |||
1328 | # | ||
1329 | # Non-8250 serial port support | ||
1330 | # | ||
1331 | CONFIG_SERIAL_CORE=y | ||
1332 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
1333 | # CONFIG_SERIAL_JSM is not set | ||
1334 | CONFIG_UNIX98_PTYS=y | ||
1335 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
1336 | # CONFIG_LEGACY_PTYS is not set | 209 | # CONFIG_LEGACY_PTYS is not set |
1337 | # CONFIG_IPMI_HANDLER is not set | ||
1338 | CONFIG_HW_RANDOM=y | 210 | CONFIG_HW_RANDOM=y |
1339 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
1340 | CONFIG_HW_RANDOM_INTEL=y | ||
1341 | CONFIG_HW_RANDOM_AMD=y | ||
1342 | CONFIG_HW_RANDOM_GEODE=y | ||
1343 | CONFIG_HW_RANDOM_VIA=y | ||
1344 | CONFIG_NVRAM=y | 211 | CONFIG_NVRAM=y |
1345 | # CONFIG_R3964 is not set | ||
1346 | # CONFIG_APPLICOM is not set | ||
1347 | # CONFIG_SONYPI is not set | ||
1348 | |||
1349 | # | ||
1350 | # PCMCIA character devices | ||
1351 | # | ||
1352 | # CONFIG_SYNCLINK_CS is not set | ||
1353 | # CONFIG_CARDMAN_4000 is not set | ||
1354 | # CONFIG_CARDMAN_4040 is not set | ||
1355 | # CONFIG_IPWIRELESS is not set | ||
1356 | # CONFIG_MWAVE is not set | ||
1357 | # CONFIG_PC8736x_GPIO is not set | ||
1358 | # CONFIG_NSC_GPIO is not set | ||
1359 | # CONFIG_CS5535_GPIO is not set | ||
1360 | # CONFIG_RAW_DRIVER is not set | ||
1361 | CONFIG_HPET=y | 212 | CONFIG_HPET=y |
1362 | # CONFIG_HPET_MMAP is not set | 213 | # CONFIG_HPET_MMAP is not set |
1363 | # CONFIG_HANGCHECK_TIMER is not set | ||
1364 | # CONFIG_TCG_TPM is not set | ||
1365 | # CONFIG_TELCLOCK is not set | ||
1366 | CONFIG_DEVPORT=y | ||
1367 | CONFIG_I2C=y | ||
1368 | CONFIG_I2C_BOARDINFO=y | ||
1369 | # CONFIG_I2C_CHARDEV is not set | ||
1370 | CONFIG_I2C_HELPER_AUTO=y | ||
1371 | CONFIG_I2C_ALGOBIT=y | ||
1372 | |||
1373 | # | ||
1374 | # I2C Hardware Bus support | ||
1375 | # | ||
1376 | |||
1377 | # | ||
1378 | # PC SMBus host controller drivers | ||
1379 | # | ||
1380 | # CONFIG_I2C_ALI1535 is not set | ||
1381 | # CONFIG_I2C_ALI1563 is not set | ||
1382 | # CONFIG_I2C_ALI15X3 is not set | ||
1383 | # CONFIG_I2C_AMD756 is not set | ||
1384 | # CONFIG_I2C_AMD8111 is not set | ||
1385 | CONFIG_I2C_I801=y | 214 | CONFIG_I2C_I801=y |
1386 | # CONFIG_I2C_ISCH is not set | ||
1387 | # CONFIG_I2C_PIIX4 is not set | ||
1388 | # CONFIG_I2C_NFORCE2 is not set | ||
1389 | # CONFIG_I2C_SIS5595 is not set | ||
1390 | # CONFIG_I2C_SIS630 is not set | ||
1391 | # CONFIG_I2C_SIS96X is not set | ||
1392 | # CONFIG_I2C_VIA is not set | ||
1393 | # CONFIG_I2C_VIAPRO is not set | ||
1394 | |||
1395 | # | ||
1396 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
1397 | # | ||
1398 | # CONFIG_I2C_OCORES is not set | ||
1399 | # CONFIG_I2C_SIMTEC is not set | ||
1400 | |||
1401 | # | ||
1402 | # External I2C/SMBus adapter drivers | ||
1403 | # | ||
1404 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
1405 | # CONFIG_I2C_TAOS_EVM is not set | ||
1406 | # CONFIG_I2C_TINY_USB is not set | ||
1407 | |||
1408 | # | ||
1409 | # Graphics adapter I2C/DDC channel drivers | ||
1410 | # | ||
1411 | # CONFIG_I2C_VOODOO3 is not set | ||
1412 | |||
1413 | # | ||
1414 | # Other I2C/SMBus bus drivers | ||
1415 | # | ||
1416 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
1417 | # CONFIG_I2C_STUB is not set | ||
1418 | # CONFIG_SCx200_ACB is not set | ||
1419 | |||
1420 | # | ||
1421 | # Miscellaneous I2C Chip support | ||
1422 | # | ||
1423 | # CONFIG_DS1682 is not set | ||
1424 | # CONFIG_SENSORS_PCF8574 is not set | ||
1425 | # CONFIG_PCF8575 is not set | ||
1426 | # CONFIG_SENSORS_PCA9539 is not set | ||
1427 | # CONFIG_SENSORS_MAX6875 is not set | ||
1428 | # CONFIG_SENSORS_TSL2550 is not set | ||
1429 | # CONFIG_I2C_DEBUG_CORE is not set | ||
1430 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
1431 | # CONFIG_I2C_DEBUG_BUS is not set | ||
1432 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
1433 | # CONFIG_SPI is not set | ||
1434 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | ||
1435 | # CONFIG_GPIOLIB is not set | ||
1436 | # CONFIG_W1 is not set | ||
1437 | CONFIG_POWER_SUPPLY=y | ||
1438 | # CONFIG_POWER_SUPPLY_DEBUG is not set | ||
1439 | # CONFIG_PDA_POWER is not set | ||
1440 | # CONFIG_BATTERY_DS2760 is not set | ||
1441 | # CONFIG_BATTERY_BQ27x00 is not set | ||
1442 | CONFIG_HWMON=y | ||
1443 | # CONFIG_HWMON_VID is not set | ||
1444 | # CONFIG_SENSORS_ABITUGURU is not set | ||
1445 | # CONFIG_SENSORS_ABITUGURU3 is not set | ||
1446 | # CONFIG_SENSORS_AD7414 is not set | ||
1447 | # CONFIG_SENSORS_AD7418 is not set | ||
1448 | # CONFIG_SENSORS_ADM1021 is not set | ||
1449 | # CONFIG_SENSORS_ADM1025 is not set | ||
1450 | # CONFIG_SENSORS_ADM1026 is not set | ||
1451 | # CONFIG_SENSORS_ADM1029 is not set | ||
1452 | # CONFIG_SENSORS_ADM1031 is not set | ||
1453 | # CONFIG_SENSORS_ADM9240 is not set | ||
1454 | # CONFIG_SENSORS_ADT7462 is not set | ||
1455 | # CONFIG_SENSORS_ADT7470 is not set | ||
1456 | # CONFIG_SENSORS_ADT7473 is not set | ||
1457 | # CONFIG_SENSORS_ADT7475 is not set | ||
1458 | # CONFIG_SENSORS_K8TEMP is not set | ||
1459 | # CONFIG_SENSORS_ASB100 is not set | ||
1460 | # CONFIG_SENSORS_ATK0110 is not set | ||
1461 | # CONFIG_SENSORS_ATXP1 is not set | ||
1462 | # CONFIG_SENSORS_DS1621 is not set | ||
1463 | # CONFIG_SENSORS_I5K_AMB is not set | ||
1464 | # CONFIG_SENSORS_F71805F is not set | ||
1465 | # CONFIG_SENSORS_F71882FG is not set | ||
1466 | # CONFIG_SENSORS_F75375S is not set | ||
1467 | # CONFIG_SENSORS_FSCHER is not set | ||
1468 | # CONFIG_SENSORS_FSCPOS is not set | ||
1469 | # CONFIG_SENSORS_FSCHMD is not set | ||
1470 | # CONFIG_SENSORS_G760A is not set | ||
1471 | # CONFIG_SENSORS_GL518SM is not set | ||
1472 | # CONFIG_SENSORS_GL520SM is not set | ||
1473 | # CONFIG_SENSORS_CORETEMP is not set | ||
1474 | # CONFIG_SENSORS_IT87 is not set | ||
1475 | # CONFIG_SENSORS_LM63 is not set | ||
1476 | # CONFIG_SENSORS_LM75 is not set | ||
1477 | # CONFIG_SENSORS_LM77 is not set | ||
1478 | # CONFIG_SENSORS_LM78 is not set | ||
1479 | # CONFIG_SENSORS_LM80 is not set | ||
1480 | # CONFIG_SENSORS_LM83 is not set | ||
1481 | # CONFIG_SENSORS_LM85 is not set | ||
1482 | # CONFIG_SENSORS_LM87 is not set | ||
1483 | # CONFIG_SENSORS_LM90 is not set | ||
1484 | # CONFIG_SENSORS_LM92 is not set | ||
1485 | # CONFIG_SENSORS_LM93 is not set | ||
1486 | # CONFIG_SENSORS_LTC4215 is not set | ||
1487 | # CONFIG_SENSORS_LTC4245 is not set | ||
1488 | # CONFIG_SENSORS_LM95241 is not set | ||
1489 | # CONFIG_SENSORS_MAX1619 is not set | ||
1490 | # CONFIG_SENSORS_MAX6650 is not set | ||
1491 | # CONFIG_SENSORS_PC87360 is not set | ||
1492 | # CONFIG_SENSORS_PC87427 is not set | ||
1493 | # CONFIG_SENSORS_PCF8591 is not set | ||
1494 | # CONFIG_SENSORS_SIS5595 is not set | ||
1495 | # CONFIG_SENSORS_DME1737 is not set | ||
1496 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
1497 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
1498 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
1499 | # CONFIG_SENSORS_ADS7828 is not set | ||
1500 | # CONFIG_SENSORS_THMC50 is not set | ||
1501 | # CONFIG_SENSORS_VIA686A is not set | ||
1502 | # CONFIG_SENSORS_VT1211 is not set | ||
1503 | # CONFIG_SENSORS_VT8231 is not set | ||
1504 | # CONFIG_SENSORS_W83781D is not set | ||
1505 | # CONFIG_SENSORS_W83791D is not set | ||
1506 | # CONFIG_SENSORS_W83792D is not set | ||
1507 | # CONFIG_SENSORS_W83793 is not set | ||
1508 | # CONFIG_SENSORS_W83L785TS is not set | ||
1509 | # CONFIG_SENSORS_W83L786NG is not set | ||
1510 | # CONFIG_SENSORS_W83627HF is not set | ||
1511 | # CONFIG_SENSORS_W83627EHF is not set | ||
1512 | # CONFIG_SENSORS_HDAPS is not set | ||
1513 | # CONFIG_SENSORS_LIS3LV02D is not set | ||
1514 | # CONFIG_SENSORS_APPLESMC is not set | ||
1515 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
1516 | CONFIG_THERMAL=y | ||
1517 | # CONFIG_THERMAL_HWMON is not set | ||
1518 | CONFIG_WATCHDOG=y | 215 | CONFIG_WATCHDOG=y |
1519 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
1520 | |||
1521 | # | ||
1522 | # Watchdog Device Drivers | ||
1523 | # | ||
1524 | # CONFIG_SOFT_WATCHDOG is not set | ||
1525 | # CONFIG_ACQUIRE_WDT is not set | ||
1526 | # CONFIG_ADVANTECH_WDT is not set | ||
1527 | # CONFIG_ALIM1535_WDT is not set | ||
1528 | # CONFIG_ALIM7101_WDT is not set | ||
1529 | # CONFIG_SC520_WDT is not set | ||
1530 | # CONFIG_EUROTECH_WDT is not set | ||
1531 | # CONFIG_IB700_WDT is not set | ||
1532 | # CONFIG_IBMASR is not set | ||
1533 | # CONFIG_WAFER_WDT is not set | ||
1534 | # CONFIG_I6300ESB_WDT is not set | ||
1535 | # CONFIG_ITCO_WDT is not set | ||
1536 | # CONFIG_IT8712F_WDT is not set | ||
1537 | # CONFIG_IT87_WDT is not set | ||
1538 | # CONFIG_HP_WATCHDOG is not set | ||
1539 | # CONFIG_SC1200_WDT is not set | ||
1540 | # CONFIG_PC87413_WDT is not set | ||
1541 | # CONFIG_60XX_WDT is not set | ||
1542 | # CONFIG_SBC8360_WDT is not set | ||
1543 | # CONFIG_SBC7240_WDT is not set | ||
1544 | # CONFIG_CPU5_WDT is not set | ||
1545 | # CONFIG_SMSC_SCH311X_WDT is not set | ||
1546 | # CONFIG_SMSC37B787_WDT is not set | ||
1547 | # CONFIG_W83627HF_WDT is not set | ||
1548 | # CONFIG_W83697HF_WDT is not set | ||
1549 | # CONFIG_W83697UG_WDT is not set | ||
1550 | # CONFIG_W83877F_WDT is not set | ||
1551 | # CONFIG_W83977F_WDT is not set | ||
1552 | # CONFIG_MACHZ_WDT is not set | ||
1553 | # CONFIG_SBC_EPX_C3_WATCHDOG is not set | ||
1554 | |||
1555 | # | ||
1556 | # PCI-based Watchdog Cards | ||
1557 | # | ||
1558 | # CONFIG_PCIPCWATCHDOG is not set | ||
1559 | # CONFIG_WDTPCI is not set | ||
1560 | |||
1561 | # | ||
1562 | # USB-based Watchdog Cards | ||
1563 | # | ||
1564 | # CONFIG_USBPCWATCHDOG is not set | ||
1565 | CONFIG_SSB_POSSIBLE=y | ||
1566 | |||
1567 | # | ||
1568 | # Sonics Silicon Backplane | ||
1569 | # | ||
1570 | # CONFIG_SSB is not set | ||
1571 | |||
1572 | # | ||
1573 | # Multifunction device drivers | ||
1574 | # | ||
1575 | # CONFIG_MFD_CORE is not set | ||
1576 | # CONFIG_MFD_SM501 is not set | ||
1577 | # CONFIG_HTC_PASIC3 is not set | ||
1578 | # CONFIG_TWL4030_CORE is not set | ||
1579 | # CONFIG_MFD_TMIO is not set | ||
1580 | # CONFIG_PMIC_DA903X is not set | ||
1581 | # CONFIG_MFD_WM8400 is not set | ||
1582 | # CONFIG_MFD_WM8350_I2C is not set | ||
1583 | # CONFIG_MFD_PCF50633 is not set | ||
1584 | # CONFIG_REGULATOR is not set | ||
1585 | |||
1586 | # | ||
1587 | # Multimedia devices | ||
1588 | # | ||
1589 | |||
1590 | # | ||
1591 | # Multimedia core support | ||
1592 | # | ||
1593 | # CONFIG_VIDEO_DEV is not set | ||
1594 | # CONFIG_DVB_CORE is not set | ||
1595 | # CONFIG_VIDEO_MEDIA is not set | ||
1596 | |||
1597 | # | ||
1598 | # Multimedia drivers | ||
1599 | # | ||
1600 | CONFIG_DAB=y | ||
1601 | # CONFIG_USB_DABUSB is not set | ||
1602 | |||
1603 | # | ||
1604 | # Graphics support | ||
1605 | # | ||
1606 | CONFIG_AGP=y | 216 | CONFIG_AGP=y |
1607 | # CONFIG_AGP_ALI is not set | ||
1608 | # CONFIG_AGP_ATI is not set | ||
1609 | # CONFIG_AGP_AMD is not set | ||
1610 | CONFIG_AGP_AMD64=y | 217 | CONFIG_AGP_AMD64=y |
1611 | CONFIG_AGP_INTEL=y | 218 | CONFIG_AGP_INTEL=y |
1612 | # CONFIG_AGP_NVIDIA is not set | ||
1613 | # CONFIG_AGP_SIS is not set | ||
1614 | # CONFIG_AGP_SWORKS is not set | ||
1615 | # CONFIG_AGP_VIA is not set | ||
1616 | # CONFIG_AGP_EFFICEON is not set | ||
1617 | CONFIG_DRM=y | 219 | CONFIG_DRM=y |
1618 | # CONFIG_DRM_TDFX is not set | ||
1619 | # CONFIG_DRM_R128 is not set | ||
1620 | # CONFIG_DRM_RADEON is not set | ||
1621 | # CONFIG_DRM_I810 is not set | ||
1622 | # CONFIG_DRM_I830 is not set | ||
1623 | CONFIG_DRM_I915=y | 220 | CONFIG_DRM_I915=y |
1624 | # CONFIG_DRM_I915_KMS is not set | ||
1625 | # CONFIG_DRM_MGA is not set | ||
1626 | # CONFIG_DRM_SIS is not set | ||
1627 | # CONFIG_DRM_VIA is not set | ||
1628 | # CONFIG_DRM_SAVAGE is not set | ||
1629 | # CONFIG_VGASTATE is not set | ||
1630 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
1631 | CONFIG_FB=y | ||
1632 | # CONFIG_FIRMWARE_EDID is not set | ||
1633 | # CONFIG_FB_DDC is not set | ||
1634 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
1635 | CONFIG_FB_CFB_FILLRECT=y | ||
1636 | CONFIG_FB_CFB_COPYAREA=y | ||
1637 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
1638 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
1639 | # CONFIG_FB_SYS_FILLRECT is not set | ||
1640 | # CONFIG_FB_SYS_COPYAREA is not set | ||
1641 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
1642 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
1643 | # CONFIG_FB_SYS_FOPS is not set | ||
1644 | # CONFIG_FB_SVGALIB is not set | ||
1645 | # CONFIG_FB_MACMODES is not set | ||
1646 | # CONFIG_FB_BACKLIGHT is not set | ||
1647 | CONFIG_FB_MODE_HELPERS=y | 221 | CONFIG_FB_MODE_HELPERS=y |
1648 | CONFIG_FB_TILEBLITTING=y | 222 | CONFIG_FB_TILEBLITTING=y |
1649 | |||
1650 | # | ||
1651 | # Frame buffer hardware drivers | ||
1652 | # | ||
1653 | # CONFIG_FB_CIRRUS is not set | ||
1654 | # CONFIG_FB_PM2 is not set | ||
1655 | # CONFIG_FB_CYBER2000 is not set | ||
1656 | # CONFIG_FB_ARC is not set | ||
1657 | # CONFIG_FB_ASILIANT is not set | ||
1658 | # CONFIG_FB_IMSTT is not set | ||
1659 | # CONFIG_FB_VGA16 is not set | ||
1660 | # CONFIG_FB_UVESA is not set | ||
1661 | # CONFIG_FB_VESA is not set | ||
1662 | CONFIG_FB_EFI=y | 223 | CONFIG_FB_EFI=y |
1663 | # CONFIG_FB_N411 is not set | ||
1664 | # CONFIG_FB_HGA is not set | ||
1665 | # CONFIG_FB_S1D13XXX is not set | ||
1666 | # CONFIG_FB_NVIDIA is not set | ||
1667 | # CONFIG_FB_RIVA is not set | ||
1668 | # CONFIG_FB_I810 is not set | ||
1669 | # CONFIG_FB_LE80578 is not set | ||
1670 | # CONFIG_FB_INTEL is not set | ||
1671 | # CONFIG_FB_MATROX is not set | ||
1672 | # CONFIG_FB_RADEON is not set | ||
1673 | # CONFIG_FB_ATY128 is not set | ||
1674 | # CONFIG_FB_ATY is not set | ||
1675 | # CONFIG_FB_S3 is not set | ||
1676 | # CONFIG_FB_SAVAGE is not set | ||
1677 | # CONFIG_FB_SIS is not set | ||
1678 | # CONFIG_FB_VIA is not set | ||
1679 | # CONFIG_FB_NEOMAGIC is not set | ||
1680 | # CONFIG_FB_KYRO is not set | ||
1681 | # CONFIG_FB_3DFX is not set | ||
1682 | # CONFIG_FB_VOODOO1 is not set | ||
1683 | # CONFIG_FB_VT8623 is not set | ||
1684 | # CONFIG_FB_TRIDENT is not set | ||
1685 | # CONFIG_FB_ARK is not set | ||
1686 | # CONFIG_FB_PM3 is not set | ||
1687 | # CONFIG_FB_CARMINE is not set | ||
1688 | # CONFIG_FB_GEODE is not set | ||
1689 | # CONFIG_FB_VIRTUAL is not set | ||
1690 | # CONFIG_FB_METRONOME is not set | ||
1691 | # CONFIG_FB_MB862XX is not set | ||
1692 | # CONFIG_FB_BROADSHEET is not set | ||
1693 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 224 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
1694 | # CONFIG_LCD_CLASS_DEVICE is not set | 225 | # CONFIG_LCD_CLASS_DEVICE is not set |
1695 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
1696 | CONFIG_BACKLIGHT_GENERIC=y | ||
1697 | # CONFIG_BACKLIGHT_PROGEAR is not set | ||
1698 | # CONFIG_BACKLIGHT_MBP_NVIDIA is not set | ||
1699 | # CONFIG_BACKLIGHT_SAHARA is not set | ||
1700 | |||
1701 | # | ||
1702 | # Display device support | ||
1703 | # | ||
1704 | # CONFIG_DISPLAY_SUPPORT is not set | ||
1705 | |||
1706 | # | ||
1707 | # Console display driver support | ||
1708 | # | ||
1709 | CONFIG_VGA_CONSOLE=y | ||
1710 | CONFIG_VGACON_SOFT_SCROLLBACK=y | 226 | CONFIG_VGACON_SOFT_SCROLLBACK=y |
1711 | CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 | ||
1712 | CONFIG_DUMMY_CONSOLE=y | ||
1713 | # CONFIG_FRAMEBUFFER_CONSOLE is not set | ||
1714 | CONFIG_LOGO=y | 227 | CONFIG_LOGO=y |
1715 | # CONFIG_LOGO_LINUX_MONO is not set | 228 | # CONFIG_LOGO_LINUX_MONO is not set |
1716 | # CONFIG_LOGO_LINUX_VGA16 is not set | 229 | # CONFIG_LOGO_LINUX_VGA16 is not set |
1717 | CONFIG_LOGO_LINUX_CLUT224=y | ||
1718 | CONFIG_SOUND=y | 230 | CONFIG_SOUND=y |
1719 | CONFIG_SOUND_OSS_CORE=y | ||
1720 | CONFIG_SND=y | 231 | CONFIG_SND=y |
1721 | CONFIG_SND_TIMER=y | ||
1722 | CONFIG_SND_PCM=y | ||
1723 | CONFIG_SND_HWDEP=y | ||
1724 | CONFIG_SND_JACK=y | ||
1725 | CONFIG_SND_SEQUENCER=y | 232 | CONFIG_SND_SEQUENCER=y |
1726 | CONFIG_SND_SEQ_DUMMY=y | 233 | CONFIG_SND_SEQ_DUMMY=y |
1727 | CONFIG_SND_OSSEMUL=y | ||
1728 | CONFIG_SND_MIXER_OSS=y | 234 | CONFIG_SND_MIXER_OSS=y |
1729 | CONFIG_SND_PCM_OSS=y | 235 | CONFIG_SND_PCM_OSS=y |
1730 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
1731 | CONFIG_SND_SEQUENCER_OSS=y | 236 | CONFIG_SND_SEQUENCER_OSS=y |
1732 | CONFIG_SND_HRTIMER=y | 237 | CONFIG_SND_HRTIMER=y |
1733 | CONFIG_SND_SEQ_HRTIMER_DEFAULT=y | ||
1734 | CONFIG_SND_DYNAMIC_MINORS=y | ||
1735 | CONFIG_SND_SUPPORT_OLD_API=y | ||
1736 | CONFIG_SND_VERBOSE_PROCFS=y | ||
1737 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
1738 | # CONFIG_SND_DEBUG is not set | ||
1739 | CONFIG_SND_VMASTER=y | ||
1740 | CONFIG_SND_DRIVERS=y | ||
1741 | # CONFIG_SND_PCSP is not set | ||
1742 | # CONFIG_SND_DUMMY is not set | ||
1743 | # CONFIG_SND_VIRMIDI is not set | ||
1744 | # CONFIG_SND_MTPAV is not set | ||
1745 | # CONFIG_SND_SERIAL_U16550 is not set | ||
1746 | # CONFIG_SND_MPU401 is not set | ||
1747 | CONFIG_SND_PCI=y | ||
1748 | # CONFIG_SND_AD1889 is not set | ||
1749 | # CONFIG_SND_ALS300 is not set | ||
1750 | # CONFIG_SND_ALS4000 is not set | ||
1751 | # CONFIG_SND_ALI5451 is not set | ||
1752 | # CONFIG_SND_ATIIXP is not set | ||
1753 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
1754 | # CONFIG_SND_AU8810 is not set | ||
1755 | # CONFIG_SND_AU8820 is not set | ||
1756 | # CONFIG_SND_AU8830 is not set | ||
1757 | # CONFIG_SND_AW2 is not set | ||
1758 | # CONFIG_SND_AZT3328 is not set | ||
1759 | # CONFIG_SND_BT87X is not set | ||
1760 | # CONFIG_SND_CA0106 is not set | ||
1761 | # CONFIG_SND_CMIPCI is not set | ||
1762 | # CONFIG_SND_OXYGEN is not set | ||
1763 | # CONFIG_SND_CS4281 is not set | ||
1764 | # CONFIG_SND_CS46XX is not set | ||
1765 | # CONFIG_SND_CS5530 is not set | ||
1766 | # CONFIG_SND_CS5535AUDIO is not set | ||
1767 | # CONFIG_SND_DARLA20 is not set | ||
1768 | # CONFIG_SND_GINA20 is not set | ||
1769 | # CONFIG_SND_LAYLA20 is not set | ||
1770 | # CONFIG_SND_DARLA24 is not set | ||
1771 | # CONFIG_SND_GINA24 is not set | ||
1772 | # CONFIG_SND_LAYLA24 is not set | ||
1773 | # CONFIG_SND_MONA is not set | ||
1774 | # CONFIG_SND_MIA is not set | ||
1775 | # CONFIG_SND_ECHO3G is not set | ||
1776 | # CONFIG_SND_INDIGO is not set | ||
1777 | # CONFIG_SND_INDIGOIO is not set | ||
1778 | # CONFIG_SND_INDIGODJ is not set | ||
1779 | # CONFIG_SND_INDIGOIOX is not set | ||
1780 | # CONFIG_SND_INDIGODJX is not set | ||
1781 | # CONFIG_SND_EMU10K1 is not set | ||
1782 | # CONFIG_SND_EMU10K1X is not set | ||
1783 | # CONFIG_SND_ENS1370 is not set | ||
1784 | # CONFIG_SND_ENS1371 is not set | ||
1785 | # CONFIG_SND_ES1938 is not set | ||
1786 | # CONFIG_SND_ES1968 is not set | ||
1787 | # CONFIG_SND_FM801 is not set | ||
1788 | CONFIG_SND_HDA_INTEL=y | 238 | CONFIG_SND_HDA_INTEL=y |
1789 | CONFIG_SND_HDA_HWDEP=y | 239 | CONFIG_SND_HDA_HWDEP=y |
1790 | # CONFIG_SND_HDA_RECONFIG is not set | ||
1791 | # CONFIG_SND_HDA_INPUT_BEEP is not set | ||
1792 | CONFIG_SND_HDA_CODEC_REALTEK=y | ||
1793 | CONFIG_SND_HDA_CODEC_ANALOG=y | ||
1794 | CONFIG_SND_HDA_CODEC_SIGMATEL=y | ||
1795 | CONFIG_SND_HDA_CODEC_VIA=y | ||
1796 | CONFIG_SND_HDA_CODEC_ATIHDMI=y | ||
1797 | CONFIG_SND_HDA_CODEC_NVHDMI=y | ||
1798 | CONFIG_SND_HDA_CODEC_INTELHDMI=y | ||
1799 | CONFIG_SND_HDA_ELD=y | ||
1800 | CONFIG_SND_HDA_CODEC_CONEXANT=y | ||
1801 | CONFIG_SND_HDA_CODEC_CMEDIA=y | ||
1802 | CONFIG_SND_HDA_CODEC_SI3054=y | ||
1803 | CONFIG_SND_HDA_GENERIC=y | ||
1804 | # CONFIG_SND_HDA_POWER_SAVE is not set | ||
1805 | # CONFIG_SND_HDSP is not set | ||
1806 | # CONFIG_SND_HDSPM is not set | ||
1807 | # CONFIG_SND_HIFIER is not set | ||
1808 | # CONFIG_SND_ICE1712 is not set | ||
1809 | # CONFIG_SND_ICE1724 is not set | ||
1810 | # CONFIG_SND_INTEL8X0 is not set | ||
1811 | # CONFIG_SND_INTEL8X0M is not set | ||
1812 | # CONFIG_SND_KORG1212 is not set | ||
1813 | # CONFIG_SND_MAESTRO3 is not set | ||
1814 | # CONFIG_SND_MIXART is not set | ||
1815 | # CONFIG_SND_NM256 is not set | ||
1816 | # CONFIG_SND_PCXHR is not set | ||
1817 | # CONFIG_SND_RIPTIDE is not set | ||
1818 | # CONFIG_SND_RME32 is not set | ||
1819 | # CONFIG_SND_RME96 is not set | ||
1820 | # CONFIG_SND_RME9652 is not set | ||
1821 | # CONFIG_SND_SIS7019 is not set | ||
1822 | # CONFIG_SND_SONICVIBES is not set | ||
1823 | # CONFIG_SND_TRIDENT is not set | ||
1824 | # CONFIG_SND_VIA82XX is not set | ||
1825 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
1826 | # CONFIG_SND_VIRTUOSO is not set | ||
1827 | # CONFIG_SND_VX222 is not set | ||
1828 | # CONFIG_SND_YMFPCI is not set | ||
1829 | CONFIG_SND_USB=y | ||
1830 | # CONFIG_SND_USB_AUDIO is not set | ||
1831 | # CONFIG_SND_USB_USX2Y is not set | ||
1832 | # CONFIG_SND_USB_CAIAQ is not set | ||
1833 | # CONFIG_SND_USB_US122L is not set | ||
1834 | CONFIG_SND_PCMCIA=y | ||
1835 | # CONFIG_SND_VXPOCKET is not set | ||
1836 | # CONFIG_SND_PDAUDIOCF is not set | ||
1837 | # CONFIG_SND_SOC is not set | ||
1838 | # CONFIG_SOUND_PRIME is not set | ||
1839 | CONFIG_HID_SUPPORT=y | ||
1840 | CONFIG_HID=y | ||
1841 | CONFIG_HID_DEBUG=y | ||
1842 | CONFIG_HIDRAW=y | 240 | CONFIG_HIDRAW=y |
1843 | |||
1844 | # | ||
1845 | # USB Input Devices | ||
1846 | # | ||
1847 | CONFIG_USB_HID=y | ||
1848 | CONFIG_HID_PID=y | 241 | CONFIG_HID_PID=y |
1849 | CONFIG_USB_HIDDEV=y | 242 | CONFIG_USB_HIDDEV=y |
1850 | |||
1851 | # | ||
1852 | # Special HID drivers | ||
1853 | # | ||
1854 | CONFIG_HID_A4TECH=y | ||
1855 | CONFIG_HID_APPLE=y | ||
1856 | CONFIG_HID_BELKIN=y | ||
1857 | CONFIG_HID_CHERRY=y | ||
1858 | CONFIG_HID_CHICONY=y | ||
1859 | CONFIG_HID_CYPRESS=y | ||
1860 | # CONFIG_DRAGONRISE_FF is not set | ||
1861 | CONFIG_HID_EZKEY=y | ||
1862 | CONFIG_HID_KYE=y | ||
1863 | CONFIG_HID_GYRATION=y | 243 | CONFIG_HID_GYRATION=y |
1864 | CONFIG_HID_KENSINGTON=y | ||
1865 | CONFIG_HID_LOGITECH=y | ||
1866 | CONFIG_LOGITECH_FF=y | 244 | CONFIG_LOGITECH_FF=y |
1867 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | ||
1868 | CONFIG_HID_MICROSOFT=y | ||
1869 | CONFIG_HID_MONTEREY=y | ||
1870 | CONFIG_HID_NTRIG=y | 245 | CONFIG_HID_NTRIG=y |
1871 | CONFIG_HID_PANTHERLORD=y | 246 | CONFIG_HID_PANTHERLORD=y |
1872 | CONFIG_PANTHERLORD_FF=y | 247 | CONFIG_PANTHERLORD_FF=y |
@@ -1874,702 +249,92 @@ CONFIG_HID_PETALYNX=y | |||
1874 | CONFIG_HID_SAMSUNG=y | 249 | CONFIG_HID_SAMSUNG=y |
1875 | CONFIG_HID_SONY=y | 250 | CONFIG_HID_SONY=y |
1876 | CONFIG_HID_SUNPLUS=y | 251 | CONFIG_HID_SUNPLUS=y |
1877 | # CONFIG_GREENASIA_FF is not set | ||
1878 | CONFIG_HID_TOPSEED=y | 252 | CONFIG_HID_TOPSEED=y |
1879 | CONFIG_THRUSTMASTER_FF=y | ||
1880 | CONFIG_ZEROPLUS_FF=y | ||
1881 | CONFIG_USB_SUPPORT=y | ||
1882 | CONFIG_USB_ARCH_HAS_HCD=y | ||
1883 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
1884 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
1885 | CONFIG_USB=y | 253 | CONFIG_USB=y |
1886 | CONFIG_USB_DEBUG=y | 254 | CONFIG_USB_DEBUG=y |
1887 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | 255 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y |
1888 | |||
1889 | # | ||
1890 | # Miscellaneous USB options | ||
1891 | # | ||
1892 | CONFIG_USB_DEVICEFS=y | 256 | CONFIG_USB_DEVICEFS=y |
1893 | # CONFIG_USB_DEVICE_CLASS is not set | 257 | # CONFIG_USB_DEVICE_CLASS is not set |
1894 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
1895 | CONFIG_USB_SUSPEND=y | ||
1896 | # CONFIG_USB_OTG is not set | ||
1897 | CONFIG_USB_MON=y | 258 | CONFIG_USB_MON=y |
1898 | # CONFIG_USB_WUSB is not set | ||
1899 | # CONFIG_USB_WUSB_CBAF is not set | ||
1900 | |||
1901 | # | ||
1902 | # USB Host Controller Drivers | ||
1903 | # | ||
1904 | # CONFIG_USB_C67X00_HCD is not set | ||
1905 | CONFIG_USB_EHCI_HCD=y | 259 | CONFIG_USB_EHCI_HCD=y |
1906 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
1907 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 260 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
1908 | # CONFIG_USB_OXU210HP_HCD is not set | ||
1909 | # CONFIG_USB_ISP116X_HCD is not set | ||
1910 | # CONFIG_USB_ISP1760_HCD is not set | ||
1911 | CONFIG_USB_OHCI_HCD=y | 261 | CONFIG_USB_OHCI_HCD=y |
1912 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
1913 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
1914 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
1915 | CONFIG_USB_UHCI_HCD=y | 262 | CONFIG_USB_UHCI_HCD=y |
1916 | # CONFIG_USB_SL811_HCD is not set | ||
1917 | # CONFIG_USB_R8A66597_HCD is not set | ||
1918 | # CONFIG_USB_WHCI_HCD is not set | ||
1919 | # CONFIG_USB_HWA_HCD is not set | ||
1920 | |||
1921 | # | ||
1922 | # USB Device Class drivers | ||
1923 | # | ||
1924 | # CONFIG_USB_ACM is not set | ||
1925 | CONFIG_USB_PRINTER=y | 263 | CONFIG_USB_PRINTER=y |
1926 | # CONFIG_USB_WDM is not set | ||
1927 | # CONFIG_USB_TMC is not set | ||
1928 | |||
1929 | # | ||
1930 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
1931 | # | ||
1932 | |||
1933 | # | ||
1934 | # also be needed; see USB_STORAGE Help for more info | ||
1935 | # | ||
1936 | CONFIG_USB_STORAGE=y | 264 | CONFIG_USB_STORAGE=y |
1937 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
1938 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
1939 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
1940 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
1941 | # CONFIG_USB_STORAGE_USBAT is not set | ||
1942 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
1943 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
1944 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
1945 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
1946 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
1947 | # CONFIG_USB_STORAGE_KARMA is not set | ||
1948 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
1949 | CONFIG_USB_LIBUSUAL=y | 265 | CONFIG_USB_LIBUSUAL=y |
1950 | |||
1951 | # | ||
1952 | # USB Imaging devices | ||
1953 | # | ||
1954 | # CONFIG_USB_MDC800 is not set | ||
1955 | # CONFIG_USB_MICROTEK is not set | ||
1956 | |||
1957 | # | ||
1958 | # USB port drivers | ||
1959 | # | ||
1960 | # CONFIG_USB_SERIAL is not set | ||
1961 | |||
1962 | # | ||
1963 | # USB Miscellaneous drivers | ||
1964 | # | ||
1965 | # CONFIG_USB_EMI62 is not set | ||
1966 | # CONFIG_USB_EMI26 is not set | ||
1967 | # CONFIG_USB_ADUTUX is not set | ||
1968 | # CONFIG_USB_SEVSEG is not set | ||
1969 | # CONFIG_USB_RIO500 is not set | ||
1970 | # CONFIG_USB_LEGOTOWER is not set | ||
1971 | # CONFIG_USB_LCD is not set | ||
1972 | # CONFIG_USB_BERRY_CHARGE is not set | ||
1973 | # CONFIG_USB_LED is not set | ||
1974 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
1975 | # CONFIG_USB_CYTHERM is not set | ||
1976 | # CONFIG_USB_IDMOUSE is not set | ||
1977 | # CONFIG_USB_FTDI_ELAN is not set | ||
1978 | # CONFIG_USB_APPLEDISPLAY is not set | ||
1979 | # CONFIG_USB_SISUSBVGA is not set | ||
1980 | # CONFIG_USB_LD is not set | ||
1981 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
1982 | # CONFIG_USB_IOWARRIOR is not set | ||
1983 | # CONFIG_USB_TEST is not set | ||
1984 | # CONFIG_USB_ISIGHTFW is not set | ||
1985 | # CONFIG_USB_VST is not set | ||
1986 | # CONFIG_USB_GADGET is not set | ||
1987 | |||
1988 | # | ||
1989 | # OTG and related infrastructure | ||
1990 | # | ||
1991 | # CONFIG_NOP_USB_XCEIV is not set | ||
1992 | # CONFIG_UWB is not set | ||
1993 | # CONFIG_MMC is not set | ||
1994 | # CONFIG_MEMSTICK is not set | ||
1995 | CONFIG_NEW_LEDS=y | ||
1996 | CONFIG_LEDS_CLASS=y | ||
1997 | |||
1998 | # | ||
1999 | # LED drivers | ||
2000 | # | ||
2001 | # CONFIG_LEDS_ALIX2 is not set | ||
2002 | # CONFIG_LEDS_PCA9532 is not set | ||
2003 | # CONFIG_LEDS_LP5521 is not set | ||
2004 | # CONFIG_LEDS_CLEVO_MAIL is not set | ||
2005 | # CONFIG_LEDS_PCA955X is not set | ||
2006 | # CONFIG_LEDS_BD2802 is not set | ||
2007 | |||
2008 | # | ||
2009 | # LED Triggers | ||
2010 | # | ||
2011 | CONFIG_LEDS_TRIGGERS=y | ||
2012 | # CONFIG_LEDS_TRIGGER_TIMER is not set | ||
2013 | # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set | ||
2014 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | ||
2015 | # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set | ||
2016 | |||
2017 | # | ||
2018 | # iptables trigger is under Netfilter config (LED target) | ||
2019 | # | ||
2020 | # CONFIG_ACCESSIBILITY is not set | ||
2021 | # CONFIG_INFINIBAND is not set | ||
2022 | CONFIG_EDAC=y | 266 | CONFIG_EDAC=y |
2023 | |||
2024 | # | ||
2025 | # Reporting subsystems | ||
2026 | # | ||
2027 | # CONFIG_EDAC_DEBUG is not set | ||
2028 | # CONFIG_EDAC_MM_EDAC is not set | ||
2029 | CONFIG_RTC_LIB=y | ||
2030 | CONFIG_RTC_CLASS=y | 267 | CONFIG_RTC_CLASS=y |
2031 | # CONFIG_RTC_HCTOSYS is not set | 268 | # CONFIG_RTC_HCTOSYS is not set |
2032 | # CONFIG_RTC_DEBUG is not set | ||
2033 | |||
2034 | # | ||
2035 | # RTC interfaces | ||
2036 | # | ||
2037 | CONFIG_RTC_INTF_SYSFS=y | ||
2038 | CONFIG_RTC_INTF_PROC=y | ||
2039 | CONFIG_RTC_INTF_DEV=y | ||
2040 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
2041 | # CONFIG_RTC_DRV_TEST is not set | ||
2042 | |||
2043 | # | ||
2044 | # I2C RTC drivers | ||
2045 | # | ||
2046 | # CONFIG_RTC_DRV_DS1307 is not set | ||
2047 | # CONFIG_RTC_DRV_DS1374 is not set | ||
2048 | # CONFIG_RTC_DRV_DS1672 is not set | ||
2049 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
2050 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
2051 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
2052 | # CONFIG_RTC_DRV_X1205 is not set | ||
2053 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
2054 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
2055 | # CONFIG_RTC_DRV_M41T80 is not set | ||
2056 | # CONFIG_RTC_DRV_S35390A is not set | ||
2057 | # CONFIG_RTC_DRV_FM3130 is not set | ||
2058 | # CONFIG_RTC_DRV_RX8581 is not set | ||
2059 | |||
2060 | # | ||
2061 | # SPI RTC drivers | ||
2062 | # | ||
2063 | |||
2064 | # | ||
2065 | # Platform RTC drivers | ||
2066 | # | ||
2067 | CONFIG_RTC_DRV_CMOS=y | ||
2068 | # CONFIG_RTC_DRV_DS1286 is not set | ||
2069 | # CONFIG_RTC_DRV_DS1511 is not set | ||
2070 | # CONFIG_RTC_DRV_DS1553 is not set | ||
2071 | # CONFIG_RTC_DRV_DS1742 is not set | ||
2072 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
2073 | # CONFIG_RTC_DRV_M48T86 is not set | ||
2074 | # CONFIG_RTC_DRV_M48T35 is not set | ||
2075 | # CONFIG_RTC_DRV_M48T59 is not set | ||
2076 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
2077 | # CONFIG_RTC_DRV_V3020 is not set | ||
2078 | |||
2079 | # | ||
2080 | # on-CPU RTC drivers | ||
2081 | # | ||
2082 | CONFIG_DMADEVICES=y | 269 | CONFIG_DMADEVICES=y |
2083 | |||
2084 | # | ||
2085 | # DMA Devices | ||
2086 | # | ||
2087 | # CONFIG_INTEL_IOATDMA is not set | ||
2088 | # CONFIG_AUXDISPLAY is not set | ||
2089 | # CONFIG_UIO is not set | ||
2090 | # CONFIG_STAGING is not set | ||
2091 | CONFIG_X86_PLATFORM_DEVICES=y | ||
2092 | # CONFIG_ACER_WMI is not set | ||
2093 | # CONFIG_ASUS_LAPTOP is not set | ||
2094 | # CONFIG_FUJITSU_LAPTOP is not set | ||
2095 | # CONFIG_TC1100_WMI is not set | ||
2096 | # CONFIG_MSI_LAPTOP is not set | ||
2097 | # CONFIG_PANASONIC_LAPTOP is not set | ||
2098 | # CONFIG_COMPAL_LAPTOP is not set | ||
2099 | # CONFIG_SONY_LAPTOP is not set | ||
2100 | # CONFIG_THINKPAD_ACPI is not set | ||
2101 | # CONFIG_INTEL_MENLOW is not set | ||
2102 | CONFIG_EEEPC_LAPTOP=y | 270 | CONFIG_EEEPC_LAPTOP=y |
2103 | # CONFIG_ACPI_WMI is not set | ||
2104 | # CONFIG_ACPI_ASUS is not set | ||
2105 | # CONFIG_ACPI_TOSHIBA is not set | ||
2106 | |||
2107 | # | ||
2108 | # Firmware Drivers | ||
2109 | # | ||
2110 | # CONFIG_EDD is not set | ||
2111 | CONFIG_FIRMWARE_MEMMAP=y | ||
2112 | CONFIG_EFI_VARS=y | 271 | CONFIG_EFI_VARS=y |
2113 | # CONFIG_DELL_RBU is not set | ||
2114 | # CONFIG_DCDBAS is not set | ||
2115 | CONFIG_DMIID=y | ||
2116 | # CONFIG_ISCSI_IBFT_FIND is not set | ||
2117 | |||
2118 | # | ||
2119 | # File systems | ||
2120 | # | ||
2121 | # CONFIG_EXT2_FS is not set | ||
2122 | CONFIG_EXT3_FS=y | 272 | CONFIG_EXT3_FS=y |
2123 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 273 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
2124 | CONFIG_EXT3_FS_XATTR=y | ||
2125 | CONFIG_EXT3_FS_POSIX_ACL=y | 274 | CONFIG_EXT3_FS_POSIX_ACL=y |
2126 | CONFIG_EXT3_FS_SECURITY=y | 275 | CONFIG_EXT3_FS_SECURITY=y |
2127 | # CONFIG_EXT4_FS is not set | ||
2128 | CONFIG_JBD=y | ||
2129 | # CONFIG_JBD_DEBUG is not set | ||
2130 | CONFIG_FS_MBCACHE=y | ||
2131 | # CONFIG_REISERFS_FS is not set | ||
2132 | # CONFIG_JFS_FS is not set | ||
2133 | CONFIG_FS_POSIX_ACL=y | ||
2134 | CONFIG_FILE_LOCKING=y | ||
2135 | # CONFIG_XFS_FS is not set | ||
2136 | # CONFIG_OCFS2_FS is not set | ||
2137 | # CONFIG_BTRFS_FS is not set | ||
2138 | CONFIG_DNOTIFY=y | ||
2139 | CONFIG_INOTIFY=y | ||
2140 | CONFIG_INOTIFY_USER=y | ||
2141 | CONFIG_QUOTA=y | 276 | CONFIG_QUOTA=y |
2142 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 277 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
2143 | # CONFIG_PRINT_QUOTA_WARNING is not set | 278 | # CONFIG_PRINT_QUOTA_WARNING is not set |
2144 | CONFIG_QUOTA_TREE=y | ||
2145 | # CONFIG_QFMT_V1 is not set | ||
2146 | CONFIG_QFMT_V2=y | 279 | CONFIG_QFMT_V2=y |
2147 | CONFIG_QUOTACTL=y | ||
2148 | # CONFIG_AUTOFS_FS is not set | ||
2149 | CONFIG_AUTOFS4_FS=y | 280 | CONFIG_AUTOFS4_FS=y |
2150 | # CONFIG_FUSE_FS is not set | ||
2151 | CONFIG_GENERIC_ACL=y | ||
2152 | |||
2153 | # | ||
2154 | # Caches | ||
2155 | # | ||
2156 | # CONFIG_FSCACHE is not set | ||
2157 | |||
2158 | # | ||
2159 | # CD-ROM/DVD Filesystems | ||
2160 | # | ||
2161 | CONFIG_ISO9660_FS=y | 281 | CONFIG_ISO9660_FS=y |
2162 | CONFIG_JOLIET=y | 282 | CONFIG_JOLIET=y |
2163 | CONFIG_ZISOFS=y | 283 | CONFIG_ZISOFS=y |
2164 | # CONFIG_UDF_FS is not set | ||
2165 | |||
2166 | # | ||
2167 | # DOS/FAT/NT Filesystems | ||
2168 | # | ||
2169 | CONFIG_FAT_FS=y | ||
2170 | CONFIG_MSDOS_FS=y | 284 | CONFIG_MSDOS_FS=y |
2171 | CONFIG_VFAT_FS=y | 285 | CONFIG_VFAT_FS=y |
2172 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
2173 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
2174 | # CONFIG_NTFS_FS is not set | ||
2175 | |||
2176 | # | ||
2177 | # Pseudo filesystems | ||
2178 | # | ||
2179 | CONFIG_PROC_FS=y | ||
2180 | CONFIG_PROC_KCORE=y | 286 | CONFIG_PROC_KCORE=y |
2181 | CONFIG_PROC_VMCORE=y | ||
2182 | CONFIG_PROC_SYSCTL=y | ||
2183 | CONFIG_PROC_PAGE_MONITOR=y | ||
2184 | CONFIG_SYSFS=y | ||
2185 | CONFIG_TMPFS=y | 287 | CONFIG_TMPFS=y |
2186 | CONFIG_TMPFS_POSIX_ACL=y | 288 | CONFIG_TMPFS_POSIX_ACL=y |
2187 | CONFIG_HUGETLBFS=y | 289 | CONFIG_HUGETLBFS=y |
2188 | CONFIG_HUGETLB_PAGE=y | ||
2189 | # CONFIG_CONFIGFS_FS is not set | ||
2190 | CONFIG_MISC_FILESYSTEMS=y | ||
2191 | # CONFIG_ADFS_FS is not set | ||
2192 | # CONFIG_AFFS_FS is not set | ||
2193 | # CONFIG_ECRYPT_FS is not set | ||
2194 | # CONFIG_HFS_FS is not set | ||
2195 | # CONFIG_HFSPLUS_FS is not set | ||
2196 | # CONFIG_BEFS_FS is not set | ||
2197 | # CONFIG_BFS_FS is not set | ||
2198 | # CONFIG_EFS_FS is not set | ||
2199 | # CONFIG_CRAMFS is not set | ||
2200 | # CONFIG_SQUASHFS is not set | ||
2201 | # CONFIG_VXFS_FS is not set | ||
2202 | # CONFIG_MINIX_FS is not set | ||
2203 | # CONFIG_OMFS_FS is not set | ||
2204 | # CONFIG_HPFS_FS is not set | ||
2205 | # CONFIG_QNX4FS_FS is not set | ||
2206 | # CONFIG_ROMFS_FS is not set | ||
2207 | # CONFIG_SYSV_FS is not set | ||
2208 | # CONFIG_UFS_FS is not set | ||
2209 | # CONFIG_NILFS2_FS is not set | ||
2210 | CONFIG_NETWORK_FILESYSTEMS=y | ||
2211 | CONFIG_NFS_FS=y | 290 | CONFIG_NFS_FS=y |
2212 | CONFIG_NFS_V3=y | 291 | CONFIG_NFS_V3=y |
2213 | CONFIG_NFS_V3_ACL=y | 292 | CONFIG_NFS_V3_ACL=y |
2214 | CONFIG_NFS_V4=y | 293 | CONFIG_NFS_V4=y |
2215 | CONFIG_ROOT_NFS=y | 294 | CONFIG_ROOT_NFS=y |
2216 | # CONFIG_NFSD is not set | ||
2217 | CONFIG_LOCKD=y | ||
2218 | CONFIG_LOCKD_V4=y | ||
2219 | CONFIG_NFS_ACL_SUPPORT=y | ||
2220 | CONFIG_NFS_COMMON=y | ||
2221 | CONFIG_SUNRPC=y | ||
2222 | CONFIG_SUNRPC_GSS=y | ||
2223 | CONFIG_RPCSEC_GSS_KRB5=y | ||
2224 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
2225 | # CONFIG_SMB_FS is not set | ||
2226 | # CONFIG_CIFS is not set | ||
2227 | # CONFIG_NCP_FS is not set | ||
2228 | # CONFIG_CODA_FS is not set | ||
2229 | # CONFIG_AFS_FS is not set | ||
2230 | |||
2231 | # | ||
2232 | # Partition Types | ||
2233 | # | ||
2234 | CONFIG_PARTITION_ADVANCED=y | 295 | CONFIG_PARTITION_ADVANCED=y |
2235 | # CONFIG_ACORN_PARTITION is not set | ||
2236 | CONFIG_OSF_PARTITION=y | 296 | CONFIG_OSF_PARTITION=y |
2237 | CONFIG_AMIGA_PARTITION=y | 297 | CONFIG_AMIGA_PARTITION=y |
2238 | # CONFIG_ATARI_PARTITION is not set | ||
2239 | CONFIG_MAC_PARTITION=y | 298 | CONFIG_MAC_PARTITION=y |
2240 | CONFIG_MSDOS_PARTITION=y | ||
2241 | CONFIG_BSD_DISKLABEL=y | 299 | CONFIG_BSD_DISKLABEL=y |
2242 | CONFIG_MINIX_SUBPARTITION=y | 300 | CONFIG_MINIX_SUBPARTITION=y |
2243 | CONFIG_SOLARIS_X86_PARTITION=y | 301 | CONFIG_SOLARIS_X86_PARTITION=y |
2244 | CONFIG_UNIXWARE_DISKLABEL=y | 302 | CONFIG_UNIXWARE_DISKLABEL=y |
2245 | # CONFIG_LDM_PARTITION is not set | ||
2246 | CONFIG_SGI_PARTITION=y | 303 | CONFIG_SGI_PARTITION=y |
2247 | # CONFIG_ULTRIX_PARTITION is not set | ||
2248 | CONFIG_SUN_PARTITION=y | 304 | CONFIG_SUN_PARTITION=y |
2249 | CONFIG_KARMA_PARTITION=y | 305 | CONFIG_KARMA_PARTITION=y |
2250 | CONFIG_EFI_PARTITION=y | 306 | CONFIG_EFI_PARTITION=y |
2251 | # CONFIG_SYSV68_PARTITION is not set | ||
2252 | CONFIG_NLS=y | ||
2253 | CONFIG_NLS_DEFAULT="utf8" | 307 | CONFIG_NLS_DEFAULT="utf8" |
2254 | CONFIG_NLS_CODEPAGE_437=y | 308 | CONFIG_NLS_CODEPAGE_437=y |
2255 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
2256 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
2257 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
2258 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
2259 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
2260 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
2261 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
2262 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
2263 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
2264 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
2265 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
2266 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
2267 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
2268 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
2269 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
2270 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
2271 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
2272 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
2273 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
2274 | # CONFIG_NLS_ISO8859_8 is not set | ||
2275 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
2276 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
2277 | CONFIG_NLS_ASCII=y | 309 | CONFIG_NLS_ASCII=y |
2278 | CONFIG_NLS_ISO8859_1=y | 310 | CONFIG_NLS_ISO8859_1=y |
2279 | # CONFIG_NLS_ISO8859_2 is not set | ||
2280 | # CONFIG_NLS_ISO8859_3 is not set | ||
2281 | # CONFIG_NLS_ISO8859_4 is not set | ||
2282 | # CONFIG_NLS_ISO8859_5 is not set | ||
2283 | # CONFIG_NLS_ISO8859_6 is not set | ||
2284 | # CONFIG_NLS_ISO8859_7 is not set | ||
2285 | # CONFIG_NLS_ISO8859_9 is not set | ||
2286 | # CONFIG_NLS_ISO8859_13 is not set | ||
2287 | # CONFIG_NLS_ISO8859_14 is not set | ||
2288 | # CONFIG_NLS_ISO8859_15 is not set | ||
2289 | # CONFIG_NLS_KOI8_R is not set | ||
2290 | # CONFIG_NLS_KOI8_U is not set | ||
2291 | CONFIG_NLS_UTF8=y | 311 | CONFIG_NLS_UTF8=y |
2292 | # CONFIG_DLM is not set | ||
2293 | |||
2294 | # | ||
2295 | # Kernel hacking | ||
2296 | # | ||
2297 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
2298 | CONFIG_PRINTK_TIME=y | 312 | CONFIG_PRINTK_TIME=y |
2299 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | 313 | # CONFIG_ENABLE_WARN_DEPRECATED is not set |
2300 | CONFIG_ENABLE_MUST_CHECK=y | ||
2301 | CONFIG_FRAME_WARN=2048 | 314 | CONFIG_FRAME_WARN=2048 |
2302 | CONFIG_MAGIC_SYSRQ=y | 315 | CONFIG_MAGIC_SYSRQ=y |
2303 | # CONFIG_UNUSED_SYMBOLS is not set | 316 | # CONFIG_UNUSED_SYMBOLS is not set |
2304 | CONFIG_DEBUG_FS=y | ||
2305 | # CONFIG_HEADERS_CHECK is not set | ||
2306 | CONFIG_DEBUG_KERNEL=y | 317 | CONFIG_DEBUG_KERNEL=y |
2307 | # CONFIG_DEBUG_SHIRQ is not set | ||
2308 | # CONFIG_DETECT_SOFTLOCKUP is not set | ||
2309 | # CONFIG_DETECT_HUNG_TASK is not set | ||
2310 | # CONFIG_SCHED_DEBUG is not set | 318 | # CONFIG_SCHED_DEBUG is not set |
2311 | CONFIG_SCHEDSTATS=y | 319 | CONFIG_SCHEDSTATS=y |
2312 | CONFIG_TIMER_STATS=y | 320 | CONFIG_TIMER_STATS=y |
2313 | # CONFIG_DEBUG_OBJECTS is not set | ||
2314 | # CONFIG_SLUB_DEBUG_ON is not set | ||
2315 | # CONFIG_SLUB_STATS is not set | ||
2316 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
2317 | # CONFIG_RT_MUTEX_TESTER is not set | ||
2318 | # CONFIG_DEBUG_SPINLOCK is not set | ||
2319 | # CONFIG_DEBUG_MUTEXES is not set | ||
2320 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
2321 | # CONFIG_PROVE_LOCKING is not set | ||
2322 | # CONFIG_LOCK_STAT is not set | ||
2323 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
2324 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
2325 | CONFIG_STACKTRACE=y | ||
2326 | # CONFIG_DEBUG_KOBJECT is not set | ||
2327 | # CONFIG_DEBUG_HIGHMEM is not set | ||
2328 | CONFIG_DEBUG_BUGVERBOSE=y | ||
2329 | # CONFIG_DEBUG_INFO is not set | ||
2330 | # CONFIG_DEBUG_VM is not set | ||
2331 | # CONFIG_DEBUG_VIRTUAL is not set | ||
2332 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
2333 | CONFIG_DEBUG_MEMORY_INIT=y | ||
2334 | # CONFIG_DEBUG_LIST is not set | ||
2335 | # CONFIG_DEBUG_SG is not set | ||
2336 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
2337 | CONFIG_ARCH_WANT_FRAME_POINTERS=y | ||
2338 | CONFIG_FRAME_POINTER=y | ||
2339 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
2340 | # CONFIG_RCU_TORTURE_TEST is not set | ||
2341 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 321 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
2342 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
2343 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
2344 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
2345 | # CONFIG_LKDTM is not set | ||
2346 | # CONFIG_FAULT_INJECTION is not set | ||
2347 | # CONFIG_LATENCYTOP is not set | ||
2348 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 322 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
2349 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
2350 | CONFIG_USER_STACKTRACE_SUPPORT=y | ||
2351 | CONFIG_NOP_TRACER=y | ||
2352 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
2353 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
2354 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y | ||
2355 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
2356 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
2357 | CONFIG_HAVE_HW_BRANCH_TRACER=y | ||
2358 | CONFIG_HAVE_SYSCALL_TRACEPOINTS=y | ||
2359 | CONFIG_RING_BUFFER=y | ||
2360 | CONFIG_TRACING=y | ||
2361 | CONFIG_TRACING_SUPPORT=y | ||
2362 | |||
2363 | # | ||
2364 | # Tracers | ||
2365 | # | ||
2366 | # CONFIG_FUNCTION_TRACER is not set | ||
2367 | # CONFIG_IRQSOFF_TRACER is not set | ||
2368 | # CONFIG_SYSPROF_TRACER is not set | ||
2369 | # CONFIG_SCHED_TRACER is not set | ||
2370 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | ||
2371 | # CONFIG_EVENT_TRACER is not set | ||
2372 | # CONFIG_FTRACE_SYSCALLS is not set | ||
2373 | # CONFIG_BOOT_TRACER is not set | ||
2374 | # CONFIG_TRACE_BRANCH_PROFILING is not set | ||
2375 | # CONFIG_POWER_TRACER is not set | ||
2376 | # CONFIG_STACK_TRACER is not set | ||
2377 | # CONFIG_HW_BRANCH_TRACER is not set | ||
2378 | # CONFIG_KMEMTRACE is not set | ||
2379 | # CONFIG_WORKQUEUE_TRACER is not set | ||
2380 | CONFIG_BLK_DEV_IO_TRACE=y | 323 | CONFIG_BLK_DEV_IO_TRACE=y |
2381 | # CONFIG_FTRACE_STARTUP_TEST is not set | ||
2382 | # CONFIG_MMIOTRACE is not set | ||
2383 | CONFIG_PROVIDE_OHCI1394_DMA_INIT=y | 324 | CONFIG_PROVIDE_OHCI1394_DMA_INIT=y |
2384 | # CONFIG_DYNAMIC_DEBUG is not set | ||
2385 | # CONFIG_DMA_API_DEBUG is not set | ||
2386 | # CONFIG_SAMPLES is not set | ||
2387 | CONFIG_HAVE_ARCH_KGDB=y | ||
2388 | # CONFIG_KGDB is not set | ||
2389 | # CONFIG_STRICT_DEVMEM is not set | ||
2390 | CONFIG_X86_VERBOSE_BOOTUP=y | ||
2391 | CONFIG_EARLY_PRINTK=y | ||
2392 | CONFIG_EARLY_PRINTK_DBGP=y | 325 | CONFIG_EARLY_PRINTK_DBGP=y |
2393 | CONFIG_DEBUG_STACKOVERFLOW=y | 326 | CONFIG_DEBUG_STACKOVERFLOW=y |
2394 | CONFIG_DEBUG_STACK_USAGE=y | 327 | CONFIG_DEBUG_STACK_USAGE=y |
2395 | # CONFIG_DEBUG_PER_CPU_MAPS is not set | ||
2396 | # CONFIG_X86_PTDUMP is not set | ||
2397 | CONFIG_DEBUG_RODATA=y | ||
2398 | # CONFIG_DEBUG_RODATA_TEST is not set | 328 | # CONFIG_DEBUG_RODATA_TEST is not set |
2399 | CONFIG_DEBUG_NX_TEST=m | 329 | CONFIG_DEBUG_NX_TEST=m |
2400 | # CONFIG_4KSTACKS is not set | ||
2401 | CONFIG_DOUBLEFAULT=y | ||
2402 | CONFIG_HAVE_MMIOTRACE_SUPPORT=y | ||
2403 | CONFIG_IO_DELAY_TYPE_0X80=0 | ||
2404 | CONFIG_IO_DELAY_TYPE_0XED=1 | ||
2405 | CONFIG_IO_DELAY_TYPE_UDELAY=2 | ||
2406 | CONFIG_IO_DELAY_TYPE_NONE=3 | ||
2407 | CONFIG_IO_DELAY_0X80=y | ||
2408 | # CONFIG_IO_DELAY_0XED is not set | ||
2409 | # CONFIG_IO_DELAY_UDELAY is not set | ||
2410 | # CONFIG_IO_DELAY_NONE is not set | ||
2411 | CONFIG_DEFAULT_IO_DELAY_TYPE=0 | ||
2412 | CONFIG_DEBUG_BOOT_PARAMS=y | 330 | CONFIG_DEBUG_BOOT_PARAMS=y |
2413 | # CONFIG_CPA_DEBUG is not set | ||
2414 | CONFIG_OPTIMIZE_INLINING=y | 331 | CONFIG_OPTIMIZE_INLINING=y |
2415 | |||
2416 | # | ||
2417 | # Security options | ||
2418 | # | ||
2419 | CONFIG_KEYS=y | ||
2420 | CONFIG_KEYS_DEBUG_PROC_KEYS=y | 332 | CONFIG_KEYS_DEBUG_PROC_KEYS=y |
2421 | CONFIG_SECURITY=y | 333 | CONFIG_SECURITY=y |
2422 | # CONFIG_SECURITYFS is not set | ||
2423 | CONFIG_SECURITY_NETWORK=y | 334 | CONFIG_SECURITY_NETWORK=y |
2424 | # CONFIG_SECURITY_NETWORK_XFRM is not set | ||
2425 | # CONFIG_SECURITY_PATH is not set | ||
2426 | CONFIG_SECURITY_FILE_CAPABILITIES=y | ||
2427 | # CONFIG_SECURITY_ROOTPLUG is not set | ||
2428 | CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536 | ||
2429 | CONFIG_SECURITY_SELINUX=y | 335 | CONFIG_SECURITY_SELINUX=y |
2430 | CONFIG_SECURITY_SELINUX_BOOTPARAM=y | 336 | CONFIG_SECURITY_SELINUX_BOOTPARAM=y |
2431 | CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1 | ||
2432 | CONFIG_SECURITY_SELINUX_DISABLE=y | 337 | CONFIG_SECURITY_SELINUX_DISABLE=y |
2433 | CONFIG_SECURITY_SELINUX_DEVELOP=y | ||
2434 | CONFIG_SECURITY_SELINUX_AVC_STATS=y | ||
2435 | CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 | ||
2436 | # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set | ||
2437 | # CONFIG_SECURITY_SMACK is not set | ||
2438 | # CONFIG_SECURITY_TOMOYO is not set | ||
2439 | # CONFIG_IMA is not set | ||
2440 | CONFIG_CRYPTO=y | ||
2441 | |||
2442 | # | ||
2443 | # Crypto core or helper | ||
2444 | # | ||
2445 | # CONFIG_CRYPTO_FIPS is not set | ||
2446 | CONFIG_CRYPTO_ALGAPI=y | ||
2447 | CONFIG_CRYPTO_ALGAPI2=y | ||
2448 | CONFIG_CRYPTO_AEAD=y | ||
2449 | CONFIG_CRYPTO_AEAD2=y | ||
2450 | CONFIG_CRYPTO_BLKCIPHER=y | ||
2451 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
2452 | CONFIG_CRYPTO_HASH=y | ||
2453 | CONFIG_CRYPTO_HASH2=y | ||
2454 | CONFIG_CRYPTO_RNG2=y | ||
2455 | CONFIG_CRYPTO_PCOMP=y | ||
2456 | CONFIG_CRYPTO_MANAGER=y | ||
2457 | CONFIG_CRYPTO_MANAGER2=y | ||
2458 | # CONFIG_CRYPTO_GF128MUL is not set | ||
2459 | # CONFIG_CRYPTO_NULL is not set | ||
2460 | CONFIG_CRYPTO_WORKQUEUE=y | ||
2461 | # CONFIG_CRYPTO_CRYPTD is not set | ||
2462 | CONFIG_CRYPTO_AUTHENC=y | ||
2463 | # CONFIG_CRYPTO_TEST is not set | ||
2464 | |||
2465 | # | ||
2466 | # Authenticated Encryption with Associated Data | ||
2467 | # | ||
2468 | # CONFIG_CRYPTO_CCM is not set | ||
2469 | # CONFIG_CRYPTO_GCM is not set | ||
2470 | # CONFIG_CRYPTO_SEQIV is not set | ||
2471 | |||
2472 | # | ||
2473 | # Block modes | ||
2474 | # | ||
2475 | CONFIG_CRYPTO_CBC=y | ||
2476 | # CONFIG_CRYPTO_CTR is not set | ||
2477 | # CONFIG_CRYPTO_CTS is not set | ||
2478 | CONFIG_CRYPTO_ECB=y | ||
2479 | # CONFIG_CRYPTO_LRW is not set | ||
2480 | # CONFIG_CRYPTO_PCBC is not set | ||
2481 | # CONFIG_CRYPTO_XTS is not set | ||
2482 | |||
2483 | # | ||
2484 | # Hash modes | ||
2485 | # | ||
2486 | CONFIG_CRYPTO_HMAC=y | ||
2487 | # CONFIG_CRYPTO_XCBC is not set | ||
2488 | |||
2489 | # | ||
2490 | # Digest | ||
2491 | # | ||
2492 | # CONFIG_CRYPTO_CRC32C is not set | ||
2493 | # CONFIG_CRYPTO_CRC32C_INTEL is not set | ||
2494 | # CONFIG_CRYPTO_MD4 is not set | ||
2495 | CONFIG_CRYPTO_MD5=y | ||
2496 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
2497 | # CONFIG_CRYPTO_RMD128 is not set | ||
2498 | # CONFIG_CRYPTO_RMD160 is not set | ||
2499 | # CONFIG_CRYPTO_RMD256 is not set | ||
2500 | # CONFIG_CRYPTO_RMD320 is not set | ||
2501 | CONFIG_CRYPTO_SHA1=y | ||
2502 | # CONFIG_CRYPTO_SHA256 is not set | ||
2503 | # CONFIG_CRYPTO_SHA512 is not set | ||
2504 | # CONFIG_CRYPTO_TGR192 is not set | ||
2505 | # CONFIG_CRYPTO_WP512 is not set | ||
2506 | |||
2507 | # | ||
2508 | # Ciphers | ||
2509 | # | ||
2510 | CONFIG_CRYPTO_AES=y | ||
2511 | CONFIG_CRYPTO_AES_586=y | 338 | CONFIG_CRYPTO_AES_586=y |
2512 | # CONFIG_CRYPTO_ANUBIS is not set | ||
2513 | CONFIG_CRYPTO_ARC4=y | ||
2514 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
2515 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
2516 | # CONFIG_CRYPTO_CAST5 is not set | ||
2517 | # CONFIG_CRYPTO_CAST6 is not set | ||
2518 | CONFIG_CRYPTO_DES=y | ||
2519 | # CONFIG_CRYPTO_FCRYPT is not set | ||
2520 | # CONFIG_CRYPTO_KHAZAD is not set | ||
2521 | # CONFIG_CRYPTO_SALSA20 is not set | ||
2522 | # CONFIG_CRYPTO_SALSA20_586 is not set | ||
2523 | # CONFIG_CRYPTO_SEED is not set | ||
2524 | # CONFIG_CRYPTO_SERPENT is not set | ||
2525 | # CONFIG_CRYPTO_TEA is not set | ||
2526 | # CONFIG_CRYPTO_TWOFISH is not set | ||
2527 | # CONFIG_CRYPTO_TWOFISH_586 is not set | ||
2528 | |||
2529 | # | ||
2530 | # Compression | ||
2531 | # | ||
2532 | # CONFIG_CRYPTO_DEFLATE is not set | ||
2533 | # CONFIG_CRYPTO_ZLIB is not set | ||
2534 | # CONFIG_CRYPTO_LZO is not set | ||
2535 | |||
2536 | # | ||
2537 | # Random Number Generation | ||
2538 | # | ||
2539 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 339 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
2540 | CONFIG_CRYPTO_HW=y | ||
2541 | # CONFIG_CRYPTO_DEV_PADLOCK is not set | ||
2542 | # CONFIG_CRYPTO_DEV_GEODE is not set | ||
2543 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
2544 | CONFIG_HAVE_KVM=y | ||
2545 | CONFIG_HAVE_KVM_IRQCHIP=y | ||
2546 | CONFIG_VIRTUALIZATION=y | ||
2547 | # CONFIG_KVM is not set | ||
2548 | # CONFIG_LGUEST is not set | ||
2549 | # CONFIG_VIRTIO_PCI is not set | ||
2550 | # CONFIG_VIRTIO_BALLOON is not set | ||
2551 | CONFIG_BINARY_PRINTF=y | ||
2552 | |||
2553 | # | ||
2554 | # Library routines | ||
2555 | # | ||
2556 | CONFIG_BITREVERSE=y | ||
2557 | CONFIG_GENERIC_FIND_FIRST_BIT=y | ||
2558 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
2559 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
2560 | # CONFIG_CRC_CCITT is not set | ||
2561 | # CONFIG_CRC16 is not set | ||
2562 | CONFIG_CRC_T10DIF=y | 340 | CONFIG_CRC_T10DIF=y |
2563 | # CONFIG_CRC_ITU_T is not set | ||
2564 | CONFIG_CRC32=y | ||
2565 | # CONFIG_CRC7 is not set | ||
2566 | # CONFIG_LIBCRC32C is not set | ||
2567 | CONFIG_AUDIT_GENERIC=y | ||
2568 | CONFIG_ZLIB_INFLATE=y | ||
2569 | CONFIG_DECOMPRESS_GZIP=y | ||
2570 | CONFIG_DECOMPRESS_BZIP2=y | ||
2571 | CONFIG_DECOMPRESS_LZMA=y | ||
2572 | CONFIG_HAS_IOMEM=y | ||
2573 | CONFIG_HAS_IOPORT=y | ||
2574 | CONFIG_HAS_DMA=y | ||
2575 | CONFIG_NLATTR=y | ||
diff --git a/arch/x86/configs/x86_64_defconfig b/arch/x86/configs/x86_64_defconfig index 6c86acd847a4..ee01a9d5d4f0 100644 --- a/arch/x86/configs/x86_64_defconfig +++ b/arch/x86/configs/x86_64_defconfig | |||
@@ -1,519 +1,89 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.30-rc2 | ||
4 | # Mon May 11 16:22:00 2009 | ||
5 | # | ||
6 | CONFIG_64BIT=y | 1 | CONFIG_64BIT=y |
7 | # CONFIG_X86_32 is not set | ||
8 | CONFIG_X86_64=y | ||
9 | CONFIG_X86=y | ||
10 | CONFIG_OUTPUT_FORMAT="elf64-x86-64" | ||
11 | CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" | ||
12 | CONFIG_GENERIC_TIME=y | ||
13 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
14 | CONFIG_CLOCKSOURCE_WATCHDOG=y | ||
15 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
16 | CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y | ||
17 | CONFIG_LOCKDEP_SUPPORT=y | ||
18 | CONFIG_STACKTRACE_SUPPORT=y | ||
19 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
20 | CONFIG_FAST_CMPXCHG_LOCAL=y | ||
21 | CONFIG_MMU=y | ||
22 | CONFIG_ZONE_DMA=y | ||
23 | CONFIG_GENERIC_ISA_DMA=y | ||
24 | CONFIG_GENERIC_IOMAP=y | ||
25 | CONFIG_GENERIC_BUG=y | ||
26 | CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y | ||
27 | CONFIG_GENERIC_HWEIGHT=y | ||
28 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
29 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
30 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | ||
31 | CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y | ||
32 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
33 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
34 | CONFIG_ARCH_HAS_CPU_RELAX=y | ||
35 | CONFIG_ARCH_HAS_DEFAULT_IDLE=y | ||
36 | CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y | ||
37 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | ||
38 | CONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y | ||
39 | CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y | ||
40 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
41 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
42 | CONFIG_ZONE_DMA32=y | ||
43 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
44 | CONFIG_AUDIT_ARCH=y | ||
45 | CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y | ||
46 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
47 | CONFIG_GENERIC_HARDIRQS=y | ||
48 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
49 | CONFIG_GENERIC_IRQ_PROBE=y | ||
50 | CONFIG_GENERIC_PENDING_IRQ=y | ||
51 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
52 | CONFIG_X86_64_SMP=y | ||
53 | CONFIG_X86_HT=y | ||
54 | CONFIG_X86_TRAMPOLINE=y | ||
55 | # CONFIG_KTIME_SCALAR is not set | ||
56 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
57 | |||
58 | # | ||
59 | # General setup | ||
60 | # | ||
61 | CONFIG_EXPERIMENTAL=y | 2 | CONFIG_EXPERIMENTAL=y |
62 | CONFIG_LOCK_KERNEL=y | ||
63 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
64 | CONFIG_LOCALVERSION="" | ||
65 | # CONFIG_LOCALVERSION_AUTO is not set | 3 | # CONFIG_LOCALVERSION_AUTO is not set |
66 | CONFIG_HAVE_KERNEL_GZIP=y | ||
67 | CONFIG_HAVE_KERNEL_BZIP2=y | ||
68 | CONFIG_HAVE_KERNEL_LZMA=y | ||
69 | CONFIG_KERNEL_GZIP=y | ||
70 | # CONFIG_KERNEL_BZIP2 is not set | ||
71 | # CONFIG_KERNEL_LZMA is not set | ||
72 | CONFIG_SWAP=y | ||
73 | CONFIG_SYSVIPC=y | 4 | CONFIG_SYSVIPC=y |
74 | CONFIG_SYSVIPC_SYSCTL=y | ||
75 | CONFIG_POSIX_MQUEUE=y | 5 | CONFIG_POSIX_MQUEUE=y |
76 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
77 | CONFIG_BSD_PROCESS_ACCT=y | 6 | CONFIG_BSD_PROCESS_ACCT=y |
78 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
79 | CONFIG_TASKSTATS=y | 7 | CONFIG_TASKSTATS=y |
80 | CONFIG_TASK_DELAY_ACCT=y | 8 | CONFIG_TASK_DELAY_ACCT=y |
81 | CONFIG_TASK_XACCT=y | 9 | CONFIG_TASK_XACCT=y |
82 | CONFIG_TASK_IO_ACCOUNTING=y | 10 | CONFIG_TASK_IO_ACCOUNTING=y |
83 | CONFIG_AUDIT=y | 11 | CONFIG_AUDIT=y |
84 | CONFIG_AUDITSYSCALL=y | ||
85 | CONFIG_AUDIT_TREE=y | ||
86 | |||
87 | # | ||
88 | # RCU Subsystem | ||
89 | # | ||
90 | # CONFIG_CLASSIC_RCU is not set | ||
91 | CONFIG_TREE_RCU=y | ||
92 | # CONFIG_PREEMPT_RCU is not set | ||
93 | # CONFIG_RCU_TRACE is not set | ||
94 | CONFIG_RCU_FANOUT=64 | ||
95 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
96 | # CONFIG_TREE_RCU_TRACE is not set | ||
97 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
98 | # CONFIG_IKCONFIG is not set | ||
99 | CONFIG_LOG_BUF_SHIFT=18 | 12 | CONFIG_LOG_BUF_SHIFT=18 |
100 | CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y | ||
101 | CONFIG_GROUP_SCHED=y | ||
102 | CONFIG_FAIR_GROUP_SCHED=y | ||
103 | # CONFIG_RT_GROUP_SCHED is not set | ||
104 | # CONFIG_USER_SCHED is not set | ||
105 | CONFIG_CGROUP_SCHED=y | ||
106 | CONFIG_CGROUPS=y | 13 | CONFIG_CGROUPS=y |
107 | # CONFIG_CGROUP_DEBUG is not set | ||
108 | CONFIG_CGROUP_NS=y | 14 | CONFIG_CGROUP_NS=y |
109 | CONFIG_CGROUP_FREEZER=y | 15 | CONFIG_CGROUP_FREEZER=y |
110 | # CONFIG_CGROUP_DEVICE is not set | ||
111 | CONFIG_CPUSETS=y | 16 | CONFIG_CPUSETS=y |
112 | CONFIG_PROC_PID_CPUSET=y | ||
113 | CONFIG_CGROUP_CPUACCT=y | 17 | CONFIG_CGROUP_CPUACCT=y |
114 | CONFIG_RESOURCE_COUNTERS=y | 18 | CONFIG_RESOURCE_COUNTERS=y |
115 | # CONFIG_CGROUP_MEM_RES_CTLR is not set | 19 | CONFIG_CGROUP_SCHED=y |
116 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
117 | CONFIG_RELAY=y | ||
118 | CONFIG_NAMESPACES=y | ||
119 | CONFIG_UTS_NS=y | 20 | CONFIG_UTS_NS=y |
120 | CONFIG_IPC_NS=y | 21 | CONFIG_IPC_NS=y |
121 | CONFIG_USER_NS=y | 22 | CONFIG_USER_NS=y |
122 | CONFIG_PID_NS=y | 23 | CONFIG_PID_NS=y |
123 | CONFIG_NET_NS=y | 24 | CONFIG_NET_NS=y |
124 | CONFIG_BLK_DEV_INITRD=y | 25 | CONFIG_BLK_DEV_INITRD=y |
125 | CONFIG_INITRAMFS_SOURCE="" | ||
126 | CONFIG_RD_GZIP=y | ||
127 | CONFIG_RD_BZIP2=y | ||
128 | CONFIG_RD_LZMA=y | ||
129 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
130 | CONFIG_SYSCTL=y | ||
131 | CONFIG_ANON_INODES=y | ||
132 | # CONFIG_EMBEDDED is not set | ||
133 | CONFIG_UID16=y | ||
134 | CONFIG_SYSCTL_SYSCALL=y | ||
135 | CONFIG_KALLSYMS=y | ||
136 | CONFIG_KALLSYMS_ALL=y | ||
137 | CONFIG_KALLSYMS_EXTRA_PASS=y | 26 | CONFIG_KALLSYMS_EXTRA_PASS=y |
138 | # CONFIG_STRIP_ASM_SYMS is not set | ||
139 | CONFIG_HOTPLUG=y | ||
140 | CONFIG_PRINTK=y | ||
141 | CONFIG_BUG=y | ||
142 | CONFIG_ELF_CORE=y | ||
143 | CONFIG_PCSPKR_PLATFORM=y | ||
144 | CONFIG_BASE_FULL=y | ||
145 | CONFIG_FUTEX=y | ||
146 | CONFIG_EPOLL=y | ||
147 | CONFIG_SIGNALFD=y | ||
148 | CONFIG_TIMERFD=y | ||
149 | CONFIG_EVENTFD=y | ||
150 | CONFIG_SHMEM=y | ||
151 | CONFIG_AIO=y | ||
152 | CONFIG_VM_EVENT_COUNTERS=y | ||
153 | CONFIG_PCI_QUIRKS=y | ||
154 | CONFIG_SLUB_DEBUG=y | ||
155 | # CONFIG_COMPAT_BRK is not set | 27 | # CONFIG_COMPAT_BRK is not set |
156 | # CONFIG_SLAB is not set | ||
157 | CONFIG_SLUB=y | ||
158 | # CONFIG_SLOB is not set | ||
159 | CONFIG_PROFILING=y | 28 | CONFIG_PROFILING=y |
160 | CONFIG_TRACEPOINTS=y | ||
161 | CONFIG_MARKERS=y | ||
162 | # CONFIG_OPROFILE is not set | ||
163 | CONFIG_HAVE_OPROFILE=y | ||
164 | CONFIG_KPROBES=y | 29 | CONFIG_KPROBES=y |
165 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | ||
166 | CONFIG_KRETPROBES=y | ||
167 | CONFIG_HAVE_IOREMAP_PROT=y | ||
168 | CONFIG_HAVE_KPROBES=y | ||
169 | CONFIG_HAVE_KRETPROBES=y | ||
170 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
171 | CONFIG_HAVE_DMA_API_DEBUG=y | ||
172 | # CONFIG_SLOW_WORK is not set | ||
173 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
174 | CONFIG_SLABINFO=y | ||
175 | CONFIG_RT_MUTEXES=y | ||
176 | CONFIG_BASE_SMALL=0 | ||
177 | CONFIG_MODULES=y | 30 | CONFIG_MODULES=y |
178 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
179 | CONFIG_MODULE_UNLOAD=y | 31 | CONFIG_MODULE_UNLOAD=y |
180 | CONFIG_MODULE_FORCE_UNLOAD=y | 32 | CONFIG_MODULE_FORCE_UNLOAD=y |
181 | # CONFIG_MODVERSIONS is not set | ||
182 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
183 | CONFIG_STOP_MACHINE=y | ||
184 | CONFIG_BLOCK=y | ||
185 | CONFIG_BLK_DEV_BSG=y | ||
186 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
187 | CONFIG_BLOCK_COMPAT=y | ||
188 | |||
189 | # | ||
190 | # IO Schedulers | ||
191 | # | ||
192 | CONFIG_IOSCHED_NOOP=y | ||
193 | CONFIG_IOSCHED_AS=y | ||
194 | CONFIG_IOSCHED_DEADLINE=y | ||
195 | CONFIG_IOSCHED_CFQ=y | ||
196 | # CONFIG_DEFAULT_AS is not set | ||
197 | # CONFIG_DEFAULT_DEADLINE is not set | ||
198 | CONFIG_DEFAULT_CFQ=y | ||
199 | # CONFIG_DEFAULT_NOOP is not set | ||
200 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
201 | CONFIG_FREEZER=y | ||
202 | |||
203 | # | ||
204 | # Processor type and features | ||
205 | # | ||
206 | CONFIG_TICK_ONESHOT=y | ||
207 | CONFIG_NO_HZ=y | 33 | CONFIG_NO_HZ=y |
208 | CONFIG_HIGH_RES_TIMERS=y | 34 | CONFIG_HIGH_RES_TIMERS=y |
209 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
210 | CONFIG_SMP=y | 35 | CONFIG_SMP=y |
211 | CONFIG_SPARSE_IRQ=y | 36 | CONFIG_SPARSE_IRQ=y |
212 | CONFIG_X86_MPPARSE=y | ||
213 | CONFIG_X86_EXTENDED_PLATFORM=y | ||
214 | # CONFIG_X86_VSMP is not set | ||
215 | # CONFIG_X86_UV is not set | ||
216 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
217 | # CONFIG_PARAVIRT_GUEST is not set | ||
218 | # CONFIG_MEMTEST is not set | ||
219 | # CONFIG_M386 is not set | ||
220 | # CONFIG_M486 is not set | ||
221 | # CONFIG_M586 is not set | ||
222 | # CONFIG_M586TSC is not set | ||
223 | # CONFIG_M586MMX is not set | ||
224 | # CONFIG_M686 is not set | ||
225 | # CONFIG_MPENTIUMII is not set | ||
226 | # CONFIG_MPENTIUMIII is not set | ||
227 | # CONFIG_MPENTIUMM is not set | ||
228 | # CONFIG_MPENTIUM4 is not set | ||
229 | # CONFIG_MK6 is not set | ||
230 | # CONFIG_MK7 is not set | ||
231 | # CONFIG_MK8 is not set | ||
232 | # CONFIG_MCRUSOE is not set | ||
233 | # CONFIG_MEFFICEON is not set | ||
234 | # CONFIG_MWINCHIPC6 is not set | ||
235 | # CONFIG_MWINCHIP3D is not set | ||
236 | # CONFIG_MGEODEGX1 is not set | ||
237 | # CONFIG_MGEODE_LX is not set | ||
238 | # CONFIG_MCYRIXIII is not set | ||
239 | # CONFIG_MVIAC3_2 is not set | ||
240 | # CONFIG_MVIAC7 is not set | ||
241 | # CONFIG_MPSC is not set | ||
242 | # CONFIG_MCORE2 is not set | ||
243 | CONFIG_GENERIC_CPU=y | ||
244 | CONFIG_X86_CPU=y | ||
245 | CONFIG_X86_L1_CACHE_BYTES=64 | ||
246 | CONFIG_X86_INTERNODE_CACHE_BYTES=64 | ||
247 | CONFIG_X86_CMPXCHG=y | ||
248 | CONFIG_X86_L1_CACHE_SHIFT=6 | ||
249 | CONFIG_X86_WP_WORKS_OK=y | ||
250 | CONFIG_X86_TSC=y | ||
251 | CONFIG_X86_CMPXCHG64=y | ||
252 | CONFIG_X86_CMOV=y | ||
253 | CONFIG_X86_MINIMUM_CPU_FAMILY=64 | ||
254 | CONFIG_X86_DEBUGCTLMSR=y | ||
255 | CONFIG_CPU_SUP_INTEL=y | ||
256 | CONFIG_CPU_SUP_AMD=y | ||
257 | CONFIG_CPU_SUP_CENTAUR=y | ||
258 | CONFIG_X86_DS=y | ||
259 | CONFIG_X86_PTRACE_BTS=y | ||
260 | CONFIG_HPET_TIMER=y | ||
261 | CONFIG_HPET_EMULATE_RTC=y | ||
262 | CONFIG_DMI=y | ||
263 | CONFIG_GART_IOMMU=y | ||
264 | CONFIG_CALGARY_IOMMU=y | 37 | CONFIG_CALGARY_IOMMU=y |
265 | CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y | ||
266 | CONFIG_AMD_IOMMU=y | 38 | CONFIG_AMD_IOMMU=y |
267 | CONFIG_AMD_IOMMU_STATS=y | 39 | CONFIG_AMD_IOMMU_STATS=y |
268 | CONFIG_SWIOTLB=y | ||
269 | CONFIG_IOMMU_HELPER=y | ||
270 | CONFIG_IOMMU_API=y | ||
271 | # CONFIG_MAXSMP is not set | ||
272 | CONFIG_NR_CPUS=64 | 40 | CONFIG_NR_CPUS=64 |
273 | CONFIG_SCHED_SMT=y | 41 | CONFIG_SCHED_SMT=y |
274 | CONFIG_SCHED_MC=y | ||
275 | # CONFIG_PREEMPT_NONE is not set | ||
276 | CONFIG_PREEMPT_VOLUNTARY=y | 42 | CONFIG_PREEMPT_VOLUNTARY=y |
277 | # CONFIG_PREEMPT is not set | ||
278 | CONFIG_X86_LOCAL_APIC=y | ||
279 | CONFIG_X86_IO_APIC=y | ||
280 | CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y | 43 | CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y |
281 | CONFIG_X86_MCE=y | 44 | CONFIG_X86_MCE=y |
282 | CONFIG_X86_MCE_INTEL=y | ||
283 | CONFIG_X86_MCE_AMD=y | ||
284 | CONFIG_X86_MCE_THRESHOLD=y | ||
285 | # CONFIG_I8K is not set | ||
286 | CONFIG_MICROCODE=y | 45 | CONFIG_MICROCODE=y |
287 | CONFIG_MICROCODE_INTEL=y | ||
288 | CONFIG_MICROCODE_AMD=y | 46 | CONFIG_MICROCODE_AMD=y |
289 | CONFIG_MICROCODE_OLD_INTERFACE=y | ||
290 | CONFIG_X86_MSR=y | 47 | CONFIG_X86_MSR=y |
291 | CONFIG_X86_CPUID=y | 48 | CONFIG_X86_CPUID=y |
292 | # CONFIG_X86_CPU_DEBUG is not set | ||
293 | CONFIG_ARCH_PHYS_ADDR_T_64BIT=y | ||
294 | CONFIG_DIRECT_GBPAGES=y | ||
295 | CONFIG_NUMA=y | 49 | CONFIG_NUMA=y |
296 | CONFIG_K8_NUMA=y | ||
297 | CONFIG_X86_64_ACPI_NUMA=y | ||
298 | CONFIG_NODES_SPAN_OTHER_NODES=y | ||
299 | # CONFIG_NUMA_EMU is not set | ||
300 | CONFIG_NODES_SHIFT=6 | ||
301 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | ||
302 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
303 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
304 | CONFIG_SELECT_MEMORY_MODEL=y | ||
305 | # CONFIG_FLATMEM_MANUAL is not set | ||
306 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
307 | CONFIG_SPARSEMEM_MANUAL=y | ||
308 | CONFIG_SPARSEMEM=y | ||
309 | CONFIG_NEED_MULTIPLE_NODES=y | ||
310 | CONFIG_HAVE_MEMORY_PRESENT=y | ||
311 | CONFIG_SPARSEMEM_EXTREME=y | ||
312 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | ||
313 | CONFIG_SPARSEMEM_VMEMMAP=y | ||
314 | |||
315 | # | ||
316 | # Memory hotplug is currently incompatible with Software Suspend | ||
317 | # | ||
318 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
319 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
320 | CONFIG_MIGRATION=y | ||
321 | CONFIG_PHYS_ADDR_T_64BIT=y | ||
322 | CONFIG_ZONE_DMA_FLAG=1 | ||
323 | CONFIG_BOUNCE=y | ||
324 | CONFIG_VIRT_TO_BUS=y | ||
325 | CONFIG_UNEVICTABLE_LRU=y | ||
326 | CONFIG_HAVE_MLOCK=y | ||
327 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
328 | CONFIG_X86_CHECK_BIOS_CORRUPTION=y | 50 | CONFIG_X86_CHECK_BIOS_CORRUPTION=y |
329 | CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y | ||
330 | CONFIG_X86_RESERVE_LOW_64K=y | ||
331 | CONFIG_MTRR=y | ||
332 | # CONFIG_MTRR_SANITIZER is not set | 51 | # CONFIG_MTRR_SANITIZER is not set |
333 | CONFIG_X86_PAT=y | ||
334 | CONFIG_EFI=y | 52 | CONFIG_EFI=y |
335 | CONFIG_SECCOMP=y | ||
336 | # CONFIG_CC_STACKPROTECTOR is not set | ||
337 | # CONFIG_HZ_100 is not set | ||
338 | # CONFIG_HZ_250 is not set | ||
339 | # CONFIG_HZ_300 is not set | ||
340 | CONFIG_HZ_1000=y | 53 | CONFIG_HZ_1000=y |
341 | CONFIG_HZ=1000 | ||
342 | CONFIG_SCHED_HRTICK=y | ||
343 | CONFIG_KEXEC=y | 54 | CONFIG_KEXEC=y |
344 | CONFIG_CRASH_DUMP=y | 55 | CONFIG_CRASH_DUMP=y |
345 | # CONFIG_KEXEC_JUMP is not set | ||
346 | CONFIG_PHYSICAL_START=0x1000000 | ||
347 | CONFIG_RELOCATABLE=y | ||
348 | CONFIG_PHYSICAL_ALIGN=0x1000000 | ||
349 | CONFIG_HOTPLUG_CPU=y | ||
350 | # CONFIG_COMPAT_VDSO is not set | 56 | # CONFIG_COMPAT_VDSO is not set |
351 | # CONFIG_CMDLINE_BOOL is not set | ||
352 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
353 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | ||
354 | |||
355 | # | ||
356 | # Power management and ACPI options | ||
357 | # | ||
358 | CONFIG_ARCH_HIBERNATION_HEADER=y | ||
359 | CONFIG_PM=y | 57 | CONFIG_PM=y |
360 | CONFIG_PM_DEBUG=y | 58 | CONFIG_PM_DEBUG=y |
361 | # CONFIG_PM_VERBOSE is not set | ||
362 | CONFIG_CAN_PM_TRACE=y | ||
363 | CONFIG_PM_TRACE=y | ||
364 | CONFIG_PM_TRACE_RTC=y | 59 | CONFIG_PM_TRACE_RTC=y |
365 | CONFIG_PM_SLEEP_SMP=y | ||
366 | CONFIG_PM_SLEEP=y | ||
367 | CONFIG_SUSPEND=y | ||
368 | # CONFIG_PM_TEST_SUSPEND is not set | ||
369 | CONFIG_SUSPEND_FREEZER=y | ||
370 | CONFIG_HIBERNATION=y | 60 | CONFIG_HIBERNATION=y |
371 | CONFIG_PM_STD_PARTITION="" | ||
372 | CONFIG_ACPI=y | ||
373 | CONFIG_ACPI_SLEEP=y | ||
374 | CONFIG_ACPI_PROCFS=y | 61 | CONFIG_ACPI_PROCFS=y |
375 | CONFIG_ACPI_PROCFS_POWER=y | ||
376 | CONFIG_ACPI_SYSFS_POWER=y | ||
377 | CONFIG_ACPI_PROC_EVENT=y | ||
378 | CONFIG_ACPI_AC=y | ||
379 | CONFIG_ACPI_BATTERY=y | ||
380 | CONFIG_ACPI_BUTTON=y | ||
381 | CONFIG_ACPI_FAN=y | ||
382 | CONFIG_ACPI_DOCK=y | 62 | CONFIG_ACPI_DOCK=y |
383 | CONFIG_ACPI_PROCESSOR=y | ||
384 | CONFIG_ACPI_HOTPLUG_CPU=y | ||
385 | CONFIG_ACPI_THERMAL=y | ||
386 | CONFIG_ACPI_NUMA=y | ||
387 | # CONFIG_ACPI_CUSTOM_DSDT is not set | ||
388 | CONFIG_ACPI_BLACKLIST_YEAR=0 | ||
389 | # CONFIG_ACPI_DEBUG is not set | ||
390 | # CONFIG_ACPI_PCI_SLOT is not set | ||
391 | CONFIG_X86_PM_TIMER=y | ||
392 | CONFIG_ACPI_CONTAINER=y | ||
393 | # CONFIG_ACPI_SBS is not set | ||
394 | |||
395 | # | ||
396 | # CPU Frequency scaling | ||
397 | # | ||
398 | CONFIG_CPU_FREQ=y | 63 | CONFIG_CPU_FREQ=y |
399 | CONFIG_CPU_FREQ_TABLE=y | ||
400 | CONFIG_CPU_FREQ_DEBUG=y | 64 | CONFIG_CPU_FREQ_DEBUG=y |
401 | # CONFIG_CPU_FREQ_STAT is not set | 65 | # CONFIG_CPU_FREQ_STAT is not set |
402 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set | ||
403 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
404 | CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y | 66 | CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y |
405 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | ||
406 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | ||
407 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 67 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
408 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | ||
409 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | ||
410 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y | 68 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y |
411 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | ||
412 | |||
413 | # | ||
414 | # CPUFreq processor drivers | ||
415 | # | ||
416 | CONFIG_X86_ACPI_CPUFREQ=y | 69 | CONFIG_X86_ACPI_CPUFREQ=y |
417 | # CONFIG_X86_POWERNOW_K8 is not set | ||
418 | # CONFIG_X86_SPEEDSTEP_CENTRINO is not set | ||
419 | # CONFIG_X86_P4_CLOCKMOD is not set | ||
420 | |||
421 | # | ||
422 | # shared options | ||
423 | # | ||
424 | # CONFIG_X86_SPEEDSTEP_LIB is not set | ||
425 | CONFIG_CPU_IDLE=y | ||
426 | CONFIG_CPU_IDLE_GOV_LADDER=y | ||
427 | CONFIG_CPU_IDLE_GOV_MENU=y | ||
428 | |||
429 | # | ||
430 | # Memory power savings | ||
431 | # | ||
432 | # CONFIG_I7300_IDLE is not set | ||
433 | |||
434 | # | ||
435 | # Bus options (PCI etc.) | ||
436 | # | ||
437 | CONFIG_PCI=y | ||
438 | CONFIG_PCI_DIRECT=y | ||
439 | CONFIG_PCI_MMCONFIG=y | 70 | CONFIG_PCI_MMCONFIG=y |
440 | CONFIG_PCI_DOMAINS=y | ||
441 | CONFIG_DMAR=y | 71 | CONFIG_DMAR=y |
442 | # CONFIG_DMAR_DEFAULT_ON is not set | 72 | # CONFIG_DMAR_DEFAULT_ON is not set |
443 | CONFIG_DMAR_GFX_WA=y | ||
444 | CONFIG_DMAR_FLOPPY_WA=y | ||
445 | # CONFIG_INTR_REMAP is not set | ||
446 | CONFIG_PCIEPORTBUS=y | 73 | CONFIG_PCIEPORTBUS=y |
447 | # CONFIG_HOTPLUG_PCI_PCIE is not set | ||
448 | CONFIG_PCIEAER=y | ||
449 | # CONFIG_PCIEASPM is not set | ||
450 | CONFIG_ARCH_SUPPORTS_MSI=y | ||
451 | CONFIG_PCI_MSI=y | ||
452 | # CONFIG_PCI_LEGACY is not set | ||
453 | # CONFIG_PCI_DEBUG is not set | ||
454 | # CONFIG_PCI_STUB is not set | ||
455 | CONFIG_HT_IRQ=y | ||
456 | # CONFIG_PCI_IOV is not set | ||
457 | CONFIG_ISA_DMA_API=y | ||
458 | CONFIG_K8_NB=y | ||
459 | CONFIG_PCCARD=y | 74 | CONFIG_PCCARD=y |
460 | # CONFIG_PCMCIA_DEBUG is not set | ||
461 | CONFIG_PCMCIA=y | ||
462 | CONFIG_PCMCIA_LOAD_CIS=y | ||
463 | CONFIG_PCMCIA_IOCTL=y | ||
464 | CONFIG_CARDBUS=y | ||
465 | |||
466 | # | ||
467 | # PC-card bridges | ||
468 | # | ||
469 | CONFIG_YENTA=y | 75 | CONFIG_YENTA=y |
470 | CONFIG_YENTA_O2=y | ||
471 | CONFIG_YENTA_RICOH=y | ||
472 | CONFIG_YENTA_TI=y | ||
473 | CONFIG_YENTA_ENE_TUNE=y | ||
474 | CONFIG_YENTA_TOSHIBA=y | ||
475 | # CONFIG_PD6729 is not set | ||
476 | # CONFIG_I82092 is not set | ||
477 | CONFIG_PCCARD_NONSTATIC=y | ||
478 | CONFIG_HOTPLUG_PCI=y | 76 | CONFIG_HOTPLUG_PCI=y |
479 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
480 | # CONFIG_HOTPLUG_PCI_ACPI is not set | ||
481 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
482 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
483 | |||
484 | # | ||
485 | # Executable file formats / Emulations | ||
486 | # | ||
487 | CONFIG_BINFMT_ELF=y | ||
488 | CONFIG_COMPAT_BINFMT_ELF=y | ||
489 | CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y | 77 | CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y |
490 | # CONFIG_HAVE_AOUT is not set | ||
491 | CONFIG_BINFMT_MISC=y | 78 | CONFIG_BINFMT_MISC=y |
492 | CONFIG_IA32_EMULATION=y | 79 | CONFIG_IA32_EMULATION=y |
493 | # CONFIG_IA32_AOUT is not set | ||
494 | CONFIG_COMPAT=y | ||
495 | CONFIG_COMPAT_FOR_U64_ALIGNMENT=y | ||
496 | CONFIG_SYSVIPC_COMPAT=y | ||
497 | CONFIG_NET=y | 80 | CONFIG_NET=y |
498 | |||
499 | # | ||
500 | # Networking options | ||
501 | # | ||
502 | CONFIG_PACKET=y | 81 | CONFIG_PACKET=y |
503 | CONFIG_PACKET_MMAP=y | ||
504 | CONFIG_UNIX=y | 82 | CONFIG_UNIX=y |
505 | CONFIG_XFRM=y | ||
506 | CONFIG_XFRM_USER=y | 83 | CONFIG_XFRM_USER=y |
507 | # CONFIG_XFRM_SUB_POLICY is not set | ||
508 | # CONFIG_XFRM_MIGRATE is not set | ||
509 | # CONFIG_XFRM_STATISTICS is not set | ||
510 | # CONFIG_NET_KEY is not set | ||
511 | CONFIG_INET=y | 84 | CONFIG_INET=y |
512 | CONFIG_IP_MULTICAST=y | 85 | CONFIG_IP_MULTICAST=y |
513 | CONFIG_IP_ADVANCED_ROUTER=y | 86 | CONFIG_IP_ADVANCED_ROUTER=y |
514 | CONFIG_ASK_IP_FIB_HASH=y | ||
515 | # CONFIG_IP_FIB_TRIE is not set | ||
516 | CONFIG_IP_FIB_HASH=y | ||
517 | CONFIG_IP_MULTIPLE_TABLES=y | 87 | CONFIG_IP_MULTIPLE_TABLES=y |
518 | CONFIG_IP_ROUTE_MULTIPATH=y | 88 | CONFIG_IP_ROUTE_MULTIPATH=y |
519 | CONFIG_IP_ROUTE_VERBOSE=y | 89 | CONFIG_IP_ROUTE_VERBOSE=y |
@@ -521,118 +91,46 @@ CONFIG_IP_PNP=y | |||
521 | CONFIG_IP_PNP_DHCP=y | 91 | CONFIG_IP_PNP_DHCP=y |
522 | CONFIG_IP_PNP_BOOTP=y | 92 | CONFIG_IP_PNP_BOOTP=y |
523 | CONFIG_IP_PNP_RARP=y | 93 | CONFIG_IP_PNP_RARP=y |
524 | # CONFIG_NET_IPIP is not set | ||
525 | # CONFIG_NET_IPGRE is not set | ||
526 | CONFIG_IP_MROUTE=y | 94 | CONFIG_IP_MROUTE=y |
527 | CONFIG_IP_PIMSM_V1=y | 95 | CONFIG_IP_PIMSM_V1=y |
528 | CONFIG_IP_PIMSM_V2=y | 96 | CONFIG_IP_PIMSM_V2=y |
529 | # CONFIG_ARPD is not set | ||
530 | CONFIG_SYN_COOKIES=y | 97 | CONFIG_SYN_COOKIES=y |
531 | # CONFIG_INET_AH is not set | ||
532 | # CONFIG_INET_ESP is not set | ||
533 | # CONFIG_INET_IPCOMP is not set | ||
534 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
535 | CONFIG_INET_TUNNEL=y | ||
536 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | 98 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
537 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | 99 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
538 | # CONFIG_INET_XFRM_MODE_BEET is not set | 100 | # CONFIG_INET_XFRM_MODE_BEET is not set |
539 | CONFIG_INET_LRO=y | ||
540 | # CONFIG_INET_DIAG is not set | 101 | # CONFIG_INET_DIAG is not set |
541 | CONFIG_TCP_CONG_ADVANCED=y | 102 | CONFIG_TCP_CONG_ADVANCED=y |
542 | # CONFIG_TCP_CONG_BIC is not set | 103 | # CONFIG_TCP_CONG_BIC is not set |
543 | CONFIG_TCP_CONG_CUBIC=y | ||
544 | # CONFIG_TCP_CONG_WESTWOOD is not set | 104 | # CONFIG_TCP_CONG_WESTWOOD is not set |
545 | # CONFIG_TCP_CONG_HTCP is not set | 105 | # CONFIG_TCP_CONG_HTCP is not set |
546 | # CONFIG_TCP_CONG_HSTCP is not set | ||
547 | # CONFIG_TCP_CONG_HYBLA is not set | ||
548 | # CONFIG_TCP_CONG_VEGAS is not set | ||
549 | # CONFIG_TCP_CONG_SCALABLE is not set | ||
550 | # CONFIG_TCP_CONG_LP is not set | ||
551 | # CONFIG_TCP_CONG_VENO is not set | ||
552 | # CONFIG_TCP_CONG_YEAH is not set | ||
553 | # CONFIG_TCP_CONG_ILLINOIS is not set | ||
554 | # CONFIG_DEFAULT_BIC is not set | ||
555 | CONFIG_DEFAULT_CUBIC=y | ||
556 | # CONFIG_DEFAULT_HTCP is not set | ||
557 | # CONFIG_DEFAULT_VEGAS is not set | ||
558 | # CONFIG_DEFAULT_WESTWOOD is not set | ||
559 | # CONFIG_DEFAULT_RENO is not set | ||
560 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
561 | CONFIG_TCP_MD5SIG=y | 106 | CONFIG_TCP_MD5SIG=y |
562 | CONFIG_IPV6=y | 107 | CONFIG_IPV6=y |
563 | # CONFIG_IPV6_PRIVACY is not set | ||
564 | # CONFIG_IPV6_ROUTER_PREF is not set | ||
565 | # CONFIG_IPV6_OPTIMISTIC_DAD is not set | ||
566 | CONFIG_INET6_AH=y | 108 | CONFIG_INET6_AH=y |
567 | CONFIG_INET6_ESP=y | 109 | CONFIG_INET6_ESP=y |
568 | # CONFIG_INET6_IPCOMP is not set | ||
569 | # CONFIG_IPV6_MIP6 is not set | ||
570 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
571 | # CONFIG_INET6_TUNNEL is not set | ||
572 | CONFIG_INET6_XFRM_MODE_TRANSPORT=y | ||
573 | CONFIG_INET6_XFRM_MODE_TUNNEL=y | ||
574 | CONFIG_INET6_XFRM_MODE_BEET=y | ||
575 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | ||
576 | CONFIG_IPV6_SIT=y | ||
577 | CONFIG_IPV6_NDISC_NODETYPE=y | ||
578 | # CONFIG_IPV6_TUNNEL is not set | ||
579 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | ||
580 | # CONFIG_IPV6_MROUTE is not set | ||
581 | CONFIG_NETLABEL=y | 110 | CONFIG_NETLABEL=y |
582 | CONFIG_NETWORK_SECMARK=y | ||
583 | CONFIG_NETFILTER=y | 111 | CONFIG_NETFILTER=y |
584 | # CONFIG_NETFILTER_DEBUG is not set | ||
585 | # CONFIG_NETFILTER_ADVANCED is not set | 112 | # CONFIG_NETFILTER_ADVANCED is not set |
586 | |||
587 | # | ||
588 | # Core Netfilter Configuration | ||
589 | # | ||
590 | CONFIG_NETFILTER_NETLINK=y | ||
591 | CONFIG_NETFILTER_NETLINK_LOG=y | ||
592 | CONFIG_NF_CONNTRACK=y | 113 | CONFIG_NF_CONNTRACK=y |
593 | CONFIG_NF_CONNTRACK_SECMARK=y | ||
594 | CONFIG_NF_CONNTRACK_FTP=y | 114 | CONFIG_NF_CONNTRACK_FTP=y |
595 | CONFIG_NF_CONNTRACK_IRC=y | 115 | CONFIG_NF_CONNTRACK_IRC=y |
596 | CONFIG_NF_CONNTRACK_SIP=y | 116 | CONFIG_NF_CONNTRACK_SIP=y |
597 | CONFIG_NF_CT_NETLINK=y | 117 | CONFIG_NF_CT_NETLINK=y |
598 | CONFIG_NETFILTER_XTABLES=y | ||
599 | CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y | 118 | CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y |
600 | CONFIG_NETFILTER_XT_TARGET_MARK=y | ||
601 | CONFIG_NETFILTER_XT_TARGET_NFLOG=y | 119 | CONFIG_NETFILTER_XT_TARGET_NFLOG=y |
602 | CONFIG_NETFILTER_XT_TARGET_SECMARK=y | 120 | CONFIG_NETFILTER_XT_TARGET_SECMARK=y |
603 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=y | 121 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=y |
604 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y | 122 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y |
605 | CONFIG_NETFILTER_XT_MATCH_MARK=y | ||
606 | CONFIG_NETFILTER_XT_MATCH_POLICY=y | 123 | CONFIG_NETFILTER_XT_MATCH_POLICY=y |
607 | CONFIG_NETFILTER_XT_MATCH_STATE=y | 124 | CONFIG_NETFILTER_XT_MATCH_STATE=y |
608 | # CONFIG_IP_VS is not set | ||
609 | |||
610 | # | ||
611 | # IP: Netfilter Configuration | ||
612 | # | ||
613 | CONFIG_NF_DEFRAG_IPV4=y | ||
614 | CONFIG_NF_CONNTRACK_IPV4=y | 125 | CONFIG_NF_CONNTRACK_IPV4=y |
615 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | ||
616 | CONFIG_IP_NF_IPTABLES=y | 126 | CONFIG_IP_NF_IPTABLES=y |
617 | CONFIG_IP_NF_FILTER=y | 127 | CONFIG_IP_NF_FILTER=y |
618 | CONFIG_IP_NF_TARGET_REJECT=y | 128 | CONFIG_IP_NF_TARGET_REJECT=y |
619 | CONFIG_IP_NF_TARGET_LOG=y | 129 | CONFIG_IP_NF_TARGET_LOG=y |
620 | CONFIG_IP_NF_TARGET_ULOG=y | 130 | CONFIG_IP_NF_TARGET_ULOG=y |
621 | CONFIG_NF_NAT=y | 131 | CONFIG_NF_NAT=y |
622 | CONFIG_NF_NAT_NEEDED=y | ||
623 | CONFIG_IP_NF_TARGET_MASQUERADE=y | 132 | CONFIG_IP_NF_TARGET_MASQUERADE=y |
624 | CONFIG_NF_NAT_FTP=y | ||
625 | CONFIG_NF_NAT_IRC=y | ||
626 | # CONFIG_NF_NAT_TFTP is not set | ||
627 | # CONFIG_NF_NAT_AMANDA is not set | ||
628 | # CONFIG_NF_NAT_PPTP is not set | ||
629 | # CONFIG_NF_NAT_H323 is not set | ||
630 | CONFIG_NF_NAT_SIP=y | ||
631 | CONFIG_IP_NF_MANGLE=y | 133 | CONFIG_IP_NF_MANGLE=y |
632 | |||
633 | # | ||
634 | # IPv6: Netfilter Configuration | ||
635 | # | ||
636 | CONFIG_NF_CONNTRACK_IPV6=y | 134 | CONFIG_NF_CONNTRACK_IPV6=y |
637 | CONFIG_IP6_NF_IPTABLES=y | 135 | CONFIG_IP6_NF_IPTABLES=y |
638 | CONFIG_IP6_NF_MATCH_IPV6HEADER=y | 136 | CONFIG_IP6_NF_MATCH_IPV6HEADER=y |
@@ -640,1208 +138,111 @@ CONFIG_IP6_NF_TARGET_LOG=y | |||
640 | CONFIG_IP6_NF_FILTER=y | 138 | CONFIG_IP6_NF_FILTER=y |
641 | CONFIG_IP6_NF_TARGET_REJECT=y | 139 | CONFIG_IP6_NF_TARGET_REJECT=y |
642 | CONFIG_IP6_NF_MANGLE=y | 140 | CONFIG_IP6_NF_MANGLE=y |
643 | # CONFIG_IP_DCCP is not set | ||
644 | # CONFIG_IP_SCTP is not set | ||
645 | # CONFIG_TIPC is not set | ||
646 | # CONFIG_ATM is not set | ||
647 | # CONFIG_BRIDGE is not set | ||
648 | # CONFIG_NET_DSA is not set | ||
649 | # CONFIG_VLAN_8021Q is not set | ||
650 | # CONFIG_DECNET is not set | ||
651 | CONFIG_LLC=y | ||
652 | # CONFIG_LLC2 is not set | ||
653 | # CONFIG_IPX is not set | ||
654 | # CONFIG_ATALK is not set | ||
655 | # CONFIG_X25 is not set | ||
656 | # CONFIG_LAPB is not set | ||
657 | # CONFIG_ECONET is not set | ||
658 | # CONFIG_WAN_ROUTER is not set | ||
659 | # CONFIG_PHONET is not set | ||
660 | CONFIG_NET_SCHED=y | 141 | CONFIG_NET_SCHED=y |
661 | |||
662 | # | ||
663 | # Queueing/Scheduling | ||
664 | # | ||
665 | # CONFIG_NET_SCH_CBQ is not set | ||
666 | # CONFIG_NET_SCH_HTB is not set | ||
667 | # CONFIG_NET_SCH_HFSC is not set | ||
668 | # CONFIG_NET_SCH_PRIO is not set | ||
669 | # CONFIG_NET_SCH_MULTIQ is not set | ||
670 | # CONFIG_NET_SCH_RED is not set | ||
671 | # CONFIG_NET_SCH_SFQ is not set | ||
672 | # CONFIG_NET_SCH_TEQL is not set | ||
673 | # CONFIG_NET_SCH_TBF is not set | ||
674 | # CONFIG_NET_SCH_GRED is not set | ||
675 | # CONFIG_NET_SCH_DSMARK is not set | ||
676 | # CONFIG_NET_SCH_NETEM is not set | ||
677 | # CONFIG_NET_SCH_DRR is not set | ||
678 | # CONFIG_NET_SCH_INGRESS is not set | ||
679 | |||
680 | # | ||
681 | # Classification | ||
682 | # | ||
683 | CONFIG_NET_CLS=y | ||
684 | # CONFIG_NET_CLS_BASIC is not set | ||
685 | # CONFIG_NET_CLS_TCINDEX is not set | ||
686 | # CONFIG_NET_CLS_ROUTE4 is not set | ||
687 | # CONFIG_NET_CLS_FW is not set | ||
688 | # CONFIG_NET_CLS_U32 is not set | ||
689 | # CONFIG_NET_CLS_RSVP is not set | ||
690 | # CONFIG_NET_CLS_RSVP6 is not set | ||
691 | # CONFIG_NET_CLS_FLOW is not set | ||
692 | # CONFIG_NET_CLS_CGROUP is not set | ||
693 | CONFIG_NET_EMATCH=y | 142 | CONFIG_NET_EMATCH=y |
694 | CONFIG_NET_EMATCH_STACK=32 | ||
695 | # CONFIG_NET_EMATCH_CMP is not set | ||
696 | # CONFIG_NET_EMATCH_NBYTE is not set | ||
697 | # CONFIG_NET_EMATCH_U32 is not set | ||
698 | # CONFIG_NET_EMATCH_META is not set | ||
699 | # CONFIG_NET_EMATCH_TEXT is not set | ||
700 | CONFIG_NET_CLS_ACT=y | 143 | CONFIG_NET_CLS_ACT=y |
701 | # CONFIG_NET_ACT_POLICE is not set | ||
702 | # CONFIG_NET_ACT_GACT is not set | ||
703 | # CONFIG_NET_ACT_MIRRED is not set | ||
704 | # CONFIG_NET_ACT_IPT is not set | ||
705 | # CONFIG_NET_ACT_NAT is not set | ||
706 | # CONFIG_NET_ACT_PEDIT is not set | ||
707 | # CONFIG_NET_ACT_SIMP is not set | ||
708 | # CONFIG_NET_ACT_SKBEDIT is not set | ||
709 | CONFIG_NET_SCH_FIFO=y | ||
710 | # CONFIG_DCB is not set | ||
711 | |||
712 | # | ||
713 | # Network testing | ||
714 | # | ||
715 | # CONFIG_NET_PKTGEN is not set | ||
716 | # CONFIG_NET_TCPPROBE is not set | ||
717 | # CONFIG_NET_DROP_MONITOR is not set | ||
718 | CONFIG_HAMRADIO=y | 144 | CONFIG_HAMRADIO=y |
719 | |||
720 | # | ||
721 | # Packet Radio protocols | ||
722 | # | ||
723 | # CONFIG_AX25 is not set | ||
724 | # CONFIG_CAN is not set | ||
725 | # CONFIG_IRDA is not set | ||
726 | # CONFIG_BT is not set | ||
727 | # CONFIG_AF_RXRPC is not set | ||
728 | CONFIG_FIB_RULES=y | ||
729 | CONFIG_WIRELESS=y | ||
730 | CONFIG_CFG80211=y | 145 | CONFIG_CFG80211=y |
731 | # CONFIG_CFG80211_REG_DEBUG is not set | ||
732 | CONFIG_WIRELESS_OLD_REGULATORY=y | ||
733 | CONFIG_WIRELESS_EXT=y | ||
734 | CONFIG_WIRELESS_EXT_SYSFS=y | ||
735 | # CONFIG_LIB80211 is not set | ||
736 | CONFIG_MAC80211=y | 146 | CONFIG_MAC80211=y |
737 | |||
738 | # | ||
739 | # Rate control algorithm selection | ||
740 | # | ||
741 | CONFIG_MAC80211_RC_MINSTREL=y | ||
742 | # CONFIG_MAC80211_RC_DEFAULT_PID is not set | ||
743 | CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y | ||
744 | CONFIG_MAC80211_RC_DEFAULT="minstrel" | ||
745 | # CONFIG_MAC80211_MESH is not set | ||
746 | CONFIG_MAC80211_LEDS=y | 147 | CONFIG_MAC80211_LEDS=y |
747 | # CONFIG_MAC80211_DEBUGFS is not set | ||
748 | # CONFIG_MAC80211_DEBUG_MENU is not set | ||
749 | # CONFIG_WIMAX is not set | ||
750 | CONFIG_RFKILL=y | 148 | CONFIG_RFKILL=y |
751 | # CONFIG_RFKILL_INPUT is not set | ||
752 | CONFIG_RFKILL_LEDS=y | ||
753 | # CONFIG_NET_9P is not set | ||
754 | |||
755 | # | ||
756 | # Device Drivers | ||
757 | # | ||
758 | |||
759 | # | ||
760 | # Generic Driver Options | ||
761 | # | ||
762 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 149 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
763 | CONFIG_STANDALONE=y | ||
764 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
765 | CONFIG_FW_LOADER=y | ||
766 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
767 | CONFIG_EXTRA_FIRMWARE="" | ||
768 | # CONFIG_DEBUG_DRIVER is not set | ||
769 | CONFIG_DEBUG_DEVRES=y | 150 | CONFIG_DEBUG_DEVRES=y |
770 | # CONFIG_SYS_HYPERVISOR is not set | ||
771 | CONFIG_CONNECTOR=y | 151 | CONFIG_CONNECTOR=y |
772 | CONFIG_PROC_EVENTS=y | ||
773 | # CONFIG_MTD is not set | ||
774 | # CONFIG_PARPORT is not set | ||
775 | CONFIG_PNP=y | ||
776 | CONFIG_PNP_DEBUG_MESSAGES=y | ||
777 | |||
778 | # | ||
779 | # Protocols | ||
780 | # | ||
781 | CONFIG_PNPACPI=y | ||
782 | CONFIG_BLK_DEV=y | ||
783 | # CONFIG_BLK_DEV_FD is not set | ||
784 | # CONFIG_BLK_CPQ_DA is not set | ||
785 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
786 | # CONFIG_BLK_DEV_DAC960 is not set | ||
787 | # CONFIG_BLK_DEV_UMEM is not set | ||
788 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
789 | CONFIG_BLK_DEV_LOOP=y | 152 | CONFIG_BLK_DEV_LOOP=y |
790 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
791 | # CONFIG_BLK_DEV_NBD is not set | ||
792 | # CONFIG_BLK_DEV_SX8 is not set | ||
793 | # CONFIG_BLK_DEV_UB is not set | ||
794 | CONFIG_BLK_DEV_RAM=y | 153 | CONFIG_BLK_DEV_RAM=y |
795 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
796 | CONFIG_BLK_DEV_RAM_SIZE=16384 | 154 | CONFIG_BLK_DEV_RAM_SIZE=16384 |
797 | # CONFIG_BLK_DEV_XIP is not set | ||
798 | # CONFIG_CDROM_PKTCDVD is not set | ||
799 | # CONFIG_ATA_OVER_ETH is not set | ||
800 | # CONFIG_BLK_DEV_HD is not set | ||
801 | CONFIG_MISC_DEVICES=y | ||
802 | # CONFIG_IBM_ASM is not set | ||
803 | # CONFIG_PHANTOM is not set | ||
804 | # CONFIG_SGI_IOC4 is not set | ||
805 | # CONFIG_TIFM_CORE is not set | ||
806 | # CONFIG_ICS932S401 is not set | ||
807 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
808 | # CONFIG_HP_ILO is not set | ||
809 | # CONFIG_ISL29003 is not set | ||
810 | # CONFIG_C2PORT is not set | ||
811 | |||
812 | # | ||
813 | # EEPROM support | ||
814 | # | ||
815 | # CONFIG_EEPROM_AT24 is not set | ||
816 | # CONFIG_EEPROM_LEGACY is not set | ||
817 | # CONFIG_EEPROM_93CX6 is not set | ||
818 | CONFIG_HAVE_IDE=y | ||
819 | # CONFIG_IDE is not set | ||
820 | |||
821 | # | ||
822 | # SCSI device support | ||
823 | # | ||
824 | # CONFIG_RAID_ATTRS is not set | ||
825 | CONFIG_SCSI=y | ||
826 | CONFIG_SCSI_DMA=y | ||
827 | # CONFIG_SCSI_TGT is not set | ||
828 | # CONFIG_SCSI_NETLINK is not set | ||
829 | CONFIG_SCSI_PROC_FS=y | ||
830 | |||
831 | # | ||
832 | # SCSI support type (disk, tape, CD-ROM) | ||
833 | # | ||
834 | CONFIG_BLK_DEV_SD=y | 155 | CONFIG_BLK_DEV_SD=y |
835 | # CONFIG_CHR_DEV_ST is not set | ||
836 | # CONFIG_CHR_DEV_OSST is not set | ||
837 | CONFIG_BLK_DEV_SR=y | 156 | CONFIG_BLK_DEV_SR=y |
838 | CONFIG_BLK_DEV_SR_VENDOR=y | 157 | CONFIG_BLK_DEV_SR_VENDOR=y |
839 | CONFIG_CHR_DEV_SG=y | 158 | CONFIG_CHR_DEV_SG=y |
840 | # CONFIG_CHR_DEV_SCH is not set | ||
841 | |||
842 | # | ||
843 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
844 | # | ||
845 | # CONFIG_SCSI_MULTI_LUN is not set | ||
846 | CONFIG_SCSI_CONSTANTS=y | 159 | CONFIG_SCSI_CONSTANTS=y |
847 | # CONFIG_SCSI_LOGGING is not set | ||
848 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
849 | CONFIG_SCSI_WAIT_SCAN=m | ||
850 | |||
851 | # | ||
852 | # SCSI Transports | ||
853 | # | ||
854 | CONFIG_SCSI_SPI_ATTRS=y | 160 | CONFIG_SCSI_SPI_ATTRS=y |
855 | # CONFIG_SCSI_FC_ATTRS is not set | ||
856 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
857 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
858 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
859 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
860 | # CONFIG_SCSI_LOWLEVEL is not set | 161 | # CONFIG_SCSI_LOWLEVEL is not set |
861 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set | ||
862 | # CONFIG_SCSI_DH is not set | ||
863 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
864 | CONFIG_ATA=y | 162 | CONFIG_ATA=y |
865 | # CONFIG_ATA_NONSTANDARD is not set | ||
866 | CONFIG_ATA_ACPI=y | ||
867 | CONFIG_SATA_PMP=y | ||
868 | CONFIG_SATA_AHCI=y | 163 | CONFIG_SATA_AHCI=y |
869 | # CONFIG_SATA_SIL24 is not set | ||
870 | CONFIG_ATA_SFF=y | ||
871 | # CONFIG_SATA_SVW is not set | ||
872 | CONFIG_ATA_PIIX=y | 164 | CONFIG_ATA_PIIX=y |
873 | # CONFIG_SATA_MV is not set | ||
874 | # CONFIG_SATA_NV is not set | ||
875 | # CONFIG_PDC_ADMA is not set | ||
876 | # CONFIG_SATA_QSTOR is not set | ||
877 | # CONFIG_SATA_PROMISE is not set | ||
878 | # CONFIG_SATA_SX4 is not set | ||
879 | # CONFIG_SATA_SIL is not set | ||
880 | # CONFIG_SATA_SIS is not set | ||
881 | # CONFIG_SATA_ULI is not set | ||
882 | # CONFIG_SATA_VIA is not set | ||
883 | # CONFIG_SATA_VITESSE is not set | ||
884 | # CONFIG_SATA_INIC162X is not set | ||
885 | # CONFIG_PATA_ACPI is not set | ||
886 | # CONFIG_PATA_ALI is not set | ||
887 | CONFIG_PATA_AMD=y | 165 | CONFIG_PATA_AMD=y |
888 | # CONFIG_PATA_ARTOP is not set | ||
889 | # CONFIG_PATA_ATIIXP is not set | ||
890 | # CONFIG_PATA_CMD640_PCI is not set | ||
891 | # CONFIG_PATA_CMD64X is not set | ||
892 | # CONFIG_PATA_CS5520 is not set | ||
893 | # CONFIG_PATA_CS5530 is not set | ||
894 | # CONFIG_PATA_CYPRESS is not set | ||
895 | # CONFIG_PATA_EFAR is not set | ||
896 | # CONFIG_ATA_GENERIC is not set | ||
897 | # CONFIG_PATA_HPT366 is not set | ||
898 | # CONFIG_PATA_HPT37X is not set | ||
899 | # CONFIG_PATA_HPT3X2N is not set | ||
900 | # CONFIG_PATA_HPT3X3 is not set | ||
901 | # CONFIG_PATA_IT821X is not set | ||
902 | # CONFIG_PATA_IT8213 is not set | ||
903 | # CONFIG_PATA_JMICRON is not set | ||
904 | # CONFIG_PATA_TRIFLEX is not set | ||
905 | # CONFIG_PATA_MARVELL is not set | ||
906 | # CONFIG_PATA_MPIIX is not set | ||
907 | CONFIG_PATA_OLDPIIX=y | 166 | CONFIG_PATA_OLDPIIX=y |
908 | # CONFIG_PATA_NETCELL is not set | ||
909 | # CONFIG_PATA_NINJA32 is not set | ||
910 | # CONFIG_PATA_NS87410 is not set | ||
911 | # CONFIG_PATA_NS87415 is not set | ||
912 | # CONFIG_PATA_OPTI is not set | ||
913 | # CONFIG_PATA_OPTIDMA is not set | ||
914 | # CONFIG_PATA_PCMCIA is not set | ||
915 | # CONFIG_PATA_PDC_OLD is not set | ||
916 | # CONFIG_PATA_RADISYS is not set | ||
917 | # CONFIG_PATA_RZ1000 is not set | ||
918 | # CONFIG_PATA_SC1200 is not set | ||
919 | # CONFIG_PATA_SERVERWORKS is not set | ||
920 | # CONFIG_PATA_PDC2027X is not set | ||
921 | # CONFIG_PATA_SIL680 is not set | ||
922 | # CONFIG_PATA_SIS is not set | ||
923 | # CONFIG_PATA_VIA is not set | ||
924 | # CONFIG_PATA_WINBOND is not set | ||
925 | CONFIG_PATA_SCH=y | 167 | CONFIG_PATA_SCH=y |
926 | CONFIG_MD=y | 168 | CONFIG_MD=y |
927 | CONFIG_BLK_DEV_MD=y | 169 | CONFIG_BLK_DEV_MD=y |
928 | CONFIG_MD_AUTODETECT=y | ||
929 | # CONFIG_MD_LINEAR is not set | ||
930 | # CONFIG_MD_RAID0 is not set | ||
931 | # CONFIG_MD_RAID1 is not set | ||
932 | # CONFIG_MD_RAID10 is not set | ||
933 | # CONFIG_MD_RAID456 is not set | ||
934 | # CONFIG_MD_MULTIPATH is not set | ||
935 | # CONFIG_MD_FAULTY is not set | ||
936 | CONFIG_BLK_DEV_DM=y | 170 | CONFIG_BLK_DEV_DM=y |
937 | # CONFIG_DM_DEBUG is not set | ||
938 | # CONFIG_DM_CRYPT is not set | ||
939 | # CONFIG_DM_SNAPSHOT is not set | ||
940 | CONFIG_DM_MIRROR=y | 171 | CONFIG_DM_MIRROR=y |
941 | CONFIG_DM_ZERO=y | 172 | CONFIG_DM_ZERO=y |
942 | # CONFIG_DM_MULTIPATH is not set | ||
943 | # CONFIG_DM_DELAY is not set | ||
944 | # CONFIG_DM_UEVENT is not set | ||
945 | # CONFIG_FUSION is not set | ||
946 | |||
947 | # | ||
948 | # IEEE 1394 (FireWire) support | ||
949 | # | ||
950 | |||
951 | # | ||
952 | # Enable only one of the two stacks, unless you know what you are doing | ||
953 | # | ||
954 | # CONFIG_FIREWIRE is not set | ||
955 | # CONFIG_IEEE1394 is not set | ||
956 | # CONFIG_I2O is not set | ||
957 | CONFIG_MACINTOSH_DRIVERS=y | 173 | CONFIG_MACINTOSH_DRIVERS=y |
958 | CONFIG_MAC_EMUMOUSEBTN=y | 174 | CONFIG_MAC_EMUMOUSEBTN=y |
959 | CONFIG_NETDEVICES=y | 175 | CONFIG_NETDEVICES=y |
960 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
961 | # CONFIG_IFB is not set | ||
962 | # CONFIG_DUMMY is not set | ||
963 | # CONFIG_BONDING is not set | ||
964 | # CONFIG_MACVLAN is not set | ||
965 | # CONFIG_EQUALIZER is not set | ||
966 | # CONFIG_TUN is not set | ||
967 | # CONFIG_VETH is not set | ||
968 | # CONFIG_NET_SB1000 is not set | ||
969 | # CONFIG_ARCNET is not set | ||
970 | CONFIG_PHYLIB=y | ||
971 | |||
972 | # | ||
973 | # MII PHY device drivers | ||
974 | # | ||
975 | # CONFIG_MARVELL_PHY is not set | ||
976 | # CONFIG_DAVICOM_PHY is not set | ||
977 | # CONFIG_QSEMI_PHY is not set | ||
978 | # CONFIG_LXT_PHY is not set | ||
979 | # CONFIG_CICADA_PHY is not set | ||
980 | # CONFIG_VITESSE_PHY is not set | ||
981 | # CONFIG_SMSC_PHY is not set | ||
982 | # CONFIG_BROADCOM_PHY is not set | ||
983 | # CONFIG_ICPLUS_PHY is not set | ||
984 | # CONFIG_REALTEK_PHY is not set | ||
985 | # CONFIG_NATIONAL_PHY is not set | ||
986 | # CONFIG_STE10XP is not set | ||
987 | # CONFIG_LSI_ET1011C_PHY is not set | ||
988 | # CONFIG_FIXED_PHY is not set | ||
989 | # CONFIG_MDIO_BITBANG is not set | ||
990 | CONFIG_NET_ETHERNET=y | 176 | CONFIG_NET_ETHERNET=y |
991 | CONFIG_MII=y | ||
992 | # CONFIG_HAPPYMEAL is not set | ||
993 | # CONFIG_SUNGEM is not set | ||
994 | # CONFIG_CASSINI is not set | ||
995 | CONFIG_NET_VENDOR_3COM=y | 177 | CONFIG_NET_VENDOR_3COM=y |
996 | # CONFIG_VORTEX is not set | ||
997 | # CONFIG_TYPHOON is not set | ||
998 | # CONFIG_ETHOC is not set | ||
999 | # CONFIG_DNET is not set | ||
1000 | CONFIG_NET_TULIP=y | 178 | CONFIG_NET_TULIP=y |
1001 | # CONFIG_DE2104X is not set | ||
1002 | # CONFIG_TULIP is not set | ||
1003 | # CONFIG_DE4X5 is not set | ||
1004 | # CONFIG_WINBOND_840 is not set | ||
1005 | # CONFIG_DM9102 is not set | ||
1006 | # CONFIG_ULI526X is not set | ||
1007 | # CONFIG_PCMCIA_XIRCOM is not set | ||
1008 | # CONFIG_HP100 is not set | ||
1009 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
1010 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
1011 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
1012 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
1013 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
1014 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
1015 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
1016 | CONFIG_NET_PCI=y | 179 | CONFIG_NET_PCI=y |
1017 | # CONFIG_PCNET32 is not set | ||
1018 | # CONFIG_AMD8111_ETH is not set | ||
1019 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
1020 | # CONFIG_B44 is not set | ||
1021 | CONFIG_FORCEDETH=y | 180 | CONFIG_FORCEDETH=y |
1022 | # CONFIG_FORCEDETH_NAPI is not set | ||
1023 | CONFIG_E100=y | 181 | CONFIG_E100=y |
1024 | # CONFIG_FEALNX is not set | ||
1025 | # CONFIG_NATSEMI is not set | ||
1026 | # CONFIG_NE2K_PCI is not set | ||
1027 | # CONFIG_8139CP is not set | ||
1028 | CONFIG_8139TOO=y | 182 | CONFIG_8139TOO=y |
1029 | CONFIG_8139TOO_PIO=y | ||
1030 | # CONFIG_8139TOO_TUNE_TWISTER is not set | ||
1031 | # CONFIG_8139TOO_8129 is not set | ||
1032 | # CONFIG_8139_OLD_RX_RESET is not set | ||
1033 | # CONFIG_R6040 is not set | ||
1034 | # CONFIG_SIS900 is not set | ||
1035 | # CONFIG_EPIC100 is not set | ||
1036 | # CONFIG_SMSC9420 is not set | ||
1037 | # CONFIG_SUNDANCE is not set | ||
1038 | # CONFIG_TLAN is not set | ||
1039 | # CONFIG_VIA_RHINE is not set | ||
1040 | # CONFIG_SC92031 is not set | ||
1041 | # CONFIG_ATL2 is not set | ||
1042 | CONFIG_NETDEV_1000=y | ||
1043 | # CONFIG_ACENIC is not set | ||
1044 | # CONFIG_DL2K is not set | ||
1045 | CONFIG_E1000=y | 183 | CONFIG_E1000=y |
1046 | # CONFIG_E1000E is not set | ||
1047 | # CONFIG_IP1000 is not set | ||
1048 | # CONFIG_IGB is not set | ||
1049 | # CONFIG_IGBVF is not set | ||
1050 | # CONFIG_NS83820 is not set | ||
1051 | # CONFIG_HAMACHI is not set | ||
1052 | # CONFIG_YELLOWFIN is not set | ||
1053 | # CONFIG_R8169 is not set | ||
1054 | # CONFIG_SIS190 is not set | ||
1055 | # CONFIG_SKGE is not set | ||
1056 | CONFIG_SKY2=y | 184 | CONFIG_SKY2=y |
1057 | # CONFIG_SKY2_DEBUG is not set | ||
1058 | # CONFIG_VIA_VELOCITY is not set | ||
1059 | CONFIG_TIGON3=y | 185 | CONFIG_TIGON3=y |
1060 | # CONFIG_BNX2 is not set | ||
1061 | # CONFIG_QLA3XXX is not set | ||
1062 | # CONFIG_ATL1 is not set | ||
1063 | # CONFIG_ATL1E is not set | ||
1064 | # CONFIG_ATL1C is not set | ||
1065 | # CONFIG_JME is not set | ||
1066 | CONFIG_NETDEV_10000=y | ||
1067 | # CONFIG_CHELSIO_T1 is not set | ||
1068 | CONFIG_CHELSIO_T3_DEPENDS=y | ||
1069 | # CONFIG_CHELSIO_T3 is not set | ||
1070 | # CONFIG_ENIC is not set | ||
1071 | # CONFIG_IXGBE is not set | ||
1072 | # CONFIG_IXGB is not set | ||
1073 | # CONFIG_S2IO is not set | ||
1074 | # CONFIG_VXGE is not set | ||
1075 | # CONFIG_MYRI10GE is not set | ||
1076 | # CONFIG_NETXEN_NIC is not set | ||
1077 | # CONFIG_NIU is not set | ||
1078 | # CONFIG_MLX4_EN is not set | ||
1079 | # CONFIG_MLX4_CORE is not set | ||
1080 | # CONFIG_TEHUTI is not set | ||
1081 | # CONFIG_BNX2X is not set | ||
1082 | # CONFIG_QLGE is not set | ||
1083 | # CONFIG_SFC is not set | ||
1084 | # CONFIG_BE2NET is not set | ||
1085 | CONFIG_TR=y | 186 | CONFIG_TR=y |
1086 | # CONFIG_IBMOL is not set | ||
1087 | # CONFIG_3C359 is not set | ||
1088 | # CONFIG_TMS380TR is not set | ||
1089 | |||
1090 | # | ||
1091 | # Wireless LAN | ||
1092 | # | ||
1093 | # CONFIG_WLAN_PRE80211 is not set | ||
1094 | CONFIG_WLAN_80211=y | ||
1095 | # CONFIG_PCMCIA_RAYCS is not set | ||
1096 | # CONFIG_LIBERTAS is not set | ||
1097 | # CONFIG_LIBERTAS_THINFIRM is not set | ||
1098 | # CONFIG_AIRO is not set | ||
1099 | # CONFIG_ATMEL is not set | ||
1100 | # CONFIG_AT76C50X_USB is not set | ||
1101 | # CONFIG_AIRO_CS is not set | ||
1102 | # CONFIG_PCMCIA_WL3501 is not set | ||
1103 | # CONFIG_PRISM54 is not set | ||
1104 | # CONFIG_USB_ZD1201 is not set | ||
1105 | # CONFIG_USB_NET_RNDIS_WLAN is not set | ||
1106 | # CONFIG_RTL8180 is not set | ||
1107 | # CONFIG_RTL8187 is not set | ||
1108 | # CONFIG_ADM8211 is not set | ||
1109 | # CONFIG_MAC80211_HWSIM is not set | ||
1110 | # CONFIG_MWL8K is not set | ||
1111 | # CONFIG_P54_COMMON is not set | ||
1112 | CONFIG_ATH5K=y | ||
1113 | # CONFIG_ATH5K_DEBUG is not set | ||
1114 | # CONFIG_ATH9K is not set | ||
1115 | # CONFIG_AR9170_USB is not set | ||
1116 | # CONFIG_IPW2100 is not set | ||
1117 | # CONFIG_IPW2200 is not set | ||
1118 | # CONFIG_IWLWIFI is not set | ||
1119 | # CONFIG_HOSTAP is not set | ||
1120 | # CONFIG_B43 is not set | ||
1121 | # CONFIG_B43LEGACY is not set | ||
1122 | # CONFIG_ZD1211RW is not set | ||
1123 | # CONFIG_RT2X00 is not set | ||
1124 | # CONFIG_HERMES is not set | ||
1125 | |||
1126 | # | ||
1127 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
1128 | # | ||
1129 | |||
1130 | # | ||
1131 | # USB Network Adapters | ||
1132 | # | ||
1133 | # CONFIG_USB_CATC is not set | ||
1134 | # CONFIG_USB_KAWETH is not set | ||
1135 | # CONFIG_USB_PEGASUS is not set | ||
1136 | # CONFIG_USB_RTL8150 is not set | ||
1137 | # CONFIG_USB_USBNET is not set | ||
1138 | # CONFIG_USB_HSO is not set | ||
1139 | CONFIG_NET_PCMCIA=y | 187 | CONFIG_NET_PCMCIA=y |
1140 | # CONFIG_PCMCIA_3C589 is not set | ||
1141 | # CONFIG_PCMCIA_3C574 is not set | ||
1142 | # CONFIG_PCMCIA_FMVJ18X is not set | ||
1143 | # CONFIG_PCMCIA_PCNET is not set | ||
1144 | # CONFIG_PCMCIA_NMCLAN is not set | ||
1145 | # CONFIG_PCMCIA_SMC91C92 is not set | ||
1146 | # CONFIG_PCMCIA_XIRC2PS is not set | ||
1147 | # CONFIG_PCMCIA_AXNET is not set | ||
1148 | # CONFIG_PCMCIA_IBMTR is not set | ||
1149 | # CONFIG_WAN is not set | ||
1150 | CONFIG_FDDI=y | 188 | CONFIG_FDDI=y |
1151 | # CONFIG_DEFXX is not set | ||
1152 | # CONFIG_SKFP is not set | ||
1153 | # CONFIG_HIPPI is not set | ||
1154 | # CONFIG_PPP is not set | ||
1155 | # CONFIG_SLIP is not set | ||
1156 | # CONFIG_NET_FC is not set | ||
1157 | CONFIG_NETCONSOLE=y | 189 | CONFIG_NETCONSOLE=y |
1158 | # CONFIG_NETCONSOLE_DYNAMIC is not set | ||
1159 | CONFIG_NETPOLL=y | ||
1160 | # CONFIG_NETPOLL_TRAP is not set | ||
1161 | CONFIG_NET_POLL_CONTROLLER=y | ||
1162 | # CONFIG_ISDN is not set | ||
1163 | # CONFIG_PHONE is not set | ||
1164 | |||
1165 | # | ||
1166 | # Input device support | ||
1167 | # | ||
1168 | CONFIG_INPUT=y | ||
1169 | CONFIG_INPUT_FF_MEMLESS=y | ||
1170 | CONFIG_INPUT_POLLDEV=y | 190 | CONFIG_INPUT_POLLDEV=y |
1171 | |||
1172 | # | ||
1173 | # Userland interfaces | ||
1174 | # | ||
1175 | CONFIG_INPUT_MOUSEDEV=y | ||
1176 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | 191 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set |
1177 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
1178 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
1179 | # CONFIG_INPUT_JOYDEV is not set | ||
1180 | CONFIG_INPUT_EVDEV=y | 192 | CONFIG_INPUT_EVDEV=y |
1181 | # CONFIG_INPUT_EVBUG is not set | ||
1182 | |||
1183 | # | ||
1184 | # Input Device Drivers | ||
1185 | # | ||
1186 | CONFIG_INPUT_KEYBOARD=y | ||
1187 | CONFIG_KEYBOARD_ATKBD=y | ||
1188 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
1189 | # CONFIG_KEYBOARD_LKKBD is not set | ||
1190 | # CONFIG_KEYBOARD_XTKBD is not set | ||
1191 | # CONFIG_KEYBOARD_NEWTON is not set | ||
1192 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
1193 | CONFIG_INPUT_MOUSE=y | ||
1194 | CONFIG_MOUSE_PS2=y | ||
1195 | CONFIG_MOUSE_PS2_ALPS=y | ||
1196 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
1197 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
1198 | CONFIG_MOUSE_PS2_LIFEBOOK=y | ||
1199 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
1200 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
1201 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
1202 | # CONFIG_MOUSE_SERIAL is not set | ||
1203 | # CONFIG_MOUSE_APPLETOUCH is not set | ||
1204 | # CONFIG_MOUSE_BCM5974 is not set | ||
1205 | # CONFIG_MOUSE_VSXXXAA is not set | ||
1206 | CONFIG_INPUT_JOYSTICK=y | 193 | CONFIG_INPUT_JOYSTICK=y |
1207 | # CONFIG_JOYSTICK_ANALOG is not set | ||
1208 | # CONFIG_JOYSTICK_A3D is not set | ||
1209 | # CONFIG_JOYSTICK_ADI is not set | ||
1210 | # CONFIG_JOYSTICK_COBRA is not set | ||
1211 | # CONFIG_JOYSTICK_GF2K is not set | ||
1212 | # CONFIG_JOYSTICK_GRIP is not set | ||
1213 | # CONFIG_JOYSTICK_GRIP_MP is not set | ||
1214 | # CONFIG_JOYSTICK_GUILLEMOT is not set | ||
1215 | # CONFIG_JOYSTICK_INTERACT is not set | ||
1216 | # CONFIG_JOYSTICK_SIDEWINDER is not set | ||
1217 | # CONFIG_JOYSTICK_TMDC is not set | ||
1218 | # CONFIG_JOYSTICK_IFORCE is not set | ||
1219 | # CONFIG_JOYSTICK_WARRIOR is not set | ||
1220 | # CONFIG_JOYSTICK_MAGELLAN is not set | ||
1221 | # CONFIG_JOYSTICK_SPACEORB is not set | ||
1222 | # CONFIG_JOYSTICK_SPACEBALL is not set | ||
1223 | # CONFIG_JOYSTICK_STINGER is not set | ||
1224 | # CONFIG_JOYSTICK_TWIDJOY is not set | ||
1225 | # CONFIG_JOYSTICK_ZHENHUA is not set | ||
1226 | # CONFIG_JOYSTICK_JOYDUMP is not set | ||
1227 | # CONFIG_JOYSTICK_XPAD is not set | ||
1228 | CONFIG_INPUT_TABLET=y | 194 | CONFIG_INPUT_TABLET=y |
1229 | # CONFIG_TABLET_USB_ACECAD is not set | ||
1230 | # CONFIG_TABLET_USB_AIPTEK is not set | ||
1231 | # CONFIG_TABLET_USB_GTCO is not set | ||
1232 | # CONFIG_TABLET_USB_KBTAB is not set | ||
1233 | # CONFIG_TABLET_USB_WACOM is not set | ||
1234 | CONFIG_INPUT_TOUCHSCREEN=y | 195 | CONFIG_INPUT_TOUCHSCREEN=y |
1235 | # CONFIG_TOUCHSCREEN_AD7879_I2C is not set | ||
1236 | # CONFIG_TOUCHSCREEN_AD7879 is not set | ||
1237 | # CONFIG_TOUCHSCREEN_FUJITSU is not set | ||
1238 | # CONFIG_TOUCHSCREEN_GUNZE is not set | ||
1239 | # CONFIG_TOUCHSCREEN_ELO is not set | ||
1240 | # CONFIG_TOUCHSCREEN_WACOM_W8001 is not set | ||
1241 | # CONFIG_TOUCHSCREEN_MTOUCH is not set | ||
1242 | # CONFIG_TOUCHSCREEN_INEXIO is not set | ||
1243 | # CONFIG_TOUCHSCREEN_MK712 is not set | ||
1244 | # CONFIG_TOUCHSCREEN_PENMOUNT is not set | ||
1245 | # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set | ||
1246 | # CONFIG_TOUCHSCREEN_TOUCHWIN is not set | ||
1247 | # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set | ||
1248 | # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set | ||
1249 | # CONFIG_TOUCHSCREEN_TSC2007 is not set | ||
1250 | CONFIG_INPUT_MISC=y | 196 | CONFIG_INPUT_MISC=y |
1251 | # CONFIG_INPUT_PCSPKR is not set | ||
1252 | # CONFIG_INPUT_APANEL is not set | ||
1253 | # CONFIG_INPUT_ATLAS_BTNS is not set | ||
1254 | # CONFIG_INPUT_ATI_REMOTE is not set | ||
1255 | # CONFIG_INPUT_ATI_REMOTE2 is not set | ||
1256 | # CONFIG_INPUT_KEYSPAN_REMOTE is not set | ||
1257 | # CONFIG_INPUT_POWERMATE is not set | ||
1258 | # CONFIG_INPUT_YEALINK is not set | ||
1259 | # CONFIG_INPUT_CM109 is not set | ||
1260 | # CONFIG_INPUT_UINPUT is not set | ||
1261 | |||
1262 | # | ||
1263 | # Hardware I/O ports | ||
1264 | # | ||
1265 | CONFIG_SERIO=y | ||
1266 | CONFIG_SERIO_I8042=y | ||
1267 | CONFIG_SERIO_SERPORT=y | ||
1268 | # CONFIG_SERIO_CT82C710 is not set | ||
1269 | # CONFIG_SERIO_PCIPS2 is not set | ||
1270 | CONFIG_SERIO_LIBPS2=y | ||
1271 | # CONFIG_SERIO_RAW is not set | ||
1272 | # CONFIG_GAMEPORT is not set | ||
1273 | |||
1274 | # | ||
1275 | # Character devices | ||
1276 | # | ||
1277 | CONFIG_VT=y | ||
1278 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
1279 | CONFIG_VT_CONSOLE=y | ||
1280 | CONFIG_HW_CONSOLE=y | ||
1281 | CONFIG_VT_HW_CONSOLE_BINDING=y | 197 | CONFIG_VT_HW_CONSOLE_BINDING=y |
1282 | CONFIG_DEVKMEM=y | ||
1283 | CONFIG_SERIAL_NONSTANDARD=y | 198 | CONFIG_SERIAL_NONSTANDARD=y |
1284 | # CONFIG_COMPUTONE is not set | ||
1285 | # CONFIG_ROCKETPORT is not set | ||
1286 | # CONFIG_CYCLADES is not set | ||
1287 | # CONFIG_DIGIEPCA is not set | ||
1288 | # CONFIG_MOXA_INTELLIO is not set | ||
1289 | # CONFIG_MOXA_SMARTIO is not set | ||
1290 | # CONFIG_ISI is not set | ||
1291 | # CONFIG_SYNCLINK is not set | ||
1292 | # CONFIG_SYNCLINKMP is not set | ||
1293 | # CONFIG_SYNCLINK_GT is not set | ||
1294 | # CONFIG_N_HDLC is not set | ||
1295 | # CONFIG_RISCOM8 is not set | ||
1296 | # CONFIG_SPECIALIX is not set | ||
1297 | # CONFIG_SX is not set | ||
1298 | # CONFIG_RIO is not set | ||
1299 | # CONFIG_STALDRV is not set | ||
1300 | # CONFIG_NOZOMI is not set | ||
1301 | |||
1302 | # | ||
1303 | # Serial drivers | ||
1304 | # | ||
1305 | CONFIG_SERIAL_8250=y | 199 | CONFIG_SERIAL_8250=y |
1306 | CONFIG_SERIAL_8250_CONSOLE=y | 200 | CONFIG_SERIAL_8250_CONSOLE=y |
1307 | CONFIG_FIX_EARLYCON_MEM=y | ||
1308 | CONFIG_SERIAL_8250_PCI=y | ||
1309 | CONFIG_SERIAL_8250_PNP=y | ||
1310 | # CONFIG_SERIAL_8250_CS is not set | ||
1311 | CONFIG_SERIAL_8250_NR_UARTS=32 | 201 | CONFIG_SERIAL_8250_NR_UARTS=32 |
1312 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
1313 | CONFIG_SERIAL_8250_EXTENDED=y | 202 | CONFIG_SERIAL_8250_EXTENDED=y |
1314 | CONFIG_SERIAL_8250_MANY_PORTS=y | 203 | CONFIG_SERIAL_8250_MANY_PORTS=y |
1315 | CONFIG_SERIAL_8250_SHARE_IRQ=y | 204 | CONFIG_SERIAL_8250_SHARE_IRQ=y |
1316 | CONFIG_SERIAL_8250_DETECT_IRQ=y | 205 | CONFIG_SERIAL_8250_DETECT_IRQ=y |
1317 | CONFIG_SERIAL_8250_RSA=y | 206 | CONFIG_SERIAL_8250_RSA=y |
1318 | |||
1319 | # | ||
1320 | # Non-8250 serial port support | ||
1321 | # | ||
1322 | CONFIG_SERIAL_CORE=y | ||
1323 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
1324 | # CONFIG_SERIAL_JSM is not set | ||
1325 | CONFIG_UNIX98_PTYS=y | ||
1326 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
1327 | # CONFIG_LEGACY_PTYS is not set | 207 | # CONFIG_LEGACY_PTYS is not set |
1328 | # CONFIG_IPMI_HANDLER is not set | ||
1329 | CONFIG_HW_RANDOM=y | 208 | CONFIG_HW_RANDOM=y |
1330 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
1331 | # CONFIG_HW_RANDOM_INTEL is not set | 209 | # CONFIG_HW_RANDOM_INTEL is not set |
1332 | # CONFIG_HW_RANDOM_AMD is not set | 210 | # CONFIG_HW_RANDOM_AMD is not set |
1333 | CONFIG_NVRAM=y | 211 | CONFIG_NVRAM=y |
1334 | # CONFIG_R3964 is not set | ||
1335 | # CONFIG_APPLICOM is not set | ||
1336 | |||
1337 | # | ||
1338 | # PCMCIA character devices | ||
1339 | # | ||
1340 | # CONFIG_SYNCLINK_CS is not set | ||
1341 | # CONFIG_CARDMAN_4000 is not set | ||
1342 | # CONFIG_CARDMAN_4040 is not set | ||
1343 | # CONFIG_IPWIRELESS is not set | ||
1344 | # CONFIG_MWAVE is not set | ||
1345 | # CONFIG_PC8736x_GPIO is not set | ||
1346 | # CONFIG_RAW_DRIVER is not set | ||
1347 | CONFIG_HPET=y | 212 | CONFIG_HPET=y |
1348 | # CONFIG_HPET_MMAP is not set | 213 | # CONFIG_HPET_MMAP is not set |
1349 | # CONFIG_HANGCHECK_TIMER is not set | ||
1350 | # CONFIG_TCG_TPM is not set | ||
1351 | # CONFIG_TELCLOCK is not set | ||
1352 | CONFIG_DEVPORT=y | ||
1353 | CONFIG_I2C=y | ||
1354 | CONFIG_I2C_BOARDINFO=y | ||
1355 | # CONFIG_I2C_CHARDEV is not set | ||
1356 | CONFIG_I2C_HELPER_AUTO=y | ||
1357 | CONFIG_I2C_ALGOBIT=y | ||
1358 | |||
1359 | # | ||
1360 | # I2C Hardware Bus support | ||
1361 | # | ||
1362 | |||
1363 | # | ||
1364 | # PC SMBus host controller drivers | ||
1365 | # | ||
1366 | # CONFIG_I2C_ALI1535 is not set | ||
1367 | # CONFIG_I2C_ALI1563 is not set | ||
1368 | # CONFIG_I2C_ALI15X3 is not set | ||
1369 | # CONFIG_I2C_AMD756 is not set | ||
1370 | # CONFIG_I2C_AMD8111 is not set | ||
1371 | CONFIG_I2C_I801=y | 214 | CONFIG_I2C_I801=y |
1372 | # CONFIG_I2C_ISCH is not set | ||
1373 | # CONFIG_I2C_PIIX4 is not set | ||
1374 | # CONFIG_I2C_NFORCE2 is not set | ||
1375 | # CONFIG_I2C_SIS5595 is not set | ||
1376 | # CONFIG_I2C_SIS630 is not set | ||
1377 | # CONFIG_I2C_SIS96X is not set | ||
1378 | # CONFIG_I2C_VIA is not set | ||
1379 | # CONFIG_I2C_VIAPRO is not set | ||
1380 | |||
1381 | # | ||
1382 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
1383 | # | ||
1384 | # CONFIG_I2C_OCORES is not set | ||
1385 | # CONFIG_I2C_SIMTEC is not set | ||
1386 | |||
1387 | # | ||
1388 | # External I2C/SMBus adapter drivers | ||
1389 | # | ||
1390 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
1391 | # CONFIG_I2C_TAOS_EVM is not set | ||
1392 | # CONFIG_I2C_TINY_USB is not set | ||
1393 | |||
1394 | # | ||
1395 | # Graphics adapter I2C/DDC channel drivers | ||
1396 | # | ||
1397 | # CONFIG_I2C_VOODOO3 is not set | ||
1398 | |||
1399 | # | ||
1400 | # Other I2C/SMBus bus drivers | ||
1401 | # | ||
1402 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
1403 | # CONFIG_I2C_STUB is not set | ||
1404 | |||
1405 | # | ||
1406 | # Miscellaneous I2C Chip support | ||
1407 | # | ||
1408 | # CONFIG_DS1682 is not set | ||
1409 | # CONFIG_SENSORS_PCF8574 is not set | ||
1410 | # CONFIG_PCF8575 is not set | ||
1411 | # CONFIG_SENSORS_PCA9539 is not set | ||
1412 | # CONFIG_SENSORS_MAX6875 is not set | ||
1413 | # CONFIG_SENSORS_TSL2550 is not set | ||
1414 | # CONFIG_I2C_DEBUG_CORE is not set | ||
1415 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
1416 | # CONFIG_I2C_DEBUG_BUS is not set | ||
1417 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
1418 | # CONFIG_SPI is not set | ||
1419 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | ||
1420 | # CONFIG_GPIOLIB is not set | ||
1421 | # CONFIG_W1 is not set | ||
1422 | CONFIG_POWER_SUPPLY=y | ||
1423 | # CONFIG_POWER_SUPPLY_DEBUG is not set | ||
1424 | # CONFIG_PDA_POWER is not set | ||
1425 | # CONFIG_BATTERY_DS2760 is not set | ||
1426 | # CONFIG_BATTERY_BQ27x00 is not set | ||
1427 | CONFIG_HWMON=y | ||
1428 | # CONFIG_HWMON_VID is not set | ||
1429 | # CONFIG_SENSORS_ABITUGURU is not set | ||
1430 | # CONFIG_SENSORS_ABITUGURU3 is not set | ||
1431 | # CONFIG_SENSORS_AD7414 is not set | ||
1432 | # CONFIG_SENSORS_AD7418 is not set | ||
1433 | # CONFIG_SENSORS_ADM1021 is not set | ||
1434 | # CONFIG_SENSORS_ADM1025 is not set | ||
1435 | # CONFIG_SENSORS_ADM1026 is not set | ||
1436 | # CONFIG_SENSORS_ADM1029 is not set | ||
1437 | # CONFIG_SENSORS_ADM1031 is not set | ||
1438 | # CONFIG_SENSORS_ADM9240 is not set | ||
1439 | # CONFIG_SENSORS_ADT7462 is not set | ||
1440 | # CONFIG_SENSORS_ADT7470 is not set | ||
1441 | # CONFIG_SENSORS_ADT7473 is not set | ||
1442 | # CONFIG_SENSORS_ADT7475 is not set | ||
1443 | # CONFIG_SENSORS_K8TEMP is not set | ||
1444 | # CONFIG_SENSORS_ASB100 is not set | ||
1445 | # CONFIG_SENSORS_ATK0110 is not set | ||
1446 | # CONFIG_SENSORS_ATXP1 is not set | ||
1447 | # CONFIG_SENSORS_DS1621 is not set | ||
1448 | # CONFIG_SENSORS_I5K_AMB is not set | ||
1449 | # CONFIG_SENSORS_F71805F is not set | ||
1450 | # CONFIG_SENSORS_F71882FG is not set | ||
1451 | # CONFIG_SENSORS_F75375S is not set | ||
1452 | # CONFIG_SENSORS_FSCHER is not set | ||
1453 | # CONFIG_SENSORS_FSCPOS is not set | ||
1454 | # CONFIG_SENSORS_FSCHMD is not set | ||
1455 | # CONFIG_SENSORS_G760A is not set | ||
1456 | # CONFIG_SENSORS_GL518SM is not set | ||
1457 | # CONFIG_SENSORS_GL520SM is not set | ||
1458 | # CONFIG_SENSORS_CORETEMP is not set | ||
1459 | # CONFIG_SENSORS_IT87 is not set | ||
1460 | # CONFIG_SENSORS_LM63 is not set | ||
1461 | # CONFIG_SENSORS_LM75 is not set | ||
1462 | # CONFIG_SENSORS_LM77 is not set | ||
1463 | # CONFIG_SENSORS_LM78 is not set | ||
1464 | # CONFIG_SENSORS_LM80 is not set | ||
1465 | # CONFIG_SENSORS_LM83 is not set | ||
1466 | # CONFIG_SENSORS_LM85 is not set | ||
1467 | # CONFIG_SENSORS_LM87 is not set | ||
1468 | # CONFIG_SENSORS_LM90 is not set | ||
1469 | # CONFIG_SENSORS_LM92 is not set | ||
1470 | # CONFIG_SENSORS_LM93 is not set | ||
1471 | # CONFIG_SENSORS_LTC4215 is not set | ||
1472 | # CONFIG_SENSORS_LTC4245 is not set | ||
1473 | # CONFIG_SENSORS_LM95241 is not set | ||
1474 | # CONFIG_SENSORS_MAX1619 is not set | ||
1475 | # CONFIG_SENSORS_MAX6650 is not set | ||
1476 | # CONFIG_SENSORS_PC87360 is not set | ||
1477 | # CONFIG_SENSORS_PC87427 is not set | ||
1478 | # CONFIG_SENSORS_PCF8591 is not set | ||
1479 | # CONFIG_SENSORS_SIS5595 is not set | ||
1480 | # CONFIG_SENSORS_DME1737 is not set | ||
1481 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
1482 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
1483 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
1484 | # CONFIG_SENSORS_ADS7828 is not set | ||
1485 | # CONFIG_SENSORS_THMC50 is not set | ||
1486 | # CONFIG_SENSORS_VIA686A is not set | ||
1487 | # CONFIG_SENSORS_VT1211 is not set | ||
1488 | # CONFIG_SENSORS_VT8231 is not set | ||
1489 | # CONFIG_SENSORS_W83781D is not set | ||
1490 | # CONFIG_SENSORS_W83791D is not set | ||
1491 | # CONFIG_SENSORS_W83792D is not set | ||
1492 | # CONFIG_SENSORS_W83793 is not set | ||
1493 | # CONFIG_SENSORS_W83L785TS is not set | ||
1494 | # CONFIG_SENSORS_W83L786NG is not set | ||
1495 | # CONFIG_SENSORS_W83627HF is not set | ||
1496 | # CONFIG_SENSORS_W83627EHF is not set | ||
1497 | # CONFIG_SENSORS_HDAPS is not set | ||
1498 | # CONFIG_SENSORS_LIS3LV02D is not set | ||
1499 | # CONFIG_SENSORS_APPLESMC is not set | ||
1500 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
1501 | CONFIG_THERMAL=y | ||
1502 | # CONFIG_THERMAL_HWMON is not set | ||
1503 | CONFIG_WATCHDOG=y | 215 | CONFIG_WATCHDOG=y |
1504 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
1505 | |||
1506 | # | ||
1507 | # Watchdog Device Drivers | ||
1508 | # | ||
1509 | # CONFIG_SOFT_WATCHDOG is not set | ||
1510 | # CONFIG_ACQUIRE_WDT is not set | ||
1511 | # CONFIG_ADVANTECH_WDT is not set | ||
1512 | # CONFIG_ALIM1535_WDT is not set | ||
1513 | # CONFIG_ALIM7101_WDT is not set | ||
1514 | # CONFIG_SC520_WDT is not set | ||
1515 | # CONFIG_EUROTECH_WDT is not set | ||
1516 | # CONFIG_IB700_WDT is not set | ||
1517 | # CONFIG_IBMASR is not set | ||
1518 | # CONFIG_WAFER_WDT is not set | ||
1519 | # CONFIG_I6300ESB_WDT is not set | ||
1520 | # CONFIG_ITCO_WDT is not set | ||
1521 | # CONFIG_IT8712F_WDT is not set | ||
1522 | # CONFIG_IT87_WDT is not set | ||
1523 | # CONFIG_HP_WATCHDOG is not set | ||
1524 | # CONFIG_SC1200_WDT is not set | ||
1525 | # CONFIG_PC87413_WDT is not set | ||
1526 | # CONFIG_60XX_WDT is not set | ||
1527 | # CONFIG_SBC8360_WDT is not set | ||
1528 | # CONFIG_CPU5_WDT is not set | ||
1529 | # CONFIG_SMSC_SCH311X_WDT is not set | ||
1530 | # CONFIG_SMSC37B787_WDT is not set | ||
1531 | # CONFIG_W83627HF_WDT is not set | ||
1532 | # CONFIG_W83697HF_WDT is not set | ||
1533 | # CONFIG_W83697UG_WDT is not set | ||
1534 | # CONFIG_W83877F_WDT is not set | ||
1535 | # CONFIG_W83977F_WDT is not set | ||
1536 | # CONFIG_MACHZ_WDT is not set | ||
1537 | # CONFIG_SBC_EPX_C3_WATCHDOG is not set | ||
1538 | |||
1539 | # | ||
1540 | # PCI-based Watchdog Cards | ||
1541 | # | ||
1542 | # CONFIG_PCIPCWATCHDOG is not set | ||
1543 | # CONFIG_WDTPCI is not set | ||
1544 | |||
1545 | # | ||
1546 | # USB-based Watchdog Cards | ||
1547 | # | ||
1548 | # CONFIG_USBPCWATCHDOG is not set | ||
1549 | CONFIG_SSB_POSSIBLE=y | ||
1550 | |||
1551 | # | ||
1552 | # Sonics Silicon Backplane | ||
1553 | # | ||
1554 | # CONFIG_SSB is not set | ||
1555 | |||
1556 | # | ||
1557 | # Multifunction device drivers | ||
1558 | # | ||
1559 | # CONFIG_MFD_CORE is not set | ||
1560 | # CONFIG_MFD_SM501 is not set | ||
1561 | # CONFIG_HTC_PASIC3 is not set | ||
1562 | # CONFIG_TWL4030_CORE is not set | ||
1563 | # CONFIG_MFD_TMIO is not set | ||
1564 | # CONFIG_PMIC_DA903X is not set | ||
1565 | # CONFIG_MFD_WM8400 is not set | ||
1566 | # CONFIG_MFD_WM8350_I2C is not set | ||
1567 | # CONFIG_MFD_PCF50633 is not set | ||
1568 | # CONFIG_REGULATOR is not set | ||
1569 | |||
1570 | # | ||
1571 | # Multimedia devices | ||
1572 | # | ||
1573 | |||
1574 | # | ||
1575 | # Multimedia core support | ||
1576 | # | ||
1577 | # CONFIG_VIDEO_DEV is not set | ||
1578 | # CONFIG_DVB_CORE is not set | ||
1579 | # CONFIG_VIDEO_MEDIA is not set | ||
1580 | |||
1581 | # | ||
1582 | # Multimedia drivers | ||
1583 | # | ||
1584 | CONFIG_DAB=y | ||
1585 | # CONFIG_USB_DABUSB is not set | ||
1586 | |||
1587 | # | ||
1588 | # Graphics support | ||
1589 | # | ||
1590 | CONFIG_AGP=y | 216 | CONFIG_AGP=y |
1591 | CONFIG_AGP_AMD64=y | 217 | CONFIG_AGP_AMD64=y |
1592 | CONFIG_AGP_INTEL=y | 218 | CONFIG_AGP_INTEL=y |
1593 | # CONFIG_AGP_SIS is not set | ||
1594 | # CONFIG_AGP_VIA is not set | ||
1595 | CONFIG_DRM=y | 219 | CONFIG_DRM=y |
1596 | # CONFIG_DRM_TDFX is not set | ||
1597 | # CONFIG_DRM_R128 is not set | ||
1598 | # CONFIG_DRM_RADEON is not set | ||
1599 | # CONFIG_DRM_I810 is not set | ||
1600 | # CONFIG_DRM_I830 is not set | ||
1601 | CONFIG_DRM_I915=y | 220 | CONFIG_DRM_I915=y |
1602 | CONFIG_DRM_I915_KMS=y | 221 | CONFIG_DRM_I915_KMS=y |
1603 | # CONFIG_DRM_MGA is not set | ||
1604 | # CONFIG_DRM_SIS is not set | ||
1605 | # CONFIG_DRM_VIA is not set | ||
1606 | # CONFIG_DRM_SAVAGE is not set | ||
1607 | # CONFIG_VGASTATE is not set | ||
1608 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
1609 | CONFIG_FB=y | ||
1610 | # CONFIG_FIRMWARE_EDID is not set | ||
1611 | # CONFIG_FB_DDC is not set | ||
1612 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
1613 | CONFIG_FB_CFB_FILLRECT=y | ||
1614 | CONFIG_FB_CFB_COPYAREA=y | ||
1615 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
1616 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
1617 | # CONFIG_FB_SYS_FILLRECT is not set | ||
1618 | # CONFIG_FB_SYS_COPYAREA is not set | ||
1619 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
1620 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
1621 | # CONFIG_FB_SYS_FOPS is not set | ||
1622 | # CONFIG_FB_SVGALIB is not set | ||
1623 | # CONFIG_FB_MACMODES is not set | ||
1624 | # CONFIG_FB_BACKLIGHT is not set | ||
1625 | CONFIG_FB_MODE_HELPERS=y | 222 | CONFIG_FB_MODE_HELPERS=y |
1626 | CONFIG_FB_TILEBLITTING=y | 223 | CONFIG_FB_TILEBLITTING=y |
1627 | |||
1628 | # | ||
1629 | # Frame buffer hardware drivers | ||
1630 | # | ||
1631 | # CONFIG_FB_CIRRUS is not set | ||
1632 | # CONFIG_FB_PM2 is not set | ||
1633 | # CONFIG_FB_CYBER2000 is not set | ||
1634 | # CONFIG_FB_ARC is not set | ||
1635 | # CONFIG_FB_ASILIANT is not set | ||
1636 | # CONFIG_FB_IMSTT is not set | ||
1637 | # CONFIG_FB_VGA16 is not set | ||
1638 | # CONFIG_FB_UVESA is not set | ||
1639 | # CONFIG_FB_VESA is not set | ||
1640 | CONFIG_FB_EFI=y | 224 | CONFIG_FB_EFI=y |
1641 | # CONFIG_FB_N411 is not set | ||
1642 | # CONFIG_FB_HGA is not set | ||
1643 | # CONFIG_FB_S1D13XXX is not set | ||
1644 | # CONFIG_FB_NVIDIA is not set | ||
1645 | # CONFIG_FB_RIVA is not set | ||
1646 | # CONFIG_FB_LE80578 is not set | ||
1647 | # CONFIG_FB_INTEL is not set | ||
1648 | # CONFIG_FB_MATROX is not set | ||
1649 | # CONFIG_FB_RADEON is not set | ||
1650 | # CONFIG_FB_ATY128 is not set | ||
1651 | # CONFIG_FB_ATY is not set | ||
1652 | # CONFIG_FB_S3 is not set | ||
1653 | # CONFIG_FB_SAVAGE is not set | ||
1654 | # CONFIG_FB_SIS is not set | ||
1655 | # CONFIG_FB_VIA is not set | ||
1656 | # CONFIG_FB_NEOMAGIC is not set | ||
1657 | # CONFIG_FB_KYRO is not set | ||
1658 | # CONFIG_FB_3DFX is not set | ||
1659 | # CONFIG_FB_VOODOO1 is not set | ||
1660 | # CONFIG_FB_VT8623 is not set | ||
1661 | # CONFIG_FB_TRIDENT is not set | ||
1662 | # CONFIG_FB_ARK is not set | ||
1663 | # CONFIG_FB_PM3 is not set | ||
1664 | # CONFIG_FB_CARMINE is not set | ||
1665 | # CONFIG_FB_GEODE is not set | ||
1666 | # CONFIG_FB_VIRTUAL is not set | ||
1667 | # CONFIG_FB_METRONOME is not set | ||
1668 | # CONFIG_FB_MB862XX is not set | ||
1669 | # CONFIG_FB_BROADSHEET is not set | ||
1670 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 225 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
1671 | # CONFIG_LCD_CLASS_DEVICE is not set | 226 | # CONFIG_LCD_CLASS_DEVICE is not set |
1672 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
1673 | CONFIG_BACKLIGHT_GENERIC=y | ||
1674 | # CONFIG_BACKLIGHT_PROGEAR is not set | ||
1675 | # CONFIG_BACKLIGHT_MBP_NVIDIA is not set | ||
1676 | # CONFIG_BACKLIGHT_SAHARA is not set | ||
1677 | |||
1678 | # | ||
1679 | # Display device support | ||
1680 | # | ||
1681 | # CONFIG_DISPLAY_SUPPORT is not set | ||
1682 | |||
1683 | # | ||
1684 | # Console display driver support | ||
1685 | # | ||
1686 | CONFIG_VGA_CONSOLE=y | ||
1687 | CONFIG_VGACON_SOFT_SCROLLBACK=y | 227 | CONFIG_VGACON_SOFT_SCROLLBACK=y |
1688 | CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 | ||
1689 | CONFIG_DUMMY_CONSOLE=y | ||
1690 | # CONFIG_FRAMEBUFFER_CONSOLE is not set | ||
1691 | CONFIG_LOGO=y | 228 | CONFIG_LOGO=y |
1692 | # CONFIG_LOGO_LINUX_MONO is not set | 229 | # CONFIG_LOGO_LINUX_MONO is not set |
1693 | # CONFIG_LOGO_LINUX_VGA16 is not set | 230 | # CONFIG_LOGO_LINUX_VGA16 is not set |
1694 | CONFIG_LOGO_LINUX_CLUT224=y | ||
1695 | CONFIG_SOUND=y | 231 | CONFIG_SOUND=y |
1696 | CONFIG_SOUND_OSS_CORE=y | ||
1697 | CONFIG_SND=y | 232 | CONFIG_SND=y |
1698 | CONFIG_SND_TIMER=y | ||
1699 | CONFIG_SND_PCM=y | ||
1700 | CONFIG_SND_HWDEP=y | ||
1701 | CONFIG_SND_JACK=y | ||
1702 | CONFIG_SND_SEQUENCER=y | 233 | CONFIG_SND_SEQUENCER=y |
1703 | CONFIG_SND_SEQ_DUMMY=y | 234 | CONFIG_SND_SEQ_DUMMY=y |
1704 | CONFIG_SND_OSSEMUL=y | ||
1705 | CONFIG_SND_MIXER_OSS=y | 235 | CONFIG_SND_MIXER_OSS=y |
1706 | CONFIG_SND_PCM_OSS=y | 236 | CONFIG_SND_PCM_OSS=y |
1707 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
1708 | CONFIG_SND_SEQUENCER_OSS=y | 237 | CONFIG_SND_SEQUENCER_OSS=y |
1709 | CONFIG_SND_HRTIMER=y | 238 | CONFIG_SND_HRTIMER=y |
1710 | CONFIG_SND_SEQ_HRTIMER_DEFAULT=y | ||
1711 | CONFIG_SND_DYNAMIC_MINORS=y | ||
1712 | CONFIG_SND_SUPPORT_OLD_API=y | ||
1713 | CONFIG_SND_VERBOSE_PROCFS=y | ||
1714 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
1715 | # CONFIG_SND_DEBUG is not set | ||
1716 | CONFIG_SND_VMASTER=y | ||
1717 | CONFIG_SND_DRIVERS=y | ||
1718 | # CONFIG_SND_PCSP is not set | ||
1719 | # CONFIG_SND_DUMMY is not set | ||
1720 | # CONFIG_SND_VIRMIDI is not set | ||
1721 | # CONFIG_SND_MTPAV is not set | ||
1722 | # CONFIG_SND_SERIAL_U16550 is not set | ||
1723 | # CONFIG_SND_MPU401 is not set | ||
1724 | CONFIG_SND_PCI=y | ||
1725 | # CONFIG_SND_AD1889 is not set | ||
1726 | # CONFIG_SND_ALS300 is not set | ||
1727 | # CONFIG_SND_ALS4000 is not set | ||
1728 | # CONFIG_SND_ALI5451 is not set | ||
1729 | # CONFIG_SND_ATIIXP is not set | ||
1730 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
1731 | # CONFIG_SND_AU8810 is not set | ||
1732 | # CONFIG_SND_AU8820 is not set | ||
1733 | # CONFIG_SND_AU8830 is not set | ||
1734 | # CONFIG_SND_AW2 is not set | ||
1735 | # CONFIG_SND_AZT3328 is not set | ||
1736 | # CONFIG_SND_BT87X is not set | ||
1737 | # CONFIG_SND_CA0106 is not set | ||
1738 | # CONFIG_SND_CMIPCI is not set | ||
1739 | # CONFIG_SND_OXYGEN is not set | ||
1740 | # CONFIG_SND_CS4281 is not set | ||
1741 | # CONFIG_SND_CS46XX is not set | ||
1742 | # CONFIG_SND_CS5530 is not set | ||
1743 | # CONFIG_SND_DARLA20 is not set | ||
1744 | # CONFIG_SND_GINA20 is not set | ||
1745 | # CONFIG_SND_LAYLA20 is not set | ||
1746 | # CONFIG_SND_DARLA24 is not set | ||
1747 | # CONFIG_SND_GINA24 is not set | ||
1748 | # CONFIG_SND_LAYLA24 is not set | ||
1749 | # CONFIG_SND_MONA is not set | ||
1750 | # CONFIG_SND_MIA is not set | ||
1751 | # CONFIG_SND_ECHO3G is not set | ||
1752 | # CONFIG_SND_INDIGO is not set | ||
1753 | # CONFIG_SND_INDIGOIO is not set | ||
1754 | # CONFIG_SND_INDIGODJ is not set | ||
1755 | # CONFIG_SND_INDIGOIOX is not set | ||
1756 | # CONFIG_SND_INDIGODJX is not set | ||
1757 | # CONFIG_SND_EMU10K1 is not set | ||
1758 | # CONFIG_SND_EMU10K1X is not set | ||
1759 | # CONFIG_SND_ENS1370 is not set | ||
1760 | # CONFIG_SND_ENS1371 is not set | ||
1761 | # CONFIG_SND_ES1938 is not set | ||
1762 | # CONFIG_SND_ES1968 is not set | ||
1763 | # CONFIG_SND_FM801 is not set | ||
1764 | CONFIG_SND_HDA_INTEL=y | 239 | CONFIG_SND_HDA_INTEL=y |
1765 | CONFIG_SND_HDA_HWDEP=y | 240 | CONFIG_SND_HDA_HWDEP=y |
1766 | # CONFIG_SND_HDA_RECONFIG is not set | ||
1767 | # CONFIG_SND_HDA_INPUT_BEEP is not set | ||
1768 | CONFIG_SND_HDA_CODEC_REALTEK=y | ||
1769 | CONFIG_SND_HDA_CODEC_ANALOG=y | ||
1770 | CONFIG_SND_HDA_CODEC_SIGMATEL=y | ||
1771 | CONFIG_SND_HDA_CODEC_VIA=y | ||
1772 | CONFIG_SND_HDA_CODEC_ATIHDMI=y | ||
1773 | CONFIG_SND_HDA_CODEC_NVHDMI=y | ||
1774 | CONFIG_SND_HDA_CODEC_INTELHDMI=y | ||
1775 | CONFIG_SND_HDA_ELD=y | ||
1776 | CONFIG_SND_HDA_CODEC_CONEXANT=y | ||
1777 | CONFIG_SND_HDA_CODEC_CMEDIA=y | ||
1778 | CONFIG_SND_HDA_CODEC_SI3054=y | ||
1779 | CONFIG_SND_HDA_GENERIC=y | ||
1780 | # CONFIG_SND_HDA_POWER_SAVE is not set | ||
1781 | # CONFIG_SND_HDSP is not set | ||
1782 | # CONFIG_SND_HDSPM is not set | ||
1783 | # CONFIG_SND_HIFIER is not set | ||
1784 | # CONFIG_SND_ICE1712 is not set | ||
1785 | # CONFIG_SND_ICE1724 is not set | ||
1786 | # CONFIG_SND_INTEL8X0 is not set | ||
1787 | # CONFIG_SND_INTEL8X0M is not set | ||
1788 | # CONFIG_SND_KORG1212 is not set | ||
1789 | # CONFIG_SND_MAESTRO3 is not set | ||
1790 | # CONFIG_SND_MIXART is not set | ||
1791 | # CONFIG_SND_NM256 is not set | ||
1792 | # CONFIG_SND_PCXHR is not set | ||
1793 | # CONFIG_SND_RIPTIDE is not set | ||
1794 | # CONFIG_SND_RME32 is not set | ||
1795 | # CONFIG_SND_RME96 is not set | ||
1796 | # CONFIG_SND_RME9652 is not set | ||
1797 | # CONFIG_SND_SONICVIBES is not set | ||
1798 | # CONFIG_SND_TRIDENT is not set | ||
1799 | # CONFIG_SND_VIA82XX is not set | ||
1800 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
1801 | # CONFIG_SND_VIRTUOSO is not set | ||
1802 | # CONFIG_SND_VX222 is not set | ||
1803 | # CONFIG_SND_YMFPCI is not set | ||
1804 | CONFIG_SND_USB=y | ||
1805 | # CONFIG_SND_USB_AUDIO is not set | ||
1806 | # CONFIG_SND_USB_USX2Y is not set | ||
1807 | # CONFIG_SND_USB_CAIAQ is not set | ||
1808 | # CONFIG_SND_USB_US122L is not set | ||
1809 | CONFIG_SND_PCMCIA=y | ||
1810 | # CONFIG_SND_VXPOCKET is not set | ||
1811 | # CONFIG_SND_PDAUDIOCF is not set | ||
1812 | # CONFIG_SND_SOC is not set | ||
1813 | # CONFIG_SOUND_PRIME is not set | ||
1814 | CONFIG_HID_SUPPORT=y | ||
1815 | CONFIG_HID=y | ||
1816 | CONFIG_HID_DEBUG=y | ||
1817 | CONFIG_HIDRAW=y | 241 | CONFIG_HIDRAW=y |
1818 | |||
1819 | # | ||
1820 | # USB Input Devices | ||
1821 | # | ||
1822 | CONFIG_USB_HID=y | ||
1823 | CONFIG_HID_PID=y | 242 | CONFIG_HID_PID=y |
1824 | CONFIG_USB_HIDDEV=y | 243 | CONFIG_USB_HIDDEV=y |
1825 | |||
1826 | # | ||
1827 | # Special HID drivers | ||
1828 | # | ||
1829 | CONFIG_HID_A4TECH=y | ||
1830 | CONFIG_HID_APPLE=y | ||
1831 | CONFIG_HID_BELKIN=y | ||
1832 | CONFIG_HID_CHERRY=y | ||
1833 | CONFIG_HID_CHICONY=y | ||
1834 | CONFIG_HID_CYPRESS=y | ||
1835 | # CONFIG_DRAGONRISE_FF is not set | ||
1836 | CONFIG_HID_EZKEY=y | ||
1837 | CONFIG_HID_KYE=y | ||
1838 | CONFIG_HID_GYRATION=y | 244 | CONFIG_HID_GYRATION=y |
1839 | CONFIG_HID_KENSINGTON=y | ||
1840 | CONFIG_HID_LOGITECH=y | ||
1841 | CONFIG_LOGITECH_FF=y | 245 | CONFIG_LOGITECH_FF=y |
1842 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | ||
1843 | CONFIG_HID_MICROSOFT=y | ||
1844 | CONFIG_HID_MONTEREY=y | ||
1845 | CONFIG_HID_NTRIG=y | 246 | CONFIG_HID_NTRIG=y |
1846 | CONFIG_HID_PANTHERLORD=y | 247 | CONFIG_HID_PANTHERLORD=y |
1847 | CONFIG_PANTHERLORD_FF=y | 248 | CONFIG_PANTHERLORD_FF=y |
@@ -1849,697 +250,90 @@ CONFIG_HID_PETALYNX=y | |||
1849 | CONFIG_HID_SAMSUNG=y | 250 | CONFIG_HID_SAMSUNG=y |
1850 | CONFIG_HID_SONY=y | 251 | CONFIG_HID_SONY=y |
1851 | CONFIG_HID_SUNPLUS=y | 252 | CONFIG_HID_SUNPLUS=y |
1852 | # CONFIG_GREENASIA_FF is not set | ||
1853 | CONFIG_HID_TOPSEED=y | 253 | CONFIG_HID_TOPSEED=y |
1854 | CONFIG_THRUSTMASTER_FF=y | ||
1855 | CONFIG_ZEROPLUS_FF=y | ||
1856 | CONFIG_USB_SUPPORT=y | ||
1857 | CONFIG_USB_ARCH_HAS_HCD=y | ||
1858 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
1859 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
1860 | CONFIG_USB=y | 254 | CONFIG_USB=y |
1861 | CONFIG_USB_DEBUG=y | 255 | CONFIG_USB_DEBUG=y |
1862 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | 256 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y |
1863 | |||
1864 | # | ||
1865 | # Miscellaneous USB options | ||
1866 | # | ||
1867 | CONFIG_USB_DEVICEFS=y | 257 | CONFIG_USB_DEVICEFS=y |
1868 | # CONFIG_USB_DEVICE_CLASS is not set | 258 | # CONFIG_USB_DEVICE_CLASS is not set |
1869 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
1870 | CONFIG_USB_SUSPEND=y | ||
1871 | # CONFIG_USB_OTG is not set | ||
1872 | CONFIG_USB_MON=y | 259 | CONFIG_USB_MON=y |
1873 | # CONFIG_USB_WUSB is not set | ||
1874 | # CONFIG_USB_WUSB_CBAF is not set | ||
1875 | |||
1876 | # | ||
1877 | # USB Host Controller Drivers | ||
1878 | # | ||
1879 | # CONFIG_USB_C67X00_HCD is not set | ||
1880 | CONFIG_USB_EHCI_HCD=y | 260 | CONFIG_USB_EHCI_HCD=y |
1881 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
1882 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 261 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
1883 | # CONFIG_USB_OXU210HP_HCD is not set | ||
1884 | # CONFIG_USB_ISP116X_HCD is not set | ||
1885 | # CONFIG_USB_ISP1760_HCD is not set | ||
1886 | CONFIG_USB_OHCI_HCD=y | 262 | CONFIG_USB_OHCI_HCD=y |
1887 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
1888 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
1889 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
1890 | CONFIG_USB_UHCI_HCD=y | 263 | CONFIG_USB_UHCI_HCD=y |
1891 | # CONFIG_USB_SL811_HCD is not set | ||
1892 | # CONFIG_USB_R8A66597_HCD is not set | ||
1893 | # CONFIG_USB_WHCI_HCD is not set | ||
1894 | # CONFIG_USB_HWA_HCD is not set | ||
1895 | |||
1896 | # | ||
1897 | # USB Device Class drivers | ||
1898 | # | ||
1899 | # CONFIG_USB_ACM is not set | ||
1900 | CONFIG_USB_PRINTER=y | 264 | CONFIG_USB_PRINTER=y |
1901 | # CONFIG_USB_WDM is not set | ||
1902 | # CONFIG_USB_TMC is not set | ||
1903 | |||
1904 | # | ||
1905 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
1906 | # | ||
1907 | |||
1908 | # | ||
1909 | # also be needed; see USB_STORAGE Help for more info | ||
1910 | # | ||
1911 | CONFIG_USB_STORAGE=y | 265 | CONFIG_USB_STORAGE=y |
1912 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
1913 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
1914 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
1915 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
1916 | # CONFIG_USB_STORAGE_USBAT is not set | ||
1917 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
1918 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
1919 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
1920 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
1921 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
1922 | # CONFIG_USB_STORAGE_KARMA is not set | ||
1923 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
1924 | CONFIG_USB_LIBUSUAL=y | 266 | CONFIG_USB_LIBUSUAL=y |
1925 | |||
1926 | # | ||
1927 | # USB Imaging devices | ||
1928 | # | ||
1929 | # CONFIG_USB_MDC800 is not set | ||
1930 | # CONFIG_USB_MICROTEK is not set | ||
1931 | |||
1932 | # | ||
1933 | # USB port drivers | ||
1934 | # | ||
1935 | # CONFIG_USB_SERIAL is not set | ||
1936 | |||
1937 | # | ||
1938 | # USB Miscellaneous drivers | ||
1939 | # | ||
1940 | # CONFIG_USB_EMI62 is not set | ||
1941 | # CONFIG_USB_EMI26 is not set | ||
1942 | # CONFIG_USB_ADUTUX is not set | ||
1943 | # CONFIG_USB_SEVSEG is not set | ||
1944 | # CONFIG_USB_RIO500 is not set | ||
1945 | # CONFIG_USB_LEGOTOWER is not set | ||
1946 | # CONFIG_USB_LCD is not set | ||
1947 | # CONFIG_USB_BERRY_CHARGE is not set | ||
1948 | # CONFIG_USB_LED is not set | ||
1949 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
1950 | # CONFIG_USB_CYTHERM is not set | ||
1951 | # CONFIG_USB_IDMOUSE is not set | ||
1952 | # CONFIG_USB_FTDI_ELAN is not set | ||
1953 | # CONFIG_USB_APPLEDISPLAY is not set | ||
1954 | # CONFIG_USB_SISUSBVGA is not set | ||
1955 | # CONFIG_USB_LD is not set | ||
1956 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
1957 | # CONFIG_USB_IOWARRIOR is not set | ||
1958 | # CONFIG_USB_TEST is not set | ||
1959 | # CONFIG_USB_ISIGHTFW is not set | ||
1960 | # CONFIG_USB_VST is not set | ||
1961 | # CONFIG_USB_GADGET is not set | ||
1962 | |||
1963 | # | ||
1964 | # OTG and related infrastructure | ||
1965 | # | ||
1966 | # CONFIG_NOP_USB_XCEIV is not set | ||
1967 | # CONFIG_UWB is not set | ||
1968 | # CONFIG_MMC is not set | ||
1969 | # CONFIG_MEMSTICK is not set | ||
1970 | CONFIG_NEW_LEDS=y | ||
1971 | CONFIG_LEDS_CLASS=y | ||
1972 | |||
1973 | # | ||
1974 | # LED drivers | ||
1975 | # | ||
1976 | # CONFIG_LEDS_ALIX2 is not set | ||
1977 | # CONFIG_LEDS_PCA9532 is not set | ||
1978 | # CONFIG_LEDS_LP5521 is not set | ||
1979 | # CONFIG_LEDS_CLEVO_MAIL is not set | ||
1980 | # CONFIG_LEDS_PCA955X is not set | ||
1981 | # CONFIG_LEDS_BD2802 is not set | ||
1982 | |||
1983 | # | ||
1984 | # LED Triggers | ||
1985 | # | ||
1986 | CONFIG_LEDS_TRIGGERS=y | ||
1987 | # CONFIG_LEDS_TRIGGER_TIMER is not set | ||
1988 | # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set | ||
1989 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | ||
1990 | # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set | ||
1991 | |||
1992 | # | ||
1993 | # iptables trigger is under Netfilter config (LED target) | ||
1994 | # | ||
1995 | # CONFIG_ACCESSIBILITY is not set | ||
1996 | # CONFIG_INFINIBAND is not set | ||
1997 | CONFIG_EDAC=y | 267 | CONFIG_EDAC=y |
1998 | |||
1999 | # | ||
2000 | # Reporting subsystems | ||
2001 | # | ||
2002 | # CONFIG_EDAC_DEBUG is not set | ||
2003 | # CONFIG_EDAC_MM_EDAC is not set | ||
2004 | CONFIG_RTC_LIB=y | ||
2005 | CONFIG_RTC_CLASS=y | 268 | CONFIG_RTC_CLASS=y |
2006 | # CONFIG_RTC_HCTOSYS is not set | 269 | # CONFIG_RTC_HCTOSYS is not set |
2007 | # CONFIG_RTC_DEBUG is not set | ||
2008 | |||
2009 | # | ||
2010 | # RTC interfaces | ||
2011 | # | ||
2012 | CONFIG_RTC_INTF_SYSFS=y | ||
2013 | CONFIG_RTC_INTF_PROC=y | ||
2014 | CONFIG_RTC_INTF_DEV=y | ||
2015 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
2016 | # CONFIG_RTC_DRV_TEST is not set | ||
2017 | |||
2018 | # | ||
2019 | # I2C RTC drivers | ||
2020 | # | ||
2021 | # CONFIG_RTC_DRV_DS1307 is not set | ||
2022 | # CONFIG_RTC_DRV_DS1374 is not set | ||
2023 | # CONFIG_RTC_DRV_DS1672 is not set | ||
2024 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
2025 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
2026 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
2027 | # CONFIG_RTC_DRV_X1205 is not set | ||
2028 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
2029 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
2030 | # CONFIG_RTC_DRV_M41T80 is not set | ||
2031 | # CONFIG_RTC_DRV_S35390A is not set | ||
2032 | # CONFIG_RTC_DRV_FM3130 is not set | ||
2033 | # CONFIG_RTC_DRV_RX8581 is not set | ||
2034 | |||
2035 | # | ||
2036 | # SPI RTC drivers | ||
2037 | # | ||
2038 | |||
2039 | # | ||
2040 | # Platform RTC drivers | ||
2041 | # | ||
2042 | CONFIG_RTC_DRV_CMOS=y | ||
2043 | # CONFIG_RTC_DRV_DS1286 is not set | ||
2044 | # CONFIG_RTC_DRV_DS1511 is not set | ||
2045 | # CONFIG_RTC_DRV_DS1553 is not set | ||
2046 | # CONFIG_RTC_DRV_DS1742 is not set | ||
2047 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
2048 | # CONFIG_RTC_DRV_M48T86 is not set | ||
2049 | # CONFIG_RTC_DRV_M48T35 is not set | ||
2050 | # CONFIG_RTC_DRV_M48T59 is not set | ||
2051 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
2052 | # CONFIG_RTC_DRV_V3020 is not set | ||
2053 | |||
2054 | # | ||
2055 | # on-CPU RTC drivers | ||
2056 | # | ||
2057 | CONFIG_DMADEVICES=y | 270 | CONFIG_DMADEVICES=y |
2058 | |||
2059 | # | ||
2060 | # DMA Devices | ||
2061 | # | ||
2062 | # CONFIG_INTEL_IOATDMA is not set | ||
2063 | # CONFIG_AUXDISPLAY is not set | ||
2064 | # CONFIG_UIO is not set | ||
2065 | # CONFIG_STAGING is not set | ||
2066 | CONFIG_X86_PLATFORM_DEVICES=y | ||
2067 | # CONFIG_ACER_WMI is not set | ||
2068 | # CONFIG_ASUS_LAPTOP is not set | ||
2069 | # CONFIG_FUJITSU_LAPTOP is not set | ||
2070 | # CONFIG_MSI_LAPTOP is not set | ||
2071 | # CONFIG_PANASONIC_LAPTOP is not set | ||
2072 | # CONFIG_COMPAL_LAPTOP is not set | ||
2073 | # CONFIG_SONY_LAPTOP is not set | ||
2074 | # CONFIG_THINKPAD_ACPI is not set | ||
2075 | # CONFIG_INTEL_MENLOW is not set | ||
2076 | CONFIG_EEEPC_LAPTOP=y | 271 | CONFIG_EEEPC_LAPTOP=y |
2077 | # CONFIG_ACPI_WMI is not set | ||
2078 | # CONFIG_ACPI_ASUS is not set | ||
2079 | # CONFIG_ACPI_TOSHIBA is not set | ||
2080 | |||
2081 | # | ||
2082 | # Firmware Drivers | ||
2083 | # | ||
2084 | # CONFIG_EDD is not set | ||
2085 | CONFIG_FIRMWARE_MEMMAP=y | ||
2086 | CONFIG_EFI_VARS=y | 272 | CONFIG_EFI_VARS=y |
2087 | # CONFIG_DELL_RBU is not set | ||
2088 | # CONFIG_DCDBAS is not set | ||
2089 | CONFIG_DMIID=y | ||
2090 | # CONFIG_ISCSI_IBFT_FIND is not set | ||
2091 | |||
2092 | # | ||
2093 | # File systems | ||
2094 | # | ||
2095 | # CONFIG_EXT2_FS is not set | ||
2096 | CONFIG_EXT3_FS=y | 273 | CONFIG_EXT3_FS=y |
2097 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 274 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
2098 | CONFIG_EXT3_FS_XATTR=y | ||
2099 | CONFIG_EXT3_FS_POSIX_ACL=y | 275 | CONFIG_EXT3_FS_POSIX_ACL=y |
2100 | CONFIG_EXT3_FS_SECURITY=y | 276 | CONFIG_EXT3_FS_SECURITY=y |
2101 | # CONFIG_EXT4_FS is not set | ||
2102 | CONFIG_JBD=y | ||
2103 | # CONFIG_JBD_DEBUG is not set | ||
2104 | CONFIG_FS_MBCACHE=y | ||
2105 | # CONFIG_REISERFS_FS is not set | ||
2106 | # CONFIG_JFS_FS is not set | ||
2107 | CONFIG_FS_POSIX_ACL=y | ||
2108 | CONFIG_FILE_LOCKING=y | ||
2109 | # CONFIG_XFS_FS is not set | ||
2110 | # CONFIG_GFS2_FS is not set | ||
2111 | # CONFIG_OCFS2_FS is not set | ||
2112 | # CONFIG_BTRFS_FS is not set | ||
2113 | CONFIG_DNOTIFY=y | ||
2114 | CONFIG_INOTIFY=y | ||
2115 | CONFIG_INOTIFY_USER=y | ||
2116 | CONFIG_QUOTA=y | 277 | CONFIG_QUOTA=y |
2117 | CONFIG_QUOTA_NETLINK_INTERFACE=y | 278 | CONFIG_QUOTA_NETLINK_INTERFACE=y |
2118 | # CONFIG_PRINT_QUOTA_WARNING is not set | 279 | # CONFIG_PRINT_QUOTA_WARNING is not set |
2119 | CONFIG_QUOTA_TREE=y | ||
2120 | # CONFIG_QFMT_V1 is not set | ||
2121 | CONFIG_QFMT_V2=y | 280 | CONFIG_QFMT_V2=y |
2122 | CONFIG_QUOTACTL=y | ||
2123 | # CONFIG_AUTOFS_FS is not set | ||
2124 | CONFIG_AUTOFS4_FS=y | 281 | CONFIG_AUTOFS4_FS=y |
2125 | # CONFIG_FUSE_FS is not set | ||
2126 | CONFIG_GENERIC_ACL=y | ||
2127 | |||
2128 | # | ||
2129 | # Caches | ||
2130 | # | ||
2131 | # CONFIG_FSCACHE is not set | ||
2132 | |||
2133 | # | ||
2134 | # CD-ROM/DVD Filesystems | ||
2135 | # | ||
2136 | CONFIG_ISO9660_FS=y | 282 | CONFIG_ISO9660_FS=y |
2137 | CONFIG_JOLIET=y | 283 | CONFIG_JOLIET=y |
2138 | CONFIG_ZISOFS=y | 284 | CONFIG_ZISOFS=y |
2139 | # CONFIG_UDF_FS is not set | ||
2140 | |||
2141 | # | ||
2142 | # DOS/FAT/NT Filesystems | ||
2143 | # | ||
2144 | CONFIG_FAT_FS=y | ||
2145 | CONFIG_MSDOS_FS=y | 285 | CONFIG_MSDOS_FS=y |
2146 | CONFIG_VFAT_FS=y | 286 | CONFIG_VFAT_FS=y |
2147 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
2148 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
2149 | # CONFIG_NTFS_FS is not set | ||
2150 | |||
2151 | # | ||
2152 | # Pseudo filesystems | ||
2153 | # | ||
2154 | CONFIG_PROC_FS=y | ||
2155 | CONFIG_PROC_KCORE=y | 287 | CONFIG_PROC_KCORE=y |
2156 | CONFIG_PROC_VMCORE=y | ||
2157 | CONFIG_PROC_SYSCTL=y | ||
2158 | CONFIG_PROC_PAGE_MONITOR=y | ||
2159 | CONFIG_SYSFS=y | ||
2160 | CONFIG_TMPFS=y | 288 | CONFIG_TMPFS=y |
2161 | CONFIG_TMPFS_POSIX_ACL=y | 289 | CONFIG_TMPFS_POSIX_ACL=y |
2162 | CONFIG_HUGETLBFS=y | 290 | CONFIG_HUGETLBFS=y |
2163 | CONFIG_HUGETLB_PAGE=y | ||
2164 | # CONFIG_CONFIGFS_FS is not set | ||
2165 | CONFIG_MISC_FILESYSTEMS=y | ||
2166 | # CONFIG_ADFS_FS is not set | ||
2167 | # CONFIG_AFFS_FS is not set | ||
2168 | # CONFIG_ECRYPT_FS is not set | ||
2169 | # CONFIG_HFS_FS is not set | ||
2170 | # CONFIG_HFSPLUS_FS is not set | ||
2171 | # CONFIG_BEFS_FS is not set | ||
2172 | # CONFIG_BFS_FS is not set | ||
2173 | # CONFIG_EFS_FS is not set | ||
2174 | # CONFIG_CRAMFS is not set | ||
2175 | # CONFIG_SQUASHFS is not set | ||
2176 | # CONFIG_VXFS_FS is not set | ||
2177 | # CONFIG_MINIX_FS is not set | ||
2178 | # CONFIG_OMFS_FS is not set | ||
2179 | # CONFIG_HPFS_FS is not set | ||
2180 | # CONFIG_QNX4FS_FS is not set | ||
2181 | # CONFIG_ROMFS_FS is not set | ||
2182 | # CONFIG_SYSV_FS is not set | ||
2183 | # CONFIG_UFS_FS is not set | ||
2184 | # CONFIG_NILFS2_FS is not set | ||
2185 | CONFIG_NETWORK_FILESYSTEMS=y | ||
2186 | CONFIG_NFS_FS=y | 291 | CONFIG_NFS_FS=y |
2187 | CONFIG_NFS_V3=y | 292 | CONFIG_NFS_V3=y |
2188 | CONFIG_NFS_V3_ACL=y | 293 | CONFIG_NFS_V3_ACL=y |
2189 | CONFIG_NFS_V4=y | 294 | CONFIG_NFS_V4=y |
2190 | CONFIG_ROOT_NFS=y | 295 | CONFIG_ROOT_NFS=y |
2191 | # CONFIG_NFSD is not set | ||
2192 | CONFIG_LOCKD=y | ||
2193 | CONFIG_LOCKD_V4=y | ||
2194 | CONFIG_NFS_ACL_SUPPORT=y | ||
2195 | CONFIG_NFS_COMMON=y | ||
2196 | CONFIG_SUNRPC=y | ||
2197 | CONFIG_SUNRPC_GSS=y | ||
2198 | CONFIG_RPCSEC_GSS_KRB5=y | ||
2199 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
2200 | # CONFIG_SMB_FS is not set | ||
2201 | # CONFIG_CIFS is not set | ||
2202 | # CONFIG_NCP_FS is not set | ||
2203 | # CONFIG_CODA_FS is not set | ||
2204 | # CONFIG_AFS_FS is not set | ||
2205 | |||
2206 | # | ||
2207 | # Partition Types | ||
2208 | # | ||
2209 | CONFIG_PARTITION_ADVANCED=y | 296 | CONFIG_PARTITION_ADVANCED=y |
2210 | # CONFIG_ACORN_PARTITION is not set | ||
2211 | CONFIG_OSF_PARTITION=y | 297 | CONFIG_OSF_PARTITION=y |
2212 | CONFIG_AMIGA_PARTITION=y | 298 | CONFIG_AMIGA_PARTITION=y |
2213 | # CONFIG_ATARI_PARTITION is not set | ||
2214 | CONFIG_MAC_PARTITION=y | 299 | CONFIG_MAC_PARTITION=y |
2215 | CONFIG_MSDOS_PARTITION=y | ||
2216 | CONFIG_BSD_DISKLABEL=y | 300 | CONFIG_BSD_DISKLABEL=y |
2217 | CONFIG_MINIX_SUBPARTITION=y | 301 | CONFIG_MINIX_SUBPARTITION=y |
2218 | CONFIG_SOLARIS_X86_PARTITION=y | 302 | CONFIG_SOLARIS_X86_PARTITION=y |
2219 | CONFIG_UNIXWARE_DISKLABEL=y | 303 | CONFIG_UNIXWARE_DISKLABEL=y |
2220 | # CONFIG_LDM_PARTITION is not set | ||
2221 | CONFIG_SGI_PARTITION=y | 304 | CONFIG_SGI_PARTITION=y |
2222 | # CONFIG_ULTRIX_PARTITION is not set | ||
2223 | CONFIG_SUN_PARTITION=y | 305 | CONFIG_SUN_PARTITION=y |
2224 | CONFIG_KARMA_PARTITION=y | 306 | CONFIG_KARMA_PARTITION=y |
2225 | CONFIG_EFI_PARTITION=y | 307 | CONFIG_EFI_PARTITION=y |
2226 | # CONFIG_SYSV68_PARTITION is not set | ||
2227 | CONFIG_NLS=y | ||
2228 | CONFIG_NLS_DEFAULT="utf8" | 308 | CONFIG_NLS_DEFAULT="utf8" |
2229 | CONFIG_NLS_CODEPAGE_437=y | 309 | CONFIG_NLS_CODEPAGE_437=y |
2230 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
2231 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
2232 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
2233 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
2234 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
2235 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
2236 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
2237 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
2238 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
2239 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
2240 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
2241 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
2242 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
2243 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
2244 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
2245 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
2246 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
2247 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
2248 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
2249 | # CONFIG_NLS_ISO8859_8 is not set | ||
2250 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
2251 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
2252 | CONFIG_NLS_ASCII=y | 310 | CONFIG_NLS_ASCII=y |
2253 | CONFIG_NLS_ISO8859_1=y | 311 | CONFIG_NLS_ISO8859_1=y |
2254 | # CONFIG_NLS_ISO8859_2 is not set | ||
2255 | # CONFIG_NLS_ISO8859_3 is not set | ||
2256 | # CONFIG_NLS_ISO8859_4 is not set | ||
2257 | # CONFIG_NLS_ISO8859_5 is not set | ||
2258 | # CONFIG_NLS_ISO8859_6 is not set | ||
2259 | # CONFIG_NLS_ISO8859_7 is not set | ||
2260 | # CONFIG_NLS_ISO8859_9 is not set | ||
2261 | # CONFIG_NLS_ISO8859_13 is not set | ||
2262 | # CONFIG_NLS_ISO8859_14 is not set | ||
2263 | # CONFIG_NLS_ISO8859_15 is not set | ||
2264 | # CONFIG_NLS_KOI8_R is not set | ||
2265 | # CONFIG_NLS_KOI8_U is not set | ||
2266 | CONFIG_NLS_UTF8=y | 312 | CONFIG_NLS_UTF8=y |
2267 | # CONFIG_DLM is not set | ||
2268 | |||
2269 | # | ||
2270 | # Kernel hacking | ||
2271 | # | ||
2272 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
2273 | CONFIG_PRINTK_TIME=y | 313 | CONFIG_PRINTK_TIME=y |
2274 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | 314 | # CONFIG_ENABLE_WARN_DEPRECATED is not set |
2275 | CONFIG_ENABLE_MUST_CHECK=y | ||
2276 | CONFIG_FRAME_WARN=2048 | ||
2277 | CONFIG_MAGIC_SYSRQ=y | 315 | CONFIG_MAGIC_SYSRQ=y |
2278 | # CONFIG_UNUSED_SYMBOLS is not set | 316 | # CONFIG_UNUSED_SYMBOLS is not set |
2279 | CONFIG_DEBUG_FS=y | ||
2280 | # CONFIG_HEADERS_CHECK is not set | ||
2281 | CONFIG_DEBUG_KERNEL=y | 317 | CONFIG_DEBUG_KERNEL=y |
2282 | # CONFIG_DEBUG_SHIRQ is not set | ||
2283 | # CONFIG_DETECT_SOFTLOCKUP is not set | ||
2284 | # CONFIG_DETECT_HUNG_TASK is not set | ||
2285 | # CONFIG_SCHED_DEBUG is not set | 318 | # CONFIG_SCHED_DEBUG is not set |
2286 | CONFIG_SCHEDSTATS=y | 319 | CONFIG_SCHEDSTATS=y |
2287 | CONFIG_TIMER_STATS=y | 320 | CONFIG_TIMER_STATS=y |
2288 | # CONFIG_DEBUG_OBJECTS is not set | ||
2289 | # CONFIG_SLUB_DEBUG_ON is not set | ||
2290 | # CONFIG_SLUB_STATS is not set | ||
2291 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
2292 | # CONFIG_RT_MUTEX_TESTER is not set | ||
2293 | # CONFIG_DEBUG_SPINLOCK is not set | ||
2294 | # CONFIG_DEBUG_MUTEXES is not set | ||
2295 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
2296 | # CONFIG_PROVE_LOCKING is not set | ||
2297 | # CONFIG_LOCK_STAT is not set | ||
2298 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
2299 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
2300 | CONFIG_STACKTRACE=y | ||
2301 | # CONFIG_DEBUG_KOBJECT is not set | ||
2302 | CONFIG_DEBUG_BUGVERBOSE=y | ||
2303 | # CONFIG_DEBUG_INFO is not set | ||
2304 | # CONFIG_DEBUG_VM is not set | ||
2305 | # CONFIG_DEBUG_VIRTUAL is not set | ||
2306 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
2307 | CONFIG_DEBUG_MEMORY_INIT=y | ||
2308 | # CONFIG_DEBUG_LIST is not set | ||
2309 | # CONFIG_DEBUG_SG is not set | ||
2310 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
2311 | CONFIG_ARCH_WANT_FRAME_POINTERS=y | ||
2312 | CONFIG_FRAME_POINTER=y | ||
2313 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
2314 | # CONFIG_RCU_TORTURE_TEST is not set | ||
2315 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 321 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
2316 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
2317 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
2318 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
2319 | # CONFIG_LKDTM is not set | ||
2320 | # CONFIG_FAULT_INJECTION is not set | ||
2321 | # CONFIG_LATENCYTOP is not set | ||
2322 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 322 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
2323 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
2324 | CONFIG_USER_STACKTRACE_SUPPORT=y | ||
2325 | CONFIG_NOP_TRACER=y | ||
2326 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
2327 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
2328 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y | ||
2329 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
2330 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
2331 | CONFIG_HAVE_HW_BRANCH_TRACER=y | ||
2332 | CONFIG_HAVE_SYSCALL_TRACEPOINTS=y | ||
2333 | CONFIG_RING_BUFFER=y | ||
2334 | CONFIG_TRACING=y | ||
2335 | CONFIG_TRACING_SUPPORT=y | ||
2336 | |||
2337 | # | ||
2338 | # Tracers | ||
2339 | # | ||
2340 | # CONFIG_FUNCTION_TRACER is not set | ||
2341 | # CONFIG_IRQSOFF_TRACER is not set | ||
2342 | # CONFIG_SYSPROF_TRACER is not set | ||
2343 | # CONFIG_SCHED_TRACER is not set | ||
2344 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | ||
2345 | # CONFIG_EVENT_TRACER is not set | ||
2346 | # CONFIG_FTRACE_SYSCALLS is not set | ||
2347 | # CONFIG_BOOT_TRACER is not set | ||
2348 | # CONFIG_TRACE_BRANCH_PROFILING is not set | ||
2349 | # CONFIG_POWER_TRACER is not set | ||
2350 | # CONFIG_STACK_TRACER is not set | ||
2351 | # CONFIG_HW_BRANCH_TRACER is not set | ||
2352 | # CONFIG_KMEMTRACE is not set | ||
2353 | # CONFIG_WORKQUEUE_TRACER is not set | ||
2354 | CONFIG_BLK_DEV_IO_TRACE=y | 323 | CONFIG_BLK_DEV_IO_TRACE=y |
2355 | # CONFIG_FTRACE_STARTUP_TEST is not set | ||
2356 | # CONFIG_MMIOTRACE is not set | ||
2357 | CONFIG_PROVIDE_OHCI1394_DMA_INIT=y | 324 | CONFIG_PROVIDE_OHCI1394_DMA_INIT=y |
2358 | # CONFIG_DYNAMIC_DEBUG is not set | ||
2359 | # CONFIG_DMA_API_DEBUG is not set | ||
2360 | # CONFIG_SAMPLES is not set | ||
2361 | CONFIG_HAVE_ARCH_KGDB=y | ||
2362 | # CONFIG_KGDB is not set | ||
2363 | # CONFIG_STRICT_DEVMEM is not set | ||
2364 | CONFIG_X86_VERBOSE_BOOTUP=y | ||
2365 | CONFIG_EARLY_PRINTK=y | ||
2366 | CONFIG_EARLY_PRINTK_DBGP=y | 325 | CONFIG_EARLY_PRINTK_DBGP=y |
2367 | CONFIG_DEBUG_STACKOVERFLOW=y | 326 | CONFIG_DEBUG_STACKOVERFLOW=y |
2368 | CONFIG_DEBUG_STACK_USAGE=y | 327 | CONFIG_DEBUG_STACK_USAGE=y |
2369 | # CONFIG_DEBUG_PER_CPU_MAPS is not set | ||
2370 | # CONFIG_X86_PTDUMP is not set | ||
2371 | CONFIG_DEBUG_RODATA=y | ||
2372 | # CONFIG_DEBUG_RODATA_TEST is not set | 328 | # CONFIG_DEBUG_RODATA_TEST is not set |
2373 | CONFIG_DEBUG_NX_TEST=m | 329 | CONFIG_DEBUG_NX_TEST=m |
2374 | # CONFIG_IOMMU_DEBUG is not set | ||
2375 | CONFIG_HAVE_MMIOTRACE_SUPPORT=y | ||
2376 | CONFIG_IO_DELAY_TYPE_0X80=0 | ||
2377 | CONFIG_IO_DELAY_TYPE_0XED=1 | ||
2378 | CONFIG_IO_DELAY_TYPE_UDELAY=2 | ||
2379 | CONFIG_IO_DELAY_TYPE_NONE=3 | ||
2380 | CONFIG_IO_DELAY_0X80=y | ||
2381 | # CONFIG_IO_DELAY_0XED is not set | ||
2382 | # CONFIG_IO_DELAY_UDELAY is not set | ||
2383 | # CONFIG_IO_DELAY_NONE is not set | ||
2384 | CONFIG_DEFAULT_IO_DELAY_TYPE=0 | ||
2385 | CONFIG_DEBUG_BOOT_PARAMS=y | 330 | CONFIG_DEBUG_BOOT_PARAMS=y |
2386 | # CONFIG_CPA_DEBUG is not set | ||
2387 | CONFIG_OPTIMIZE_INLINING=y | 331 | CONFIG_OPTIMIZE_INLINING=y |
2388 | |||
2389 | # | ||
2390 | # Security options | ||
2391 | # | ||
2392 | CONFIG_KEYS=y | ||
2393 | CONFIG_KEYS_DEBUG_PROC_KEYS=y | 332 | CONFIG_KEYS_DEBUG_PROC_KEYS=y |
2394 | CONFIG_SECURITY=y | 333 | CONFIG_SECURITY=y |
2395 | # CONFIG_SECURITYFS is not set | ||
2396 | CONFIG_SECURITY_NETWORK=y | 334 | CONFIG_SECURITY_NETWORK=y |
2397 | # CONFIG_SECURITY_NETWORK_XFRM is not set | ||
2398 | # CONFIG_SECURITY_PATH is not set | ||
2399 | CONFIG_SECURITY_FILE_CAPABILITIES=y | ||
2400 | # CONFIG_SECURITY_ROOTPLUG is not set | ||
2401 | CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536 | ||
2402 | CONFIG_SECURITY_SELINUX=y | 335 | CONFIG_SECURITY_SELINUX=y |
2403 | CONFIG_SECURITY_SELINUX_BOOTPARAM=y | 336 | CONFIG_SECURITY_SELINUX_BOOTPARAM=y |
2404 | CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1 | ||
2405 | CONFIG_SECURITY_SELINUX_DISABLE=y | 337 | CONFIG_SECURITY_SELINUX_DISABLE=y |
2406 | CONFIG_SECURITY_SELINUX_DEVELOP=y | ||
2407 | CONFIG_SECURITY_SELINUX_AVC_STATS=y | ||
2408 | CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 | ||
2409 | # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set | ||
2410 | # CONFIG_SECURITY_SMACK is not set | ||
2411 | # CONFIG_SECURITY_TOMOYO is not set | ||
2412 | # CONFIG_IMA is not set | ||
2413 | CONFIG_CRYPTO=y | ||
2414 | |||
2415 | # | ||
2416 | # Crypto core or helper | ||
2417 | # | ||
2418 | # CONFIG_CRYPTO_FIPS is not set | ||
2419 | CONFIG_CRYPTO_ALGAPI=y | ||
2420 | CONFIG_CRYPTO_ALGAPI2=y | ||
2421 | CONFIG_CRYPTO_AEAD=y | ||
2422 | CONFIG_CRYPTO_AEAD2=y | ||
2423 | CONFIG_CRYPTO_BLKCIPHER=y | ||
2424 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
2425 | CONFIG_CRYPTO_HASH=y | ||
2426 | CONFIG_CRYPTO_HASH2=y | ||
2427 | CONFIG_CRYPTO_RNG2=y | ||
2428 | CONFIG_CRYPTO_PCOMP=y | ||
2429 | CONFIG_CRYPTO_MANAGER=y | ||
2430 | CONFIG_CRYPTO_MANAGER2=y | ||
2431 | # CONFIG_CRYPTO_GF128MUL is not set | ||
2432 | # CONFIG_CRYPTO_NULL is not set | ||
2433 | CONFIG_CRYPTO_WORKQUEUE=y | ||
2434 | # CONFIG_CRYPTO_CRYPTD is not set | ||
2435 | CONFIG_CRYPTO_AUTHENC=y | ||
2436 | # CONFIG_CRYPTO_TEST is not set | ||
2437 | |||
2438 | # | ||
2439 | # Authenticated Encryption with Associated Data | ||
2440 | # | ||
2441 | # CONFIG_CRYPTO_CCM is not set | ||
2442 | # CONFIG_CRYPTO_GCM is not set | ||
2443 | # CONFIG_CRYPTO_SEQIV is not set | ||
2444 | |||
2445 | # | ||
2446 | # Block modes | ||
2447 | # | ||
2448 | CONFIG_CRYPTO_CBC=y | ||
2449 | # CONFIG_CRYPTO_CTR is not set | ||
2450 | # CONFIG_CRYPTO_CTS is not set | ||
2451 | CONFIG_CRYPTO_ECB=y | ||
2452 | # CONFIG_CRYPTO_LRW is not set | ||
2453 | # CONFIG_CRYPTO_PCBC is not set | ||
2454 | # CONFIG_CRYPTO_XTS is not set | ||
2455 | |||
2456 | # | ||
2457 | # Hash modes | ||
2458 | # | ||
2459 | CONFIG_CRYPTO_HMAC=y | ||
2460 | # CONFIG_CRYPTO_XCBC is not set | ||
2461 | |||
2462 | # | ||
2463 | # Digest | ||
2464 | # | ||
2465 | # CONFIG_CRYPTO_CRC32C is not set | ||
2466 | # CONFIG_CRYPTO_CRC32C_INTEL is not set | ||
2467 | # CONFIG_CRYPTO_MD4 is not set | ||
2468 | CONFIG_CRYPTO_MD5=y | ||
2469 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
2470 | # CONFIG_CRYPTO_RMD128 is not set | ||
2471 | # CONFIG_CRYPTO_RMD160 is not set | ||
2472 | # CONFIG_CRYPTO_RMD256 is not set | ||
2473 | # CONFIG_CRYPTO_RMD320 is not set | ||
2474 | CONFIG_CRYPTO_SHA1=y | ||
2475 | # CONFIG_CRYPTO_SHA256 is not set | ||
2476 | # CONFIG_CRYPTO_SHA512 is not set | ||
2477 | # CONFIG_CRYPTO_TGR192 is not set | ||
2478 | # CONFIG_CRYPTO_WP512 is not set | ||
2479 | |||
2480 | # | ||
2481 | # Ciphers | ||
2482 | # | ||
2483 | CONFIG_CRYPTO_AES=y | ||
2484 | # CONFIG_CRYPTO_AES_X86_64 is not set | ||
2485 | # CONFIG_CRYPTO_AES_NI_INTEL is not set | ||
2486 | # CONFIG_CRYPTO_ANUBIS is not set | ||
2487 | CONFIG_CRYPTO_ARC4=y | ||
2488 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
2489 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
2490 | # CONFIG_CRYPTO_CAST5 is not set | ||
2491 | # CONFIG_CRYPTO_CAST6 is not set | ||
2492 | CONFIG_CRYPTO_DES=y | ||
2493 | # CONFIG_CRYPTO_FCRYPT is not set | ||
2494 | # CONFIG_CRYPTO_KHAZAD is not set | ||
2495 | # CONFIG_CRYPTO_SALSA20 is not set | ||
2496 | # CONFIG_CRYPTO_SALSA20_X86_64 is not set | ||
2497 | # CONFIG_CRYPTO_SEED is not set | ||
2498 | # CONFIG_CRYPTO_SERPENT is not set | ||
2499 | # CONFIG_CRYPTO_TEA is not set | ||
2500 | # CONFIG_CRYPTO_TWOFISH is not set | ||
2501 | # CONFIG_CRYPTO_TWOFISH_X86_64 is not set | ||
2502 | |||
2503 | # | ||
2504 | # Compression | ||
2505 | # | ||
2506 | # CONFIG_CRYPTO_DEFLATE is not set | ||
2507 | # CONFIG_CRYPTO_ZLIB is not set | ||
2508 | # CONFIG_CRYPTO_LZO is not set | ||
2509 | |||
2510 | # | ||
2511 | # Random Number Generation | ||
2512 | # | ||
2513 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 338 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
2514 | CONFIG_CRYPTO_HW=y | ||
2515 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
2516 | CONFIG_HAVE_KVM=y | ||
2517 | CONFIG_HAVE_KVM_IRQCHIP=y | ||
2518 | CONFIG_VIRTUALIZATION=y | ||
2519 | # CONFIG_KVM is not set | ||
2520 | # CONFIG_VIRTIO_PCI is not set | ||
2521 | # CONFIG_VIRTIO_BALLOON is not set | ||
2522 | CONFIG_BINARY_PRINTF=y | ||
2523 | |||
2524 | # | ||
2525 | # Library routines | ||
2526 | # | ||
2527 | CONFIG_BITREVERSE=y | ||
2528 | CONFIG_GENERIC_FIND_FIRST_BIT=y | ||
2529 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
2530 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
2531 | # CONFIG_CRC_CCITT is not set | ||
2532 | # CONFIG_CRC16 is not set | ||
2533 | CONFIG_CRC_T10DIF=y | 339 | CONFIG_CRC_T10DIF=y |
2534 | # CONFIG_CRC_ITU_T is not set | ||
2535 | CONFIG_CRC32=y | ||
2536 | # CONFIG_CRC7 is not set | ||
2537 | # CONFIG_LIBCRC32C is not set | ||
2538 | CONFIG_ZLIB_INFLATE=y | ||
2539 | CONFIG_DECOMPRESS_GZIP=y | ||
2540 | CONFIG_DECOMPRESS_BZIP2=y | ||
2541 | CONFIG_DECOMPRESS_LZMA=y | ||
2542 | CONFIG_HAS_IOMEM=y | ||
2543 | CONFIG_HAS_IOPORT=y | ||
2544 | CONFIG_HAS_DMA=y | ||
2545 | CONFIG_NLATTR=y | ||
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S index e790bc1fbfa3..b86feabed69b 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S | |||
@@ -842,4 +842,7 @@ ia32_sys_call_table: | |||
842 | .quad compat_sys_rt_tgsigqueueinfo /* 335 */ | 842 | .quad compat_sys_rt_tgsigqueueinfo /* 335 */ |
843 | .quad sys_perf_event_open | 843 | .quad sys_perf_event_open |
844 | .quad compat_sys_recvmmsg | 844 | .quad compat_sys_recvmmsg |
845 | .quad sys_fanotify_init | ||
846 | .quad sys32_fanotify_mark | ||
847 | .quad sys_prlimit64 /* 340 */ | ||
845 | ia32_syscall_end: | 848 | ia32_syscall_end: |
diff --git a/arch/x86/ia32/sys_ia32.c b/arch/x86/ia32/sys_ia32.c index 626be156d88d..849813f398e7 100644 --- a/arch/x86/ia32/sys_ia32.c +++ b/arch/x86/ia32/sys_ia32.c | |||
@@ -51,7 +51,7 @@ | |||
51 | #define AA(__x) ((unsigned long)(__x)) | 51 | #define AA(__x) ((unsigned long)(__x)) |
52 | 52 | ||
53 | 53 | ||
54 | asmlinkage long sys32_truncate64(char __user *filename, | 54 | asmlinkage long sys32_truncate64(const char __user *filename, |
55 | unsigned long offset_low, | 55 | unsigned long offset_low, |
56 | unsigned long offset_high) | 56 | unsigned long offset_high) |
57 | { | 57 | { |
@@ -96,7 +96,7 @@ static int cp_stat64(struct stat64 __user *ubuf, struct kstat *stat) | |||
96 | return 0; | 96 | return 0; |
97 | } | 97 | } |
98 | 98 | ||
99 | asmlinkage long sys32_stat64(char __user *filename, | 99 | asmlinkage long sys32_stat64(const char __user *filename, |
100 | struct stat64 __user *statbuf) | 100 | struct stat64 __user *statbuf) |
101 | { | 101 | { |
102 | struct kstat stat; | 102 | struct kstat stat; |
@@ -107,7 +107,7 @@ asmlinkage long sys32_stat64(char __user *filename, | |||
107 | return ret; | 107 | return ret; |
108 | } | 108 | } |
109 | 109 | ||
110 | asmlinkage long sys32_lstat64(char __user *filename, | 110 | asmlinkage long sys32_lstat64(const char __user *filename, |
111 | struct stat64 __user *statbuf) | 111 | struct stat64 __user *statbuf) |
112 | { | 112 | { |
113 | struct kstat stat; | 113 | struct kstat stat; |
@@ -126,7 +126,7 @@ asmlinkage long sys32_fstat64(unsigned int fd, struct stat64 __user *statbuf) | |||
126 | return ret; | 126 | return ret; |
127 | } | 127 | } |
128 | 128 | ||
129 | asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename, | 129 | asmlinkage long sys32_fstatat(unsigned int dfd, const char __user *filename, |
130 | struct stat64 __user *statbuf, int flag) | 130 | struct stat64 __user *statbuf, int flag) |
131 | { | 131 | { |
132 | struct kstat stat; | 132 | struct kstat stat; |
@@ -408,8 +408,8 @@ asmlinkage long sys32_pread(unsigned int fd, char __user *ubuf, u32 count, | |||
408 | ((loff_t)AA(poshi) << 32) | AA(poslo)); | 408 | ((loff_t)AA(poshi) << 32) | AA(poslo)); |
409 | } | 409 | } |
410 | 410 | ||
411 | asmlinkage long sys32_pwrite(unsigned int fd, char __user *ubuf, u32 count, | 411 | asmlinkage long sys32_pwrite(unsigned int fd, const char __user *ubuf, |
412 | u32 poslo, u32 poshi) | 412 | u32 count, u32 poslo, u32 poshi) |
413 | { | 413 | { |
414 | return sys_pwrite64(fd, ubuf, count, | 414 | return sys_pwrite64(fd, ubuf, count, |
415 | ((loff_t)AA(poshi) << 32) | AA(poslo)); | 415 | ((loff_t)AA(poshi) << 32) | AA(poslo)); |
@@ -449,7 +449,7 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd, | |||
449 | return ret; | 449 | return ret; |
450 | } | 450 | } |
451 | 451 | ||
452 | asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, | 452 | asmlinkage long sys32_execve(const char __user *name, compat_uptr_t __user *argv, |
453 | compat_uptr_t __user *envp, struct pt_regs *regs) | 453 | compat_uptr_t __user *envp, struct pt_regs *regs) |
454 | { | 454 | { |
455 | long error; | 455 | long error; |
@@ -546,3 +546,12 @@ asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_lo, | |||
546 | return sys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo, | 546 | return sys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo, |
547 | ((u64)len_hi << 32) | len_lo); | 547 | ((u64)len_hi << 32) | len_lo); |
548 | } | 548 | } |
549 | |||
550 | asmlinkage long sys32_fanotify_mark(int fanotify_fd, unsigned int flags, | ||
551 | u32 mask_lo, u32 mask_hi, | ||
552 | int fd, const char __user *pathname) | ||
553 | { | ||
554 | return sys_fanotify_mark(fanotify_fd, flags, | ||
555 | ((u64)mask_hi << 32) | mask_lo, | ||
556 | fd, pathname); | ||
557 | } | ||
diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index 493092efaa3b..6fa90a845e4c 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild | |||
@@ -3,24 +3,23 @@ include include/asm-generic/Kbuild.asm | |||
3 | header-y += boot.h | 3 | header-y += boot.h |
4 | header-y += bootparam.h | 4 | header-y += bootparam.h |
5 | header-y += debugreg.h | 5 | header-y += debugreg.h |
6 | header-y += e820.h | ||
7 | header-y += hw_breakpoint.h | ||
8 | header-y += hyperv.h | ||
9 | header-y += ist.h | ||
6 | header-y += ldt.h | 10 | header-y += ldt.h |
11 | header-y += mce.h | ||
7 | header-y += msr-index.h | 12 | header-y += msr-index.h |
13 | header-y += msr.h | ||
14 | header-y += mtrr.h | ||
15 | header-y += posix_types_32.h | ||
16 | header-y += posix_types_64.h | ||
8 | header-y += prctl.h | 17 | header-y += prctl.h |
18 | header-y += processor-flags.h | ||
9 | header-y += ptrace-abi.h | 19 | header-y += ptrace-abi.h |
10 | header-y += sigcontext32.h | 20 | header-y += sigcontext32.h |
11 | header-y += ucontext.h | 21 | header-y += ucontext.h |
12 | header-y += processor-flags.h | 22 | header-y += unistd_32.h |
13 | header-y += hw_breakpoint.h | 23 | header-y += unistd_64.h |
14 | header-y += hyperv.h | 24 | header-y += vm86.h |
15 | 25 | header-y += vsyscall.h | |
16 | unifdef-y += e820.h | ||
17 | unifdef-y += ist.h | ||
18 | unifdef-y += mce.h | ||
19 | unifdef-y += msr.h | ||
20 | unifdef-y += mtrr.h | ||
21 | unifdef-y += posix_types_32.h | ||
22 | unifdef-y += posix_types_64.h | ||
23 | unifdef-y += unistd_32.h | ||
24 | unifdef-y += unistd_64.h | ||
25 | unifdef-y += vm86.h | ||
26 | unifdef-y += vsyscall.h | ||
diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h index aa2c39d968fc..92091de11113 100644 --- a/arch/x86/include/asm/acpi.h +++ b/arch/x86/include/asm/acpi.h | |||
@@ -134,7 +134,7 @@ static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate) | |||
134 | boot_cpu_data.x86_model <= 0x05 && | 134 | boot_cpu_data.x86_model <= 0x05 && |
135 | boot_cpu_data.x86_mask < 0x0A) | 135 | boot_cpu_data.x86_mask < 0x0A) |
136 | return 1; | 136 | return 1; |
137 | else if (boot_cpu_has(X86_FEATURE_AMDC1E)) | 137 | else if (c1e_detected) |
138 | return 1; | 138 | return 1; |
139 | else | 139 | else |
140 | return max_cstate; | 140 | return max_cstate; |
diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h index 03b6bb5394a0..bc6abb7bc7ee 100644 --- a/arch/x86/include/asm/alternative.h +++ b/arch/x86/include/asm/alternative.h | |||
@@ -45,10 +45,9 @@ | |||
45 | struct alt_instr { | 45 | struct alt_instr { |
46 | u8 *instr; /* original instruction */ | 46 | u8 *instr; /* original instruction */ |
47 | u8 *replacement; | 47 | u8 *replacement; |
48 | u8 cpuid; /* cpuid bit set for replacement */ | 48 | u16 cpuid; /* cpuid bit set for replacement */ |
49 | u8 instrlen; /* length of original instruction */ | 49 | u8 instrlen; /* length of original instruction */ |
50 | u8 replacementlen; /* length of new instruction, <= instrlen */ | 50 | u8 replacementlen; /* length of new instruction, <= instrlen */ |
51 | u8 pad1; | ||
52 | #ifdef CONFIG_X86_64 | 51 | #ifdef CONFIG_X86_64 |
53 | u32 pad2; | 52 | u32 pad2; |
54 | #endif | 53 | #endif |
@@ -86,9 +85,11 @@ static inline int alternatives_text_reserved(void *start, void *end) | |||
86 | _ASM_ALIGN "\n" \ | 85 | _ASM_ALIGN "\n" \ |
87 | _ASM_PTR "661b\n" /* label */ \ | 86 | _ASM_PTR "661b\n" /* label */ \ |
88 | _ASM_PTR "663f\n" /* new instruction */ \ | 87 | _ASM_PTR "663f\n" /* new instruction */ \ |
89 | " .byte " __stringify(feature) "\n" /* feature bit */ \ | 88 | " .word " __stringify(feature) "\n" /* feature bit */ \ |
90 | " .byte 662b-661b\n" /* sourcelen */ \ | 89 | " .byte 662b-661b\n" /* sourcelen */ \ |
91 | " .byte 664f-663f\n" /* replacementlen */ \ | 90 | " .byte 664f-663f\n" /* replacementlen */ \ |
91 | ".previous\n" \ | ||
92 | ".section .discard,\"aw\",@progbits\n" \ | ||
92 | " .byte 0xff + (664f-663f) - (662b-661b)\n" /* rlen <= slen */ \ | 93 | " .byte 0xff + (664f-663f) - (662b-661b)\n" /* rlen <= slen */ \ |
93 | ".previous\n" \ | 94 | ".previous\n" \ |
94 | ".section .altinstr_replacement, \"ax\"\n" \ | 95 | ".section .altinstr_replacement, \"ax\"\n" \ |
diff --git a/arch/x86/include/asm/apb_timer.h b/arch/x86/include/asm/apb_timer.h index c74a2eebe570..a69b1ac9eaf8 100644 --- a/arch/x86/include/asm/apb_timer.h +++ b/arch/x86/include/asm/apb_timer.h | |||
@@ -55,7 +55,6 @@ extern unsigned long apbt_quick_calibrate(void); | |||
55 | extern int arch_setup_apbt_irqs(int irq, int trigger, int mask, int cpu); | 55 | extern int arch_setup_apbt_irqs(int irq, int trigger, int mask, int cpu); |
56 | extern void apbt_setup_secondary_clock(void); | 56 | extern void apbt_setup_secondary_clock(void); |
57 | extern unsigned int boot_cpu_id; | 57 | extern unsigned int boot_cpu_id; |
58 | extern int disable_apbt_percpu; | ||
59 | 58 | ||
60 | extern struct sfi_timer_table_entry *sfi_get_mtmr(int hint); | 59 | extern struct sfi_timer_table_entry *sfi_get_mtmr(int hint); |
61 | extern void sfi_free_mtmr(struct sfi_timer_table_entry *mtmr); | 60 | extern void sfi_free_mtmr(struct sfi_timer_table_entry *mtmr); |
diff --git a/arch/x86/include/asm/bootparam.h b/arch/x86/include/asm/bootparam.h index 6be33d83c716..8e6218550e77 100644 --- a/arch/x86/include/asm/bootparam.h +++ b/arch/x86/include/asm/bootparam.h | |||
@@ -70,6 +70,14 @@ struct sys_desc_table { | |||
70 | __u8 table[14]; | 70 | __u8 table[14]; |
71 | }; | 71 | }; |
72 | 72 | ||
73 | /* Gleaned from OFW's set-parameters in cpu/x86/pc/linux.fth */ | ||
74 | struct olpc_ofw_header { | ||
75 | __u32 ofw_magic; /* OFW signature */ | ||
76 | __u32 ofw_version; | ||
77 | __u32 cif_handler; /* callback into OFW */ | ||
78 | __u32 irq_desc_table; | ||
79 | } __attribute__((packed)); | ||
80 | |||
73 | struct efi_info { | 81 | struct efi_info { |
74 | __u32 efi_loader_signature; | 82 | __u32 efi_loader_signature; |
75 | __u32 efi_systab; | 83 | __u32 efi_systab; |
@@ -92,7 +100,8 @@ struct boot_params { | |||
92 | __u8 hd0_info[16]; /* obsolete! */ /* 0x080 */ | 100 | __u8 hd0_info[16]; /* obsolete! */ /* 0x080 */ |
93 | __u8 hd1_info[16]; /* obsolete! */ /* 0x090 */ | 101 | __u8 hd1_info[16]; /* obsolete! */ /* 0x090 */ |
94 | struct sys_desc_table sys_desc_table; /* 0x0a0 */ | 102 | struct sys_desc_table sys_desc_table; /* 0x0a0 */ |
95 | __u8 _pad4[144]; /* 0x0b0 */ | 103 | struct olpc_ofw_header olpc_ofw_header; /* 0x0b0 */ |
104 | __u8 _pad4[128]; /* 0x0c0 */ | ||
96 | struct edid_info edid_info; /* 0x140 */ | 105 | struct edid_info edid_info; /* 0x140 */ |
97 | struct efi_info efi_info; /* 0x1c0 */ | 106 | struct efi_info efi_info; /* 0x1c0 */ |
98 | __u32 alt_mem_k; /* 0x1e0 */ | 107 | __u32 alt_mem_k; /* 0x1e0 */ |
diff --git a/arch/x86/include/asm/cmpxchg_32.h b/arch/x86/include/asm/cmpxchg_32.h index 8859e12dd3cf..284a6e8f7ce1 100644 --- a/arch/x86/include/asm/cmpxchg_32.h +++ b/arch/x86/include/asm/cmpxchg_32.h | |||
@@ -11,38 +11,42 @@ | |||
11 | extern void __xchg_wrong_size(void); | 11 | extern void __xchg_wrong_size(void); |
12 | 12 | ||
13 | /* | 13 | /* |
14 | * Note: no "lock" prefix even on SMP: xchg always implies lock anyway | 14 | * Note: no "lock" prefix even on SMP: xchg always implies lock anyway. |
15 | * Note 2: xchg has side effect, so that attribute volatile is necessary, | 15 | * Since this is generally used to protect other memory information, we |
16 | * but generally the primitive is invalid, *ptr is output argument. --ANK | 16 | * use "asm volatile" and "memory" clobbers to prevent gcc from moving |
17 | * information around. | ||
17 | */ | 18 | */ |
18 | |||
19 | struct __xchg_dummy { | ||
20 | unsigned long a[100]; | ||
21 | }; | ||
22 | #define __xg(x) ((struct __xchg_dummy *)(x)) | ||
23 | |||
24 | #define __xchg(x, ptr, size) \ | 19 | #define __xchg(x, ptr, size) \ |
25 | ({ \ | 20 | ({ \ |
26 | __typeof(*(ptr)) __x = (x); \ | 21 | __typeof(*(ptr)) __x = (x); \ |
27 | switch (size) { \ | 22 | switch (size) { \ |
28 | case 1: \ | 23 | case 1: \ |
29 | asm volatile("xchgb %b0,%1" \ | 24 | { \ |
30 | : "=q" (__x) \ | 25 | volatile u8 *__ptr = (volatile u8 *)(ptr); \ |
31 | : "m" (*__xg(ptr)), "0" (__x) \ | 26 | asm volatile("xchgb %0,%1" \ |
27 | : "=q" (__x), "+m" (*__ptr) \ | ||
28 | : "0" (__x) \ | ||
32 | : "memory"); \ | 29 | : "memory"); \ |
33 | break; \ | 30 | break; \ |
31 | } \ | ||
34 | case 2: \ | 32 | case 2: \ |
35 | asm volatile("xchgw %w0,%1" \ | 33 | { \ |
36 | : "=r" (__x) \ | 34 | volatile u16 *__ptr = (volatile u16 *)(ptr); \ |
37 | : "m" (*__xg(ptr)), "0" (__x) \ | 35 | asm volatile("xchgw %0,%1" \ |
36 | : "=r" (__x), "+m" (*__ptr) \ | ||
37 | : "0" (__x) \ | ||
38 | : "memory"); \ | 38 | : "memory"); \ |
39 | break; \ | 39 | break; \ |
40 | } \ | ||
40 | case 4: \ | 41 | case 4: \ |
42 | { \ | ||
43 | volatile u32 *__ptr = (volatile u32 *)(ptr); \ | ||
41 | asm volatile("xchgl %0,%1" \ | 44 | asm volatile("xchgl %0,%1" \ |
42 | : "=r" (__x) \ | 45 | : "=r" (__x), "+m" (*__ptr) \ |
43 | : "m" (*__xg(ptr)), "0" (__x) \ | 46 | : "0" (__x) \ |
44 | : "memory"); \ | 47 | : "memory"); \ |
45 | break; \ | 48 | break; \ |
49 | } \ | ||
46 | default: \ | 50 | default: \ |
47 | __xchg_wrong_size(); \ | 51 | __xchg_wrong_size(); \ |
48 | } \ | 52 | } \ |
@@ -53,60 +57,33 @@ struct __xchg_dummy { | |||
53 | __xchg((v), (ptr), sizeof(*ptr)) | 57 | __xchg((v), (ptr), sizeof(*ptr)) |
54 | 58 | ||
55 | /* | 59 | /* |
56 | * The semantics of XCHGCMP8B are a bit strange, this is why | 60 | * CMPXCHG8B only writes to the target if we had the previous |
57 | * there is a loop and the loading of %%eax and %%edx has to | 61 | * value in registers, otherwise it acts as a read and gives us the |
58 | * be inside. This inlines well in most cases, the cached | 62 | * "new previous" value. That is why there is a loop. Preloading |
59 | * cost is around ~38 cycles. (in the future we might want | 63 | * EDX:EAX is a performance optimization: in the common case it means |
60 | * to do an SIMD/3DNOW!/MMX/FPU 64-bit store here, but that | 64 | * we need only one locked operation. |
61 | * might have an implicit FPU-save as a cost, so it's not | ||
62 | * clear which path to go.) | ||
63 | * | 65 | * |
64 | * cmpxchg8b must be used with the lock prefix here to allow | 66 | * A SIMD/3DNOW!/MMX/FPU 64-bit store here would require at the very |
65 | * the instruction to be executed atomically, see page 3-102 | 67 | * least an FPU save and/or %cr0.ts manipulation. |
66 | * of the instruction set reference 24319102.pdf. We need | 68 | * |
67 | * the reader side to see the coherent 64bit value. | 69 | * cmpxchg8b must be used with the lock prefix here to allow the |
70 | * instruction to be executed atomically. We need to have the reader | ||
71 | * side to see the coherent 64bit value. | ||
68 | */ | 72 | */ |
69 | static inline void __set_64bit(unsigned long long *ptr, | 73 | static inline void set_64bit(volatile u64 *ptr, u64 value) |
70 | unsigned int low, unsigned int high) | ||
71 | { | 74 | { |
75 | u32 low = value; | ||
76 | u32 high = value >> 32; | ||
77 | u64 prev = *ptr; | ||
78 | |||
72 | asm volatile("\n1:\t" | 79 | asm volatile("\n1:\t" |
73 | "movl (%0), %%eax\n\t" | 80 | LOCK_PREFIX "cmpxchg8b %0\n\t" |
74 | "movl 4(%0), %%edx\n\t" | ||
75 | LOCK_PREFIX "cmpxchg8b (%0)\n\t" | ||
76 | "jnz 1b" | 81 | "jnz 1b" |
77 | : /* no outputs */ | 82 | : "=m" (*ptr), "+A" (prev) |
78 | : "D"(ptr), | 83 | : "b" (low), "c" (high) |
79 | "b"(low), | 84 | : "memory"); |
80 | "c"(high) | ||
81 | : "ax", "dx", "memory"); | ||
82 | } | ||
83 | |||
84 | static inline void __set_64bit_constant(unsigned long long *ptr, | ||
85 | unsigned long long value) | ||
86 | { | ||
87 | __set_64bit(ptr, (unsigned int)value, (unsigned int)(value >> 32)); | ||
88 | } | ||
89 | |||
90 | #define ll_low(x) *(((unsigned int *)&(x)) + 0) | ||
91 | #define ll_high(x) *(((unsigned int *)&(x)) + 1) | ||
92 | |||
93 | static inline void __set_64bit_var(unsigned long long *ptr, | ||
94 | unsigned long long value) | ||
95 | { | ||
96 | __set_64bit(ptr, ll_low(value), ll_high(value)); | ||
97 | } | 85 | } |
98 | 86 | ||
99 | #define set_64bit(ptr, value) \ | ||
100 | (__builtin_constant_p((value)) \ | ||
101 | ? __set_64bit_constant((ptr), (value)) \ | ||
102 | : __set_64bit_var((ptr), (value))) | ||
103 | |||
104 | #define _set_64bit(ptr, value) \ | ||
105 | (__builtin_constant_p(value) \ | ||
106 | ? __set_64bit(ptr, (unsigned int)(value), \ | ||
107 | (unsigned int)((value) >> 32)) \ | ||
108 | : __set_64bit(ptr, ll_low((value)), ll_high((value)))) | ||
109 | |||
110 | extern void __cmpxchg_wrong_size(void); | 87 | extern void __cmpxchg_wrong_size(void); |
111 | 88 | ||
112 | /* | 89 | /* |
@@ -121,23 +98,32 @@ extern void __cmpxchg_wrong_size(void); | |||
121 | __typeof__(*(ptr)) __new = (new); \ | 98 | __typeof__(*(ptr)) __new = (new); \ |
122 | switch (size) { \ | 99 | switch (size) { \ |
123 | case 1: \ | 100 | case 1: \ |
124 | asm volatile(lock "cmpxchgb %b1,%2" \ | 101 | { \ |
125 | : "=a"(__ret) \ | 102 | volatile u8 *__ptr = (volatile u8 *)(ptr); \ |
126 | : "q"(__new), "m"(*__xg(ptr)), "0"(__old) \ | 103 | asm volatile(lock "cmpxchgb %2,%1" \ |
104 | : "=a" (__ret), "+m" (*__ptr) \ | ||
105 | : "q" (__new), "0" (__old) \ | ||
127 | : "memory"); \ | 106 | : "memory"); \ |
128 | break; \ | 107 | break; \ |
108 | } \ | ||
129 | case 2: \ | 109 | case 2: \ |
130 | asm volatile(lock "cmpxchgw %w1,%2" \ | 110 | { \ |
131 | : "=a"(__ret) \ | 111 | volatile u16 *__ptr = (volatile u16 *)(ptr); \ |
132 | : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \ | 112 | asm volatile(lock "cmpxchgw %2,%1" \ |
113 | : "=a" (__ret), "+m" (*__ptr) \ | ||
114 | : "r" (__new), "0" (__old) \ | ||
133 | : "memory"); \ | 115 | : "memory"); \ |
134 | break; \ | 116 | break; \ |
117 | } \ | ||
135 | case 4: \ | 118 | case 4: \ |
136 | asm volatile(lock "cmpxchgl %1,%2" \ | 119 | { \ |
137 | : "=a"(__ret) \ | 120 | volatile u32 *__ptr = (volatile u32 *)(ptr); \ |
138 | : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \ | 121 | asm volatile(lock "cmpxchgl %2,%1" \ |
122 | : "=a" (__ret), "+m" (*__ptr) \ | ||
123 | : "r" (__new), "0" (__old) \ | ||
139 | : "memory"); \ | 124 | : "memory"); \ |
140 | break; \ | 125 | break; \ |
126 | } \ | ||
141 | default: \ | 127 | default: \ |
142 | __cmpxchg_wrong_size(); \ | 128 | __cmpxchg_wrong_size(); \ |
143 | } \ | 129 | } \ |
@@ -175,32 +161,28 @@ extern void __cmpxchg_wrong_size(void); | |||
175 | (unsigned long long)(n))) | 161 | (unsigned long long)(n))) |
176 | #endif | 162 | #endif |
177 | 163 | ||
178 | static inline unsigned long long __cmpxchg64(volatile void *ptr, | 164 | static inline u64 __cmpxchg64(volatile u64 *ptr, u64 old, u64 new) |
179 | unsigned long long old, | ||
180 | unsigned long long new) | ||
181 | { | 165 | { |
182 | unsigned long long prev; | 166 | u64 prev; |
183 | asm volatile(LOCK_PREFIX "cmpxchg8b %3" | 167 | asm volatile(LOCK_PREFIX "cmpxchg8b %1" |
184 | : "=A"(prev) | 168 | : "=A" (prev), |
185 | : "b"((unsigned long)new), | 169 | "+m" (*ptr) |
186 | "c"((unsigned long)(new >> 32)), | 170 | : "b" ((u32)new), |
187 | "m"(*__xg(ptr)), | 171 | "c" ((u32)(new >> 32)), |
188 | "0"(old) | 172 | "0" (old) |
189 | : "memory"); | 173 | : "memory"); |
190 | return prev; | 174 | return prev; |
191 | } | 175 | } |
192 | 176 | ||
193 | static inline unsigned long long __cmpxchg64_local(volatile void *ptr, | 177 | static inline u64 __cmpxchg64_local(volatile u64 *ptr, u64 old, u64 new) |
194 | unsigned long long old, | ||
195 | unsigned long long new) | ||
196 | { | 178 | { |
197 | unsigned long long prev; | 179 | u64 prev; |
198 | asm volatile("cmpxchg8b %3" | 180 | asm volatile("cmpxchg8b %1" |
199 | : "=A"(prev) | 181 | : "=A" (prev), |
200 | : "b"((unsigned long)new), | 182 | "+m" (*ptr) |
201 | "c"((unsigned long)(new >> 32)), | 183 | : "b" ((u32)new), |
202 | "m"(*__xg(ptr)), | 184 | "c" ((u32)(new >> 32)), |
203 | "0"(old) | 185 | "0" (old) |
204 | : "memory"); | 186 | : "memory"); |
205 | return prev; | 187 | return prev; |
206 | } | 188 | } |
@@ -264,8 +246,6 @@ static inline unsigned long cmpxchg_386(volatile void *ptr, unsigned long old, | |||
264 | * to simulate the cmpxchg8b on the 80386 and 80486 CPU. | 246 | * to simulate the cmpxchg8b on the 80386 and 80486 CPU. |
265 | */ | 247 | */ |
266 | 248 | ||
267 | extern unsigned long long cmpxchg_486_u64(volatile void *, u64, u64); | ||
268 | |||
269 | #define cmpxchg64(ptr, o, n) \ | 249 | #define cmpxchg64(ptr, o, n) \ |
270 | ({ \ | 250 | ({ \ |
271 | __typeof__(*(ptr)) __ret; \ | 251 | __typeof__(*(ptr)) __ret; \ |
@@ -283,20 +263,20 @@ extern unsigned long long cmpxchg_486_u64(volatile void *, u64, u64); | |||
283 | __ret; }) | 263 | __ret; }) |
284 | 264 | ||
285 | 265 | ||
286 | 266 | #define cmpxchg64_local(ptr, o, n) \ | |
287 | #define cmpxchg64_local(ptr, o, n) \ | 267 | ({ \ |
288 | ({ \ | 268 | __typeof__(*(ptr)) __ret; \ |
289 | __typeof__(*(ptr)) __ret; \ | 269 | __typeof__(*(ptr)) __old = (o); \ |
290 | if (likely(boot_cpu_data.x86 > 4)) \ | 270 | __typeof__(*(ptr)) __new = (n); \ |
291 | __ret = (__typeof__(*(ptr)))__cmpxchg64_local((ptr), \ | 271 | alternative_io("call cmpxchg8b_emu", \ |
292 | (unsigned long long)(o), \ | 272 | "cmpxchg8b (%%esi)" , \ |
293 | (unsigned long long)(n)); \ | 273 | X86_FEATURE_CX8, \ |
294 | else \ | 274 | "=A" (__ret), \ |
295 | __ret = (__typeof__(*(ptr)))cmpxchg_486_u64((ptr), \ | 275 | "S" ((ptr)), "0" (__old), \ |
296 | (unsigned long long)(o), \ | 276 | "b" ((unsigned int)__new), \ |
297 | (unsigned long long)(n)); \ | 277 | "c" ((unsigned int)(__new>>32)) \ |
298 | __ret; \ | 278 | : "memory"); \ |
299 | }) | 279 | __ret; }) |
300 | 280 | ||
301 | #endif | 281 | #endif |
302 | 282 | ||
diff --git a/arch/x86/include/asm/cmpxchg_64.h b/arch/x86/include/asm/cmpxchg_64.h index 485ae415faec..423ae58aa020 100644 --- a/arch/x86/include/asm/cmpxchg_64.h +++ b/arch/x86/include/asm/cmpxchg_64.h | |||
@@ -3,51 +3,60 @@ | |||
3 | 3 | ||
4 | #include <asm/alternative.h> /* Provides LOCK_PREFIX */ | 4 | #include <asm/alternative.h> /* Provides LOCK_PREFIX */ |
5 | 5 | ||
6 | #define __xg(x) ((volatile long *)(x)) | 6 | static inline void set_64bit(volatile u64 *ptr, u64 val) |
7 | |||
8 | static inline void set_64bit(volatile unsigned long *ptr, unsigned long val) | ||
9 | { | 7 | { |
10 | *ptr = val; | 8 | *ptr = val; |
11 | } | 9 | } |
12 | 10 | ||
13 | #define _set_64bit set_64bit | ||
14 | |||
15 | extern void __xchg_wrong_size(void); | 11 | extern void __xchg_wrong_size(void); |
16 | extern void __cmpxchg_wrong_size(void); | 12 | extern void __cmpxchg_wrong_size(void); |
17 | 13 | ||
18 | /* | 14 | /* |
19 | * Note: no "lock" prefix even on SMP: xchg always implies lock anyway | 15 | * Note: no "lock" prefix even on SMP: xchg always implies lock anyway. |
20 | * Note 2: xchg has side effect, so that attribute volatile is necessary, | 16 | * Since this is generally used to protect other memory information, we |
21 | * but generally the primitive is invalid, *ptr is output argument. --ANK | 17 | * use "asm volatile" and "memory" clobbers to prevent gcc from moving |
18 | * information around. | ||
22 | */ | 19 | */ |
23 | #define __xchg(x, ptr, size) \ | 20 | #define __xchg(x, ptr, size) \ |
24 | ({ \ | 21 | ({ \ |
25 | __typeof(*(ptr)) __x = (x); \ | 22 | __typeof(*(ptr)) __x = (x); \ |
26 | switch (size) { \ | 23 | switch (size) { \ |
27 | case 1: \ | 24 | case 1: \ |
28 | asm volatile("xchgb %b0,%1" \ | 25 | { \ |
29 | : "=q" (__x) \ | 26 | volatile u8 *__ptr = (volatile u8 *)(ptr); \ |
30 | : "m" (*__xg(ptr)), "0" (__x) \ | 27 | asm volatile("xchgb %0,%1" \ |
28 | : "=q" (__x), "+m" (*__ptr) \ | ||
29 | : "0" (__x) \ | ||
31 | : "memory"); \ | 30 | : "memory"); \ |
32 | break; \ | 31 | break; \ |
32 | } \ | ||
33 | case 2: \ | 33 | case 2: \ |
34 | asm volatile("xchgw %w0,%1" \ | 34 | { \ |
35 | : "=r" (__x) \ | 35 | volatile u16 *__ptr = (volatile u16 *)(ptr); \ |
36 | : "m" (*__xg(ptr)), "0" (__x) \ | 36 | asm volatile("xchgw %0,%1" \ |
37 | : "=r" (__x), "+m" (*__ptr) \ | ||
38 | : "0" (__x) \ | ||
37 | : "memory"); \ | 39 | : "memory"); \ |
38 | break; \ | 40 | break; \ |
41 | } \ | ||
39 | case 4: \ | 42 | case 4: \ |
40 | asm volatile("xchgl %k0,%1" \ | 43 | { \ |
41 | : "=r" (__x) \ | 44 | volatile u32 *__ptr = (volatile u32 *)(ptr); \ |
42 | : "m" (*__xg(ptr)), "0" (__x) \ | 45 | asm volatile("xchgl %0,%1" \ |
46 | : "=r" (__x), "+m" (*__ptr) \ | ||
47 | : "0" (__x) \ | ||
43 | : "memory"); \ | 48 | : "memory"); \ |
44 | break; \ | 49 | break; \ |
50 | } \ | ||
45 | case 8: \ | 51 | case 8: \ |
52 | { \ | ||
53 | volatile u64 *__ptr = (volatile u64 *)(ptr); \ | ||
46 | asm volatile("xchgq %0,%1" \ | 54 | asm volatile("xchgq %0,%1" \ |
47 | : "=r" (__x) \ | 55 | : "=r" (__x), "+m" (*__ptr) \ |
48 | : "m" (*__xg(ptr)), "0" (__x) \ | 56 | : "0" (__x) \ |
49 | : "memory"); \ | 57 | : "memory"); \ |
50 | break; \ | 58 | break; \ |
59 | } \ | ||
51 | default: \ | 60 | default: \ |
52 | __xchg_wrong_size(); \ | 61 | __xchg_wrong_size(); \ |
53 | } \ | 62 | } \ |
@@ -71,29 +80,41 @@ extern void __cmpxchg_wrong_size(void); | |||
71 | __typeof__(*(ptr)) __new = (new); \ | 80 | __typeof__(*(ptr)) __new = (new); \ |
72 | switch (size) { \ | 81 | switch (size) { \ |
73 | case 1: \ | 82 | case 1: \ |
74 | asm volatile(lock "cmpxchgb %b1,%2" \ | 83 | { \ |
75 | : "=a"(__ret) \ | 84 | volatile u8 *__ptr = (volatile u8 *)(ptr); \ |
76 | : "q"(__new), "m"(*__xg(ptr)), "0"(__old) \ | 85 | asm volatile(lock "cmpxchgb %2,%1" \ |
86 | : "=a" (__ret), "+m" (*__ptr) \ | ||
87 | : "q" (__new), "0" (__old) \ | ||
77 | : "memory"); \ | 88 | : "memory"); \ |
78 | break; \ | 89 | break; \ |
90 | } \ | ||
79 | case 2: \ | 91 | case 2: \ |
80 | asm volatile(lock "cmpxchgw %w1,%2" \ | 92 | { \ |
81 | : "=a"(__ret) \ | 93 | volatile u16 *__ptr = (volatile u16 *)(ptr); \ |
82 | : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \ | 94 | asm volatile(lock "cmpxchgw %2,%1" \ |
95 | : "=a" (__ret), "+m" (*__ptr) \ | ||
96 | : "r" (__new), "0" (__old) \ | ||
83 | : "memory"); \ | 97 | : "memory"); \ |
84 | break; \ | 98 | break; \ |
99 | } \ | ||
85 | case 4: \ | 100 | case 4: \ |
86 | asm volatile(lock "cmpxchgl %k1,%2" \ | 101 | { \ |
87 | : "=a"(__ret) \ | 102 | volatile u32 *__ptr = (volatile u32 *)(ptr); \ |
88 | : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \ | 103 | asm volatile(lock "cmpxchgl %2,%1" \ |
104 | : "=a" (__ret), "+m" (*__ptr) \ | ||
105 | : "r" (__new), "0" (__old) \ | ||
89 | : "memory"); \ | 106 | : "memory"); \ |
90 | break; \ | 107 | break; \ |
108 | } \ | ||
91 | case 8: \ | 109 | case 8: \ |
92 | asm volatile(lock "cmpxchgq %1,%2" \ | 110 | { \ |
93 | : "=a"(__ret) \ | 111 | volatile u64 *__ptr = (volatile u64 *)(ptr); \ |
94 | : "r"(__new), "m"(*__xg(ptr)), "0"(__old) \ | 112 | asm volatile(lock "cmpxchgq %2,%1" \ |
113 | : "=a" (__ret), "+m" (*__ptr) \ | ||
114 | : "r" (__new), "0" (__old) \ | ||
95 | : "memory"); \ | 115 | : "memory"); \ |
96 | break; \ | 116 | break; \ |
117 | } \ | ||
97 | default: \ | 118 | default: \ |
98 | __cmpxchg_wrong_size(); \ | 119 | __cmpxchg_wrong_size(); \ |
99 | } \ | 120 | } \ |
diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h index 468145914389..781a50b29a49 100644 --- a/arch/x86/include/asm/cpufeature.h +++ b/arch/x86/include/asm/cpufeature.h | |||
@@ -6,7 +6,7 @@ | |||
6 | 6 | ||
7 | #include <asm/required-features.h> | 7 | #include <asm/required-features.h> |
8 | 8 | ||
9 | #define NCAPINTS 9 /* N 32-bit words worth of info */ | 9 | #define NCAPINTS 10 /* N 32-bit words worth of info */ |
10 | 10 | ||
11 | /* | 11 | /* |
12 | * Note: If the comment begins with a quoted string, that string is used | 12 | * Note: If the comment begins with a quoted string, that string is used |
@@ -89,7 +89,7 @@ | |||
89 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* "" Lfence synchronizes RDTSC */ | 89 | #define X86_FEATURE_LFENCE_RDTSC (3*32+18) /* "" Lfence synchronizes RDTSC */ |
90 | #define X86_FEATURE_11AP (3*32+19) /* "" Bad local APIC aka 11AP */ | 90 | #define X86_FEATURE_11AP (3*32+19) /* "" Bad local APIC aka 11AP */ |
91 | #define X86_FEATURE_NOPL (3*32+20) /* The NOPL (0F 1F) instructions */ | 91 | #define X86_FEATURE_NOPL (3*32+20) /* The NOPL (0F 1F) instructions */ |
92 | #define X86_FEATURE_AMDC1E (3*32+21) /* AMD C1E detected */ | 92 | /* 21 available, was AMD_C1E */ |
93 | #define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */ | 93 | #define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */ |
94 | #define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */ | 94 | #define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */ |
95 | #define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */ | 95 | #define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */ |
@@ -124,6 +124,8 @@ | |||
124 | #define X86_FEATURE_XSAVE (4*32+26) /* XSAVE/XRSTOR/XSETBV/XGETBV */ | 124 | #define X86_FEATURE_XSAVE (4*32+26) /* XSAVE/XRSTOR/XSETBV/XGETBV */ |
125 | #define X86_FEATURE_OSXSAVE (4*32+27) /* "" XSAVE enabled in the OS */ | 125 | #define X86_FEATURE_OSXSAVE (4*32+27) /* "" XSAVE enabled in the OS */ |
126 | #define X86_FEATURE_AVX (4*32+28) /* Advanced Vector Extensions */ | 126 | #define X86_FEATURE_AVX (4*32+28) /* Advanced Vector Extensions */ |
127 | #define X86_FEATURE_F16C (4*32+29) /* 16-bit fp conversions */ | ||
128 | #define X86_FEATURE_RDRND (4*32+30) /* The RDRAND instruction */ | ||
127 | #define X86_FEATURE_HYPERVISOR (4*32+31) /* Running on a hypervisor */ | 129 | #define X86_FEATURE_HYPERVISOR (4*32+31) /* Running on a hypervisor */ |
128 | 130 | ||
129 | /* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */ | 131 | /* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */ |
@@ -157,22 +159,29 @@ | |||
157 | 159 | ||
158 | /* | 160 | /* |
159 | * Auxiliary flags: Linux defined - For features scattered in various | 161 | * Auxiliary flags: Linux defined - For features scattered in various |
160 | * CPUID levels like 0x6, 0xA etc | 162 | * CPUID levels like 0x6, 0xA etc, word 7 |
161 | */ | 163 | */ |
162 | #define X86_FEATURE_IDA (7*32+ 0) /* Intel Dynamic Acceleration */ | 164 | #define X86_FEATURE_IDA (7*32+ 0) /* Intel Dynamic Acceleration */ |
163 | #define X86_FEATURE_ARAT (7*32+ 1) /* Always Running APIC Timer */ | 165 | #define X86_FEATURE_ARAT (7*32+ 1) /* Always Running APIC Timer */ |
164 | #define X86_FEATURE_CPB (7*32+ 2) /* AMD Core Performance Boost */ | 166 | #define X86_FEATURE_CPB (7*32+ 2) /* AMD Core Performance Boost */ |
167 | #define X86_FEATURE_EPB (7*32+ 3) /* IA32_ENERGY_PERF_BIAS support */ | ||
168 | #define X86_FEATURE_XSAVEOPT (7*32+ 4) /* Optimized Xsave */ | ||
169 | #define X86_FEATURE_PLN (7*32+ 5) /* Intel Power Limit Notification */ | ||
170 | #define X86_FEATURE_PTS (7*32+ 6) /* Intel Package Thermal Status */ | ||
165 | 171 | ||
166 | /* Virtualization flags: Linux defined */ | 172 | /* Virtualization flags: Linux defined, word 8 */ |
167 | #define X86_FEATURE_TPR_SHADOW (8*32+ 0) /* Intel TPR Shadow */ | 173 | #define X86_FEATURE_TPR_SHADOW (8*32+ 0) /* Intel TPR Shadow */ |
168 | #define X86_FEATURE_VNMI (8*32+ 1) /* Intel Virtual NMI */ | 174 | #define X86_FEATURE_VNMI (8*32+ 1) /* Intel Virtual NMI */ |
169 | #define X86_FEATURE_FLEXPRIORITY (8*32+ 2) /* Intel FlexPriority */ | 175 | #define X86_FEATURE_FLEXPRIORITY (8*32+ 2) /* Intel FlexPriority */ |
170 | #define X86_FEATURE_EPT (8*32+ 3) /* Intel Extended Page Table */ | 176 | #define X86_FEATURE_EPT (8*32+ 3) /* Intel Extended Page Table */ |
171 | #define X86_FEATURE_VPID (8*32+ 4) /* Intel Virtual Processor ID */ | 177 | #define X86_FEATURE_VPID (8*32+ 4) /* Intel Virtual Processor ID */ |
172 | #define X86_FEATURE_NPT (8*32+5) /* AMD Nested Page Table support */ | 178 | #define X86_FEATURE_NPT (8*32+ 5) /* AMD Nested Page Table support */ |
173 | #define X86_FEATURE_LBRV (8*32+6) /* AMD LBR Virtualization support */ | 179 | #define X86_FEATURE_LBRV (8*32+ 6) /* AMD LBR Virtualization support */ |
174 | #define X86_FEATURE_SVML (8*32+7) /* "svm_lock" AMD SVM locking MSR */ | 180 | #define X86_FEATURE_SVML (8*32+ 7) /* "svm_lock" AMD SVM locking MSR */ |
175 | #define X86_FEATURE_NRIPS (8*32+8) /* "nrip_save" AMD SVM next_rip save */ | 181 | #define X86_FEATURE_NRIPS (8*32+ 8) /* "nrip_save" AMD SVM next_rip save */ |
182 | |||
183 | /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */ | ||
184 | #define X86_FEATURE_FSGSBASE (9*32+ 0) /* {RD/WR}{FS/GS}BASE instructions*/ | ||
176 | 185 | ||
177 | #if defined(__KERNEL__) && !defined(__ASSEMBLY__) | 186 | #if defined(__KERNEL__) && !defined(__ASSEMBLY__) |
178 | 187 | ||
@@ -194,7 +203,9 @@ extern const char * const x86_power_flags[32]; | |||
194 | (((bit)>>5)==4 && (1UL<<((bit)&31) & REQUIRED_MASK4)) || \ | 203 | (((bit)>>5)==4 && (1UL<<((bit)&31) & REQUIRED_MASK4)) || \ |
195 | (((bit)>>5)==5 && (1UL<<((bit)&31) & REQUIRED_MASK5)) || \ | 204 | (((bit)>>5)==5 && (1UL<<((bit)&31) & REQUIRED_MASK5)) || \ |
196 | (((bit)>>5)==6 && (1UL<<((bit)&31) & REQUIRED_MASK6)) || \ | 205 | (((bit)>>5)==6 && (1UL<<((bit)&31) & REQUIRED_MASK6)) || \ |
197 | (((bit)>>5)==7 && (1UL<<((bit)&31) & REQUIRED_MASK7)) ) \ | 206 | (((bit)>>5)==7 && (1UL<<((bit)&31) & REQUIRED_MASK7)) || \ |
207 | (((bit)>>5)==8 && (1UL<<((bit)&31) & REQUIRED_MASK8)) || \ | ||
208 | (((bit)>>5)==9 && (1UL<<((bit)&31) & REQUIRED_MASK9)) ) \ | ||
198 | ? 1 : \ | 209 | ? 1 : \ |
199 | test_cpu_cap(c, bit)) | 210 | test_cpu_cap(c, bit)) |
200 | 211 | ||
@@ -291,7 +302,7 @@ extern const char * const x86_power_flags[32]; | |||
291 | * patch the target code for additional performance. | 302 | * patch the target code for additional performance. |
292 | * | 303 | * |
293 | */ | 304 | */ |
294 | static __always_inline __pure bool __static_cpu_has(u8 bit) | 305 | static __always_inline __pure bool __static_cpu_has(u16 bit) |
295 | { | 306 | { |
296 | #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) | 307 | #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) |
297 | asm goto("1: jmp %l[t_no]\n" | 308 | asm goto("1: jmp %l[t_no]\n" |
@@ -300,11 +311,11 @@ static __always_inline __pure bool __static_cpu_has(u8 bit) | |||
300 | _ASM_ALIGN "\n" | 311 | _ASM_ALIGN "\n" |
301 | _ASM_PTR "1b\n" | 312 | _ASM_PTR "1b\n" |
302 | _ASM_PTR "0\n" /* no replacement */ | 313 | _ASM_PTR "0\n" /* no replacement */ |
303 | " .byte %P0\n" /* feature bit */ | 314 | " .word %P0\n" /* feature bit */ |
304 | " .byte 2b - 1b\n" /* source len */ | 315 | " .byte 2b - 1b\n" /* source len */ |
305 | " .byte 0\n" /* replacement len */ | 316 | " .byte 0\n" /* replacement len */ |
306 | " .byte 0xff + 0 - (2b-1b)\n" /* padding */ | ||
307 | ".previous\n" | 317 | ".previous\n" |
318 | /* skipping size check since replacement size = 0 */ | ||
308 | : : "i" (bit) : : t_no); | 319 | : : "i" (bit) : : t_no); |
309 | return true; | 320 | return true; |
310 | t_no: | 321 | t_no: |
@@ -318,10 +329,12 @@ static __always_inline __pure bool __static_cpu_has(u8 bit) | |||
318 | _ASM_ALIGN "\n" | 329 | _ASM_ALIGN "\n" |
319 | _ASM_PTR "1b\n" | 330 | _ASM_PTR "1b\n" |
320 | _ASM_PTR "3f\n" | 331 | _ASM_PTR "3f\n" |
321 | " .byte %P1\n" /* feature bit */ | 332 | " .word %P1\n" /* feature bit */ |
322 | " .byte 2b - 1b\n" /* source len */ | 333 | " .byte 2b - 1b\n" /* source len */ |
323 | " .byte 4f - 3f\n" /* replacement len */ | 334 | " .byte 4f - 3f\n" /* replacement len */ |
324 | " .byte 0xff + (4f-3f) - (2b-1b)\n" /* padding */ | 335 | ".previous\n" |
336 | ".section .discard,\"aw\",@progbits\n" | ||
337 | " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ | ||
325 | ".previous\n" | 338 | ".previous\n" |
326 | ".section .altinstr_replacement,\"ax\"\n" | 339 | ".section .altinstr_replacement,\"ax\"\n" |
327 | "3: movb $1,%0\n" | 340 | "3: movb $1,%0\n" |
@@ -337,7 +350,7 @@ static __always_inline __pure bool __static_cpu_has(u8 bit) | |||
337 | ( \ | 350 | ( \ |
338 | __builtin_constant_p(boot_cpu_has(bit)) ? \ | 351 | __builtin_constant_p(boot_cpu_has(bit)) ? \ |
339 | boot_cpu_has(bit) : \ | 352 | boot_cpu_has(bit) : \ |
340 | (__builtin_constant_p(bit) && !((bit) & ~0xff)) ? \ | 353 | __builtin_constant_p(bit) ? \ |
341 | __static_cpu_has(bit) : \ | 354 | __static_cpu_has(bit) : \ |
342 | boot_cpu_has(bit) \ | 355 | boot_cpu_has(bit) \ |
343 | ) | 356 | ) |
diff --git a/arch/x86/include/asm/dma-mapping.h b/arch/x86/include/asm/dma-mapping.h index ac91eed21061..d4c419f883a0 100644 --- a/arch/x86/include/asm/dma-mapping.h +++ b/arch/x86/include/asm/dma-mapping.h | |||
@@ -54,7 +54,6 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) | |||
54 | 54 | ||
55 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | 55 | #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) |
56 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | 56 | #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) |
57 | #define dma_is_consistent(d, h) (1) | ||
58 | 57 | ||
59 | extern int dma_supported(struct device *hwdev, u64 mask); | 58 | extern int dma_supported(struct device *hwdev, u64 mask); |
60 | extern int dma_set_mask(struct device *dev, u64 mask); | 59 | extern int dma_set_mask(struct device *dev, u64 mask); |
@@ -87,13 +86,6 @@ dma_cache_sync(struct device *dev, void *vaddr, size_t size, | |||
87 | flush_write_buffers(); | 86 | flush_write_buffers(); |
88 | } | 87 | } |
89 | 88 | ||
90 | static inline int dma_get_cache_alignment(void) | ||
91 | { | ||
92 | /* no easy way to get cache size on all x86, so return the | ||
93 | * maximum possible, to be safe */ | ||
94 | return boot_cpu_data.x86_clflush_size; | ||
95 | } | ||
96 | |||
97 | static inline unsigned long dma_alloc_coherent_mask(struct device *dev, | 89 | static inline unsigned long dma_alloc_coherent_mask(struct device *dev, |
98 | gfp_t gfp) | 90 | gfp_t gfp) |
99 | { | 91 | { |
diff --git a/arch/x86/include/asm/highmem.h b/arch/x86/include/asm/highmem.h index a726650fc80f..8caac76ac324 100644 --- a/arch/x86/include/asm/highmem.h +++ b/arch/x86/include/asm/highmem.h | |||
@@ -61,7 +61,7 @@ void *kmap(struct page *page); | |||
61 | void kunmap(struct page *page); | 61 | void kunmap(struct page *page); |
62 | void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot); | 62 | void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot); |
63 | void *kmap_atomic(struct page *page, enum km_type type); | 63 | void *kmap_atomic(struct page *page, enum km_type type); |
64 | void kunmap_atomic(void *kvaddr, enum km_type type); | 64 | void kunmap_atomic_notypecheck(void *kvaddr, enum km_type type); |
65 | void *kmap_atomic_pfn(unsigned long pfn, enum km_type type); | 65 | void *kmap_atomic_pfn(unsigned long pfn, enum km_type type); |
66 | void *kmap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot); | 66 | void *kmap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot); |
67 | struct page *kmap_atomic_to_page(void *ptr); | 67 | struct page *kmap_atomic_to_page(void *ptr); |
diff --git a/arch/x86/include/asm/hw_breakpoint.h b/arch/x86/include/asm/hw_breakpoint.h index 942255310e6a..528a11e8d3e3 100644 --- a/arch/x86/include/asm/hw_breakpoint.h +++ b/arch/x86/include/asm/hw_breakpoint.h | |||
@@ -20,10 +20,10 @@ struct arch_hw_breakpoint { | |||
20 | #include <linux/list.h> | 20 | #include <linux/list.h> |
21 | 21 | ||
22 | /* Available HW breakpoint length encodings */ | 22 | /* Available HW breakpoint length encodings */ |
23 | #define X86_BREAKPOINT_LEN_X 0x00 | ||
23 | #define X86_BREAKPOINT_LEN_1 0x40 | 24 | #define X86_BREAKPOINT_LEN_1 0x40 |
24 | #define X86_BREAKPOINT_LEN_2 0x44 | 25 | #define X86_BREAKPOINT_LEN_2 0x44 |
25 | #define X86_BREAKPOINT_LEN_4 0x4c | 26 | #define X86_BREAKPOINT_LEN_4 0x4c |
26 | #define X86_BREAKPOINT_LEN_EXECUTE 0x40 | ||
27 | 27 | ||
28 | #ifdef CONFIG_X86_64 | 28 | #ifdef CONFIG_X86_64 |
29 | #define X86_BREAKPOINT_LEN_8 0x48 | 29 | #define X86_BREAKPOINT_LEN_8 0x48 |
diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h index 70abda7058c8..ff2546ce7178 100644 --- a/arch/x86/include/asm/hypervisor.h +++ b/arch/x86/include/asm/hypervisor.h | |||
@@ -45,5 +45,6 @@ extern const struct hypervisor_x86 *x86_hyper; | |||
45 | /* Recognized hypervisors */ | 45 | /* Recognized hypervisors */ |
46 | extern const struct hypervisor_x86 x86_hyper_vmware; | 46 | extern const struct hypervisor_x86 x86_hyper_vmware; |
47 | extern const struct hypervisor_x86 x86_hyper_ms_hyperv; | 47 | extern const struct hypervisor_x86 x86_hyper_ms_hyperv; |
48 | extern const struct hypervisor_x86 x86_hyper_xen_hvm; | ||
48 | 49 | ||
49 | #endif | 50 | #endif |
diff --git a/arch/x86/include/asm/i387.h b/arch/x86/include/asm/i387.h index 815c5b2b9f57..a73a8d5a5e69 100644 --- a/arch/x86/include/asm/i387.h +++ b/arch/x86/include/asm/i387.h | |||
@@ -31,7 +31,6 @@ extern void mxcsr_feature_mask_init(void); | |||
31 | extern int init_fpu(struct task_struct *child); | 31 | extern int init_fpu(struct task_struct *child); |
32 | extern asmlinkage void math_state_restore(void); | 32 | extern asmlinkage void math_state_restore(void); |
33 | extern void __math_state_restore(void); | 33 | extern void __math_state_restore(void); |
34 | extern void init_thread_xstate(void); | ||
35 | extern int dump_fpu(struct pt_regs *, struct user_i387_struct *); | 34 | extern int dump_fpu(struct pt_regs *, struct user_i387_struct *); |
36 | 35 | ||
37 | extern user_regset_active_fn fpregs_active, xfpregs_active; | 36 | extern user_regset_active_fn fpregs_active, xfpregs_active; |
@@ -58,11 +57,25 @@ extern int restore_i387_xstate_ia32(void __user *buf); | |||
58 | 57 | ||
59 | #define X87_FSW_ES (1 << 7) /* Exception Summary */ | 58 | #define X87_FSW_ES (1 << 7) /* Exception Summary */ |
60 | 59 | ||
60 | static __always_inline __pure bool use_xsaveopt(void) | ||
61 | { | ||
62 | return static_cpu_has(X86_FEATURE_XSAVEOPT); | ||
63 | } | ||
64 | |||
61 | static __always_inline __pure bool use_xsave(void) | 65 | static __always_inline __pure bool use_xsave(void) |
62 | { | 66 | { |
63 | return static_cpu_has(X86_FEATURE_XSAVE); | 67 | return static_cpu_has(X86_FEATURE_XSAVE); |
64 | } | 68 | } |
65 | 69 | ||
70 | extern void __sanitize_i387_state(struct task_struct *); | ||
71 | |||
72 | static inline void sanitize_i387_state(struct task_struct *tsk) | ||
73 | { | ||
74 | if (!use_xsaveopt()) | ||
75 | return; | ||
76 | __sanitize_i387_state(tsk); | ||
77 | } | ||
78 | |||
66 | #ifdef CONFIG_X86_64 | 79 | #ifdef CONFIG_X86_64 |
67 | 80 | ||
68 | /* Ignore delayed exceptions from user space */ | 81 | /* Ignore delayed exceptions from user space */ |
@@ -127,6 +140,15 @@ static inline int fxsave_user(struct i387_fxsave_struct __user *fx) | |||
127 | { | 140 | { |
128 | int err; | 141 | int err; |
129 | 142 | ||
143 | /* | ||
144 | * Clear the bytes not touched by the fxsave and reserved | ||
145 | * for the SW usage. | ||
146 | */ | ||
147 | err = __clear_user(&fx->sw_reserved, | ||
148 | sizeof(struct _fpx_sw_bytes)); | ||
149 | if (unlikely(err)) | ||
150 | return -EFAULT; | ||
151 | |||
130 | asm volatile("1: rex64/fxsave (%[fx])\n\t" | 152 | asm volatile("1: rex64/fxsave (%[fx])\n\t" |
131 | "2:\n" | 153 | "2:\n" |
132 | ".section .fixup,\"ax\"\n" | 154 | ".section .fixup,\"ax\"\n" |
diff --git a/arch/x86/include/asm/irq_vectors.h b/arch/x86/include/asm/irq_vectors.h index 8767d99c4f64..e2ca30092557 100644 --- a/arch/x86/include/asm/irq_vectors.h +++ b/arch/x86/include/asm/irq_vectors.h | |||
@@ -125,6 +125,9 @@ | |||
125 | */ | 125 | */ |
126 | #define MCE_SELF_VECTOR 0xeb | 126 | #define MCE_SELF_VECTOR 0xeb |
127 | 127 | ||
128 | /* Xen vector callback to receive events in a HVM domain */ | ||
129 | #define XEN_HVM_EVTCHN_CALLBACK 0xe9 | ||
130 | |||
128 | #define NR_VECTORS 256 | 131 | #define NR_VECTORS 256 |
129 | 132 | ||
130 | #define FPU_IRQ 13 | 133 | #define FPU_IRQ 13 |
diff --git a/arch/x86/include/asm/kdebug.h b/arch/x86/include/asm/kdebug.h index fa7c0b974761..5bdfca86581b 100644 --- a/arch/x86/include/asm/kdebug.h +++ b/arch/x86/include/asm/kdebug.h | |||
@@ -33,5 +33,11 @@ extern void __show_regs(struct pt_regs *regs, int all); | |||
33 | extern void show_regs(struct pt_regs *regs); | 33 | extern void show_regs(struct pt_regs *regs); |
34 | extern unsigned long oops_begin(void); | 34 | extern unsigned long oops_begin(void); |
35 | extern void oops_end(unsigned long, struct pt_regs *, int signr); | 35 | extern void oops_end(unsigned long, struct pt_regs *, int signr); |
36 | #ifdef CONFIG_KEXEC | ||
37 | extern int in_crash_kexec; | ||
38 | #else | ||
39 | /* no crash dump is ever in progress if no crash kernel can be kexec'd */ | ||
40 | #define in_crash_kexec 0 | ||
41 | #endif | ||
36 | 42 | ||
37 | #endif /* _ASM_X86_KDEBUG_H */ | 43 | #endif /* _ASM_X86_KDEBUG_H */ |
diff --git a/arch/x86/include/asm/kgdb.h b/arch/x86/include/asm/kgdb.h index 006da3687cdc..396f5b5fc4d7 100644 --- a/arch/x86/include/asm/kgdb.h +++ b/arch/x86/include/asm/kgdb.h | |||
@@ -39,9 +39,11 @@ enum regnames { | |||
39 | GDB_FS, /* 14 */ | 39 | GDB_FS, /* 14 */ |
40 | GDB_GS, /* 15 */ | 40 | GDB_GS, /* 15 */ |
41 | }; | 41 | }; |
42 | #define GDB_ORIG_AX 41 | ||
43 | #define DBG_MAX_REG_NUM 16 | ||
42 | #define NUMREGBYTES ((GDB_GS+1)*4) | 44 | #define NUMREGBYTES ((GDB_GS+1)*4) |
43 | #else /* ! CONFIG_X86_32 */ | 45 | #else /* ! CONFIG_X86_32 */ |
44 | enum regnames64 { | 46 | enum regnames { |
45 | GDB_AX, /* 0 */ | 47 | GDB_AX, /* 0 */ |
46 | GDB_BX, /* 1 */ | 48 | GDB_BX, /* 1 */ |
47 | GDB_CX, /* 2 */ | 49 | GDB_CX, /* 2 */ |
@@ -59,15 +61,15 @@ enum regnames64 { | |||
59 | GDB_R14, /* 14 */ | 61 | GDB_R14, /* 14 */ |
60 | GDB_R15, /* 15 */ | 62 | GDB_R15, /* 15 */ |
61 | GDB_PC, /* 16 */ | 63 | GDB_PC, /* 16 */ |
64 | GDB_PS, /* 17 */ | ||
65 | GDB_CS, /* 18 */ | ||
66 | GDB_SS, /* 19 */ | ||
62 | }; | 67 | }; |
63 | 68 | #define GDB_ORIG_AX 57 | |
64 | enum regnames32 { | 69 | #define DBG_MAX_REG_NUM 20 |
65 | GDB_PS = 34, | 70 | /* 17 64 bit regs and 3 32 bit regs */ |
66 | GDB_CS, | 71 | #define NUMREGBYTES ((17 * 8) + (3 * 4)) |
67 | GDB_SS, | 72 | #endif /* ! CONFIG_X86_32 */ |
68 | }; | ||
69 | #define NUMREGBYTES ((GDB_SS+1)*4) | ||
70 | #endif /* CONFIG_X86_32 */ | ||
71 | 73 | ||
72 | static inline void arch_kgdb_breakpoint(void) | 74 | static inline void arch_kgdb_breakpoint(void) |
73 | { | 75 | { |
diff --git a/arch/x86/include/asm/local64.h b/arch/x86/include/asm/local64.h new file mode 100644 index 000000000000..36c93b5cc239 --- /dev/null +++ b/arch/x86/include/asm/local64.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-generic/local64.h> | |||
diff --git a/arch/x86/include/asm/mce.h b/arch/x86/include/asm/mce.h index f32a4301c4d4..c62c13cb9788 100644 --- a/arch/x86/include/asm/mce.h +++ b/arch/x86/include/asm/mce.h | |||
@@ -38,6 +38,10 @@ | |||
38 | #define MCM_ADDR_MEM 3 /* memory address */ | 38 | #define MCM_ADDR_MEM 3 /* memory address */ |
39 | #define MCM_ADDR_GENERIC 7 /* generic */ | 39 | #define MCM_ADDR_GENERIC 7 /* generic */ |
40 | 40 | ||
41 | /* CTL2 register defines */ | ||
42 | #define MCI_CTL2_CMCI_EN (1ULL << 30) | ||
43 | #define MCI_CTL2_CMCI_THRESHOLD_MASK 0x7fffULL | ||
44 | |||
41 | #define MCJ_CTX_MASK 3 | 45 | #define MCJ_CTX_MASK 3 |
42 | #define MCJ_CTX(flags) ((flags) & MCJ_CTX_MASK) | 46 | #define MCJ_CTX(flags) ((flags) & MCJ_CTX_MASK) |
43 | #define MCJ_CTX_RANDOM 0 /* inject context: random */ | 47 | #define MCJ_CTX_RANDOM 0 /* inject context: random */ |
diff --git a/arch/x86/include/asm/mrst.h b/arch/x86/include/asm/mrst.h index 451d30e7f62d..16350740edf6 100644 --- a/arch/x86/include/asm/mrst.h +++ b/arch/x86/include/asm/mrst.h | |||
@@ -13,6 +13,32 @@ | |||
13 | extern int pci_mrst_init(void); | 13 | extern int pci_mrst_init(void); |
14 | int __init sfi_parse_mrtc(struct sfi_table_header *table); | 14 | int __init sfi_parse_mrtc(struct sfi_table_header *table); |
15 | 15 | ||
16 | /* | ||
17 | * Medfield is the follow-up of Moorestown, it combines two chip solution into | ||
18 | * one. Other than that it also added always-on and constant tsc and lapic | ||
19 | * timers. Medfield is the platform name, and the chip name is called Penwell | ||
20 | * we treat Medfield/Penwell as a variant of Moorestown. Penwell can be | ||
21 | * identified via MSRs. | ||
22 | */ | ||
23 | enum mrst_cpu_type { | ||
24 | MRST_CPU_CHIP_LINCROFT = 1, | ||
25 | MRST_CPU_CHIP_PENWELL, | ||
26 | }; | ||
27 | |||
28 | extern enum mrst_cpu_type __mrst_cpu_chip; | ||
29 | static enum mrst_cpu_type mrst_identify_cpu(void) | ||
30 | { | ||
31 | return __mrst_cpu_chip; | ||
32 | } | ||
33 | |||
34 | enum mrst_timer_options { | ||
35 | MRST_TIMER_DEFAULT, | ||
36 | MRST_TIMER_APBT_ONLY, | ||
37 | MRST_TIMER_LAPIC_APBT, | ||
38 | }; | ||
39 | |||
40 | extern enum mrst_timer_options mrst_timer_options; | ||
41 | |||
16 | #define SFI_MTMR_MAX_NUM 8 | 42 | #define SFI_MTMR_MAX_NUM 8 |
17 | #define SFI_MRTC_MAX 8 | 43 | #define SFI_MRTC_MAX 8 |
18 | 44 | ||
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 509a42187dc2..986f7790fdb2 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h | |||
@@ -96,9 +96,6 @@ | |||
96 | #define MSR_IA32_MC0_CTL2 0x00000280 | 96 | #define MSR_IA32_MC0_CTL2 0x00000280 |
97 | #define MSR_IA32_MCx_CTL2(x) (MSR_IA32_MC0_CTL2 + (x)) | 97 | #define MSR_IA32_MCx_CTL2(x) (MSR_IA32_MC0_CTL2 + (x)) |
98 | 98 | ||
99 | #define CMCI_EN (1ULL << 30) | ||
100 | #define CMCI_THRESHOLD_MASK 0xffffULL | ||
101 | |||
102 | #define MSR_P6_PERFCTR0 0x000000c1 | 99 | #define MSR_P6_PERFCTR0 0x000000c1 |
103 | #define MSR_P6_PERFCTR1 0x000000c2 | 100 | #define MSR_P6_PERFCTR1 0x000000c2 |
104 | #define MSR_P6_EVNTSEL0 0x00000186 | 101 | #define MSR_P6_EVNTSEL0 0x00000186 |
@@ -161,8 +158,6 @@ | |||
161 | #define MSR_K7_FID_VID_STATUS 0xc0010042 | 158 | #define MSR_K7_FID_VID_STATUS 0xc0010042 |
162 | 159 | ||
163 | /* K6 MSRs */ | 160 | /* K6 MSRs */ |
164 | #define MSR_K6_EFER 0xc0000080 | ||
165 | #define MSR_K6_STAR 0xc0000081 | ||
166 | #define MSR_K6_WHCR 0xc0000082 | 161 | #define MSR_K6_WHCR 0xc0000082 |
167 | #define MSR_K6_UWCCR 0xc0000085 | 162 | #define MSR_K6_UWCCR 0xc0000085 |
168 | #define MSR_K6_EPMR 0xc0000086 | 163 | #define MSR_K6_EPMR 0xc0000086 |
@@ -226,12 +221,14 @@ | |||
226 | #define MSR_IA32_THERM_CONTROL 0x0000019a | 221 | #define MSR_IA32_THERM_CONTROL 0x0000019a |
227 | #define MSR_IA32_THERM_INTERRUPT 0x0000019b | 222 | #define MSR_IA32_THERM_INTERRUPT 0x0000019b |
228 | 223 | ||
229 | #define THERM_INT_LOW_ENABLE (1 << 0) | 224 | #define THERM_INT_HIGH_ENABLE (1 << 0) |
230 | #define THERM_INT_HIGH_ENABLE (1 << 1) | 225 | #define THERM_INT_LOW_ENABLE (1 << 1) |
226 | #define THERM_INT_PLN_ENABLE (1 << 24) | ||
231 | 227 | ||
232 | #define MSR_IA32_THERM_STATUS 0x0000019c | 228 | #define MSR_IA32_THERM_STATUS 0x0000019c |
233 | 229 | ||
234 | #define THERM_STATUS_PROCHOT (1 << 0) | 230 | #define THERM_STATUS_PROCHOT (1 << 0) |
231 | #define THERM_STATUS_POWER_LIMIT (1 << 10) | ||
235 | 232 | ||
236 | #define MSR_THERM2_CTL 0x0000019d | 233 | #define MSR_THERM2_CTL 0x0000019d |
237 | 234 | ||
@@ -241,6 +238,19 @@ | |||
241 | 238 | ||
242 | #define MSR_IA32_TEMPERATURE_TARGET 0x000001a2 | 239 | #define MSR_IA32_TEMPERATURE_TARGET 0x000001a2 |
243 | 240 | ||
241 | #define MSR_IA32_ENERGY_PERF_BIAS 0x000001b0 | ||
242 | |||
243 | #define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1 | ||
244 | |||
245 | #define PACKAGE_THERM_STATUS_PROCHOT (1 << 0) | ||
246 | #define PACKAGE_THERM_STATUS_POWER_LIMIT (1 << 10) | ||
247 | |||
248 | #define MSR_IA32_PACKAGE_THERM_INTERRUPT 0x000001b2 | ||
249 | |||
250 | #define PACKAGE_THERM_INT_HIGH_ENABLE (1 << 0) | ||
251 | #define PACKAGE_THERM_INT_LOW_ENABLE (1 << 1) | ||
252 | #define PACKAGE_THERM_INT_PLN_ENABLE (1 << 24) | ||
253 | |||
244 | /* MISC_ENABLE bits: architectural */ | 254 | /* MISC_ENABLE bits: architectural */ |
245 | #define MSR_IA32_MISC_ENABLE_FAST_STRING (1ULL << 0) | 255 | #define MSR_IA32_MISC_ENABLE_FAST_STRING (1ULL << 0) |
246 | #define MSR_IA32_MISC_ENABLE_TCC (1ULL << 1) | 256 | #define MSR_IA32_MISC_ENABLE_TCC (1ULL << 1) |
diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h index c5bc4c2d33f5..084ef95274cd 100644 --- a/arch/x86/include/asm/msr.h +++ b/arch/x86/include/asm/msr.h | |||
@@ -148,8 +148,8 @@ static inline unsigned long long native_read_pmc(int counter) | |||
148 | #define rdmsr(msr, val1, val2) \ | 148 | #define rdmsr(msr, val1, val2) \ |
149 | do { \ | 149 | do { \ |
150 | u64 __val = native_read_msr((msr)); \ | 150 | u64 __val = native_read_msr((msr)); \ |
151 | (val1) = (u32)__val; \ | 151 | (void)((val1) = (u32)__val); \ |
152 | (val2) = (u32)(__val >> 32); \ | 152 | (void)((val2) = (u32)(__val >> 32)); \ |
153 | } while (0) | 153 | } while (0) |
154 | 154 | ||
155 | static inline void wrmsr(unsigned msr, unsigned low, unsigned high) | 155 | static inline void wrmsr(unsigned msr, unsigned low, unsigned high) |
diff --git a/arch/x86/include/asm/nmi.h b/arch/x86/include/asm/nmi.h index 93da9c3f3341..932f0f86b4b7 100644 --- a/arch/x86/include/asm/nmi.h +++ b/arch/x86/include/asm/nmi.h | |||
@@ -17,7 +17,9 @@ int do_nmi_callback(struct pt_regs *regs, int cpu); | |||
17 | 17 | ||
18 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); | 18 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); |
19 | extern int check_nmi_watchdog(void); | 19 | extern int check_nmi_watchdog(void); |
20 | #if !defined(CONFIG_LOCKUP_DETECTOR) | ||
20 | extern int nmi_watchdog_enabled; | 21 | extern int nmi_watchdog_enabled; |
22 | #endif | ||
21 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); | 23 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); |
22 | extern int reserve_perfctr_nmi(unsigned int); | 24 | extern int reserve_perfctr_nmi(unsigned int); |
23 | extern void release_perfctr_nmi(unsigned int); | 25 | extern void release_perfctr_nmi(unsigned int); |
diff --git a/arch/x86/include/asm/olpc_ofw.h b/arch/x86/include/asm/olpc_ofw.h new file mode 100644 index 000000000000..08fde475cb3b --- /dev/null +++ b/arch/x86/include/asm/olpc_ofw.h | |||
@@ -0,0 +1,31 @@ | |||
1 | #ifndef _ASM_X86_OLPC_OFW_H | ||
2 | #define _ASM_X86_OLPC_OFW_H | ||
3 | |||
4 | /* index into the page table containing the entry OFW occupies */ | ||
5 | #define OLPC_OFW_PDE_NR 1022 | ||
6 | |||
7 | #define OLPC_OFW_SIG 0x2057464F /* aka "OFW " */ | ||
8 | |||
9 | #ifdef CONFIG_OLPC_OPENFIRMWARE | ||
10 | |||
11 | /* run an OFW command by calling into the firmware */ | ||
12 | #define olpc_ofw(name, args, res) \ | ||
13 | __olpc_ofw((name), ARRAY_SIZE(args), args, ARRAY_SIZE(res), res) | ||
14 | |||
15 | extern int __olpc_ofw(const char *name, int nr_args, const void **args, int nr_res, | ||
16 | void **res); | ||
17 | |||
18 | /* determine whether OFW is available and lives in the proper memory */ | ||
19 | extern void olpc_ofw_detect(void); | ||
20 | |||
21 | /* install OFW's pde permanently into the kernel's pgtable */ | ||
22 | extern void setup_olpc_ofw_pgd(void); | ||
23 | |||
24 | #else /* !CONFIG_OLPC_OPENFIRMWARE */ | ||
25 | |||
26 | static inline void olpc_ofw_detect(void) { } | ||
27 | static inline void setup_olpc_ofw_pgd(void) { } | ||
28 | |||
29 | #endif /* !CONFIG_OLPC_OPENFIRMWARE */ | ||
30 | |||
31 | #endif /* _ASM_X86_OLPC_OFW_H */ | ||
diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h index 625c3f0e741a..8ca82839288a 100644 --- a/arch/x86/include/asm/page.h +++ b/arch/x86/include/asm/page.h | |||
@@ -37,6 +37,13 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr, | |||
37 | #define __pa_nodebug(x) __phys_addr_nodebug((unsigned long)(x)) | 37 | #define __pa_nodebug(x) __phys_addr_nodebug((unsigned long)(x)) |
38 | /* __pa_symbol should be used for C visible symbols. | 38 | /* __pa_symbol should be used for C visible symbols. |
39 | This seems to be the official gcc blessed way to do such arithmetic. */ | 39 | This seems to be the official gcc blessed way to do such arithmetic. */ |
40 | /* | ||
41 | * We need __phys_reloc_hide() here because gcc may assume that there is no | ||
42 | * overflow during __pa() calculation and can optimize it unexpectedly. | ||
43 | * Newer versions of gcc provide -fno-strict-overflow switch to handle this | ||
44 | * case properly. Once all supported versions of gcc understand it, we can | ||
45 | * remove this Voodoo magic stuff. (i.e. once gcc3.x is deprecated) | ||
46 | */ | ||
40 | #define __pa_symbol(x) __pa(__phys_reloc_hide((unsigned long)(x))) | 47 | #define __pa_symbol(x) __pa(__phys_reloc_hide((unsigned long)(x))) |
41 | 48 | ||
42 | #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) | 49 | #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) |
diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h index cd2a31dc5fb8..49c7219826f9 100644 --- a/arch/x86/include/asm/pci_x86.h +++ b/arch/x86/include/asm/pci_x86.h | |||
@@ -30,6 +30,7 @@ | |||
30 | #define PCI_HAS_IO_ECS 0x40000 | 30 | #define PCI_HAS_IO_ECS 0x40000 |
31 | #define PCI_NOASSIGN_ROMS 0x80000 | 31 | #define PCI_NOASSIGN_ROMS 0x80000 |
32 | #define PCI_ROOT_NO_CRS 0x100000 | 32 | #define PCI_ROOT_NO_CRS 0x100000 |
33 | #define PCI_NOASSIGN_BARS 0x200000 | ||
33 | 34 | ||
34 | extern unsigned int pci_probe; | 35 | extern unsigned int pci_probe; |
35 | extern unsigned long pirq_table_addr; | 36 | extern unsigned long pirq_table_addr; |
diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_event.h index 254883d0c7e0..6e742cc4251b 100644 --- a/arch/x86/include/asm/perf_event.h +++ b/arch/x86/include/asm/perf_event.h | |||
@@ -68,8 +68,9 @@ union cpuid10_eax { | |||
68 | 68 | ||
69 | union cpuid10_edx { | 69 | union cpuid10_edx { |
70 | struct { | 70 | struct { |
71 | unsigned int num_counters_fixed:4; | 71 | unsigned int num_counters_fixed:5; |
72 | unsigned int reserved:28; | 72 | unsigned int bit_width_fixed:8; |
73 | unsigned int reserved:19; | ||
73 | } split; | 74 | } split; |
74 | unsigned int full; | 75 | unsigned int full; |
75 | }; | 76 | }; |
@@ -140,6 +141,19 @@ extern unsigned long perf_instruction_pointer(struct pt_regs *regs); | |||
140 | extern unsigned long perf_misc_flags(struct pt_regs *regs); | 141 | extern unsigned long perf_misc_flags(struct pt_regs *regs); |
141 | #define perf_misc_flags(regs) perf_misc_flags(regs) | 142 | #define perf_misc_flags(regs) perf_misc_flags(regs) |
142 | 143 | ||
144 | #include <asm/stacktrace.h> | ||
145 | |||
146 | /* | ||
147 | * We abuse bit 3 from flags to pass exact information, see perf_misc_flags | ||
148 | * and the comment with PERF_EFLAGS_EXACT. | ||
149 | */ | ||
150 | #define perf_arch_fetch_caller_regs(regs, __ip) { \ | ||
151 | (regs)->ip = (__ip); \ | ||
152 | (regs)->bp = caller_frame_pointer(); \ | ||
153 | (regs)->cs = __KERNEL_CS; \ | ||
154 | regs->flags = 0; \ | ||
155 | } | ||
156 | |||
143 | #else | 157 | #else |
144 | static inline void init_hw_perf_events(void) { } | 158 | static inline void init_hw_perf_events(void) { } |
145 | static inline void perf_events_lapic_init(void) { } | 159 | static inline void perf_events_lapic_init(void) { } |
diff --git a/arch/x86/include/asm/perf_event_p4.h b/arch/x86/include/asm/perf_event_p4.h index 64a8ebff06fc..def500776b16 100644 --- a/arch/x86/include/asm/perf_event_p4.h +++ b/arch/x86/include/asm/perf_event_p4.h | |||
@@ -19,7 +19,6 @@ | |||
19 | #define ARCH_P4_RESERVED_ESCR (2) /* IQ_ESCR(0,1) not always present */ | 19 | #define ARCH_P4_RESERVED_ESCR (2) /* IQ_ESCR(0,1) not always present */ |
20 | #define ARCH_P4_MAX_ESCR (ARCH_P4_TOTAL_ESCR - ARCH_P4_RESERVED_ESCR) | 20 | #define ARCH_P4_MAX_ESCR (ARCH_P4_TOTAL_ESCR - ARCH_P4_RESERVED_ESCR) |
21 | #define ARCH_P4_MAX_CCCR (18) | 21 | #define ARCH_P4_MAX_CCCR (18) |
22 | #define ARCH_P4_MAX_COUNTER (ARCH_P4_MAX_CCCR / 2) | ||
23 | 22 | ||
24 | #define P4_ESCR_EVENT_MASK 0x7e000000U | 23 | #define P4_ESCR_EVENT_MASK 0x7e000000U |
25 | #define P4_ESCR_EVENT_SHIFT 25 | 24 | #define P4_ESCR_EVENT_SHIFT 25 |
@@ -71,10 +70,6 @@ | |||
71 | #define P4_CCCR_THRESHOLD(v) ((v) << P4_CCCR_THRESHOLD_SHIFT) | 70 | #define P4_CCCR_THRESHOLD(v) ((v) << P4_CCCR_THRESHOLD_SHIFT) |
72 | #define P4_CCCR_ESEL(v) ((v) << P4_CCCR_ESCR_SELECT_SHIFT) | 71 | #define P4_CCCR_ESEL(v) ((v) << P4_CCCR_ESCR_SELECT_SHIFT) |
73 | 72 | ||
74 | /* Custom bits in reerved CCCR area */ | ||
75 | #define P4_CCCR_CACHE_OPS_MASK 0x0000003fU | ||
76 | |||
77 | |||
78 | /* Non HT mask */ | 73 | /* Non HT mask */ |
79 | #define P4_CCCR_MASK \ | 74 | #define P4_CCCR_MASK \ |
80 | (P4_CCCR_OVF | \ | 75 | (P4_CCCR_OVF | \ |
@@ -106,8 +101,7 @@ | |||
106 | * ESCR and CCCR but rather an only packed value should | 101 | * ESCR and CCCR but rather an only packed value should |
107 | * be unpacked and written to a proper addresses | 102 | * be unpacked and written to a proper addresses |
108 | * | 103 | * |
109 | * the base idea is to pack as much info as | 104 | * the base idea is to pack as much info as possible |
110 | * possible | ||
111 | */ | 105 | */ |
112 | #define p4_config_pack_escr(v) (((u64)(v)) << 32) | 106 | #define p4_config_pack_escr(v) (((u64)(v)) << 32) |
113 | #define p4_config_pack_cccr(v) (((u64)(v)) & 0xffffffffULL) | 107 | #define p4_config_pack_cccr(v) (((u64)(v)) & 0xffffffffULL) |
@@ -130,8 +124,6 @@ | |||
130 | t; \ | 124 | t; \ |
131 | }) | 125 | }) |
132 | 126 | ||
133 | #define p4_config_unpack_cache_event(v) (((u64)(v)) & P4_CCCR_CACHE_OPS_MASK) | ||
134 | |||
135 | #define P4_CONFIG_HT_SHIFT 63 | 127 | #define P4_CONFIG_HT_SHIFT 63 |
136 | #define P4_CONFIG_HT (1ULL << P4_CONFIG_HT_SHIFT) | 128 | #define P4_CONFIG_HT (1ULL << P4_CONFIG_HT_SHIFT) |
137 | 129 | ||
@@ -214,6 +206,12 @@ static inline u32 p4_default_escr_conf(int cpu, int exclude_os, int exclude_usr) | |||
214 | return escr; | 206 | return escr; |
215 | } | 207 | } |
216 | 208 | ||
209 | /* | ||
210 | * This are the events which should be used in "Event Select" | ||
211 | * field of ESCR register, they are like unique keys which allow | ||
212 | * the kernel to determinate which CCCR and COUNTER should be | ||
213 | * used to track an event | ||
214 | */ | ||
217 | enum P4_EVENTS { | 215 | enum P4_EVENTS { |
218 | P4_EVENT_TC_DELIVER_MODE, | 216 | P4_EVENT_TC_DELIVER_MODE, |
219 | P4_EVENT_BPU_FETCH_REQUEST, | 217 | P4_EVENT_BPU_FETCH_REQUEST, |
@@ -561,7 +559,7 @@ enum P4_EVENT_OPCODES { | |||
561 | * a caller should use P4_ESCR_EMASK_NAME helper to | 559 | * a caller should use P4_ESCR_EMASK_NAME helper to |
562 | * pick the EventMask needed, for example | 560 | * pick the EventMask needed, for example |
563 | * | 561 | * |
564 | * P4_ESCR_EMASK_NAME(P4_EVENT_TC_DELIVER_MODE, DD) | 562 | * P4_ESCR_EMASK_BIT(P4_EVENT_TC_DELIVER_MODE, DD) |
565 | */ | 563 | */ |
566 | enum P4_ESCR_EMASKS { | 564 | enum P4_ESCR_EMASKS { |
567 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, DD, 0), | 565 | P4_GEN_ESCR_EMASK(P4_EVENT_TC_DELIVER_MODE, DD, 0), |
@@ -753,43 +751,50 @@ enum P4_ESCR_EMASKS { | |||
753 | P4_GEN_ESCR_EMASK(P4_EVENT_INSTR_COMPLETED, BOGUS, 1), | 751 | P4_GEN_ESCR_EMASK(P4_EVENT_INSTR_COMPLETED, BOGUS, 1), |
754 | }; | 752 | }; |
755 | 753 | ||
756 | /* P4 PEBS: stale for a while */ | 754 | /* |
757 | #define P4_PEBS_METRIC_MASK 0x00001fffU | 755 | * P4 PEBS specifics (Replay Event only) |
758 | #define P4_PEBS_UOB_TAG 0x01000000U | 756 | * |
759 | #define P4_PEBS_ENABLE 0x02000000U | 757 | * Format (bits): |
760 | 758 | * 0-6: metric from P4_PEBS_METRIC enum | |
761 | /* Replay metrics for MSR_IA32_PEBS_ENABLE and MSR_P4_PEBS_MATRIX_VERT */ | 759 | * 7 : reserved |
762 | #define P4_PEBS__1stl_cache_load_miss_retired 0x3000001 | 760 | * 8 : reserved |
763 | #define P4_PEBS__2ndl_cache_load_miss_retired 0x3000002 | 761 | * 9-11 : reserved |
764 | #define P4_PEBS__dtlb_load_miss_retired 0x3000004 | 762 | * |
765 | #define P4_PEBS__dtlb_store_miss_retired 0x3000004 | 763 | * Note we have UOP and PEBS bits reserved for now |
766 | #define P4_PEBS__dtlb_all_miss_retired 0x3000004 | 764 | * just in case if we will need them once |
767 | #define P4_PEBS__tagged_mispred_branch 0x3018000 | 765 | */ |
768 | #define P4_PEBS__mob_load_replay_retired 0x3000200 | 766 | #define P4_PEBS_CONFIG_ENABLE (1 << 7) |
769 | #define P4_PEBS__split_load_retired 0x3000400 | 767 | #define P4_PEBS_CONFIG_UOP_TAG (1 << 8) |
770 | #define P4_PEBS__split_store_retired 0x3000400 | 768 | #define P4_PEBS_CONFIG_METRIC_MASK 0x3f |
771 | 769 | #define P4_PEBS_CONFIG_MASK 0xff | |
772 | #define P4_VERT__1stl_cache_load_miss_retired 0x0000001 | 770 | |
773 | #define P4_VERT__2ndl_cache_load_miss_retired 0x0000001 | 771 | /* |
774 | #define P4_VERT__dtlb_load_miss_retired 0x0000001 | 772 | * mem: Only counters MSR_IQ_COUNTER4 (16) and |
775 | #define P4_VERT__dtlb_store_miss_retired 0x0000002 | 773 | * MSR_IQ_COUNTER5 (17) are allowed for PEBS sampling |
776 | #define P4_VERT__dtlb_all_miss_retired 0x0000003 | 774 | */ |
777 | #define P4_VERT__tagged_mispred_branch 0x0000010 | 775 | #define P4_PEBS_ENABLE 0x02000000U |
778 | #define P4_VERT__mob_load_replay_retired 0x0000001 | 776 | #define P4_PEBS_ENABLE_UOP_TAG 0x01000000U |
779 | #define P4_VERT__split_load_retired 0x0000001 | 777 | |
780 | #define P4_VERT__split_store_retired 0x0000002 | 778 | #define p4_config_unpack_metric(v) (((u64)(v)) & P4_PEBS_CONFIG_METRIC_MASK) |
781 | 779 | #define p4_config_unpack_pebs(v) (((u64)(v)) & P4_PEBS_CONFIG_MASK) | |
782 | enum P4_CACHE_EVENTS { | 780 | |
783 | P4_CACHE__NONE, | 781 | #define p4_config_pebs_has(v, mask) (p4_config_unpack_pebs(v) & (mask)) |
784 | 782 | ||
785 | P4_CACHE__1stl_cache_load_miss_retired, | 783 | enum P4_PEBS_METRIC { |
786 | P4_CACHE__2ndl_cache_load_miss_retired, | 784 | P4_PEBS_METRIC__none, |
787 | P4_CACHE__dtlb_load_miss_retired, | 785 | |
788 | P4_CACHE__dtlb_store_miss_retired, | 786 | P4_PEBS_METRIC__1stl_cache_load_miss_retired, |
789 | P4_CACHE__itlb_reference_hit, | 787 | P4_PEBS_METRIC__2ndl_cache_load_miss_retired, |
790 | P4_CACHE__itlb_reference_miss, | 788 | P4_PEBS_METRIC__dtlb_load_miss_retired, |
791 | 789 | P4_PEBS_METRIC__dtlb_store_miss_retired, | |
792 | P4_CACHE__MAX | 790 | P4_PEBS_METRIC__dtlb_all_miss_retired, |
791 | P4_PEBS_METRIC__tagged_mispred_branch, | ||
792 | P4_PEBS_METRIC__mob_load_replay_retired, | ||
793 | P4_PEBS_METRIC__split_load_retired, | ||
794 | P4_PEBS_METRIC__split_store_retired, | ||
795 | |||
796 | P4_PEBS_METRIC__max | ||
793 | }; | 797 | }; |
794 | 798 | ||
795 | #endif /* PERF_EVENT_P4_H */ | 799 | #endif /* PERF_EVENT_P4_H */ |
800 | |||
diff --git a/arch/x86/include/asm/pgtable_32.h b/arch/x86/include/asm/pgtable_32.h index 2984a25ff383..f686f49e8b7b 100644 --- a/arch/x86/include/asm/pgtable_32.h +++ b/arch/x86/include/asm/pgtable_32.h | |||
@@ -26,6 +26,7 @@ struct mm_struct; | |||
26 | struct vm_area_struct; | 26 | struct vm_area_struct; |
27 | 27 | ||
28 | extern pgd_t swapper_pg_dir[1024]; | 28 | extern pgd_t swapper_pg_dir[1024]; |
29 | extern pgd_t trampoline_pg_dir[1024]; | ||
29 | 30 | ||
30 | static inline void pgtable_cache_init(void) { } | 31 | static inline void pgtable_cache_init(void) { } |
31 | static inline void check_pgt_cache(void) { } | 32 | static inline void check_pgt_cache(void) { } |
diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h index 181be528c612..076052cd62be 100644 --- a/arch/x86/include/asm/pgtable_64.h +++ b/arch/x86/include/asm/pgtable_64.h | |||
@@ -126,8 +126,8 @@ static inline int pgd_large(pgd_t pgd) { return 0; } | |||
126 | /* x86-64 always has all page tables mapped. */ | 126 | /* x86-64 always has all page tables mapped. */ |
127 | #define pte_offset_map(dir, address) pte_offset_kernel((dir), (address)) | 127 | #define pte_offset_map(dir, address) pte_offset_kernel((dir), (address)) |
128 | #define pte_offset_map_nested(dir, address) pte_offset_kernel((dir), (address)) | 128 | #define pte_offset_map_nested(dir, address) pte_offset_kernel((dir), (address)) |
129 | #define pte_unmap(pte) /* NOP */ | 129 | #define pte_unmap(pte) ((void)(pte))/* NOP */ |
130 | #define pte_unmap_nested(pte) /* NOP */ | 130 | #define pte_unmap_nested(pte) ((void)(pte)) /* NOP */ |
131 | 131 | ||
132 | #define update_mmu_cache(vma, address, ptep) do { } while (0) | 132 | #define update_mmu_cache(vma, address, ptep) do { } while (0) |
133 | 133 | ||
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 7e5c6a60b8ee..325b7bdbebaa 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h | |||
@@ -762,6 +762,7 @@ extern void init_c1e_mask(void); | |||
762 | extern unsigned long boot_option_idle_override; | 762 | extern unsigned long boot_option_idle_override; |
763 | extern unsigned long idle_halt; | 763 | extern unsigned long idle_halt; |
764 | extern unsigned long idle_nomwait; | 764 | extern unsigned long idle_nomwait; |
765 | extern bool c1e_detected; | ||
765 | 766 | ||
766 | /* | 767 | /* |
767 | * on systems with caches, caches must be flashed as the absolute | 768 | * on systems with caches, caches must be flashed as the absolute |
@@ -1025,4 +1026,24 @@ unsigned long calc_aperfmperf_ratio(struct aperfmperf *old, | |||
1025 | return ratio; | 1026 | return ratio; |
1026 | } | 1027 | } |
1027 | 1028 | ||
1029 | /* | ||
1030 | * AMD errata checking | ||
1031 | */ | ||
1032 | #ifdef CONFIG_CPU_SUP_AMD | ||
1033 | extern const int amd_erratum_383[]; | ||
1034 | extern const int amd_erratum_400[]; | ||
1035 | extern bool cpu_has_amd_erratum(const int *); | ||
1036 | |||
1037 | #define AMD_LEGACY_ERRATUM(...) { -1, __VA_ARGS__, 0 } | ||
1038 | #define AMD_OSVW_ERRATUM(osvw_id, ...) { osvw_id, __VA_ARGS__, 0 } | ||
1039 | #define AMD_MODEL_RANGE(f, m_start, s_start, m_end, s_end) \ | ||
1040 | ((f << 24) | (m_start << 16) | (s_start << 12) | (m_end << 4) | (s_end)) | ||
1041 | #define AMD_MODEL_RANGE_FAMILY(range) (((range) >> 24) & 0xff) | ||
1042 | #define AMD_MODEL_RANGE_START(range) (((range) >> 12) & 0xfff) | ||
1043 | #define AMD_MODEL_RANGE_END(range) ((range) & 0xfff) | ||
1044 | |||
1045 | #else | ||
1046 | #define cpu_has_amd_erratum(x) (false) | ||
1047 | #endif /* CONFIG_CPU_SUP_AMD */ | ||
1048 | |||
1028 | #endif /* _ASM_X86_PROCESSOR_H */ | 1049 | #endif /* _ASM_X86_PROCESSOR_H */ |
diff --git a/arch/x86/include/asm/required-features.h b/arch/x86/include/asm/required-features.h index 64cf2d24fad1..6c7fc25f2c34 100644 --- a/arch/x86/include/asm/required-features.h +++ b/arch/x86/include/asm/required-features.h | |||
@@ -84,5 +84,7 @@ | |||
84 | #define REQUIRED_MASK5 0 | 84 | #define REQUIRED_MASK5 0 |
85 | #define REQUIRED_MASK6 0 | 85 | #define REQUIRED_MASK6 0 |
86 | #define REQUIRED_MASK7 0 | 86 | #define REQUIRED_MASK7 0 |
87 | #define REQUIRED_MASK8 0 | ||
88 | #define REQUIRED_MASK9 0 | ||
87 | 89 | ||
88 | #endif /* _ASM_X86_REQUIRED_FEATURES_H */ | 90 | #endif /* _ASM_X86_REQUIRED_FEATURES_H */ |
diff --git a/arch/x86/include/asm/rwsem.h b/arch/x86/include/asm/rwsem.h index 606ede126972..d1e41b0f9b60 100644 --- a/arch/x86/include/asm/rwsem.h +++ b/arch/x86/include/asm/rwsem.h | |||
@@ -118,7 +118,7 @@ static inline void __down_read(struct rw_semaphore *sem) | |||
118 | { | 118 | { |
119 | asm volatile("# beginning down_read\n\t" | 119 | asm volatile("# beginning down_read\n\t" |
120 | LOCK_PREFIX _ASM_INC "(%1)\n\t" | 120 | LOCK_PREFIX _ASM_INC "(%1)\n\t" |
121 | /* adds 0x00000001, returns the old value */ | 121 | /* adds 0x00000001 */ |
122 | " jns 1f\n" | 122 | " jns 1f\n" |
123 | " call call_rwsem_down_read_failed\n" | 123 | " call call_rwsem_down_read_failed\n" |
124 | "1:\n\t" | 124 | "1:\n\t" |
@@ -156,11 +156,9 @@ static inline int __down_read_trylock(struct rw_semaphore *sem) | |||
156 | static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) | 156 | static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) |
157 | { | 157 | { |
158 | rwsem_count_t tmp; | 158 | rwsem_count_t tmp; |
159 | |||
160 | tmp = RWSEM_ACTIVE_WRITE_BIAS; | ||
161 | asm volatile("# beginning down_write\n\t" | 159 | asm volatile("# beginning down_write\n\t" |
162 | LOCK_PREFIX " xadd %1,(%2)\n\t" | 160 | LOCK_PREFIX " xadd %1,(%2)\n\t" |
163 | /* subtract 0x0000ffff, returns the old value */ | 161 | /* adds 0xffff0001, returns the old value */ |
164 | " test %1,%1\n\t" | 162 | " test %1,%1\n\t" |
165 | /* was the count 0 before? */ | 163 | /* was the count 0 before? */ |
166 | " jz 1f\n" | 164 | " jz 1f\n" |
@@ -168,7 +166,7 @@ static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) | |||
168 | "1:\n" | 166 | "1:\n" |
169 | "# ending down_write" | 167 | "# ending down_write" |
170 | : "+m" (sem->count), "=d" (tmp) | 168 | : "+m" (sem->count), "=d" (tmp) |
171 | : "a" (sem), "1" (tmp) | 169 | : "a" (sem), "1" (RWSEM_ACTIVE_WRITE_BIAS) |
172 | : "memory", "cc"); | 170 | : "memory", "cc"); |
173 | } | 171 | } |
174 | 172 | ||
@@ -195,16 +193,16 @@ static inline int __down_write_trylock(struct rw_semaphore *sem) | |||
195 | */ | 193 | */ |
196 | static inline void __up_read(struct rw_semaphore *sem) | 194 | static inline void __up_read(struct rw_semaphore *sem) |
197 | { | 195 | { |
198 | rwsem_count_t tmp = -RWSEM_ACTIVE_READ_BIAS; | 196 | rwsem_count_t tmp; |
199 | asm volatile("# beginning __up_read\n\t" | 197 | asm volatile("# beginning __up_read\n\t" |
200 | LOCK_PREFIX " xadd %1,(%2)\n\t" | 198 | LOCK_PREFIX " xadd %1,(%2)\n\t" |
201 | /* subtracts 1, returns the old value */ | 199 | /* subtracts 1, returns the old value */ |
202 | " jns 1f\n\t" | 200 | " jns 1f\n\t" |
203 | " call call_rwsem_wake\n" | 201 | " call call_rwsem_wake\n" /* expects old value in %edx */ |
204 | "1:\n" | 202 | "1:\n" |
205 | "# ending __up_read\n" | 203 | "# ending __up_read\n" |
206 | : "+m" (sem->count), "=d" (tmp) | 204 | : "+m" (sem->count), "=d" (tmp) |
207 | : "a" (sem), "1" (tmp) | 205 | : "a" (sem), "1" (-RWSEM_ACTIVE_READ_BIAS) |
208 | : "memory", "cc"); | 206 | : "memory", "cc"); |
209 | } | 207 | } |
210 | 208 | ||
@@ -216,10 +214,9 @@ static inline void __up_write(struct rw_semaphore *sem) | |||
216 | rwsem_count_t tmp; | 214 | rwsem_count_t tmp; |
217 | asm volatile("# beginning __up_write\n\t" | 215 | asm volatile("# beginning __up_write\n\t" |
218 | LOCK_PREFIX " xadd %1,(%2)\n\t" | 216 | LOCK_PREFIX " xadd %1,(%2)\n\t" |
219 | /* tries to transition | 217 | /* subtracts 0xffff0001, returns the old value */ |
220 | 0xffff0001 -> 0x00000000 */ | 218 | " jns 1f\n\t" |
221 | " jz 1f\n" | 219 | " call call_rwsem_wake\n" /* expects old value in %edx */ |
222 | " call call_rwsem_wake\n" | ||
223 | "1:\n\t" | 220 | "1:\n\t" |
224 | "# ending __up_write\n" | 221 | "# ending __up_write\n" |
225 | : "+m" (sem->count), "=d" (tmp) | 222 | : "+m" (sem->count), "=d" (tmp) |
diff --git a/arch/x86/include/asm/scatterlist.h b/arch/x86/include/asm/scatterlist.h index fb0b1874396f..4240878b9d76 100644 --- a/arch/x86/include/asm/scatterlist.h +++ b/arch/x86/include/asm/scatterlist.h | |||
@@ -3,7 +3,6 @@ | |||
3 | 3 | ||
4 | #include <asm-generic/scatterlist.h> | 4 | #include <asm-generic/scatterlist.h> |
5 | 5 | ||
6 | #define ISA_DMA_THRESHOLD (0x00ffffff) | ||
7 | #define ARCH_HAS_SG_CHAIN | 6 | #define ARCH_HAS_SG_CHAIN |
8 | 7 | ||
9 | #endif /* _ASM_X86_SCATTERLIST_H */ | 8 | #endif /* _ASM_X86_SCATTERLIST_H */ |
diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 86b1506f4179..ef292c792d74 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h | |||
@@ -82,7 +82,7 @@ void *extend_brk(size_t size, size_t align); | |||
82 | * executable.) | 82 | * executable.) |
83 | */ | 83 | */ |
84 | #define RESERVE_BRK(name,sz) \ | 84 | #define RESERVE_BRK(name,sz) \ |
85 | static void __section(.discard) __used \ | 85 | static void __section(.discard.text) __used \ |
86 | __brk_reservation_fn_##name##__(void) { \ | 86 | __brk_reservation_fn_##name##__(void) { \ |
87 | asm volatile ( \ | 87 | asm volatile ( \ |
88 | ".pushsection .brk_reservation,\"aw\",@nobits;" \ | 88 | ".pushsection .brk_reservation,\"aw\",@nobits;" \ |
diff --git a/arch/x86/include/asm/stacktrace.h b/arch/x86/include/asm/stacktrace.h index 4dab78edbad9..2b16a2ad23dc 100644 --- a/arch/x86/include/asm/stacktrace.h +++ b/arch/x86/include/asm/stacktrace.h | |||
@@ -1,6 +1,13 @@ | |||
1 | /* | ||
2 | * Copyright (C) 1991, 1992 Linus Torvalds | ||
3 | * Copyright (C) 2000, 2001, 2002 Andi Kleen, SuSE Labs | ||
4 | */ | ||
5 | |||
1 | #ifndef _ASM_X86_STACKTRACE_H | 6 | #ifndef _ASM_X86_STACKTRACE_H |
2 | #define _ASM_X86_STACKTRACE_H | 7 | #define _ASM_X86_STACKTRACE_H |
3 | 8 | ||
9 | #include <linux/uaccess.h> | ||
10 | |||
4 | extern int kstack_depth_to_print; | 11 | extern int kstack_depth_to_print; |
5 | 12 | ||
6 | struct thread_info; | 13 | struct thread_info; |
@@ -42,4 +49,46 @@ void dump_trace(struct task_struct *tsk, struct pt_regs *regs, | |||
42 | unsigned long *stack, unsigned long bp, | 49 | unsigned long *stack, unsigned long bp, |
43 | const struct stacktrace_ops *ops, void *data); | 50 | const struct stacktrace_ops *ops, void *data); |
44 | 51 | ||
52 | #ifdef CONFIG_X86_32 | ||
53 | #define STACKSLOTS_PER_LINE 8 | ||
54 | #define get_bp(bp) asm("movl %%ebp, %0" : "=r" (bp) :) | ||
55 | #else | ||
56 | #define STACKSLOTS_PER_LINE 4 | ||
57 | #define get_bp(bp) asm("movq %%rbp, %0" : "=r" (bp) :) | ||
58 | #endif | ||
59 | |||
60 | extern void | ||
61 | show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
62 | unsigned long *stack, unsigned long bp, char *log_lvl); | ||
63 | |||
64 | extern void | ||
65 | show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
66 | unsigned long *sp, unsigned long bp, char *log_lvl); | ||
67 | |||
68 | extern unsigned int code_bytes; | ||
69 | |||
70 | /* The form of the top of the frame on the stack */ | ||
71 | struct stack_frame { | ||
72 | struct stack_frame *next_frame; | ||
73 | unsigned long return_address; | ||
74 | }; | ||
75 | |||
76 | struct stack_frame_ia32 { | ||
77 | u32 next_frame; | ||
78 | u32 return_address; | ||
79 | }; | ||
80 | |||
81 | static inline unsigned long caller_frame_pointer(void) | ||
82 | { | ||
83 | struct stack_frame *frame; | ||
84 | |||
85 | get_bp(frame); | ||
86 | |||
87 | #ifdef CONFIG_FRAME_POINTER | ||
88 | frame = frame->next_frame; | ||
89 | #endif | ||
90 | |||
91 | return (unsigned long)frame; | ||
92 | } | ||
93 | |||
45 | #endif /* _ASM_X86_STACKTRACE_H */ | 94 | #endif /* _ASM_X86_STACKTRACE_H */ |
diff --git a/arch/x86/include/asm/sys_ia32.h b/arch/x86/include/asm/sys_ia32.h index 3ad421784ae7..cb238526a9f1 100644 --- a/arch/x86/include/asm/sys_ia32.h +++ b/arch/x86/include/asm/sys_ia32.h | |||
@@ -18,13 +18,13 @@ | |||
18 | #include <asm/ia32.h> | 18 | #include <asm/ia32.h> |
19 | 19 | ||
20 | /* ia32/sys_ia32.c */ | 20 | /* ia32/sys_ia32.c */ |
21 | asmlinkage long sys32_truncate64(char __user *, unsigned long, unsigned long); | 21 | asmlinkage long sys32_truncate64(const char __user *, unsigned long, unsigned long); |
22 | asmlinkage long sys32_ftruncate64(unsigned int, unsigned long, unsigned long); | 22 | asmlinkage long sys32_ftruncate64(unsigned int, unsigned long, unsigned long); |
23 | 23 | ||
24 | asmlinkage long sys32_stat64(char __user *, struct stat64 __user *); | 24 | asmlinkage long sys32_stat64(const char __user *, struct stat64 __user *); |
25 | asmlinkage long sys32_lstat64(char __user *, struct stat64 __user *); | 25 | asmlinkage long sys32_lstat64(const char __user *, struct stat64 __user *); |
26 | asmlinkage long sys32_fstat64(unsigned int, struct stat64 __user *); | 26 | asmlinkage long sys32_fstat64(unsigned int, struct stat64 __user *); |
27 | asmlinkage long sys32_fstatat(unsigned int, char __user *, | 27 | asmlinkage long sys32_fstatat(unsigned int, const char __user *, |
28 | struct stat64 __user *, int); | 28 | struct stat64 __user *, int); |
29 | struct mmap_arg_struct32; | 29 | struct mmap_arg_struct32; |
30 | asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *); | 30 | asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *); |
@@ -49,12 +49,12 @@ asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *, compat_size_t); | |||
49 | asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *); | 49 | asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *); |
50 | 50 | ||
51 | asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32); | 51 | asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32); |
52 | asmlinkage long sys32_pwrite(unsigned int, char __user *, u32, u32, u32); | 52 | asmlinkage long sys32_pwrite(unsigned int, const char __user *, u32, u32, u32); |
53 | 53 | ||
54 | asmlinkage long sys32_personality(unsigned long); | 54 | asmlinkage long sys32_personality(unsigned long); |
55 | asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); | 55 | asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); |
56 | 56 | ||
57 | asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *, | 57 | asmlinkage long sys32_execve(const char __user *, compat_uptr_t __user *, |
58 | compat_uptr_t __user *, struct pt_regs *); | 58 | compat_uptr_t __user *, struct pt_regs *); |
59 | asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *); | 59 | asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *); |
60 | 60 | ||
@@ -80,4 +80,7 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *); | |||
80 | 80 | ||
81 | /* ia32/ipc32.c */ | 81 | /* ia32/ipc32.c */ |
82 | asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32); | 82 | asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32); |
83 | |||
84 | asmlinkage long sys32_fanotify_mark(int, unsigned int, u32, u32, int, | ||
85 | const char __user *); | ||
83 | #endif /* _ASM_X86_SYS_IA32_H */ | 86 | #endif /* _ASM_X86_SYS_IA32_H */ |
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h index 5c044b43e9a7..f1d8b441fc77 100644 --- a/arch/x86/include/asm/syscalls.h +++ b/arch/x86/include/asm/syscalls.h | |||
@@ -23,8 +23,9 @@ long sys_iopl(unsigned int, struct pt_regs *); | |||
23 | /* kernel/process.c */ | 23 | /* kernel/process.c */ |
24 | int sys_fork(struct pt_regs *); | 24 | int sys_fork(struct pt_regs *); |
25 | int sys_vfork(struct pt_regs *); | 25 | int sys_vfork(struct pt_regs *); |
26 | long sys_execve(char __user *, char __user * __user *, | 26 | long sys_execve(const char __user *, |
27 | char __user * __user *, struct pt_regs *); | 27 | const char __user *const __user *, |
28 | const char __user *const __user *, struct pt_regs *); | ||
28 | long sys_clone(unsigned long, unsigned long, void __user *, | 29 | long sys_clone(unsigned long, unsigned long, void __user *, |
29 | void __user *, struct pt_regs *); | 30 | void __user *, struct pt_regs *); |
30 | 31 | ||
diff --git a/arch/x86/include/asm/trampoline.h b/arch/x86/include/asm/trampoline.h index cb507bb05d79..4dde797c0578 100644 --- a/arch/x86/include/asm/trampoline.h +++ b/arch/x86/include/asm/trampoline.h | |||
@@ -13,14 +13,17 @@ extern unsigned char *trampoline_base; | |||
13 | 13 | ||
14 | extern unsigned long init_rsp; | 14 | extern unsigned long init_rsp; |
15 | extern unsigned long initial_code; | 15 | extern unsigned long initial_code; |
16 | extern unsigned long initial_page_table; | ||
16 | extern unsigned long initial_gs; | 17 | extern unsigned long initial_gs; |
17 | 18 | ||
18 | #define TRAMPOLINE_SIZE roundup(trampoline_end - trampoline_data, PAGE_SIZE) | 19 | #define TRAMPOLINE_SIZE roundup(trampoline_end - trampoline_data, PAGE_SIZE) |
19 | 20 | ||
20 | extern unsigned long setup_trampoline(void); | 21 | extern unsigned long setup_trampoline(void); |
22 | extern void __init setup_trampoline_page_table(void); | ||
21 | extern void __init reserve_trampoline_memory(void); | 23 | extern void __init reserve_trampoline_memory(void); |
22 | #else | 24 | #else |
23 | static inline void reserve_trampoline_memory(void) {}; | 25 | static inline void setup_trampoline_page_table(void) {} |
26 | static inline void reserve_trampoline_memory(void) {} | ||
24 | #endif /* CONFIG_X86_TRAMPOLINE */ | 27 | #endif /* CONFIG_X86_TRAMPOLINE */ |
25 | 28 | ||
26 | #endif /* __ASSEMBLY__ */ | 29 | #endif /* __ASSEMBLY__ */ |
diff --git a/arch/x86/include/asm/unistd_32.h b/arch/x86/include/asm/unistd_32.h index beb9b5f8f8a4..b766a5e8ba0e 100644 --- a/arch/x86/include/asm/unistd_32.h +++ b/arch/x86/include/asm/unistd_32.h | |||
@@ -343,10 +343,13 @@ | |||
343 | #define __NR_rt_tgsigqueueinfo 335 | 343 | #define __NR_rt_tgsigqueueinfo 335 |
344 | #define __NR_perf_event_open 336 | 344 | #define __NR_perf_event_open 336 |
345 | #define __NR_recvmmsg 337 | 345 | #define __NR_recvmmsg 337 |
346 | #define __NR_fanotify_init 338 | ||
347 | #define __NR_fanotify_mark 339 | ||
348 | #define __NR_prlimit64 340 | ||
346 | 349 | ||
347 | #ifdef __KERNEL__ | 350 | #ifdef __KERNEL__ |
348 | 351 | ||
349 | #define NR_syscalls 338 | 352 | #define NR_syscalls 341 |
350 | 353 | ||
351 | #define __ARCH_WANT_IPC_PARSE_VERSION | 354 | #define __ARCH_WANT_IPC_PARSE_VERSION |
352 | #define __ARCH_WANT_OLD_READDIR | 355 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/arch/x86/include/asm/unistd_64.h b/arch/x86/include/asm/unistd_64.h index ff4307b0e81e..363e9b8a715b 100644 --- a/arch/x86/include/asm/unistd_64.h +++ b/arch/x86/include/asm/unistd_64.h | |||
@@ -663,6 +663,12 @@ __SYSCALL(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo) | |||
663 | __SYSCALL(__NR_perf_event_open, sys_perf_event_open) | 663 | __SYSCALL(__NR_perf_event_open, sys_perf_event_open) |
664 | #define __NR_recvmmsg 299 | 664 | #define __NR_recvmmsg 299 |
665 | __SYSCALL(__NR_recvmmsg, sys_recvmmsg) | 665 | __SYSCALL(__NR_recvmmsg, sys_recvmmsg) |
666 | #define __NR_fanotify_init 300 | ||
667 | __SYSCALL(__NR_fanotify_init, sys_fanotify_init) | ||
668 | #define __NR_fanotify_mark 301 | ||
669 | __SYSCALL(__NR_fanotify_mark, sys_fanotify_mark) | ||
670 | #define __NR_prlimit64 302 | ||
671 | __SYSCALL(__NR_prlimit64, sys_prlimit64) | ||
666 | 672 | ||
667 | #ifndef __NO_STUBS | 673 | #ifndef __NO_STUBS |
668 | #define __ARCH_WANT_OLD_READDIR | 674 | #define __ARCH_WANT_OLD_READDIR |
diff --git a/arch/x86/include/asm/uv/uv_bau.h b/arch/x86/include/asm/uv/uv_bau.h index aa558ac0306e..42d412fd8b02 100644 --- a/arch/x86/include/asm/uv/uv_bau.h +++ b/arch/x86/include/asm/uv/uv_bau.h | |||
@@ -34,6 +34,7 @@ | |||
34 | */ | 34 | */ |
35 | 35 | ||
36 | #define UV_ITEMS_PER_DESCRIPTOR 8 | 36 | #define UV_ITEMS_PER_DESCRIPTOR 8 |
37 | /* the 'throttle' to prevent the hardware stay-busy bug */ | ||
37 | #define MAX_BAU_CONCURRENT 3 | 38 | #define MAX_BAU_CONCURRENT 3 |
38 | #define UV_CPUS_PER_ACT_STATUS 32 | 39 | #define UV_CPUS_PER_ACT_STATUS 32 |
39 | #define UV_ACT_STATUS_MASK 0x3 | 40 | #define UV_ACT_STATUS_MASK 0x3 |
@@ -45,10 +46,26 @@ | |||
45 | #define UV_DESC_BASE_PNODE_SHIFT 49 | 46 | #define UV_DESC_BASE_PNODE_SHIFT 49 |
46 | #define UV_PAYLOADQ_PNODE_SHIFT 49 | 47 | #define UV_PAYLOADQ_PNODE_SHIFT 49 |
47 | #define UV_PTC_BASENAME "sgi_uv/ptc_statistics" | 48 | #define UV_PTC_BASENAME "sgi_uv/ptc_statistics" |
49 | #define UV_BAU_BASENAME "sgi_uv/bau_tunables" | ||
50 | #define UV_BAU_TUNABLES_DIR "sgi_uv" | ||
51 | #define UV_BAU_TUNABLES_FILE "bau_tunables" | ||
52 | #define WHITESPACE " \t\n" | ||
48 | #define uv_physnodeaddr(x) ((__pa((unsigned long)(x)) & uv_mmask)) | 53 | #define uv_physnodeaddr(x) ((__pa((unsigned long)(x)) & uv_mmask)) |
49 | #define UV_ENABLE_INTD_SOFT_ACK_MODE_SHIFT 15 | 54 | #define UV_ENABLE_INTD_SOFT_ACK_MODE_SHIFT 15 |
50 | #define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD_SHIFT 16 | 55 | #define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD_SHIFT 16 |
51 | #define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD 0x000000000bUL | 56 | #define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD 0x0000000009UL |
57 | /* [19:16] SOFT_ACK timeout period 19: 1 is urgency 7 17:16 1 is multiplier */ | ||
58 | #define BAU_MISC_CONTROL_MULT_MASK 3 | ||
59 | |||
60 | #define UVH_AGING_PRESCALE_SEL 0x000000b000UL | ||
61 | /* [30:28] URGENCY_7 an index into a table of times */ | ||
62 | #define BAU_URGENCY_7_SHIFT 28 | ||
63 | #define BAU_URGENCY_7_MASK 7 | ||
64 | |||
65 | #define UVH_TRANSACTION_TIMEOUT 0x000000b200UL | ||
66 | /* [45:40] BAU - BAU transaction timeout select - a multiplier */ | ||
67 | #define BAU_TRANS_SHIFT 40 | ||
68 | #define BAU_TRANS_MASK 0x3f | ||
52 | 69 | ||
53 | /* | 70 | /* |
54 | * bits in UVH_LB_BAU_SB_ACTIVATION_STATUS_0/1 | 71 | * bits in UVH_LB_BAU_SB_ACTIVATION_STATUS_0/1 |
@@ -59,24 +76,21 @@ | |||
59 | #define DESC_STATUS_SOURCE_TIMEOUT 3 | 76 | #define DESC_STATUS_SOURCE_TIMEOUT 3 |
60 | 77 | ||
61 | /* | 78 | /* |
62 | * source side threshholds at which message retries print a warning | 79 | * delay for 'plugged' timeout retries, in microseconds |
63 | */ | ||
64 | #define SOURCE_TIMEOUT_LIMIT 20 | ||
65 | #define DESTINATION_TIMEOUT_LIMIT 20 | ||
66 | |||
67 | /* | ||
68 | * misc. delays, in microseconds | ||
69 | */ | 80 | */ |
70 | #define THROTTLE_DELAY 10 | 81 | #define PLUGGED_DELAY 10 |
71 | #define TIMEOUT_DELAY 10 | ||
72 | #define BIOS_TO 1000 | ||
73 | /* BIOS is assumed to set the destination timeout to 1003520 nanoseconds */ | ||
74 | 82 | ||
75 | /* | 83 | /* |
76 | * threshholds at which to use IPI to free resources | 84 | * threshholds at which to use IPI to free resources |
77 | */ | 85 | */ |
86 | /* after this # consecutive 'plugged' timeouts, use IPI to release resources */ | ||
78 | #define PLUGSB4RESET 100 | 87 | #define PLUGSB4RESET 100 |
79 | #define TIMEOUTSB4RESET 100 | 88 | /* after this many consecutive timeouts, use IPI to release resources */ |
89 | #define TIMEOUTSB4RESET 1 | ||
90 | /* at this number uses of IPI to release resources, giveup the request */ | ||
91 | #define IPI_RESET_LIMIT 1 | ||
92 | /* after this # consecutive successes, bump up the throttle if it was lowered */ | ||
93 | #define COMPLETE_THRESHOLD 5 | ||
80 | 94 | ||
81 | /* | 95 | /* |
82 | * number of entries in the destination side payload queue | 96 | * number of entries in the destination side payload queue |
@@ -96,6 +110,13 @@ | |||
96 | #define FLUSH_COMPLETE 4 | 110 | #define FLUSH_COMPLETE 4 |
97 | 111 | ||
98 | /* | 112 | /* |
113 | * tuning the action when the numalink network is extremely delayed | ||
114 | */ | ||
115 | #define CONGESTED_RESPONSE_US 1000 /* 'long' response time, in microseconds */ | ||
116 | #define CONGESTED_REPS 10 /* long delays averaged over this many broadcasts */ | ||
117 | #define CONGESTED_PERIOD 30 /* time for the bau to be disabled, in seconds */ | ||
118 | |||
119 | /* | ||
99 | * Distribution: 32 bytes (256 bits) (bytes 0-0x1f of descriptor) | 120 | * Distribution: 32 bytes (256 bits) (bytes 0-0x1f of descriptor) |
100 | * If the 'multilevel' flag in the header portion of the descriptor | 121 | * If the 'multilevel' flag in the header portion of the descriptor |
101 | * has been set to 0, then endpoint multi-unicast mode is selected. | 122 | * has been set to 0, then endpoint multi-unicast mode is selected. |
@@ -300,37 +321,16 @@ struct bau_payload_queue_entry { | |||
300 | /* bytes 24-31 */ | 321 | /* bytes 24-31 */ |
301 | }; | 322 | }; |
302 | 323 | ||
303 | /* | 324 | struct msg_desc { |
304 | * one per-cpu; to locate the software tables | 325 | struct bau_payload_queue_entry *msg; |
305 | */ | 326 | int msg_slot; |
306 | struct bau_control { | 327 | int sw_ack_slot; |
307 | struct bau_desc *descriptor_base; | ||
308 | struct bau_payload_queue_entry *va_queue_first; | 328 | struct bau_payload_queue_entry *va_queue_first; |
309 | struct bau_payload_queue_entry *va_queue_last; | 329 | struct bau_payload_queue_entry *va_queue_last; |
310 | struct bau_payload_queue_entry *bau_msg_head; | 330 | }; |
311 | struct bau_control *uvhub_master; | 331 | |
312 | struct bau_control *socket_master; | 332 | struct reset_args { |
313 | unsigned long timeout_interval; | 333 | int sender; |
314 | atomic_t active_descriptor_count; | ||
315 | int max_concurrent; | ||
316 | int max_concurrent_constant; | ||
317 | int retry_message_scans; | ||
318 | int plugged_tries; | ||
319 | int timeout_tries; | ||
320 | int ipi_attempts; | ||
321 | int conseccompletes; | ||
322 | short cpu; | ||
323 | short uvhub_cpu; | ||
324 | short uvhub; | ||
325 | short cpus_in_socket; | ||
326 | short cpus_in_uvhub; | ||
327 | unsigned short message_number; | ||
328 | unsigned short uvhub_quiesce; | ||
329 | short socket_acknowledge_count[DEST_Q_SIZE]; | ||
330 | cycles_t send_message; | ||
331 | spinlock_t masks_lock; | ||
332 | spinlock_t uvhub_lock; | ||
333 | spinlock_t queue_lock; | ||
334 | }; | 334 | }; |
335 | 335 | ||
336 | /* | 336 | /* |
@@ -344,18 +344,25 @@ struct ptc_stats { | |||
344 | unsigned long s_dtimeout; /* destination side timeouts */ | 344 | unsigned long s_dtimeout; /* destination side timeouts */ |
345 | unsigned long s_time; /* time spent in sending side */ | 345 | unsigned long s_time; /* time spent in sending side */ |
346 | unsigned long s_retriesok; /* successful retries */ | 346 | unsigned long s_retriesok; /* successful retries */ |
347 | unsigned long s_ntargcpu; /* number of cpus targeted */ | 347 | unsigned long s_ntargcpu; /* total number of cpu's targeted */ |
348 | unsigned long s_ntarguvhub; /* number of uvhubs targeted */ | 348 | unsigned long s_ntargself; /* times the sending cpu was targeted */ |
349 | unsigned long s_ntarguvhub16; /* number of times >= 16 target hubs */ | 349 | unsigned long s_ntarglocals; /* targets of cpus on the local blade */ |
350 | unsigned long s_ntarguvhub8; /* number of times >= 8 target hubs */ | 350 | unsigned long s_ntargremotes; /* targets of cpus on remote blades */ |
351 | unsigned long s_ntarguvhub4; /* number of times >= 4 target hubs */ | 351 | unsigned long s_ntarglocaluvhub; /* targets of the local hub */ |
352 | unsigned long s_ntarguvhub2; /* number of times >= 2 target hubs */ | 352 | unsigned long s_ntargremoteuvhub; /* remotes hubs targeted */ |
353 | unsigned long s_ntarguvhub1; /* number of times == 1 target hub */ | 353 | unsigned long s_ntarguvhub; /* total number of uvhubs targeted */ |
354 | unsigned long s_ntarguvhub16; /* number of times target hubs >= 16*/ | ||
355 | unsigned long s_ntarguvhub8; /* number of times target hubs >= 8 */ | ||
356 | unsigned long s_ntarguvhub4; /* number of times target hubs >= 4 */ | ||
357 | unsigned long s_ntarguvhub2; /* number of times target hubs >= 2 */ | ||
358 | unsigned long s_ntarguvhub1; /* number of times target hubs == 1 */ | ||
354 | unsigned long s_resets_plug; /* ipi-style resets from plug state */ | 359 | unsigned long s_resets_plug; /* ipi-style resets from plug state */ |
355 | unsigned long s_resets_timeout; /* ipi-style resets from timeouts */ | 360 | unsigned long s_resets_timeout; /* ipi-style resets from timeouts */ |
356 | unsigned long s_busy; /* status stayed busy past s/w timer */ | 361 | unsigned long s_busy; /* status stayed busy past s/w timer */ |
357 | unsigned long s_throttles; /* waits in throttle */ | 362 | unsigned long s_throttles; /* waits in throttle */ |
358 | unsigned long s_retry_messages; /* retry broadcasts */ | 363 | unsigned long s_retry_messages; /* retry broadcasts */ |
364 | unsigned long s_bau_reenabled; /* for bau enable/disable */ | ||
365 | unsigned long s_bau_disabled; /* for bau enable/disable */ | ||
359 | /* destination statistics */ | 366 | /* destination statistics */ |
360 | unsigned long d_alltlb; /* times all tlb's on this cpu were flushed */ | 367 | unsigned long d_alltlb; /* times all tlb's on this cpu were flushed */ |
361 | unsigned long d_onetlb; /* times just one tlb on this cpu was flushed */ | 368 | unsigned long d_onetlb; /* times just one tlb on this cpu was flushed */ |
@@ -370,6 +377,52 @@ struct ptc_stats { | |||
370 | unsigned long d_rcanceled; /* number of messages canceled by resets */ | 377 | unsigned long d_rcanceled; /* number of messages canceled by resets */ |
371 | }; | 378 | }; |
372 | 379 | ||
380 | /* | ||
381 | * one per-cpu; to locate the software tables | ||
382 | */ | ||
383 | struct bau_control { | ||
384 | struct bau_desc *descriptor_base; | ||
385 | struct bau_payload_queue_entry *va_queue_first; | ||
386 | struct bau_payload_queue_entry *va_queue_last; | ||
387 | struct bau_payload_queue_entry *bau_msg_head; | ||
388 | struct bau_control *uvhub_master; | ||
389 | struct bau_control *socket_master; | ||
390 | struct ptc_stats *statp; | ||
391 | unsigned long timeout_interval; | ||
392 | unsigned long set_bau_on_time; | ||
393 | atomic_t active_descriptor_count; | ||
394 | int plugged_tries; | ||
395 | int timeout_tries; | ||
396 | int ipi_attempts; | ||
397 | int conseccompletes; | ||
398 | int baudisabled; | ||
399 | int set_bau_off; | ||
400 | short cpu; | ||
401 | short uvhub_cpu; | ||
402 | short uvhub; | ||
403 | short cpus_in_socket; | ||
404 | short cpus_in_uvhub; | ||
405 | unsigned short message_number; | ||
406 | unsigned short uvhub_quiesce; | ||
407 | short socket_acknowledge_count[DEST_Q_SIZE]; | ||
408 | cycles_t send_message; | ||
409 | spinlock_t uvhub_lock; | ||
410 | spinlock_t queue_lock; | ||
411 | /* tunables */ | ||
412 | int max_bau_concurrent; | ||
413 | int max_bau_concurrent_constant; | ||
414 | int plugged_delay; | ||
415 | int plugsb4reset; | ||
416 | int timeoutsb4reset; | ||
417 | int ipi_reset_limit; | ||
418 | int complete_threshold; | ||
419 | int congested_response_us; | ||
420 | int congested_reps; | ||
421 | int congested_period; | ||
422 | cycles_t period_time; | ||
423 | long period_requests; | ||
424 | }; | ||
425 | |||
373 | static inline int bau_uvhub_isset(int uvhub, struct bau_target_uvhubmask *dstp) | 426 | static inline int bau_uvhub_isset(int uvhub, struct bau_target_uvhubmask *dstp) |
374 | { | 427 | { |
375 | return constant_test_bit(uvhub, &dstp->bits[0]); | 428 | return constant_test_bit(uvhub, &dstp->bits[0]); |
diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h index 9c371e4a9fa6..7fda040a76cd 100644 --- a/arch/x86/include/asm/xen/hypercall.h +++ b/arch/x86/include/asm/xen/hypercall.h | |||
@@ -417,6 +417,12 @@ HYPERVISOR_nmi_op(unsigned long op, unsigned long arg) | |||
417 | return _hypercall2(int, nmi_op, op, arg); | 417 | return _hypercall2(int, nmi_op, op, arg); |
418 | } | 418 | } |
419 | 419 | ||
420 | static inline unsigned long __must_check | ||
421 | HYPERVISOR_hvm_op(int op, void *arg) | ||
422 | { | ||
423 | return _hypercall2(unsigned long, hvm_op, op, arg); | ||
424 | } | ||
425 | |||
420 | static inline void | 426 | static inline void |
421 | MULTI_fpu_taskswitch(struct multicall_entry *mcl, int set) | 427 | MULTI_fpu_taskswitch(struct multicall_entry *mcl, int set) |
422 | { | 428 | { |
diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h index 018a0a400799..bf5f7d32bd08 100644 --- a/arch/x86/include/asm/xen/page.h +++ b/arch/x86/include/asm/xen/page.h | |||
@@ -112,13 +112,9 @@ static inline xpaddr_t machine_to_phys(xmaddr_t machine) | |||
112 | */ | 112 | */ |
113 | static inline unsigned long mfn_to_local_pfn(unsigned long mfn) | 113 | static inline unsigned long mfn_to_local_pfn(unsigned long mfn) |
114 | { | 114 | { |
115 | extern unsigned long max_mapnr; | ||
116 | unsigned long pfn = mfn_to_pfn(mfn); | 115 | unsigned long pfn = mfn_to_pfn(mfn); |
117 | if ((pfn < max_mapnr) | 116 | if (get_phys_to_machine(pfn) != mfn) |
118 | && !xen_feature(XENFEAT_auto_translated_physmap) | 117 | return -1; /* force !pfn_valid() */ |
119 | && (get_phys_to_machine(pfn) != mfn)) | ||
120 | return max_mapnr; /* force !pfn_valid() */ | ||
121 | /* XXX fixme; not true with sparsemem */ | ||
122 | return pfn; | 118 | return pfn; |
123 | } | 119 | } |
124 | 120 | ||
diff --git a/arch/x86/include/asm/xen/swiotlb-xen.h b/arch/x86/include/asm/xen/swiotlb-xen.h new file mode 100644 index 000000000000..1be1ab7d6a41 --- /dev/null +++ b/arch/x86/include/asm/xen/swiotlb-xen.h | |||
@@ -0,0 +1,14 @@ | |||
1 | #ifndef _ASM_X86_SWIOTLB_XEN_H | ||
2 | #define _ASM_X86_SWIOTLB_XEN_H | ||
3 | |||
4 | #ifdef CONFIG_SWIOTLB_XEN | ||
5 | extern int xen_swiotlb; | ||
6 | extern int __init pci_xen_swiotlb_detect(void); | ||
7 | extern void __init pci_xen_swiotlb_init(void); | ||
8 | #else | ||
9 | #define xen_swiotlb (0) | ||
10 | static inline int __init pci_xen_swiotlb_detect(void) { return 0; } | ||
11 | static inline void __init pci_xen_swiotlb_init(void) { } | ||
12 | #endif | ||
13 | |||
14 | #endif /* _ASM_X86_SWIOTLB_XEN_H */ | ||
diff --git a/arch/x86/include/asm/xsave.h b/arch/x86/include/asm/xsave.h index 32c36668fa7b..c6ce2452f10c 100644 --- a/arch/x86/include/asm/xsave.h +++ b/arch/x86/include/asm/xsave.h | |||
@@ -3,7 +3,8 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <asm/processor.h> | 5 | #include <asm/processor.h> |
6 | #include <asm/i387.h> | 6 | |
7 | #define XSTATE_CPUID 0x0000000d | ||
7 | 8 | ||
8 | #define XSTATE_FP 0x1 | 9 | #define XSTATE_FP 0x1 |
9 | #define XSTATE_SSE 0x2 | 10 | #define XSTATE_SSE 0x2 |
@@ -32,10 +33,8 @@ | |||
32 | 33 | ||
33 | extern unsigned int xstate_size; | 34 | extern unsigned int xstate_size; |
34 | extern u64 pcntxt_mask; | 35 | extern u64 pcntxt_mask; |
35 | extern struct xsave_struct *init_xstate_buf; | ||
36 | extern u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS]; | 36 | extern u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS]; |
37 | 37 | ||
38 | extern void xsave_cntxt_init(void); | ||
39 | extern void xsave_init(void); | 38 | extern void xsave_init(void); |
40 | extern void update_regset_xstate_info(unsigned int size, u64 xstate_mask); | 39 | extern void update_regset_xstate_info(unsigned int size, u64 xstate_mask); |
41 | extern int init_fpu(struct task_struct *child); | 40 | extern int init_fpu(struct task_struct *child); |
@@ -65,6 +64,16 @@ static inline int fpu_xrstor_checking(struct fpu *fpu) | |||
65 | static inline int xsave_user(struct xsave_struct __user *buf) | 64 | static inline int xsave_user(struct xsave_struct __user *buf) |
66 | { | 65 | { |
67 | int err; | 66 | int err; |
67 | |||
68 | /* | ||
69 | * Clear the xsave header first, so that reserved fields are | ||
70 | * initialized to zero. | ||
71 | */ | ||
72 | err = __clear_user(&buf->xsave_hdr, | ||
73 | sizeof(struct xsave_hdr_struct)); | ||
74 | if (unlikely(err)) | ||
75 | return -EFAULT; | ||
76 | |||
68 | __asm__ __volatile__("1: .byte " REX_PREFIX "0x0f,0xae,0x27\n" | 77 | __asm__ __volatile__("1: .byte " REX_PREFIX "0x0f,0xae,0x27\n" |
69 | "2:\n" | 78 | "2:\n" |
70 | ".section .fixup,\"ax\"\n" | 79 | ".section .fixup,\"ax\"\n" |
@@ -117,12 +126,25 @@ static inline void xrstor_state(struct xsave_struct *fx, u64 mask) | |||
117 | : "memory"); | 126 | : "memory"); |
118 | } | 127 | } |
119 | 128 | ||
129 | static inline void xsave_state(struct xsave_struct *fx, u64 mask) | ||
130 | { | ||
131 | u32 lmask = mask; | ||
132 | u32 hmask = mask >> 32; | ||
133 | |||
134 | asm volatile(".byte " REX_PREFIX "0x0f,0xae,0x27\n\t" | ||
135 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
136 | : "memory"); | ||
137 | } | ||
138 | |||
120 | static inline void fpu_xsave(struct fpu *fpu) | 139 | static inline void fpu_xsave(struct fpu *fpu) |
121 | { | 140 | { |
122 | /* This, however, we can work around by forcing the compiler to select | 141 | /* This, however, we can work around by forcing the compiler to select |
123 | an addressing mode that doesn't require extended registers. */ | 142 | an addressing mode that doesn't require extended registers. */ |
124 | __asm__ __volatile__(".byte " REX_PREFIX "0x0f,0xae,0x27" | 143 | alternative_input( |
125 | : : "D" (&(fpu->state->xsave)), | 144 | ".byte " REX_PREFIX "0x0f,0xae,0x27", |
126 | "a" (-1), "d"(-1) : "memory"); | 145 | ".byte " REX_PREFIX "0x0f,0xae,0x37", |
146 | X86_FEATURE_XSAVEOPT, | ||
147 | [fx] "D" (&fpu->state->xsave), "a" (-1), "d" (-1) : | ||
148 | "memory"); | ||
127 | } | 149 | } |
128 | #endif | 150 | #endif |
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index e77b22083721..0925676266bd 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile | |||
@@ -104,6 +104,7 @@ obj-$(CONFIG_SCx200) += scx200.o | |||
104 | scx200-y += scx200_32.o | 104 | scx200-y += scx200_32.o |
105 | 105 | ||
106 | obj-$(CONFIG_OLPC) += olpc.o | 106 | obj-$(CONFIG_OLPC) += olpc.o |
107 | obj-$(CONFIG_OLPC_OPENFIRMWARE) += olpc_ofw.o | ||
107 | obj-$(CONFIG_X86_MRST) += mrst.o | 108 | obj-$(CONFIG_X86_MRST) += mrst.o |
108 | 109 | ||
109 | microcode-y := microcode_core.o | 110 | microcode-y := microcode_core.o |
diff --git a/arch/x86/kernel/acpi/realmode/wakeup.S b/arch/x86/kernel/acpi/realmode/wakeup.S index 580b4e296010..28595d6df47c 100644 --- a/arch/x86/kernel/acpi/realmode/wakeup.S +++ b/arch/x86/kernel/acpi/realmode/wakeup.S | |||
@@ -104,7 +104,7 @@ _start: | |||
104 | movl %eax, %ecx | 104 | movl %eax, %ecx |
105 | orl %edx, %ecx | 105 | orl %edx, %ecx |
106 | jz 1f | 106 | jz 1f |
107 | movl $0xc0000080, %ecx | 107 | movl $MSR_EFER, %ecx |
108 | wrmsr | 108 | wrmsr |
109 | 1: | 109 | 1: |
110 | 110 | ||
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index 70237732a6c7..f65ab8b014c4 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c | |||
@@ -214,6 +214,7 @@ void __init_or_module apply_alternatives(struct alt_instr *start, | |||
214 | u8 *instr = a->instr; | 214 | u8 *instr = a->instr; |
215 | BUG_ON(a->replacementlen > a->instrlen); | 215 | BUG_ON(a->replacementlen > a->instrlen); |
216 | BUG_ON(a->instrlen > sizeof(insnbuf)); | 216 | BUG_ON(a->instrlen > sizeof(insnbuf)); |
217 | BUG_ON(a->cpuid >= NCAPINTS*32); | ||
217 | if (!boot_cpu_has(a->cpuid)) | 218 | if (!boot_cpu_has(a->cpuid)) |
218 | continue; | 219 | continue; |
219 | #ifdef CONFIG_X86_64 | 220 | #ifdef CONFIG_X86_64 |
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index 0d20286d78c6..fa044e1e30a2 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c | |||
@@ -2572,6 +2572,11 @@ static phys_addr_t amd_iommu_iova_to_phys(struct iommu_domain *dom, | |||
2572 | static int amd_iommu_domain_has_cap(struct iommu_domain *domain, | 2572 | static int amd_iommu_domain_has_cap(struct iommu_domain *domain, |
2573 | unsigned long cap) | 2573 | unsigned long cap) |
2574 | { | 2574 | { |
2575 | switch (cap) { | ||
2576 | case IOMMU_CAP_CACHE_COHERENCY: | ||
2577 | return 1; | ||
2578 | } | ||
2579 | |||
2575 | return 0; | 2580 | return 0; |
2576 | } | 2581 | } |
2577 | 2582 | ||
@@ -2609,8 +2614,7 @@ int __init amd_iommu_init_passthrough(void) | |||
2609 | 2614 | ||
2610 | pt_domain->mode |= PAGE_MODE_NONE; | 2615 | pt_domain->mode |= PAGE_MODE_NONE; |
2611 | 2616 | ||
2612 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { | 2617 | for_each_pci_dev(dev) { |
2613 | |||
2614 | if (!check_device(&dev->dev)) | 2618 | if (!check_device(&dev->dev)) |
2615 | continue; | 2619 | continue; |
2616 | 2620 | ||
diff --git a/arch/x86/kernel/apb_timer.c b/arch/x86/kernel/apb_timer.c index a35347501d36..8dd77800ff5d 100644 --- a/arch/x86/kernel/apb_timer.c +++ b/arch/x86/kernel/apb_timer.c | |||
@@ -43,10 +43,11 @@ | |||
43 | 43 | ||
44 | #include <asm/fixmap.h> | 44 | #include <asm/fixmap.h> |
45 | #include <asm/apb_timer.h> | 45 | #include <asm/apb_timer.h> |
46 | #include <asm/mrst.h> | ||
46 | 47 | ||
47 | #define APBT_MASK CLOCKSOURCE_MASK(32) | 48 | #define APBT_MASK CLOCKSOURCE_MASK(32) |
48 | #define APBT_SHIFT 22 | 49 | #define APBT_SHIFT 22 |
49 | #define APBT_CLOCKEVENT_RATING 150 | 50 | #define APBT_CLOCKEVENT_RATING 110 |
50 | #define APBT_CLOCKSOURCE_RATING 250 | 51 | #define APBT_CLOCKSOURCE_RATING 250 |
51 | #define APBT_MIN_DELTA_USEC 200 | 52 | #define APBT_MIN_DELTA_USEC 200 |
52 | 53 | ||
@@ -83,8 +84,6 @@ struct apbt_dev { | |||
83 | char name[10]; | 84 | char name[10]; |
84 | }; | 85 | }; |
85 | 86 | ||
86 | int disable_apbt_percpu __cpuinitdata; | ||
87 | |||
88 | static DEFINE_PER_CPU(struct apbt_dev, cpu_apbt_dev); | 87 | static DEFINE_PER_CPU(struct apbt_dev, cpu_apbt_dev); |
89 | 88 | ||
90 | #ifdef CONFIG_SMP | 89 | #ifdef CONFIG_SMP |
@@ -195,29 +194,6 @@ static struct clock_event_device apbt_clockevent = { | |||
195 | }; | 194 | }; |
196 | 195 | ||
197 | /* | 196 | /* |
198 | * if user does not want to use per CPU apb timer, just give it a lower rating | ||
199 | * than local apic timer and skip the late per cpu timer init. | ||
200 | */ | ||
201 | static inline int __init setup_x86_mrst_timer(char *arg) | ||
202 | { | ||
203 | if (!arg) | ||
204 | return -EINVAL; | ||
205 | |||
206 | if (strcmp("apbt_only", arg) == 0) | ||
207 | disable_apbt_percpu = 0; | ||
208 | else if (strcmp("lapic_and_apbt", arg) == 0) | ||
209 | disable_apbt_percpu = 1; | ||
210 | else { | ||
211 | pr_warning("X86 MRST timer option %s not recognised" | ||
212 | " use x86_mrst_timer=apbt_only or lapic_and_apbt\n", | ||
213 | arg); | ||
214 | return -EINVAL; | ||
215 | } | ||
216 | return 0; | ||
217 | } | ||
218 | __setup("x86_mrst_timer=", setup_x86_mrst_timer); | ||
219 | |||
220 | /* | ||
221 | * start count down from 0xffff_ffff. this is done by toggling the enable bit | 197 | * start count down from 0xffff_ffff. this is done by toggling the enable bit |
222 | * then load initial load count to ~0. | 198 | * then load initial load count to ~0. |
223 | */ | 199 | */ |
@@ -335,7 +311,7 @@ static int __init apbt_clockevent_register(void) | |||
335 | adev->num = smp_processor_id(); | 311 | adev->num = smp_processor_id(); |
336 | memcpy(&adev->evt, &apbt_clockevent, sizeof(struct clock_event_device)); | 312 | memcpy(&adev->evt, &apbt_clockevent, sizeof(struct clock_event_device)); |
337 | 313 | ||
338 | if (disable_apbt_percpu) { | 314 | if (mrst_timer_options == MRST_TIMER_LAPIC_APBT) { |
339 | apbt_clockevent.rating = APBT_CLOCKEVENT_RATING - 100; | 315 | apbt_clockevent.rating = APBT_CLOCKEVENT_RATING - 100; |
340 | global_clock_event = &adev->evt; | 316 | global_clock_event = &adev->evt; |
341 | printk(KERN_DEBUG "%s clockevent registered as global\n", | 317 | printk(KERN_DEBUG "%s clockevent registered as global\n", |
@@ -429,7 +405,8 @@ static int apbt_cpuhp_notify(struct notifier_block *n, | |||
429 | 405 | ||
430 | static __init int apbt_late_init(void) | 406 | static __init int apbt_late_init(void) |
431 | { | 407 | { |
432 | if (disable_apbt_percpu || !apb_timer_block_enabled) | 408 | if (mrst_timer_options == MRST_TIMER_LAPIC_APBT || |
409 | !apb_timer_block_enabled) | ||
433 | return 0; | 410 | return 0; |
434 | /* This notifier should be called after workqueue is ready */ | 411 | /* This notifier should be called after workqueue is ready */ |
435 | hotcpu_notifier(apbt_cpuhp_notify, -20); | 412 | hotcpu_notifier(apbt_cpuhp_notify, -20); |
@@ -450,6 +427,8 @@ static void apbt_set_mode(enum clock_event_mode mode, | |||
450 | int timer_num; | 427 | int timer_num; |
451 | struct apbt_dev *adev = EVT_TO_APBT_DEV(evt); | 428 | struct apbt_dev *adev = EVT_TO_APBT_DEV(evt); |
452 | 429 | ||
430 | BUG_ON(!apbt_virt_address); | ||
431 | |||
453 | timer_num = adev->num; | 432 | timer_num = adev->num; |
454 | pr_debug("%s CPU %d timer %d mode=%d\n", | 433 | pr_debug("%s CPU %d timer %d mode=%d\n", |
455 | __func__, first_cpu(*evt->cpumask), timer_num, mode); | 434 | __func__, first_cpu(*evt->cpumask), timer_num, mode); |
@@ -676,7 +655,7 @@ void __init apbt_time_init(void) | |||
676 | } | 655 | } |
677 | #ifdef CONFIG_SMP | 656 | #ifdef CONFIG_SMP |
678 | /* kernel cmdline disable apb timer, so we will use lapic timers */ | 657 | /* kernel cmdline disable apb timer, so we will use lapic timers */ |
679 | if (disable_apbt_percpu) { | 658 | if (mrst_timer_options == MRST_TIMER_LAPIC_APBT) { |
680 | printk(KERN_INFO "apbt: disabled per cpu timer\n"); | 659 | printk(KERN_INFO "apbt: disabled per cpu timer\n"); |
681 | return; | 660 | return; |
682 | } | 661 | } |
diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c index b5d8b0bcf235..a2e0caf26e17 100644 --- a/arch/x86/kernel/aperture_64.c +++ b/arch/x86/kernel/aperture_64.c | |||
@@ -280,7 +280,7 @@ void __init early_gart_iommu_check(void) | |||
280 | * or BIOS forget to put that in reserved. | 280 | * or BIOS forget to put that in reserved. |
281 | * try to update e820 to make that region as reserved. | 281 | * try to update e820 to make that region as reserved. |
282 | */ | 282 | */ |
283 | u32 agp_aper_base = 0, agp_aper_order = 0; | 283 | u32 agp_aper_order = 0; |
284 | int i, fix, slot, valid_agp = 0; | 284 | int i, fix, slot, valid_agp = 0; |
285 | u32 ctl; | 285 | u32 ctl; |
286 | u32 aper_size = 0, aper_order = 0, last_aper_order = 0; | 286 | u32 aper_size = 0, aper_order = 0, last_aper_order = 0; |
@@ -291,7 +291,7 @@ void __init early_gart_iommu_check(void) | |||
291 | return; | 291 | return; |
292 | 292 | ||
293 | /* This is mostly duplicate of iommu_hole_init */ | 293 | /* This is mostly duplicate of iommu_hole_init */ |
294 | agp_aper_base = search_agp_bridge(&agp_aper_order, &valid_agp); | 294 | search_agp_bridge(&agp_aper_order, &valid_agp); |
295 | 295 | ||
296 | fix = 0; | 296 | fix = 0; |
297 | for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { | 297 | for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { |
diff --git a/arch/x86/kernel/apic/Makefile b/arch/x86/kernel/apic/Makefile index 565c1bfc507d..910f20b457c4 100644 --- a/arch/x86/kernel/apic/Makefile +++ b/arch/x86/kernel/apic/Makefile | |||
@@ -2,7 +2,12 @@ | |||
2 | # Makefile for local APIC drivers and for the IO-APIC code | 2 | # Makefile for local APIC drivers and for the IO-APIC code |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-$(CONFIG_X86_LOCAL_APIC) += apic.o apic_noop.o probe_$(BITS).o ipi.o nmi.o | 5 | obj-$(CONFIG_X86_LOCAL_APIC) += apic.o apic_noop.o probe_$(BITS).o ipi.o |
6 | ifneq ($(CONFIG_HARDLOCKUP_DETECTOR),y) | ||
7 | obj-$(CONFIG_X86_LOCAL_APIC) += nmi.o | ||
8 | endif | ||
9 | obj-$(CONFIG_HARDLOCKUP_DETECTOR) += hw_nmi.o | ||
10 | |||
6 | obj-$(CONFIG_X86_IO_APIC) += io_apic.o | 11 | obj-$(CONFIG_X86_IO_APIC) += io_apic.o |
7 | obj-$(CONFIG_SMP) += ipi.o | 12 | obj-$(CONFIG_SMP) += ipi.o |
8 | 13 | ||
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 980508c79082..e3b534cda49a 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
@@ -1606,7 +1606,7 @@ void __init init_apic_mappings(void) | |||
1606 | * acpi lapic path already maps that address in | 1606 | * acpi lapic path already maps that address in |
1607 | * acpi_register_lapic_address() | 1607 | * acpi_register_lapic_address() |
1608 | */ | 1608 | */ |
1609 | if (!acpi_lapic) | 1609 | if (!acpi_lapic && !smp_found_config) |
1610 | set_fixmap_nocache(FIX_APIC_BASE, apic_phys); | 1610 | set_fixmap_nocache(FIX_APIC_BASE, apic_phys); |
1611 | 1611 | ||
1612 | apic_printk(APIC_VERBOSE, "mapped APIC to %08lx (%08lx)\n", | 1612 | apic_printk(APIC_VERBOSE, "mapped APIC to %08lx (%08lx)\n", |
diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c index 425e53a87feb..8593582d8022 100644 --- a/arch/x86/kernel/apic/es7000_32.c +++ b/arch/x86/kernel/apic/es7000_32.c | |||
@@ -129,7 +129,6 @@ int es7000_plat; | |||
129 | * GSI override for ES7000 platforms. | 129 | * GSI override for ES7000 platforms. |
130 | */ | 130 | */ |
131 | 131 | ||
132 | static unsigned int base; | ||
133 | 132 | ||
134 | static int __cpuinit wakeup_secondary_cpu_via_mip(int cpu, unsigned long eip) | 133 | static int __cpuinit wakeup_secondary_cpu_via_mip(int cpu, unsigned long eip) |
135 | { | 134 | { |
diff --git a/arch/x86/kernel/apic/hw_nmi.c b/arch/x86/kernel/apic/hw_nmi.c new file mode 100644 index 000000000000..cefd6942f0e9 --- /dev/null +++ b/arch/x86/kernel/apic/hw_nmi.c | |||
@@ -0,0 +1,107 @@ | |||
1 | /* | ||
2 | * HW NMI watchdog support | ||
3 | * | ||
4 | * started by Don Zickus, Copyright (C) 2010 Red Hat, Inc. | ||
5 | * | ||
6 | * Arch specific calls to support NMI watchdog | ||
7 | * | ||
8 | * Bits copied from original nmi.c file | ||
9 | * | ||
10 | */ | ||
11 | #include <asm/apic.h> | ||
12 | |||
13 | #include <linux/cpumask.h> | ||
14 | #include <linux/kdebug.h> | ||
15 | #include <linux/notifier.h> | ||
16 | #include <linux/kprobes.h> | ||
17 | #include <linux/nmi.h> | ||
18 | #include <linux/module.h> | ||
19 | |||
20 | /* For reliability, we're prepared to waste bits here. */ | ||
21 | static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly; | ||
22 | |||
23 | u64 hw_nmi_get_sample_period(void) | ||
24 | { | ||
25 | return (u64)(cpu_khz) * 1000 * 60; | ||
26 | } | ||
27 | |||
28 | #ifdef ARCH_HAS_NMI_WATCHDOG | ||
29 | void arch_trigger_all_cpu_backtrace(void) | ||
30 | { | ||
31 | int i; | ||
32 | |||
33 | cpumask_copy(to_cpumask(backtrace_mask), cpu_online_mask); | ||
34 | |||
35 | printk(KERN_INFO "sending NMI to all CPUs:\n"); | ||
36 | apic->send_IPI_all(NMI_VECTOR); | ||
37 | |||
38 | /* Wait for up to 10 seconds for all CPUs to do the backtrace */ | ||
39 | for (i = 0; i < 10 * 1000; i++) { | ||
40 | if (cpumask_empty(to_cpumask(backtrace_mask))) | ||
41 | break; | ||
42 | mdelay(1); | ||
43 | } | ||
44 | } | ||
45 | |||
46 | static int __kprobes | ||
47 | arch_trigger_all_cpu_backtrace_handler(struct notifier_block *self, | ||
48 | unsigned long cmd, void *__args) | ||
49 | { | ||
50 | struct die_args *args = __args; | ||
51 | struct pt_regs *regs; | ||
52 | int cpu = smp_processor_id(); | ||
53 | |||
54 | switch (cmd) { | ||
55 | case DIE_NMI: | ||
56 | case DIE_NMI_IPI: | ||
57 | break; | ||
58 | |||
59 | default: | ||
60 | return NOTIFY_DONE; | ||
61 | } | ||
62 | |||
63 | regs = args->regs; | ||
64 | |||
65 | if (cpumask_test_cpu(cpu, to_cpumask(backtrace_mask))) { | ||
66 | static arch_spinlock_t lock = __ARCH_SPIN_LOCK_UNLOCKED; | ||
67 | |||
68 | arch_spin_lock(&lock); | ||
69 | printk(KERN_WARNING "NMI backtrace for cpu %d\n", cpu); | ||
70 | show_regs(regs); | ||
71 | dump_stack(); | ||
72 | arch_spin_unlock(&lock); | ||
73 | cpumask_clear_cpu(cpu, to_cpumask(backtrace_mask)); | ||
74 | return NOTIFY_STOP; | ||
75 | } | ||
76 | |||
77 | return NOTIFY_DONE; | ||
78 | } | ||
79 | |||
80 | static __read_mostly struct notifier_block backtrace_notifier = { | ||
81 | .notifier_call = arch_trigger_all_cpu_backtrace_handler, | ||
82 | .next = NULL, | ||
83 | .priority = 1 | ||
84 | }; | ||
85 | |||
86 | static int __init register_trigger_all_cpu_backtrace(void) | ||
87 | { | ||
88 | register_die_notifier(&backtrace_notifier); | ||
89 | return 0; | ||
90 | } | ||
91 | early_initcall(register_trigger_all_cpu_backtrace); | ||
92 | #endif | ||
93 | |||
94 | /* STUB calls to mimic old nmi_watchdog behaviour */ | ||
95 | #if defined(CONFIG_X86_LOCAL_APIC) | ||
96 | unsigned int nmi_watchdog = NMI_NONE; | ||
97 | EXPORT_SYMBOL(nmi_watchdog); | ||
98 | void acpi_nmi_enable(void) { return; } | ||
99 | void acpi_nmi_disable(void) { return; } | ||
100 | #endif | ||
101 | atomic_t nmi_active = ATOMIC_INIT(0); /* oprofile uses this */ | ||
102 | EXPORT_SYMBOL(nmi_active); | ||
103 | int unknown_nmi_panic; | ||
104 | void cpu_nmi_set_wd_enabled(void) { return; } | ||
105 | void stop_apic_nmi_watchdog(void *unused) { return; } | ||
106 | void setup_apic_nmi_watchdog(void *unused) { return; } | ||
107 | int __init check_nmi_watchdog(void) { return 0; } | ||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index e41ed24ab26d..f1efebaf5510 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -1728,6 +1728,8 @@ __apicdebuginit(void) print_IO_APIC(void) | |||
1728 | struct irq_pin_list *entry; | 1728 | struct irq_pin_list *entry; |
1729 | 1729 | ||
1730 | cfg = desc->chip_data; | 1730 | cfg = desc->chip_data; |
1731 | if (!cfg) | ||
1732 | continue; | ||
1731 | entry = cfg->irq_2_pin; | 1733 | entry = cfg->irq_2_pin; |
1732 | if (!entry) | 1734 | if (!entry) |
1733 | continue; | 1735 | continue; |
@@ -3397,7 +3399,7 @@ static int set_msi_irq_affinity(unsigned int irq, const struct cpumask *mask) | |||
3397 | 3399 | ||
3398 | cfg = desc->chip_data; | 3400 | cfg = desc->chip_data; |
3399 | 3401 | ||
3400 | read_msi_msg_desc(desc, &msg); | 3402 | get_cached_msi_msg_desc(desc, &msg); |
3401 | 3403 | ||
3402 | msg.data &= ~MSI_DATA_VECTOR_MASK; | 3404 | msg.data &= ~MSI_DATA_VECTOR_MASK; |
3403 | msg.data |= MSI_DATA_VECTOR(cfg->vector); | 3405 | msg.data |= MSI_DATA_VECTOR(cfg->vector); |
diff --git a/arch/x86/kernel/apic/nmi.c b/arch/x86/kernel/apic/nmi.c index 1edaf15c0b8e..a43f71cb30f8 100644 --- a/arch/x86/kernel/apic/nmi.c +++ b/arch/x86/kernel/apic/nmi.c | |||
@@ -401,13 +401,6 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason) | |||
401 | int cpu = smp_processor_id(); | 401 | int cpu = smp_processor_id(); |
402 | int rc = 0; | 402 | int rc = 0; |
403 | 403 | ||
404 | /* check for other users first */ | ||
405 | if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) | ||
406 | == NOTIFY_STOP) { | ||
407 | rc = 1; | ||
408 | touched = 1; | ||
409 | } | ||
410 | |||
411 | sum = get_timer_irqs(cpu); | 404 | sum = get_timer_irqs(cpu); |
412 | 405 | ||
413 | if (__get_cpu_var(nmi_touch)) { | 406 | if (__get_cpu_var(nmi_touch)) { |
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c index e46f98f36e31..7b598b84c902 100644 --- a/arch/x86/kernel/apic/x2apic_uv_x.c +++ b/arch/x86/kernel/apic/x2apic_uv_x.c | |||
@@ -604,6 +604,10 @@ int uv_handle_nmi(struct notifier_block *self, unsigned long reason, void *data) | |||
604 | { | 604 | { |
605 | if (reason != DIE_NMI_IPI) | 605 | if (reason != DIE_NMI_IPI) |
606 | return NOTIFY_OK; | 606 | return NOTIFY_OK; |
607 | |||
608 | if (in_crash_kexec) | ||
609 | /* do nothing if entering the crash kernel */ | ||
610 | return NOTIFY_OK; | ||
607 | /* | 611 | /* |
608 | * Use a lock so only one cpu prints at a time | 612 | * Use a lock so only one cpu prints at a time |
609 | * to prevent intermixed output. | 613 | * to prevent intermixed output. |
diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile index 3a785da34b6f..3f0ebe429a01 100644 --- a/arch/x86/kernel/cpu/Makefile +++ b/arch/x86/kernel/cpu/Makefile | |||
@@ -12,11 +12,11 @@ endif | |||
12 | nostackp := $(call cc-option, -fno-stack-protector) | 12 | nostackp := $(call cc-option, -fno-stack-protector) |
13 | CFLAGS_common.o := $(nostackp) | 13 | CFLAGS_common.o := $(nostackp) |
14 | 14 | ||
15 | obj-y := intel_cacheinfo.o addon_cpuid_features.o | 15 | obj-y := intel_cacheinfo.o scattered.o topology.o |
16 | obj-y += proc.o capflags.o powerflags.o common.o | 16 | obj-y += proc.o capflags.o powerflags.o common.o |
17 | obj-y += vmware.o hypervisor.o sched.o mshyperv.o | 17 | obj-y += vmware.o hypervisor.o sched.o mshyperv.o |
18 | 18 | ||
19 | obj-$(CONFIG_X86_32) += bugs.o cmpxchg.o | 19 | obj-$(CONFIG_X86_32) += bugs.o |
20 | obj-$(CONFIG_X86_64) += bugs_64.o | 20 | obj-$(CONFIG_X86_64) += bugs_64.o |
21 | 21 | ||
22 | obj-$(CONFIG_CPU_SUP_INTEL) += intel.o | 22 | obj-$(CONFIG_CPU_SUP_INTEL) += intel.o |
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index e485825130d2..ba5f62f45f01 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c | |||
@@ -466,7 +466,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) | |||
466 | } | 466 | } |
467 | 467 | ||
468 | } | 468 | } |
469 | if (c->x86 == 0x10 || c->x86 == 0x11) | 469 | if (c->x86 >= 0x10) |
470 | set_cpu_cap(c, X86_FEATURE_REP_GOOD); | 470 | set_cpu_cap(c, X86_FEATURE_REP_GOOD); |
471 | 471 | ||
472 | /* get apicid instead of initial apic id from cpuid */ | 472 | /* get apicid instead of initial apic id from cpuid */ |
@@ -529,7 +529,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) | |||
529 | num_cache_leaves = 3; | 529 | num_cache_leaves = 3; |
530 | } | 530 | } |
531 | 531 | ||
532 | if (c->x86 >= 0xf && c->x86 <= 0x11) | 532 | if (c->x86 >= 0xf) |
533 | set_cpu_cap(c, X86_FEATURE_K8); | 533 | set_cpu_cap(c, X86_FEATURE_K8); |
534 | 534 | ||
535 | if (cpu_has_xmm2) { | 535 | if (cpu_has_xmm2) { |
@@ -546,7 +546,7 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) | |||
546 | fam10h_check_enable_mmcfg(); | 546 | fam10h_check_enable_mmcfg(); |
547 | } | 547 | } |
548 | 548 | ||
549 | if (c == &boot_cpu_data && c->x86 >= 0xf && c->x86 <= 0x11) { | 549 | if (c == &boot_cpu_data && c->x86 >= 0xf) { |
550 | unsigned long long tseg; | 550 | unsigned long long tseg; |
551 | 551 | ||
552 | /* | 552 | /* |
@@ -609,3 +609,74 @@ static const struct cpu_dev __cpuinitconst amd_cpu_dev = { | |||
609 | }; | 609 | }; |
610 | 610 | ||
611 | cpu_dev_register(amd_cpu_dev); | 611 | cpu_dev_register(amd_cpu_dev); |
612 | |||
613 | /* | ||
614 | * AMD errata checking | ||
615 | * | ||
616 | * Errata are defined as arrays of ints using the AMD_LEGACY_ERRATUM() or | ||
617 | * AMD_OSVW_ERRATUM() macros. The latter is intended for newer errata that | ||
618 | * have an OSVW id assigned, which it takes as first argument. Both take a | ||
619 | * variable number of family-specific model-stepping ranges created by | ||
620 | * AMD_MODEL_RANGE(). Each erratum also has to be declared as extern const | ||
621 | * int[] in arch/x86/include/asm/processor.h. | ||
622 | * | ||
623 | * Example: | ||
624 | * | ||
625 | * const int amd_erratum_319[] = | ||
626 | * AMD_LEGACY_ERRATUM(AMD_MODEL_RANGE(0x10, 0x2, 0x1, 0x4, 0x2), | ||
627 | * AMD_MODEL_RANGE(0x10, 0x8, 0x0, 0x8, 0x0), | ||
628 | * AMD_MODEL_RANGE(0x10, 0x9, 0x0, 0x9, 0x0)); | ||
629 | */ | ||
630 | |||
631 | const int amd_erratum_400[] = | ||
632 | AMD_OSVW_ERRATUM(1, AMD_MODEL_RANGE(0xf, 0x41, 0x2, 0xff, 0xf), | ||
633 | AMD_MODEL_RANGE(0x10, 0x2, 0x1, 0xff, 0xf)); | ||
634 | EXPORT_SYMBOL_GPL(amd_erratum_400); | ||
635 | |||
636 | const int amd_erratum_383[] = | ||
637 | AMD_OSVW_ERRATUM(3, AMD_MODEL_RANGE(0x10, 0, 0, 0xff, 0xf)); | ||
638 | EXPORT_SYMBOL_GPL(amd_erratum_383); | ||
639 | |||
640 | bool cpu_has_amd_erratum(const int *erratum) | ||
641 | { | ||
642 | struct cpuinfo_x86 *cpu = ¤t_cpu_data; | ||
643 | int osvw_id = *erratum++; | ||
644 | u32 range; | ||
645 | u32 ms; | ||
646 | |||
647 | /* | ||
648 | * If called early enough that current_cpu_data hasn't been initialized | ||
649 | * yet, fall back to boot_cpu_data. | ||
650 | */ | ||
651 | if (cpu->x86 == 0) | ||
652 | cpu = &boot_cpu_data; | ||
653 | |||
654 | if (cpu->x86_vendor != X86_VENDOR_AMD) | ||
655 | return false; | ||
656 | |||
657 | if (osvw_id >= 0 && osvw_id < 65536 && | ||
658 | cpu_has(cpu, X86_FEATURE_OSVW)) { | ||
659 | u64 osvw_len; | ||
660 | |||
661 | rdmsrl(MSR_AMD64_OSVW_ID_LENGTH, osvw_len); | ||
662 | if (osvw_id < osvw_len) { | ||
663 | u64 osvw_bits; | ||
664 | |||
665 | rdmsrl(MSR_AMD64_OSVW_STATUS + (osvw_id >> 6), | ||
666 | osvw_bits); | ||
667 | return osvw_bits & (1ULL << (osvw_id & 0x3f)); | ||
668 | } | ||
669 | } | ||
670 | |||
671 | /* OSVW unavailable or ID unknown, match family-model-stepping range */ | ||
672 | ms = (cpu->x86_model << 4) | cpu->x86_mask; | ||
673 | while ((range = *erratum++)) | ||
674 | if ((cpu->x86 == AMD_MODEL_RANGE_FAMILY(range)) && | ||
675 | (ms >= AMD_MODEL_RANGE_START(range)) && | ||
676 | (ms <= AMD_MODEL_RANGE_END(range))) | ||
677 | return true; | ||
678 | |||
679 | return false; | ||
680 | } | ||
681 | |||
682 | EXPORT_SYMBOL_GPL(cpu_has_amd_erratum); | ||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 68e4a6f2211e..490dac63c2d2 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -140,10 +140,18 @@ EXPORT_PER_CPU_SYMBOL_GPL(gdt_page); | |||
140 | static int __init x86_xsave_setup(char *s) | 140 | static int __init x86_xsave_setup(char *s) |
141 | { | 141 | { |
142 | setup_clear_cpu_cap(X86_FEATURE_XSAVE); | 142 | setup_clear_cpu_cap(X86_FEATURE_XSAVE); |
143 | setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT); | ||
143 | return 1; | 144 | return 1; |
144 | } | 145 | } |
145 | __setup("noxsave", x86_xsave_setup); | 146 | __setup("noxsave", x86_xsave_setup); |
146 | 147 | ||
148 | static int __init x86_xsaveopt_setup(char *s) | ||
149 | { | ||
150 | setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT); | ||
151 | return 1; | ||
152 | } | ||
153 | __setup("noxsaveopt", x86_xsaveopt_setup); | ||
154 | |||
147 | #ifdef CONFIG_X86_32 | 155 | #ifdef CONFIG_X86_32 |
148 | static int cachesize_override __cpuinitdata = -1; | 156 | static int cachesize_override __cpuinitdata = -1; |
149 | static int disable_x86_serial_nr __cpuinitdata = 1; | 157 | static int disable_x86_serial_nr __cpuinitdata = 1; |
@@ -551,6 +559,16 @@ static void __cpuinit get_cpu_cap(struct cpuinfo_x86 *c) | |||
551 | c->x86_capability[4] = excap; | 559 | c->x86_capability[4] = excap; |
552 | } | 560 | } |
553 | 561 | ||
562 | /* Additional Intel-defined flags: level 0x00000007 */ | ||
563 | if (c->cpuid_level >= 0x00000007) { | ||
564 | u32 eax, ebx, ecx, edx; | ||
565 | |||
566 | cpuid_count(0x00000007, 0, &eax, &ebx, &ecx, &edx); | ||
567 | |||
568 | if (eax > 0) | ||
569 | c->x86_capability[9] = ebx; | ||
570 | } | ||
571 | |||
554 | /* AMD-defined flags: level 0x80000001 */ | 572 | /* AMD-defined flags: level 0x80000001 */ |
555 | xlvl = cpuid_eax(0x80000000); | 573 | xlvl = cpuid_eax(0x80000000); |
556 | c->extended_cpuid_level = xlvl; | 574 | c->extended_cpuid_level = xlvl; |
@@ -576,6 +594,7 @@ static void __cpuinit get_cpu_cap(struct cpuinfo_x86 *c) | |||
576 | if (c->extended_cpuid_level >= 0x80000007) | 594 | if (c->extended_cpuid_level >= 0x80000007) |
577 | c->x86_power = cpuid_edx(0x80000007); | 595 | c->x86_power = cpuid_edx(0x80000007); |
578 | 596 | ||
597 | init_scattered_cpuid_features(c); | ||
579 | } | 598 | } |
580 | 599 | ||
581 | static void __cpuinit identify_cpu_without_cpuid(struct cpuinfo_x86 *c) | 600 | static void __cpuinit identify_cpu_without_cpuid(struct cpuinfo_x86 *c) |
@@ -731,7 +750,6 @@ static void __cpuinit generic_identify(struct cpuinfo_x86 *c) | |||
731 | 750 | ||
732 | get_model_name(c); /* Default name */ | 751 | get_model_name(c); /* Default name */ |
733 | 752 | ||
734 | init_scattered_cpuid_features(c); | ||
735 | detect_nopl(c); | 753 | detect_nopl(c); |
736 | } | 754 | } |
737 | 755 | ||
@@ -1192,6 +1210,7 @@ void __cpuinit cpu_init(void) | |||
1192 | dbg_restore_debug_regs(); | 1210 | dbg_restore_debug_regs(); |
1193 | 1211 | ||
1194 | fpu_init(); | 1212 | fpu_init(); |
1213 | xsave_init(); | ||
1195 | 1214 | ||
1196 | raw_local_save_flags(kernel_eflags); | 1215 | raw_local_save_flags(kernel_eflags); |
1197 | 1216 | ||
@@ -1252,12 +1271,7 @@ void __cpuinit cpu_init(void) | |||
1252 | clear_used_math(); | 1271 | clear_used_math(); |
1253 | mxcsr_feature_mask_init(); | 1272 | mxcsr_feature_mask_init(); |
1254 | 1273 | ||
1255 | /* | 1274 | fpu_init(); |
1256 | * Boot processor to setup the FP and extended state context info. | ||
1257 | */ | ||
1258 | if (smp_processor_id() == boot_cpu_id) | ||
1259 | init_thread_xstate(); | ||
1260 | |||
1261 | xsave_init(); | 1275 | xsave_init(); |
1262 | } | 1276 | } |
1263 | #endif | 1277 | #endif |
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index 246cd3afbb5f..cd8da247dda1 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
@@ -72,7 +72,7 @@ struct acpi_cpufreq_data { | |||
72 | static DEFINE_PER_CPU(struct acpi_cpufreq_data *, acfreq_data); | 72 | static DEFINE_PER_CPU(struct acpi_cpufreq_data *, acfreq_data); |
73 | 73 | ||
74 | /* acpi_perf_data is a pointer to percpu data. */ | 74 | /* acpi_perf_data is a pointer to percpu data. */ |
75 | static struct acpi_processor_performance *acpi_perf_data; | 75 | static struct acpi_processor_performance __percpu *acpi_perf_data; |
76 | 76 | ||
77 | static struct cpufreq_driver acpi_cpufreq_driver; | 77 | static struct cpufreq_driver acpi_cpufreq_driver; |
78 | 78 | ||
diff --git a/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c index a36de5bbb622..994230d4dc4e 100644 --- a/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c | |||
@@ -110,7 +110,7 @@ struct pcc_cpu { | |||
110 | u32 output_offset; | 110 | u32 output_offset; |
111 | }; | 111 | }; |
112 | 112 | ||
113 | static struct pcc_cpu *pcc_cpu_info; | 113 | static struct pcc_cpu __percpu *pcc_cpu_info; |
114 | 114 | ||
115 | static int pcc_cpufreq_verify(struct cpufreq_policy *policy) | 115 | static int pcc_cpufreq_verify(struct cpufreq_policy *policy) |
116 | { | 116 | { |
diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c index dd531cc56a8f..8095f8611f8a 100644 --- a/arch/x86/kernel/cpu/hypervisor.c +++ b/arch/x86/kernel/cpu/hypervisor.c | |||
@@ -34,6 +34,9 @@ static const __initconst struct hypervisor_x86 * const hypervisors[] = | |||
34 | { | 34 | { |
35 | &x86_hyper_vmware, | 35 | &x86_hyper_vmware, |
36 | &x86_hyper_ms_hyperv, | 36 | &x86_hyper_ms_hyperv, |
37 | #ifdef CONFIG_XEN_PVHVM | ||
38 | &x86_hyper_xen_hvm, | ||
39 | #endif | ||
37 | }; | 40 | }; |
38 | 41 | ||
39 | const struct hypervisor_x86 *x86_hyper; | 42 | const struct hypervisor_x86 *x86_hyper; |
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index 33eae2062cf5..898c2f4eab88 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c | |||
@@ -347,8 +347,8 @@ static struct amd_l3_cache * __cpuinit amd_init_l3_cache(int node) | |||
347 | return l3; | 347 | return l3; |
348 | } | 348 | } |
349 | 349 | ||
350 | static void __cpuinit | 350 | static void __cpuinit amd_check_l3_disable(struct _cpuid4_info_regs *this_leaf, |
351 | amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf) | 351 | int index) |
352 | { | 352 | { |
353 | int node; | 353 | int node; |
354 | 354 | ||
@@ -396,20 +396,39 @@ amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf) | |||
396 | this_leaf->l3 = l3_caches[node]; | 396 | this_leaf->l3 = l3_caches[node]; |
397 | } | 397 | } |
398 | 398 | ||
399 | /* | ||
400 | * check whether a slot used for disabling an L3 index is occupied. | ||
401 | * @l3: L3 cache descriptor | ||
402 | * @slot: slot number (0..1) | ||
403 | * | ||
404 | * @returns: the disabled index if used or negative value if slot free. | ||
405 | */ | ||
406 | int amd_get_l3_disable_slot(struct amd_l3_cache *l3, unsigned slot) | ||
407 | { | ||
408 | unsigned int reg = 0; | ||
409 | |||
410 | pci_read_config_dword(l3->dev, 0x1BC + slot * 4, ®); | ||
411 | |||
412 | /* check whether this slot is activated already */ | ||
413 | if (reg & (3UL << 30)) | ||
414 | return reg & 0xfff; | ||
415 | |||
416 | return -1; | ||
417 | } | ||
418 | |||
399 | static ssize_t show_cache_disable(struct _cpuid4_info *this_leaf, char *buf, | 419 | static ssize_t show_cache_disable(struct _cpuid4_info *this_leaf, char *buf, |
400 | unsigned int slot) | 420 | unsigned int slot) |
401 | { | 421 | { |
402 | struct pci_dev *dev = this_leaf->l3->dev; | 422 | int index; |
403 | unsigned int reg = 0; | ||
404 | 423 | ||
405 | if (!this_leaf->l3 || !this_leaf->l3->can_disable) | 424 | if (!this_leaf->l3 || !this_leaf->l3->can_disable) |
406 | return -EINVAL; | 425 | return -EINVAL; |
407 | 426 | ||
408 | if (!dev) | 427 | index = amd_get_l3_disable_slot(this_leaf->l3, slot); |
409 | return -EINVAL; | 428 | if (index >= 0) |
429 | return sprintf(buf, "%d\n", index); | ||
410 | 430 | ||
411 | pci_read_config_dword(dev, 0x1BC + slot * 4, ®); | 431 | return sprintf(buf, "FREE\n"); |
412 | return sprintf(buf, "0x%08x\n", reg); | ||
413 | } | 432 | } |
414 | 433 | ||
415 | #define SHOW_CACHE_DISABLE(slot) \ | 434 | #define SHOW_CACHE_DISABLE(slot) \ |
@@ -451,37 +470,74 @@ static void amd_l3_disable_index(struct amd_l3_cache *l3, int cpu, | |||
451 | } | 470 | } |
452 | } | 471 | } |
453 | 472 | ||
454 | 473 | /* | |
455 | static ssize_t store_cache_disable(struct _cpuid4_info *this_leaf, | 474 | * disable a L3 cache index by using a disable-slot |
456 | const char *buf, size_t count, | 475 | * |
457 | unsigned int slot) | 476 | * @l3: L3 cache descriptor |
477 | * @cpu: A CPU on the node containing the L3 cache | ||
478 | * @slot: slot number (0..1) | ||
479 | * @index: index to disable | ||
480 | * | ||
481 | * @return: 0 on success, error status on failure | ||
482 | */ | ||
483 | int amd_set_l3_disable_slot(struct amd_l3_cache *l3, int cpu, unsigned slot, | ||
484 | unsigned long index) | ||
458 | { | 485 | { |
459 | struct pci_dev *dev = this_leaf->l3->dev; | 486 | int ret = 0; |
460 | int cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map)); | ||
461 | unsigned long val = 0; | ||
462 | 487 | ||
463 | #define SUBCACHE_MASK (3UL << 20) | 488 | #define SUBCACHE_MASK (3UL << 20) |
464 | #define SUBCACHE_INDEX 0xfff | 489 | #define SUBCACHE_INDEX 0xfff |
465 | 490 | ||
466 | if (!this_leaf->l3 || !this_leaf->l3->can_disable) | 491 | /* |
492 | * check whether this slot is already used or | ||
493 | * the index is already disabled | ||
494 | */ | ||
495 | ret = amd_get_l3_disable_slot(l3, slot); | ||
496 | if (ret >= 0) | ||
467 | return -EINVAL; | 497 | return -EINVAL; |
468 | 498 | ||
499 | /* | ||
500 | * check whether the other slot has disabled the | ||
501 | * same index already | ||
502 | */ | ||
503 | if (index == amd_get_l3_disable_slot(l3, !slot)) | ||
504 | return -EINVAL; | ||
505 | |||
506 | /* do not allow writes outside of allowed bits */ | ||
507 | if ((index & ~(SUBCACHE_MASK | SUBCACHE_INDEX)) || | ||
508 | ((index & SUBCACHE_INDEX) > l3->indices)) | ||
509 | return -EINVAL; | ||
510 | |||
511 | amd_l3_disable_index(l3, cpu, slot, index); | ||
512 | |||
513 | return 0; | ||
514 | } | ||
515 | |||
516 | static ssize_t store_cache_disable(struct _cpuid4_info *this_leaf, | ||
517 | const char *buf, size_t count, | ||
518 | unsigned int slot) | ||
519 | { | ||
520 | unsigned long val = 0; | ||
521 | int cpu, err = 0; | ||
522 | |||
469 | if (!capable(CAP_SYS_ADMIN)) | 523 | if (!capable(CAP_SYS_ADMIN)) |
470 | return -EPERM; | 524 | return -EPERM; |
471 | 525 | ||
472 | if (!dev) | 526 | if (!this_leaf->l3 || !this_leaf->l3->can_disable) |
473 | return -EINVAL; | 527 | return -EINVAL; |
474 | 528 | ||
475 | if (strict_strtoul(buf, 10, &val) < 0) | 529 | cpu = cpumask_first(to_cpumask(this_leaf->shared_cpu_map)); |
476 | return -EINVAL; | ||
477 | 530 | ||
478 | /* do not allow writes outside of allowed bits */ | 531 | if (strict_strtoul(buf, 10, &val) < 0) |
479 | if ((val & ~(SUBCACHE_MASK | SUBCACHE_INDEX)) || | ||
480 | ((val & SUBCACHE_INDEX) > this_leaf->l3->indices)) | ||
481 | return -EINVAL; | 532 | return -EINVAL; |
482 | 533 | ||
483 | amd_l3_disable_index(this_leaf->l3, cpu, slot, val); | 534 | err = amd_set_l3_disable_slot(this_leaf->l3, cpu, slot, val); |
484 | 535 | if (err) { | |
536 | if (err == -EEXIST) | ||
537 | printk(KERN_WARNING "L3 disable slot %d in use!\n", | ||
538 | slot); | ||
539 | return err; | ||
540 | } | ||
485 | return count; | 541 | return count; |
486 | } | 542 | } |
487 | 543 | ||
@@ -502,7 +558,7 @@ static struct _cache_attr cache_disable_1 = __ATTR(cache_disable_1, 0644, | |||
502 | 558 | ||
503 | #else /* CONFIG_CPU_SUP_AMD */ | 559 | #else /* CONFIG_CPU_SUP_AMD */ |
504 | static void __cpuinit | 560 | static void __cpuinit |
505 | amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf) | 561 | amd_check_l3_disable(struct _cpuid4_info_regs *this_leaf, int index) |
506 | { | 562 | { |
507 | }; | 563 | }; |
508 | #endif /* CONFIG_CPU_SUP_AMD */ | 564 | #endif /* CONFIG_CPU_SUP_AMD */ |
@@ -518,7 +574,7 @@ __cpuinit cpuid4_cache_lookup_regs(int index, | |||
518 | 574 | ||
519 | if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) { | 575 | if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) { |
520 | amd_cpuid4(index, &eax, &ebx, &ecx); | 576 | amd_cpuid4(index, &eax, &ebx, &ecx); |
521 | amd_check_l3_disable(index, this_leaf); | 577 | amd_check_l3_disable(this_leaf, index); |
522 | } else { | 578 | } else { |
523 | cpuid_count(4, index, &eax.full, &ebx.full, &ecx.full, &edx); | 579 | cpuid_count(4, index, &eax.full, &ebx.full, &ecx.full, &edx); |
524 | } | 580 | } |
diff --git a/arch/x86/kernel/cpu/mcheck/mce-apei.c b/arch/x86/kernel/cpu/mcheck/mce-apei.c index 745b54f9be89..8209472b27a5 100644 --- a/arch/x86/kernel/cpu/mcheck/mce-apei.c +++ b/arch/x86/kernel/cpu/mcheck/mce-apei.c | |||
@@ -80,7 +80,7 @@ int apei_write_mce(struct mce *m) | |||
80 | rcd.hdr.revision = CPER_RECORD_REV; | 80 | rcd.hdr.revision = CPER_RECORD_REV; |
81 | rcd.hdr.signature_end = CPER_SIG_END; | 81 | rcd.hdr.signature_end = CPER_SIG_END; |
82 | rcd.hdr.section_count = 1; | 82 | rcd.hdr.section_count = 1; |
83 | rcd.hdr.error_severity = CPER_SER_FATAL; | 83 | rcd.hdr.error_severity = CPER_SEV_FATAL; |
84 | /* timestamp, platform_id, partition_id are all invalid */ | 84 | /* timestamp, platform_id, partition_id are all invalid */ |
85 | rcd.hdr.validation_bits = 0; | 85 | rcd.hdr.validation_bits = 0; |
86 | rcd.hdr.record_length = sizeof(rcd); | 86 | rcd.hdr.record_length = sizeof(rcd); |
@@ -96,7 +96,7 @@ int apei_write_mce(struct mce *m) | |||
96 | rcd.sec_hdr.validation_bits = 0; | 96 | rcd.sec_hdr.validation_bits = 0; |
97 | rcd.sec_hdr.flags = CPER_SEC_PRIMARY; | 97 | rcd.sec_hdr.flags = CPER_SEC_PRIMARY; |
98 | rcd.sec_hdr.section_type = CPER_SECTION_TYPE_MCE; | 98 | rcd.sec_hdr.section_type = CPER_SECTION_TYPE_MCE; |
99 | rcd.sec_hdr.section_severity = CPER_SER_FATAL; | 99 | rcd.sec_hdr.section_severity = CPER_SEV_FATAL; |
100 | 100 | ||
101 | memcpy(&rcd.mce, m, sizeof(*m)); | 101 | memcpy(&rcd.mce, m, sizeof(*m)); |
102 | 102 | ||
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 1970ef911c99..ed41562909fe 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -51,7 +51,7 @@ | |||
51 | static DEFINE_MUTEX(mce_read_mutex); | 51 | static DEFINE_MUTEX(mce_read_mutex); |
52 | 52 | ||
53 | #define rcu_dereference_check_mce(p) \ | 53 | #define rcu_dereference_check_mce(p) \ |
54 | rcu_dereference_check((p), \ | 54 | rcu_dereference_index_check((p), \ |
55 | rcu_read_lock_sched_held() || \ | 55 | rcu_read_lock_sched_held() || \ |
56 | lockdep_is_held(&mce_read_mutex)) | 56 | lockdep_is_held(&mce_read_mutex)) |
57 | 57 | ||
@@ -107,8 +107,8 @@ EXPORT_SYMBOL_GPL(x86_mce_decoder_chain); | |||
107 | static int default_decode_mce(struct notifier_block *nb, unsigned long val, | 107 | static int default_decode_mce(struct notifier_block *nb, unsigned long val, |
108 | void *data) | 108 | void *data) |
109 | { | 109 | { |
110 | pr_emerg("No human readable MCE decoding support on this CPU type.\n"); | 110 | pr_emerg(HW_ERR "No human readable MCE decoding support on this CPU type.\n"); |
111 | pr_emerg("Run the message through 'mcelog --ascii' to decode.\n"); | 111 | pr_emerg(HW_ERR "Run the message through 'mcelog --ascii' to decode.\n"); |
112 | 112 | ||
113 | return NOTIFY_STOP; | 113 | return NOTIFY_STOP; |
114 | } | 114 | } |
@@ -211,11 +211,11 @@ void mce_log(struct mce *mce) | |||
211 | 211 | ||
212 | static void print_mce(struct mce *m) | 212 | static void print_mce(struct mce *m) |
213 | { | 213 | { |
214 | pr_emerg("CPU %d: Machine Check Exception: %16Lx Bank %d: %016Lx\n", | 214 | pr_emerg(HW_ERR "CPU %d: Machine Check Exception: %Lx Bank %d: %016Lx\n", |
215 | m->extcpu, m->mcgstatus, m->bank, m->status); | 215 | m->extcpu, m->mcgstatus, m->bank, m->status); |
216 | 216 | ||
217 | if (m->ip) { | 217 | if (m->ip) { |
218 | pr_emerg("RIP%s %02x:<%016Lx> ", | 218 | pr_emerg(HW_ERR "RIP%s %02x:<%016Lx> ", |
219 | !(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "", | 219 | !(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "", |
220 | m->cs, m->ip); | 220 | m->cs, m->ip); |
221 | 221 | ||
@@ -224,14 +224,14 @@ static void print_mce(struct mce *m) | |||
224 | pr_cont("\n"); | 224 | pr_cont("\n"); |
225 | } | 225 | } |
226 | 226 | ||
227 | pr_emerg("TSC %llx ", m->tsc); | 227 | pr_emerg(HW_ERR "TSC %llx ", m->tsc); |
228 | if (m->addr) | 228 | if (m->addr) |
229 | pr_cont("ADDR %llx ", m->addr); | 229 | pr_cont("ADDR %llx ", m->addr); |
230 | if (m->misc) | 230 | if (m->misc) |
231 | pr_cont("MISC %llx ", m->misc); | 231 | pr_cont("MISC %llx ", m->misc); |
232 | 232 | ||
233 | pr_cont("\n"); | 233 | pr_cont("\n"); |
234 | pr_emerg("PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n", | 234 | pr_emerg(HW_ERR "PROCESSOR %u:%x TIME %llu SOCKET %u APIC %x\n", |
235 | m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid); | 235 | m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid); |
236 | 236 | ||
237 | /* | 237 | /* |
@@ -241,16 +241,6 @@ static void print_mce(struct mce *m) | |||
241 | atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m); | 241 | atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m); |
242 | } | 242 | } |
243 | 243 | ||
244 | static void print_mce_head(void) | ||
245 | { | ||
246 | pr_emerg("\nHARDWARE ERROR\n"); | ||
247 | } | ||
248 | |||
249 | static void print_mce_tail(void) | ||
250 | { | ||
251 | pr_emerg("This is not a software problem!\n"); | ||
252 | } | ||
253 | |||
254 | #define PANIC_TIMEOUT 5 /* 5 seconds */ | 244 | #define PANIC_TIMEOUT 5 /* 5 seconds */ |
255 | 245 | ||
256 | static atomic_t mce_paniced; | 246 | static atomic_t mce_paniced; |
@@ -291,7 +281,6 @@ static void mce_panic(char *msg, struct mce *final, char *exp) | |||
291 | if (atomic_inc_return(&mce_fake_paniced) > 1) | 281 | if (atomic_inc_return(&mce_fake_paniced) > 1) |
292 | return; | 282 | return; |
293 | } | 283 | } |
294 | print_mce_head(); | ||
295 | /* First print corrected ones that are still unlogged */ | 284 | /* First print corrected ones that are still unlogged */ |
296 | for (i = 0; i < MCE_LOG_LEN; i++) { | 285 | for (i = 0; i < MCE_LOG_LEN; i++) { |
297 | struct mce *m = &mcelog.entry[i]; | 286 | struct mce *m = &mcelog.entry[i]; |
@@ -322,16 +311,15 @@ static void mce_panic(char *msg, struct mce *final, char *exp) | |||
322 | apei_err = apei_write_mce(final); | 311 | apei_err = apei_write_mce(final); |
323 | } | 312 | } |
324 | if (cpu_missing) | 313 | if (cpu_missing) |
325 | printk(KERN_EMERG "Some CPUs didn't answer in synchronization\n"); | 314 | pr_emerg(HW_ERR "Some CPUs didn't answer in synchronization\n"); |
326 | print_mce_tail(); | ||
327 | if (exp) | 315 | if (exp) |
328 | printk(KERN_EMERG "Machine check: %s\n", exp); | 316 | pr_emerg(HW_ERR "Machine check: %s\n", exp); |
329 | if (!fake_panic) { | 317 | if (!fake_panic) { |
330 | if (panic_timeout == 0) | 318 | if (panic_timeout == 0) |
331 | panic_timeout = mce_panic_timeout; | 319 | panic_timeout = mce_panic_timeout; |
332 | panic(msg); | 320 | panic(msg); |
333 | } else | 321 | } else |
334 | printk(KERN_EMERG "Fake kernel panic: %s\n", msg); | 322 | pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg); |
335 | } | 323 | } |
336 | 324 | ||
337 | /* Support code for software error injection */ | 325 | /* Support code for software error injection */ |
@@ -1221,7 +1209,7 @@ int mce_notify_irq(void) | |||
1221 | schedule_work(&mce_trigger_work); | 1209 | schedule_work(&mce_trigger_work); |
1222 | 1210 | ||
1223 | if (__ratelimit(&ratelimit)) | 1211 | if (__ratelimit(&ratelimit)) |
1224 | printk(KERN_INFO "Machine check events logged\n"); | 1212 | pr_info(HW_ERR "Machine check events logged\n"); |
1225 | 1213 | ||
1226 | return 1; | 1214 | return 1; |
1227 | } | 1215 | } |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_intel.c b/arch/x86/kernel/cpu/mcheck/mce_intel.c index 62b48e40920a..6fcd0936194f 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_intel.c +++ b/arch/x86/kernel/cpu/mcheck/mce_intel.c | |||
@@ -95,19 +95,20 @@ static void cmci_discover(int banks, int boot) | |||
95 | rdmsrl(MSR_IA32_MCx_CTL2(i), val); | 95 | rdmsrl(MSR_IA32_MCx_CTL2(i), val); |
96 | 96 | ||
97 | /* Already owned by someone else? */ | 97 | /* Already owned by someone else? */ |
98 | if (val & CMCI_EN) { | 98 | if (val & MCI_CTL2_CMCI_EN) { |
99 | if (test_and_clear_bit(i, owned) && !boot) | 99 | if (test_and_clear_bit(i, owned) && !boot) |
100 | print_update("SHD", &hdr, i); | 100 | print_update("SHD", &hdr, i); |
101 | __clear_bit(i, __get_cpu_var(mce_poll_banks)); | 101 | __clear_bit(i, __get_cpu_var(mce_poll_banks)); |
102 | continue; | 102 | continue; |
103 | } | 103 | } |
104 | 104 | ||
105 | val |= CMCI_EN | CMCI_THRESHOLD; | 105 | val &= ~MCI_CTL2_CMCI_THRESHOLD_MASK; |
106 | val |= MCI_CTL2_CMCI_EN | CMCI_THRESHOLD; | ||
106 | wrmsrl(MSR_IA32_MCx_CTL2(i), val); | 107 | wrmsrl(MSR_IA32_MCx_CTL2(i), val); |
107 | rdmsrl(MSR_IA32_MCx_CTL2(i), val); | 108 | rdmsrl(MSR_IA32_MCx_CTL2(i), val); |
108 | 109 | ||
109 | /* Did the enable bit stick? -- the bank supports CMCI */ | 110 | /* Did the enable bit stick? -- the bank supports CMCI */ |
110 | if (val & CMCI_EN) { | 111 | if (val & MCI_CTL2_CMCI_EN) { |
111 | if (!test_and_set_bit(i, owned) && !boot) | 112 | if (!test_and_set_bit(i, owned) && !boot) |
112 | print_update("CMCI", &hdr, i); | 113 | print_update("CMCI", &hdr, i); |
113 | __clear_bit(i, __get_cpu_var(mce_poll_banks)); | 114 | __clear_bit(i, __get_cpu_var(mce_poll_banks)); |
@@ -155,7 +156,7 @@ void cmci_clear(void) | |||
155 | continue; | 156 | continue; |
156 | /* Disable CMCI */ | 157 | /* Disable CMCI */ |
157 | rdmsrl(MSR_IA32_MCx_CTL2(i), val); | 158 | rdmsrl(MSR_IA32_MCx_CTL2(i), val); |
158 | val &= ~(CMCI_EN|CMCI_THRESHOLD_MASK); | 159 | val &= ~(MCI_CTL2_CMCI_EN|MCI_CTL2_CMCI_THRESHOLD_MASK); |
159 | wrmsrl(MSR_IA32_MCx_CTL2(i), val); | 160 | wrmsrl(MSR_IA32_MCx_CTL2(i), val); |
160 | __clear_bit(i, __get_cpu_var(mce_banks_owned)); | 161 | __clear_bit(i, __get_cpu_var(mce_banks_owned)); |
161 | } | 162 | } |
diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c index e1a0a3bf9716..c2a8b26d4fea 100644 --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c | |||
@@ -34,15 +34,25 @@ | |||
34 | /* How long to wait between reporting thermal events */ | 34 | /* How long to wait between reporting thermal events */ |
35 | #define CHECK_INTERVAL (300 * HZ) | 35 | #define CHECK_INTERVAL (300 * HZ) |
36 | 36 | ||
37 | #define THERMAL_THROTTLING_EVENT 0 | ||
38 | #define POWER_LIMIT_EVENT 1 | ||
39 | |||
37 | /* | 40 | /* |
38 | * Current thermal throttling state: | 41 | * Current thermal event state: |
39 | */ | 42 | */ |
40 | struct thermal_state { | 43 | struct _thermal_state { |
41 | bool is_throttled; | 44 | bool new_event; |
42 | 45 | int event; | |
43 | u64 next_check; | 46 | u64 next_check; |
44 | unsigned long throttle_count; | 47 | unsigned long count; |
45 | unsigned long last_throttle_count; | 48 | unsigned long last_count; |
49 | }; | ||
50 | |||
51 | struct thermal_state { | ||
52 | struct _thermal_state core_throttle; | ||
53 | struct _thermal_state core_power_limit; | ||
54 | struct _thermal_state package_throttle; | ||
55 | struct _thermal_state package_power_limit; | ||
46 | }; | 56 | }; |
47 | 57 | ||
48 | static DEFINE_PER_CPU(struct thermal_state, thermal_state); | 58 | static DEFINE_PER_CPU(struct thermal_state, thermal_state); |
@@ -53,11 +63,13 @@ static u32 lvtthmr_init __read_mostly; | |||
53 | 63 | ||
54 | #ifdef CONFIG_SYSFS | 64 | #ifdef CONFIG_SYSFS |
55 | #define define_therm_throt_sysdev_one_ro(_name) \ | 65 | #define define_therm_throt_sysdev_one_ro(_name) \ |
56 | static SYSDEV_ATTR(_name, 0444, therm_throt_sysdev_show_##_name, NULL) | 66 | static SYSDEV_ATTR(_name, 0444, \ |
67 | therm_throt_sysdev_show_##_name, \ | ||
68 | NULL) \ | ||
57 | 69 | ||
58 | #define define_therm_throt_sysdev_show_func(name) \ | 70 | #define define_therm_throt_sysdev_show_func(event, name) \ |
59 | \ | 71 | \ |
60 | static ssize_t therm_throt_sysdev_show_##name( \ | 72 | static ssize_t therm_throt_sysdev_show_##event##_##name( \ |
61 | struct sys_device *dev, \ | 73 | struct sys_device *dev, \ |
62 | struct sysdev_attribute *attr, \ | 74 | struct sysdev_attribute *attr, \ |
63 | char *buf) \ | 75 | char *buf) \ |
@@ -66,30 +78,42 @@ static ssize_t therm_throt_sysdev_show_##name( \ | |||
66 | ssize_t ret; \ | 78 | ssize_t ret; \ |
67 | \ | 79 | \ |
68 | preempt_disable(); /* CPU hotplug */ \ | 80 | preempt_disable(); /* CPU hotplug */ \ |
69 | if (cpu_online(cpu)) \ | 81 | if (cpu_online(cpu)) { \ |
70 | ret = sprintf(buf, "%lu\n", \ | 82 | ret = sprintf(buf, "%lu\n", \ |
71 | per_cpu(thermal_state, cpu).name); \ | 83 | per_cpu(thermal_state, cpu).event.name); \ |
72 | else \ | 84 | } else \ |
73 | ret = 0; \ | 85 | ret = 0; \ |
74 | preempt_enable(); \ | 86 | preempt_enable(); \ |
75 | \ | 87 | \ |
76 | return ret; \ | 88 | return ret; \ |
77 | } | 89 | } |
78 | 90 | ||
79 | define_therm_throt_sysdev_show_func(throttle_count); | 91 | define_therm_throt_sysdev_show_func(core_throttle, count); |
80 | define_therm_throt_sysdev_one_ro(throttle_count); | 92 | define_therm_throt_sysdev_one_ro(core_throttle_count); |
93 | |||
94 | define_therm_throt_sysdev_show_func(core_power_limit, count); | ||
95 | define_therm_throt_sysdev_one_ro(core_power_limit_count); | ||
96 | |||
97 | define_therm_throt_sysdev_show_func(package_throttle, count); | ||
98 | define_therm_throt_sysdev_one_ro(package_throttle_count); | ||
99 | |||
100 | define_therm_throt_sysdev_show_func(package_power_limit, count); | ||
101 | define_therm_throt_sysdev_one_ro(package_power_limit_count); | ||
81 | 102 | ||
82 | static struct attribute *thermal_throttle_attrs[] = { | 103 | static struct attribute *thermal_throttle_attrs[] = { |
83 | &attr_throttle_count.attr, | 104 | &attr_core_throttle_count.attr, |
84 | NULL | 105 | NULL |
85 | }; | 106 | }; |
86 | 107 | ||
87 | static struct attribute_group thermal_throttle_attr_group = { | 108 | static struct attribute_group thermal_attr_group = { |
88 | .attrs = thermal_throttle_attrs, | 109 | .attrs = thermal_throttle_attrs, |
89 | .name = "thermal_throttle" | 110 | .name = "thermal_throttle" |
90 | }; | 111 | }; |
91 | #endif /* CONFIG_SYSFS */ | 112 | #endif /* CONFIG_SYSFS */ |
92 | 113 | ||
114 | #define CORE_LEVEL 0 | ||
115 | #define PACKAGE_LEVEL 1 | ||
116 | |||
93 | /*** | 117 | /*** |
94 | * therm_throt_process - Process thermal throttling event from interrupt | 118 | * therm_throt_process - Process thermal throttling event from interrupt |
95 | * @curr: Whether the condition is current or not (boolean), since the | 119 | * @curr: Whether the condition is current or not (boolean), since the |
@@ -106,39 +130,70 @@ static struct attribute_group thermal_throttle_attr_group = { | |||
106 | * 1 : Event should be logged further, and a message has been | 130 | * 1 : Event should be logged further, and a message has been |
107 | * printed to the syslog. | 131 | * printed to the syslog. |
108 | */ | 132 | */ |
109 | static int therm_throt_process(bool is_throttled) | 133 | static int therm_throt_process(bool new_event, int event, int level) |
110 | { | 134 | { |
111 | struct thermal_state *state; | 135 | struct _thermal_state *state; |
112 | unsigned int this_cpu; | 136 | unsigned int this_cpu = smp_processor_id(); |
113 | bool was_throttled; | 137 | bool old_event; |
114 | u64 now; | 138 | u64 now; |
139 | struct thermal_state *pstate = &per_cpu(thermal_state, this_cpu); | ||
115 | 140 | ||
116 | this_cpu = smp_processor_id(); | ||
117 | now = get_jiffies_64(); | 141 | now = get_jiffies_64(); |
118 | state = &per_cpu(thermal_state, this_cpu); | 142 | if (level == CORE_LEVEL) { |
143 | if (event == THERMAL_THROTTLING_EVENT) | ||
144 | state = &pstate->core_throttle; | ||
145 | else if (event == POWER_LIMIT_EVENT) | ||
146 | state = &pstate->core_power_limit; | ||
147 | else | ||
148 | return 0; | ||
149 | } else if (level == PACKAGE_LEVEL) { | ||
150 | if (event == THERMAL_THROTTLING_EVENT) | ||
151 | state = &pstate->package_throttle; | ||
152 | else if (event == POWER_LIMIT_EVENT) | ||
153 | state = &pstate->package_power_limit; | ||
154 | else | ||
155 | return 0; | ||
156 | } else | ||
157 | return 0; | ||
119 | 158 | ||
120 | was_throttled = state->is_throttled; | 159 | old_event = state->new_event; |
121 | state->is_throttled = is_throttled; | 160 | state->new_event = new_event; |
122 | 161 | ||
123 | if (is_throttled) | 162 | if (new_event) |
124 | state->throttle_count++; | 163 | state->count++; |
125 | 164 | ||
126 | if (time_before64(now, state->next_check) && | 165 | if (time_before64(now, state->next_check) && |
127 | state->throttle_count != state->last_throttle_count) | 166 | state->count != state->last_count) |
128 | return 0; | 167 | return 0; |
129 | 168 | ||
130 | state->next_check = now + CHECK_INTERVAL; | 169 | state->next_check = now + CHECK_INTERVAL; |
131 | state->last_throttle_count = state->throttle_count; | 170 | state->last_count = state->count; |
132 | 171 | ||
133 | /* if we just entered the thermal event */ | 172 | /* if we just entered the thermal event */ |
134 | if (is_throttled) { | 173 | if (new_event) { |
135 | printk(KERN_CRIT "CPU%d: Temperature above threshold, cpu clock throttled (total events = %lu)\n", this_cpu, state->throttle_count); | 174 | if (event == THERMAL_THROTTLING_EVENT) |
175 | printk(KERN_CRIT "CPU%d: %s temperature above threshold, cpu clock throttled (total events = %lu)\n", | ||
176 | this_cpu, | ||
177 | level == CORE_LEVEL ? "Core" : "Package", | ||
178 | state->count); | ||
179 | else | ||
180 | printk(KERN_CRIT "CPU%d: %s power limit notification (total events = %lu)\n", | ||
181 | this_cpu, | ||
182 | level == CORE_LEVEL ? "Core" : "Package", | ||
183 | state->count); | ||
136 | 184 | ||
137 | add_taint(TAINT_MACHINE_CHECK); | 185 | add_taint(TAINT_MACHINE_CHECK); |
138 | return 1; | 186 | return 1; |
139 | } | 187 | } |
140 | if (was_throttled) { | 188 | if (old_event) { |
141 | printk(KERN_INFO "CPU%d: Temperature/speed normal\n", this_cpu); | 189 | if (event == THERMAL_THROTTLING_EVENT) |
190 | printk(KERN_INFO "CPU%d: %s temperature/speed normal\n", | ||
191 | this_cpu, | ||
192 | level == CORE_LEVEL ? "Core" : "Package"); | ||
193 | else | ||
194 | printk(KERN_INFO "CPU%d: %s power limit normal\n", | ||
195 | this_cpu, | ||
196 | level == CORE_LEVEL ? "Core" : "Package"); | ||
142 | return 1; | 197 | return 1; |
143 | } | 198 | } |
144 | 199 | ||
@@ -149,13 +204,32 @@ static int therm_throt_process(bool is_throttled) | |||
149 | /* Add/Remove thermal_throttle interface for CPU device: */ | 204 | /* Add/Remove thermal_throttle interface for CPU device: */ |
150 | static __cpuinit int thermal_throttle_add_dev(struct sys_device *sys_dev) | 205 | static __cpuinit int thermal_throttle_add_dev(struct sys_device *sys_dev) |
151 | { | 206 | { |
152 | return sysfs_create_group(&sys_dev->kobj, | 207 | int err; |
153 | &thermal_throttle_attr_group); | 208 | struct cpuinfo_x86 *c = &cpu_data(smp_processor_id()); |
209 | |||
210 | err = sysfs_create_group(&sys_dev->kobj, &thermal_attr_group); | ||
211 | if (err) | ||
212 | return err; | ||
213 | |||
214 | if (cpu_has(c, X86_FEATURE_PLN)) | ||
215 | err = sysfs_add_file_to_group(&sys_dev->kobj, | ||
216 | &attr_core_power_limit_count.attr, | ||
217 | thermal_attr_group.name); | ||
218 | if (cpu_has(c, X86_FEATURE_PTS)) | ||
219 | err = sysfs_add_file_to_group(&sys_dev->kobj, | ||
220 | &attr_package_throttle_count.attr, | ||
221 | thermal_attr_group.name); | ||
222 | if (cpu_has(c, X86_FEATURE_PLN)) | ||
223 | err = sysfs_add_file_to_group(&sys_dev->kobj, | ||
224 | &attr_package_power_limit_count.attr, | ||
225 | thermal_attr_group.name); | ||
226 | |||
227 | return err; | ||
154 | } | 228 | } |
155 | 229 | ||
156 | static __cpuinit void thermal_throttle_remove_dev(struct sys_device *sys_dev) | 230 | static __cpuinit void thermal_throttle_remove_dev(struct sys_device *sys_dev) |
157 | { | 231 | { |
158 | sysfs_remove_group(&sys_dev->kobj, &thermal_throttle_attr_group); | 232 | sysfs_remove_group(&sys_dev->kobj, &thermal_attr_group); |
159 | } | 233 | } |
160 | 234 | ||
161 | /* Mutex protecting device creation against CPU hotplug: */ | 235 | /* Mutex protecting device creation against CPU hotplug: */ |
@@ -226,14 +300,50 @@ device_initcall(thermal_throttle_init_device); | |||
226 | 300 | ||
227 | #endif /* CONFIG_SYSFS */ | 301 | #endif /* CONFIG_SYSFS */ |
228 | 302 | ||
303 | /* | ||
304 | * Set up the most two significant bit to notify mce log that this thermal | ||
305 | * event type. | ||
306 | * This is a temp solution. May be changed in the future with mce log | ||
307 | * infrasture. | ||
308 | */ | ||
309 | #define CORE_THROTTLED (0) | ||
310 | #define CORE_POWER_LIMIT ((__u64)1 << 62) | ||
311 | #define PACKAGE_THROTTLED ((__u64)2 << 62) | ||
312 | #define PACKAGE_POWER_LIMIT ((__u64)3 << 62) | ||
313 | |||
229 | /* Thermal transition interrupt handler */ | 314 | /* Thermal transition interrupt handler */ |
230 | static void intel_thermal_interrupt(void) | 315 | static void intel_thermal_interrupt(void) |
231 | { | 316 | { |
232 | __u64 msr_val; | 317 | __u64 msr_val; |
318 | struct cpuinfo_x86 *c = &cpu_data(smp_processor_id()); | ||
233 | 319 | ||
234 | rdmsrl(MSR_IA32_THERM_STATUS, msr_val); | 320 | rdmsrl(MSR_IA32_THERM_STATUS, msr_val); |
235 | if (therm_throt_process((msr_val & THERM_STATUS_PROCHOT) != 0)) | 321 | |
236 | mce_log_therm_throt_event(msr_val); | 322 | if (therm_throt_process(msr_val & THERM_STATUS_PROCHOT, |
323 | THERMAL_THROTTLING_EVENT, | ||
324 | CORE_LEVEL) != 0) | ||
325 | mce_log_therm_throt_event(CORE_THROTTLED | msr_val); | ||
326 | |||
327 | if (cpu_has(c, X86_FEATURE_PLN)) | ||
328 | if (therm_throt_process(msr_val & THERM_STATUS_POWER_LIMIT, | ||
329 | POWER_LIMIT_EVENT, | ||
330 | CORE_LEVEL) != 0) | ||
331 | mce_log_therm_throt_event(CORE_POWER_LIMIT | msr_val); | ||
332 | |||
333 | if (cpu_has(c, X86_FEATURE_PTS)) { | ||
334 | rdmsrl(MSR_IA32_PACKAGE_THERM_STATUS, msr_val); | ||
335 | if (therm_throt_process(msr_val & PACKAGE_THERM_STATUS_PROCHOT, | ||
336 | THERMAL_THROTTLING_EVENT, | ||
337 | PACKAGE_LEVEL) != 0) | ||
338 | mce_log_therm_throt_event(PACKAGE_THROTTLED | msr_val); | ||
339 | if (cpu_has(c, X86_FEATURE_PLN)) | ||
340 | if (therm_throt_process(msr_val & | ||
341 | PACKAGE_THERM_STATUS_POWER_LIMIT, | ||
342 | POWER_LIMIT_EVENT, | ||
343 | PACKAGE_LEVEL) != 0) | ||
344 | mce_log_therm_throt_event(PACKAGE_POWER_LIMIT | ||
345 | | msr_val); | ||
346 | } | ||
237 | } | 347 | } |
238 | 348 | ||
239 | static void unexpected_thermal_interrupt(void) | 349 | static void unexpected_thermal_interrupt(void) |
@@ -335,8 +445,26 @@ void intel_init_thermal(struct cpuinfo_x86 *c) | |||
335 | apic_write(APIC_LVTTHMR, h); | 445 | apic_write(APIC_LVTTHMR, h); |
336 | 446 | ||
337 | rdmsr(MSR_IA32_THERM_INTERRUPT, l, h); | 447 | rdmsr(MSR_IA32_THERM_INTERRUPT, l, h); |
338 | wrmsr(MSR_IA32_THERM_INTERRUPT, | 448 | if (cpu_has(c, X86_FEATURE_PLN)) |
339 | l | (THERM_INT_LOW_ENABLE | THERM_INT_HIGH_ENABLE), h); | 449 | wrmsr(MSR_IA32_THERM_INTERRUPT, |
450 | l | (THERM_INT_LOW_ENABLE | ||
451 | | THERM_INT_HIGH_ENABLE | THERM_INT_PLN_ENABLE), h); | ||
452 | else | ||
453 | wrmsr(MSR_IA32_THERM_INTERRUPT, | ||
454 | l | (THERM_INT_LOW_ENABLE | THERM_INT_HIGH_ENABLE), h); | ||
455 | |||
456 | if (cpu_has(c, X86_FEATURE_PTS)) { | ||
457 | rdmsr(MSR_IA32_PACKAGE_THERM_INTERRUPT, l, h); | ||
458 | if (cpu_has(c, X86_FEATURE_PLN)) | ||
459 | wrmsr(MSR_IA32_PACKAGE_THERM_INTERRUPT, | ||
460 | l | (PACKAGE_THERM_INT_LOW_ENABLE | ||
461 | | PACKAGE_THERM_INT_HIGH_ENABLE | ||
462 | | PACKAGE_THERM_INT_PLN_ENABLE), h); | ||
463 | else | ||
464 | wrmsr(MSR_IA32_PACKAGE_THERM_INTERRUPT, | ||
465 | l | (PACKAGE_THERM_INT_LOW_ENABLE | ||
466 | | PACKAGE_THERM_INT_HIGH_ENABLE), h); | ||
467 | } | ||
340 | 468 | ||
341 | smp_thermal_vector = intel_thermal_interrupt; | 469 | smp_thermal_vector = intel_thermal_interrupt; |
342 | 470 | ||
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 16f41bbe46b6..d944bf6c50e9 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/mshyperv.h> | 18 | #include <asm/mshyperv.h> |
19 | 19 | ||
20 | struct ms_hyperv_info ms_hyperv; | 20 | struct ms_hyperv_info ms_hyperv; |
21 | EXPORT_SYMBOL_GPL(ms_hyperv); | ||
21 | 22 | ||
22 | static bool __init ms_hyperv_platform(void) | 23 | static bool __init ms_hyperv_platform(void) |
23 | { | 24 | { |
diff --git a/arch/x86/kernel/cpu/mtrr/cleanup.c b/arch/x86/kernel/cpu/mtrr/cleanup.c index 06130b52f012..c5f59d071425 100644 --- a/arch/x86/kernel/cpu/mtrr/cleanup.c +++ b/arch/x86/kernel/cpu/mtrr/cleanup.c | |||
@@ -632,9 +632,9 @@ static void __init mtrr_print_out_one_result(int i) | |||
632 | unsigned long gran_base, chunk_base, lose_base; | 632 | unsigned long gran_base, chunk_base, lose_base; |
633 | char gran_factor, chunk_factor, lose_factor; | 633 | char gran_factor, chunk_factor, lose_factor; |
634 | 634 | ||
635 | gran_base = to_size_factor(result[i].gran_sizek, &gran_factor), | 635 | gran_base = to_size_factor(result[i].gran_sizek, &gran_factor); |
636 | chunk_base = to_size_factor(result[i].chunk_sizek, &chunk_factor), | 636 | chunk_base = to_size_factor(result[i].chunk_sizek, &chunk_factor); |
637 | lose_base = to_size_factor(result[i].lose_cover_sizek, &lose_factor), | 637 | lose_base = to_size_factor(result[i].lose_cover_sizek, &lose_factor); |
638 | 638 | ||
639 | pr_info("%sgran_size: %ld%c \tchunk_size: %ld%c \t", | 639 | pr_info("%sgran_size: %ld%c \tchunk_size: %ld%c \t", |
640 | result[i].bad ? "*BAD*" : " ", | 640 | result[i].bad ? "*BAD*" : " ", |
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c index fd31a441c61c..7d28d7d03885 100644 --- a/arch/x86/kernel/cpu/mtrr/generic.c +++ b/arch/x86/kernel/cpu/mtrr/generic.c | |||
@@ -433,13 +433,12 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, | |||
433 | { | 433 | { |
434 | unsigned int mask_lo, mask_hi, base_lo, base_hi; | 434 | unsigned int mask_lo, mask_hi, base_lo, base_hi; |
435 | unsigned int tmp, hi; | 435 | unsigned int tmp, hi; |
436 | int cpu; | ||
437 | 436 | ||
438 | /* | 437 | /* |
439 | * get_mtrr doesn't need to update mtrr_state, also it could be called | 438 | * get_mtrr doesn't need to update mtrr_state, also it could be called |
440 | * from any cpu, so try to print it out directly. | 439 | * from any cpu, so try to print it out directly. |
441 | */ | 440 | */ |
442 | cpu = get_cpu(); | 441 | get_cpu(); |
443 | 442 | ||
444 | rdmsr(MTRRphysMask_MSR(reg), mask_lo, mask_hi); | 443 | rdmsr(MTRRphysMask_MSR(reg), mask_lo, mask_hi); |
445 | 444 | ||
diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c index 79556bd9b602..01c0f3ee6cc3 100644 --- a/arch/x86/kernel/cpu/mtrr/main.c +++ b/arch/x86/kernel/cpu/mtrr/main.c | |||
@@ -35,6 +35,7 @@ | |||
35 | 35 | ||
36 | #include <linux/types.h> /* FIXME: kvm_para.h needs this */ | 36 | #include <linux/types.h> /* FIXME: kvm_para.h needs this */ |
37 | 37 | ||
38 | #include <linux/stop_machine.h> | ||
38 | #include <linux/kvm_para.h> | 39 | #include <linux/kvm_para.h> |
39 | #include <linux/uaccess.h> | 40 | #include <linux/uaccess.h> |
40 | #include <linux/module.h> | 41 | #include <linux/module.h> |
@@ -143,22 +144,28 @@ struct set_mtrr_data { | |||
143 | mtrr_type smp_type; | 144 | mtrr_type smp_type; |
144 | }; | 145 | }; |
145 | 146 | ||
147 | static DEFINE_PER_CPU(struct cpu_stop_work, mtrr_work); | ||
148 | |||
146 | /** | 149 | /** |
147 | * ipi_handler - Synchronisation handler. Executed by "other" CPUs. | 150 | * mtrr_work_handler - Synchronisation handler. Executed by "other" CPUs. |
148 | * @info: pointer to mtrr configuration data | 151 | * @info: pointer to mtrr configuration data |
149 | * | 152 | * |
150 | * Returns nothing. | 153 | * Returns nothing. |
151 | */ | 154 | */ |
152 | static void ipi_handler(void *info) | 155 | static int mtrr_work_handler(void *info) |
153 | { | 156 | { |
154 | #ifdef CONFIG_SMP | 157 | #ifdef CONFIG_SMP |
155 | struct set_mtrr_data *data = info; | 158 | struct set_mtrr_data *data = info; |
156 | unsigned long flags; | 159 | unsigned long flags; |
157 | 160 | ||
161 | atomic_dec(&data->count); | ||
162 | while (!atomic_read(&data->gate)) | ||
163 | cpu_relax(); | ||
164 | |||
158 | local_irq_save(flags); | 165 | local_irq_save(flags); |
159 | 166 | ||
160 | atomic_dec(&data->count); | 167 | atomic_dec(&data->count); |
161 | while (!atomic_read(&data->gate)) | 168 | while (atomic_read(&data->gate)) |
162 | cpu_relax(); | 169 | cpu_relax(); |
163 | 170 | ||
164 | /* The master has cleared me to execute */ | 171 | /* The master has cleared me to execute */ |
@@ -173,12 +180,13 @@ static void ipi_handler(void *info) | |||
173 | } | 180 | } |
174 | 181 | ||
175 | atomic_dec(&data->count); | 182 | atomic_dec(&data->count); |
176 | while (atomic_read(&data->gate)) | 183 | while (!atomic_read(&data->gate)) |
177 | cpu_relax(); | 184 | cpu_relax(); |
178 | 185 | ||
179 | atomic_dec(&data->count); | 186 | atomic_dec(&data->count); |
180 | local_irq_restore(flags); | 187 | local_irq_restore(flags); |
181 | #endif | 188 | #endif |
189 | return 0; | ||
182 | } | 190 | } |
183 | 191 | ||
184 | static inline int types_compatible(mtrr_type type1, mtrr_type type2) | 192 | static inline int types_compatible(mtrr_type type1, mtrr_type type2) |
@@ -198,7 +206,7 @@ static inline int types_compatible(mtrr_type type1, mtrr_type type2) | |||
198 | * | 206 | * |
199 | * This is kinda tricky, but fortunately, Intel spelled it out for us cleanly: | 207 | * This is kinda tricky, but fortunately, Intel spelled it out for us cleanly: |
200 | * | 208 | * |
201 | * 1. Send IPI to do the following: | 209 | * 1. Queue work to do the following on all processors: |
202 | * 2. Disable Interrupts | 210 | * 2. Disable Interrupts |
203 | * 3. Wait for all procs to do so | 211 | * 3. Wait for all procs to do so |
204 | * 4. Enter no-fill cache mode | 212 | * 4. Enter no-fill cache mode |
@@ -215,14 +223,17 @@ static inline int types_compatible(mtrr_type type1, mtrr_type type2) | |||
215 | * 15. Enable interrupts. | 223 | * 15. Enable interrupts. |
216 | * | 224 | * |
217 | * What does that mean for us? Well, first we set data.count to the number | 225 | * What does that mean for us? Well, first we set data.count to the number |
218 | * of CPUs. As each CPU disables interrupts, it'll decrement it once. We wait | 226 | * of CPUs. As each CPU announces that it started the rendezvous handler by |
219 | * until it hits 0 and proceed. We set the data.gate flag and reset data.count. | 227 | * decrementing the count, We reset data.count and set the data.gate flag |
220 | * Meanwhile, they are waiting for that flag to be set. Once it's set, each | 228 | * allowing all the cpu's to proceed with the work. As each cpu disables |
229 | * interrupts, it'll decrement data.count once. We wait until it hits 0 and | ||
230 | * proceed. We clear the data.gate flag and reset data.count. Meanwhile, they | ||
231 | * are waiting for that flag to be cleared. Once it's cleared, each | ||
221 | * CPU goes through the transition of updating MTRRs. | 232 | * CPU goes through the transition of updating MTRRs. |
222 | * The CPU vendors may each do it differently, | 233 | * The CPU vendors may each do it differently, |
223 | * so we call mtrr_if->set() callback and let them take care of it. | 234 | * so we call mtrr_if->set() callback and let them take care of it. |
224 | * When they're done, they again decrement data->count and wait for data.gate | 235 | * When they're done, they again decrement data->count and wait for data.gate |
225 | * to be reset. | 236 | * to be set. |
226 | * When we finish, we wait for data.count to hit 0 and toggle the data.gate flag | 237 | * When we finish, we wait for data.count to hit 0 and toggle the data.gate flag |
227 | * Everyone then enables interrupts and we all continue on. | 238 | * Everyone then enables interrupts and we all continue on. |
228 | * | 239 | * |
@@ -234,6 +245,9 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ | |||
234 | { | 245 | { |
235 | struct set_mtrr_data data; | 246 | struct set_mtrr_data data; |
236 | unsigned long flags; | 247 | unsigned long flags; |
248 | int cpu; | ||
249 | |||
250 | preempt_disable(); | ||
237 | 251 | ||
238 | data.smp_reg = reg; | 252 | data.smp_reg = reg; |
239 | data.smp_base = base; | 253 | data.smp_base = base; |
@@ -246,10 +260,15 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ | |||
246 | atomic_set(&data.gate, 0); | 260 | atomic_set(&data.gate, 0); |
247 | 261 | ||
248 | /* Start the ball rolling on other CPUs */ | 262 | /* Start the ball rolling on other CPUs */ |
249 | if (smp_call_function(ipi_handler, &data, 0) != 0) | 263 | for_each_online_cpu(cpu) { |
250 | panic("mtrr: timed out waiting for other CPUs\n"); | 264 | struct cpu_stop_work *work = &per_cpu(mtrr_work, cpu); |
265 | |||
266 | if (cpu == smp_processor_id()) | ||
267 | continue; | ||
268 | |||
269 | stop_one_cpu_nowait(cpu, mtrr_work_handler, &data, work); | ||
270 | } | ||
251 | 271 | ||
252 | local_irq_save(flags); | ||
253 | 272 | ||
254 | while (atomic_read(&data.count)) | 273 | while (atomic_read(&data.count)) |
255 | cpu_relax(); | 274 | cpu_relax(); |
@@ -259,6 +278,16 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ | |||
259 | smp_wmb(); | 278 | smp_wmb(); |
260 | atomic_set(&data.gate, 1); | 279 | atomic_set(&data.gate, 1); |
261 | 280 | ||
281 | local_irq_save(flags); | ||
282 | |||
283 | while (atomic_read(&data.count)) | ||
284 | cpu_relax(); | ||
285 | |||
286 | /* Ok, reset count and toggle gate */ | ||
287 | atomic_set(&data.count, num_booting_cpus() - 1); | ||
288 | smp_wmb(); | ||
289 | atomic_set(&data.gate, 0); | ||
290 | |||
262 | /* Do our MTRR business */ | 291 | /* Do our MTRR business */ |
263 | 292 | ||
264 | /* | 293 | /* |
@@ -279,7 +308,7 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ | |||
279 | 308 | ||
280 | atomic_set(&data.count, num_booting_cpus() - 1); | 309 | atomic_set(&data.count, num_booting_cpus() - 1); |
281 | smp_wmb(); | 310 | smp_wmb(); |
282 | atomic_set(&data.gate, 0); | 311 | atomic_set(&data.gate, 1); |
283 | 312 | ||
284 | /* | 313 | /* |
285 | * Wait here for everyone to have seen the gate change | 314 | * Wait here for everyone to have seen the gate change |
@@ -289,6 +318,7 @@ set_mtrr(unsigned int reg, unsigned long base, unsigned long size, mtrr_type typ | |||
289 | cpu_relax(); | 318 | cpu_relax(); |
290 | 319 | ||
291 | local_irq_restore(flags); | 320 | local_irq_restore(flags); |
321 | preempt_enable(); | ||
292 | } | 322 | } |
293 | 323 | ||
294 | /** | 324 | /** |
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index 5db5b7d65a18..f2da20fda02d 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c | |||
@@ -220,6 +220,7 @@ struct x86_pmu { | |||
220 | struct perf_event *event); | 220 | struct perf_event *event); |
221 | struct event_constraint *event_constraints; | 221 | struct event_constraint *event_constraints; |
222 | void (*quirks)(void); | 222 | void (*quirks)(void); |
223 | int perfctr_second_write; | ||
223 | 224 | ||
224 | int (*cpu_prepare)(int cpu); | 225 | int (*cpu_prepare)(int cpu); |
225 | void (*cpu_starting)(int cpu); | 226 | void (*cpu_starting)(int cpu); |
@@ -295,10 +296,10 @@ x86_perf_event_update(struct perf_event *event) | |||
295 | * count to the generic event atomically: | 296 | * count to the generic event atomically: |
296 | */ | 297 | */ |
297 | again: | 298 | again: |
298 | prev_raw_count = atomic64_read(&hwc->prev_count); | 299 | prev_raw_count = local64_read(&hwc->prev_count); |
299 | rdmsrl(hwc->event_base + idx, new_raw_count); | 300 | rdmsrl(hwc->event_base + idx, new_raw_count); |
300 | 301 | ||
301 | if (atomic64_cmpxchg(&hwc->prev_count, prev_raw_count, | 302 | if (local64_cmpxchg(&hwc->prev_count, prev_raw_count, |
302 | new_raw_count) != prev_raw_count) | 303 | new_raw_count) != prev_raw_count) |
303 | goto again; | 304 | goto again; |
304 | 305 | ||
@@ -313,8 +314,8 @@ again: | |||
313 | delta = (new_raw_count << shift) - (prev_raw_count << shift); | 314 | delta = (new_raw_count << shift) - (prev_raw_count << shift); |
314 | delta >>= shift; | 315 | delta >>= shift; |
315 | 316 | ||
316 | atomic64_add(delta, &event->count); | 317 | local64_add(delta, &event->count); |
317 | atomic64_sub(delta, &hwc->period_left); | 318 | local64_sub(delta, &hwc->period_left); |
318 | 319 | ||
319 | return new_raw_count; | 320 | return new_raw_count; |
320 | } | 321 | } |
@@ -438,7 +439,7 @@ static int x86_setup_perfctr(struct perf_event *event) | |||
438 | if (!hwc->sample_period) { | 439 | if (!hwc->sample_period) { |
439 | hwc->sample_period = x86_pmu.max_period; | 440 | hwc->sample_period = x86_pmu.max_period; |
440 | hwc->last_period = hwc->sample_period; | 441 | hwc->last_period = hwc->sample_period; |
441 | atomic64_set(&hwc->period_left, hwc->sample_period); | 442 | local64_set(&hwc->period_left, hwc->sample_period); |
442 | } else { | 443 | } else { |
443 | /* | 444 | /* |
444 | * If we have a PMU initialized but no APIC | 445 | * If we have a PMU initialized but no APIC |
@@ -885,7 +886,7 @@ static int | |||
885 | x86_perf_event_set_period(struct perf_event *event) | 886 | x86_perf_event_set_period(struct perf_event *event) |
886 | { | 887 | { |
887 | struct hw_perf_event *hwc = &event->hw; | 888 | struct hw_perf_event *hwc = &event->hw; |
888 | s64 left = atomic64_read(&hwc->period_left); | 889 | s64 left = local64_read(&hwc->period_left); |
889 | s64 period = hwc->sample_period; | 890 | s64 period = hwc->sample_period; |
890 | int ret = 0, idx = hwc->idx; | 891 | int ret = 0, idx = hwc->idx; |
891 | 892 | ||
@@ -897,14 +898,14 @@ x86_perf_event_set_period(struct perf_event *event) | |||
897 | */ | 898 | */ |
898 | if (unlikely(left <= -period)) { | 899 | if (unlikely(left <= -period)) { |
899 | left = period; | 900 | left = period; |
900 | atomic64_set(&hwc->period_left, left); | 901 | local64_set(&hwc->period_left, left); |
901 | hwc->last_period = period; | 902 | hwc->last_period = period; |
902 | ret = 1; | 903 | ret = 1; |
903 | } | 904 | } |
904 | 905 | ||
905 | if (unlikely(left <= 0)) { | 906 | if (unlikely(left <= 0)) { |
906 | left += period; | 907 | left += period; |
907 | atomic64_set(&hwc->period_left, left); | 908 | local64_set(&hwc->period_left, left); |
908 | hwc->last_period = period; | 909 | hwc->last_period = period; |
909 | ret = 1; | 910 | ret = 1; |
910 | } | 911 | } |
@@ -923,10 +924,19 @@ x86_perf_event_set_period(struct perf_event *event) | |||
923 | * The hw event starts counting from this event offset, | 924 | * The hw event starts counting from this event offset, |
924 | * mark it to be able to extra future deltas: | 925 | * mark it to be able to extra future deltas: |
925 | */ | 926 | */ |
926 | atomic64_set(&hwc->prev_count, (u64)-left); | 927 | local64_set(&hwc->prev_count, (u64)-left); |
927 | 928 | ||
928 | wrmsrl(hwc->event_base + idx, | 929 | wrmsrl(hwc->event_base + idx, (u64)(-left) & x86_pmu.cntval_mask); |
930 | |||
931 | /* | ||
932 | * Due to erratum on certan cpu we need | ||
933 | * a second write to be sure the register | ||
934 | * is updated properly | ||
935 | */ | ||
936 | if (x86_pmu.perfctr_second_write) { | ||
937 | wrmsrl(hwc->event_base + idx, | ||
929 | (u64)(-left) & x86_pmu.cntval_mask); | 938 | (u64)(-left) & x86_pmu.cntval_mask); |
939 | } | ||
930 | 940 | ||
931 | perf_event_update_userpage(event); | 941 | perf_event_update_userpage(event); |
932 | 942 | ||
@@ -969,7 +979,7 @@ static int x86_pmu_enable(struct perf_event *event) | |||
969 | * skip the schedulability test here, it will be peformed | 979 | * skip the schedulability test here, it will be peformed |
970 | * at commit time(->commit_txn) as a whole | 980 | * at commit time(->commit_txn) as a whole |
971 | */ | 981 | */ |
972 | if (cpuc->group_flag & PERF_EVENT_TXN_STARTED) | 982 | if (cpuc->group_flag & PERF_EVENT_TXN) |
973 | goto out; | 983 | goto out; |
974 | 984 | ||
975 | ret = x86_pmu.schedule_events(cpuc, n, assign); | 985 | ret = x86_pmu.schedule_events(cpuc, n, assign); |
@@ -1096,7 +1106,7 @@ static void x86_pmu_disable(struct perf_event *event) | |||
1096 | * The events never got scheduled and ->cancel_txn will truncate | 1106 | * The events never got scheduled and ->cancel_txn will truncate |
1097 | * the event_list. | 1107 | * the event_list. |
1098 | */ | 1108 | */ |
1099 | if (cpuc->group_flag & PERF_EVENT_TXN_STARTED) | 1109 | if (cpuc->group_flag & PERF_EVENT_TXN) |
1100 | return; | 1110 | return; |
1101 | 1111 | ||
1102 | x86_pmu_stop(event); | 1112 | x86_pmu_stop(event); |
@@ -1388,7 +1398,7 @@ static void x86_pmu_start_txn(const struct pmu *pmu) | |||
1388 | { | 1398 | { |
1389 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 1399 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
1390 | 1400 | ||
1391 | cpuc->group_flag |= PERF_EVENT_TXN_STARTED; | 1401 | cpuc->group_flag |= PERF_EVENT_TXN; |
1392 | cpuc->n_txn = 0; | 1402 | cpuc->n_txn = 0; |
1393 | } | 1403 | } |
1394 | 1404 | ||
@@ -1401,7 +1411,7 @@ static void x86_pmu_cancel_txn(const struct pmu *pmu) | |||
1401 | { | 1411 | { |
1402 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 1412 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
1403 | 1413 | ||
1404 | cpuc->group_flag &= ~PERF_EVENT_TXN_STARTED; | 1414 | cpuc->group_flag &= ~PERF_EVENT_TXN; |
1405 | /* | 1415 | /* |
1406 | * Truncate the collected events. | 1416 | * Truncate the collected events. |
1407 | */ | 1417 | */ |
@@ -1435,11 +1445,7 @@ static int x86_pmu_commit_txn(const struct pmu *pmu) | |||
1435 | */ | 1445 | */ |
1436 | memcpy(cpuc->assign, assign, n*sizeof(int)); | 1446 | memcpy(cpuc->assign, assign, n*sizeof(int)); |
1437 | 1447 | ||
1438 | /* | 1448 | cpuc->group_flag &= ~PERF_EVENT_TXN; |
1439 | * Clear out the txn count so that ->cancel_txn() which gets | ||
1440 | * run after ->commit_txn() doesn't undo things. | ||
1441 | */ | ||
1442 | cpuc->n_txn = 0; | ||
1443 | 1449 | ||
1444 | return 0; | 1450 | return 0; |
1445 | } | 1451 | } |
@@ -1607,8 +1613,6 @@ static const struct stacktrace_ops backtrace_ops = { | |||
1607 | .walk_stack = print_context_stack_bp, | 1613 | .walk_stack = print_context_stack_bp, |
1608 | }; | 1614 | }; |
1609 | 1615 | ||
1610 | #include "../dumpstack.h" | ||
1611 | |||
1612 | static void | 1616 | static void |
1613 | perf_callchain_kernel(struct pt_regs *regs, struct perf_callchain_entry *entry) | 1617 | perf_callchain_kernel(struct pt_regs *regs, struct perf_callchain_entry *entry) |
1614 | { | 1618 | { |
@@ -1730,22 +1734,6 @@ struct perf_callchain_entry *perf_callchain(struct pt_regs *regs) | |||
1730 | return entry; | 1734 | return entry; |
1731 | } | 1735 | } |
1732 | 1736 | ||
1733 | void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int skip) | ||
1734 | { | ||
1735 | regs->ip = ip; | ||
1736 | /* | ||
1737 | * perf_arch_fetch_caller_regs adds another call, we need to increment | ||
1738 | * the skip level | ||
1739 | */ | ||
1740 | regs->bp = rewind_frame_pointer(skip + 1); | ||
1741 | regs->cs = __KERNEL_CS; | ||
1742 | /* | ||
1743 | * We abuse bit 3 to pass exact information, see perf_misc_flags | ||
1744 | * and the comment with PERF_EFLAGS_EXACT. | ||
1745 | */ | ||
1746 | regs->flags = 0; | ||
1747 | } | ||
1748 | |||
1749 | unsigned long perf_instruction_pointer(struct pt_regs *regs) | 1737 | unsigned long perf_instruction_pointer(struct pt_regs *regs) |
1750 | { | 1738 | { |
1751 | unsigned long ip; | 1739 | unsigned long ip; |
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 214ac860ebe0..d8d86d014008 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
@@ -491,33 +491,78 @@ static void intel_pmu_enable_all(int added) | |||
491 | * Intel Errata AAP53 (model 30) | 491 | * Intel Errata AAP53 (model 30) |
492 | * Intel Errata BD53 (model 44) | 492 | * Intel Errata BD53 (model 44) |
493 | * | 493 | * |
494 | * These chips need to be 'reset' when adding counters by programming | 494 | * The official story: |
495 | * the magic three (non counting) events 0x4300D2, 0x4300B1 and 0x4300B5 | 495 | * These chips need to be 'reset' when adding counters by programming the |
496 | * either in sequence on the same PMC or on different PMCs. | 496 | * magic three (non-counting) events 0x4300B5, 0x4300D2, and 0x4300B1 either |
497 | * in sequence on the same PMC or on different PMCs. | ||
498 | * | ||
499 | * In practise it appears some of these events do in fact count, and | ||
500 | * we need to programm all 4 events. | ||
497 | */ | 501 | */ |
498 | static void intel_pmu_nhm_enable_all(int added) | 502 | static void intel_pmu_nhm_workaround(void) |
499 | { | 503 | { |
500 | if (added) { | 504 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
501 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 505 | static const unsigned long nhm_magic[4] = { |
502 | int i; | 506 | 0x4300B5, |
507 | 0x4300D2, | ||
508 | 0x4300B1, | ||
509 | 0x4300B1 | ||
510 | }; | ||
511 | struct perf_event *event; | ||
512 | int i; | ||
513 | |||
514 | /* | ||
515 | * The Errata requires below steps: | ||
516 | * 1) Clear MSR_IA32_PEBS_ENABLE and MSR_CORE_PERF_GLOBAL_CTRL; | ||
517 | * 2) Configure 4 PERFEVTSELx with the magic events and clear | ||
518 | * the corresponding PMCx; | ||
519 | * 3) set bit0~bit3 of MSR_CORE_PERF_GLOBAL_CTRL; | ||
520 | * 4) Clear MSR_CORE_PERF_GLOBAL_CTRL; | ||
521 | * 5) Clear 4 pairs of ERFEVTSELx and PMCx; | ||
522 | */ | ||
523 | |||
524 | /* | ||
525 | * The real steps we choose are a little different from above. | ||
526 | * A) To reduce MSR operations, we don't run step 1) as they | ||
527 | * are already cleared before this function is called; | ||
528 | * B) Call x86_perf_event_update to save PMCx before configuring | ||
529 | * PERFEVTSELx with magic number; | ||
530 | * C) With step 5), we do clear only when the PERFEVTSELx is | ||
531 | * not used currently. | ||
532 | * D) Call x86_perf_event_set_period to restore PMCx; | ||
533 | */ | ||
503 | 534 | ||
504 | wrmsrl(MSR_ARCH_PERFMON_EVENTSEL0 + 0, 0x4300D2); | 535 | /* We always operate 4 pairs of PERF Counters */ |
505 | wrmsrl(MSR_ARCH_PERFMON_EVENTSEL0 + 1, 0x4300B1); | 536 | for (i = 0; i < 4; i++) { |
506 | wrmsrl(MSR_ARCH_PERFMON_EVENTSEL0 + 2, 0x4300B5); | 537 | event = cpuc->events[i]; |
538 | if (event) | ||
539 | x86_perf_event_update(event); | ||
540 | } | ||
507 | 541 | ||
508 | wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, 0x3); | 542 | for (i = 0; i < 4; i++) { |
509 | wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, 0x0); | 543 | wrmsrl(MSR_ARCH_PERFMON_EVENTSEL0 + i, nhm_magic[i]); |
544 | wrmsrl(MSR_ARCH_PERFMON_PERFCTR0 + i, 0x0); | ||
545 | } | ||
510 | 546 | ||
511 | for (i = 0; i < 3; i++) { | 547 | wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, 0xf); |
512 | struct perf_event *event = cpuc->events[i]; | 548 | wrmsrl(MSR_CORE_PERF_GLOBAL_CTRL, 0x0); |
513 | 549 | ||
514 | if (!event) | 550 | for (i = 0; i < 4; i++) { |
515 | continue; | 551 | event = cpuc->events[i]; |
516 | 552 | ||
553 | if (event) { | ||
554 | x86_perf_event_set_period(event); | ||
517 | __x86_pmu_enable_event(&event->hw, | 555 | __x86_pmu_enable_event(&event->hw, |
518 | ARCH_PERFMON_EVENTSEL_ENABLE); | 556 | ARCH_PERFMON_EVENTSEL_ENABLE); |
519 | } | 557 | } else |
558 | wrmsrl(MSR_ARCH_PERFMON_EVENTSEL0 + i, 0x0); | ||
520 | } | 559 | } |
560 | } | ||
561 | |||
562 | static void intel_pmu_nhm_enable_all(int added) | ||
563 | { | ||
564 | if (added) | ||
565 | intel_pmu_nhm_workaround(); | ||
521 | intel_pmu_enable_all(added); | 566 | intel_pmu_enable_all(added); |
522 | } | 567 | } |
523 | 568 | ||
diff --git a/arch/x86/kernel/cpu/perf_event_p4.c b/arch/x86/kernel/cpu/perf_event_p4.c index ae85d69644d1..febb12cea795 100644 --- a/arch/x86/kernel/cpu/perf_event_p4.c +++ b/arch/x86/kernel/cpu/perf_event_p4.c | |||
@@ -21,22 +21,36 @@ struct p4_event_bind { | |||
21 | char cntr[2][P4_CNTR_LIMIT]; /* counter index (offset), -1 on abscence */ | 21 | char cntr[2][P4_CNTR_LIMIT]; /* counter index (offset), -1 on abscence */ |
22 | }; | 22 | }; |
23 | 23 | ||
24 | struct p4_cache_event_bind { | 24 | struct p4_pebs_bind { |
25 | unsigned int metric_pebs; | 25 | unsigned int metric_pebs; |
26 | unsigned int metric_vert; | 26 | unsigned int metric_vert; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | #define P4_GEN_CACHE_EVENT_BIND(name) \ | 29 | /* it sets P4_PEBS_ENABLE_UOP_TAG as well */ |
30 | [P4_CACHE__##name] = { \ | 30 | #define P4_GEN_PEBS_BIND(name, pebs, vert) \ |
31 | .metric_pebs = P4_PEBS__##name, \ | 31 | [P4_PEBS_METRIC__##name] = { \ |
32 | .metric_vert = P4_VERT__##name, \ | 32 | .metric_pebs = pebs | P4_PEBS_ENABLE_UOP_TAG, \ |
33 | .metric_vert = vert, \ | ||
33 | } | 34 | } |
34 | 35 | ||
35 | static struct p4_cache_event_bind p4_cache_event_bind_map[] = { | 36 | /* |
36 | P4_GEN_CACHE_EVENT_BIND(1stl_cache_load_miss_retired), | 37 | * note we have P4_PEBS_ENABLE_UOP_TAG always set here |
37 | P4_GEN_CACHE_EVENT_BIND(2ndl_cache_load_miss_retired), | 38 | * |
38 | P4_GEN_CACHE_EVENT_BIND(dtlb_load_miss_retired), | 39 | * it's needed for mapping P4_PEBS_CONFIG_METRIC_MASK bits of |
39 | P4_GEN_CACHE_EVENT_BIND(dtlb_store_miss_retired), | 40 | * event configuration to find out which values are to be |
41 | * written into MSR_IA32_PEBS_ENABLE and MSR_P4_PEBS_MATRIX_VERT | ||
42 | * resgisters | ||
43 | */ | ||
44 | static struct p4_pebs_bind p4_pebs_bind_map[] = { | ||
45 | P4_GEN_PEBS_BIND(1stl_cache_load_miss_retired, 0x0000001, 0x0000001), | ||
46 | P4_GEN_PEBS_BIND(2ndl_cache_load_miss_retired, 0x0000002, 0x0000001), | ||
47 | P4_GEN_PEBS_BIND(dtlb_load_miss_retired, 0x0000004, 0x0000001), | ||
48 | P4_GEN_PEBS_BIND(dtlb_store_miss_retired, 0x0000004, 0x0000002), | ||
49 | P4_GEN_PEBS_BIND(dtlb_all_miss_retired, 0x0000004, 0x0000003), | ||
50 | P4_GEN_PEBS_BIND(tagged_mispred_branch, 0x0018000, 0x0000010), | ||
51 | P4_GEN_PEBS_BIND(mob_load_replay_retired, 0x0000200, 0x0000001), | ||
52 | P4_GEN_PEBS_BIND(split_load_retired, 0x0000400, 0x0000001), | ||
53 | P4_GEN_PEBS_BIND(split_store_retired, 0x0000400, 0x0000002), | ||
40 | }; | 54 | }; |
41 | 55 | ||
42 | /* | 56 | /* |
@@ -281,10 +295,10 @@ static struct p4_event_bind p4_event_bind_map[] = { | |||
281 | }, | 295 | }, |
282 | }; | 296 | }; |
283 | 297 | ||
284 | #define P4_GEN_CACHE_EVENT(event, bit, cache_event) \ | 298 | #define P4_GEN_CACHE_EVENT(event, bit, metric) \ |
285 | p4_config_pack_escr(P4_ESCR_EVENT(event) | \ | 299 | p4_config_pack_escr(P4_ESCR_EVENT(event) | \ |
286 | P4_ESCR_EMASK_BIT(event, bit)) | \ | 300 | P4_ESCR_EMASK_BIT(event, bit)) | \ |
287 | p4_config_pack_cccr(cache_event | \ | 301 | p4_config_pack_cccr(metric | \ |
288 | P4_CCCR_ESEL(P4_OPCODE_ESEL(P4_OPCODE(event)))) | 302 | P4_CCCR_ESEL(P4_OPCODE_ESEL(P4_OPCODE(event)))) |
289 | 303 | ||
290 | static __initconst const u64 p4_hw_cache_event_ids | 304 | static __initconst const u64 p4_hw_cache_event_ids |
@@ -296,34 +310,34 @@ static __initconst const u64 p4_hw_cache_event_ids | |||
296 | [ C(OP_READ) ] = { | 310 | [ C(OP_READ) ] = { |
297 | [ C(RESULT_ACCESS) ] = 0x0, | 311 | [ C(RESULT_ACCESS) ] = 0x0, |
298 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_REPLAY_EVENT, NBOGUS, | 312 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_REPLAY_EVENT, NBOGUS, |
299 | P4_CACHE__1stl_cache_load_miss_retired), | 313 | P4_PEBS_METRIC__1stl_cache_load_miss_retired), |
300 | }, | 314 | }, |
301 | }, | 315 | }, |
302 | [ C(LL ) ] = { | 316 | [ C(LL ) ] = { |
303 | [ C(OP_READ) ] = { | 317 | [ C(OP_READ) ] = { |
304 | [ C(RESULT_ACCESS) ] = 0x0, | 318 | [ C(RESULT_ACCESS) ] = 0x0, |
305 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_REPLAY_EVENT, NBOGUS, | 319 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_REPLAY_EVENT, NBOGUS, |
306 | P4_CACHE__2ndl_cache_load_miss_retired), | 320 | P4_PEBS_METRIC__2ndl_cache_load_miss_retired), |
307 | }, | 321 | }, |
308 | }, | 322 | }, |
309 | [ C(DTLB) ] = { | 323 | [ C(DTLB) ] = { |
310 | [ C(OP_READ) ] = { | 324 | [ C(OP_READ) ] = { |
311 | [ C(RESULT_ACCESS) ] = 0x0, | 325 | [ C(RESULT_ACCESS) ] = 0x0, |
312 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_REPLAY_EVENT, NBOGUS, | 326 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_REPLAY_EVENT, NBOGUS, |
313 | P4_CACHE__dtlb_load_miss_retired), | 327 | P4_PEBS_METRIC__dtlb_load_miss_retired), |
314 | }, | 328 | }, |
315 | [ C(OP_WRITE) ] = { | 329 | [ C(OP_WRITE) ] = { |
316 | [ C(RESULT_ACCESS) ] = 0x0, | 330 | [ C(RESULT_ACCESS) ] = 0x0, |
317 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_REPLAY_EVENT, NBOGUS, | 331 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_REPLAY_EVENT, NBOGUS, |
318 | P4_CACHE__dtlb_store_miss_retired), | 332 | P4_PEBS_METRIC__dtlb_store_miss_retired), |
319 | }, | 333 | }, |
320 | }, | 334 | }, |
321 | [ C(ITLB) ] = { | 335 | [ C(ITLB) ] = { |
322 | [ C(OP_READ) ] = { | 336 | [ C(OP_READ) ] = { |
323 | [ C(RESULT_ACCESS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_ITLB_REFERENCE, HIT, | 337 | [ C(RESULT_ACCESS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_ITLB_REFERENCE, HIT, |
324 | P4_CACHE__itlb_reference_hit), | 338 | P4_PEBS_METRIC__none), |
325 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_ITLB_REFERENCE, MISS, | 339 | [ C(RESULT_MISS) ] = P4_GEN_CACHE_EVENT(P4_EVENT_ITLB_REFERENCE, MISS, |
326 | P4_CACHE__itlb_reference_miss), | 340 | P4_PEBS_METRIC__none), |
327 | }, | 341 | }, |
328 | [ C(OP_WRITE) ] = { | 342 | [ C(OP_WRITE) ] = { |
329 | [ C(RESULT_ACCESS) ] = -1, | 343 | [ C(RESULT_ACCESS) ] = -1, |
@@ -414,11 +428,37 @@ static u64 p4_pmu_event_map(int hw_event) | |||
414 | return config; | 428 | return config; |
415 | } | 429 | } |
416 | 430 | ||
431 | static int p4_validate_raw_event(struct perf_event *event) | ||
432 | { | ||
433 | unsigned int v; | ||
434 | |||
435 | /* user data may have out-of-bound event index */ | ||
436 | v = p4_config_unpack_event(event->attr.config); | ||
437 | if (v >= ARRAY_SIZE(p4_event_bind_map)) { | ||
438 | pr_warning("P4 PMU: Unknown event code: %d\n", v); | ||
439 | return -EINVAL; | ||
440 | } | ||
441 | |||
442 | /* | ||
443 | * it may have some screwed PEBS bits | ||
444 | */ | ||
445 | if (p4_config_pebs_has(event->attr.config, P4_PEBS_CONFIG_ENABLE)) { | ||
446 | pr_warning("P4 PMU: PEBS are not supported yet\n"); | ||
447 | return -EINVAL; | ||
448 | } | ||
449 | v = p4_config_unpack_metric(event->attr.config); | ||
450 | if (v >= ARRAY_SIZE(p4_pebs_bind_map)) { | ||
451 | pr_warning("P4 PMU: Unknown metric code: %d\n", v); | ||
452 | return -EINVAL; | ||
453 | } | ||
454 | |||
455 | return 0; | ||
456 | } | ||
457 | |||
417 | static int p4_hw_config(struct perf_event *event) | 458 | static int p4_hw_config(struct perf_event *event) |
418 | { | 459 | { |
419 | int cpu = get_cpu(); | 460 | int cpu = get_cpu(); |
420 | int rc = 0; | 461 | int rc = 0; |
421 | unsigned int evnt; | ||
422 | u32 escr, cccr; | 462 | u32 escr, cccr; |
423 | 463 | ||
424 | /* | 464 | /* |
@@ -438,12 +478,9 @@ static int p4_hw_config(struct perf_event *event) | |||
438 | 478 | ||
439 | if (event->attr.type == PERF_TYPE_RAW) { | 479 | if (event->attr.type == PERF_TYPE_RAW) { |
440 | 480 | ||
441 | /* user data may have out-of-bound event index */ | 481 | rc = p4_validate_raw_event(event); |
442 | evnt = p4_config_unpack_event(event->attr.config); | 482 | if (rc) |
443 | if (evnt >= ARRAY_SIZE(p4_event_bind_map)) { | ||
444 | rc = -EINVAL; | ||
445 | goto out; | 483 | goto out; |
446 | } | ||
447 | 484 | ||
448 | /* | 485 | /* |
449 | * We don't control raw events so it's up to the caller | 486 | * We don't control raw events so it's up to the caller |
@@ -451,12 +488,15 @@ static int p4_hw_config(struct perf_event *event) | |||
451 | * on HT machine but allow HT-compatible specifics to be | 488 | * on HT machine but allow HT-compatible specifics to be |
452 | * passed on) | 489 | * passed on) |
453 | * | 490 | * |
491 | * Note that for RAW events we allow user to use P4_CCCR_RESERVED | ||
492 | * bits since we keep additional info here (for cache events and etc) | ||
493 | * | ||
454 | * XXX: HT wide things should check perf_paranoid_cpu() && | 494 | * XXX: HT wide things should check perf_paranoid_cpu() && |
455 | * CAP_SYS_ADMIN | 495 | * CAP_SYS_ADMIN |
456 | */ | 496 | */ |
457 | event->hw.config |= event->attr.config & | 497 | event->hw.config |= event->attr.config & |
458 | (p4_config_pack_escr(P4_ESCR_MASK_HT) | | 498 | (p4_config_pack_escr(P4_ESCR_MASK_HT) | |
459 | p4_config_pack_cccr(P4_CCCR_MASK_HT)); | 499 | p4_config_pack_cccr(P4_CCCR_MASK_HT | P4_CCCR_RESERVED)); |
460 | } | 500 | } |
461 | 501 | ||
462 | rc = x86_setup_perfctr(event); | 502 | rc = x86_setup_perfctr(event); |
@@ -482,6 +522,29 @@ static inline int p4_pmu_clear_cccr_ovf(struct hw_perf_event *hwc) | |||
482 | return overflow; | 522 | return overflow; |
483 | } | 523 | } |
484 | 524 | ||
525 | static void p4_pmu_disable_pebs(void) | ||
526 | { | ||
527 | /* | ||
528 | * FIXME | ||
529 | * | ||
530 | * It's still allowed that two threads setup same cache | ||
531 | * events so we can't simply clear metrics until we knew | ||
532 | * noone is depending on us, so we need kind of counter | ||
533 | * for "ReplayEvent" users. | ||
534 | * | ||
535 | * What is more complex -- RAW events, if user (for some | ||
536 | * reason) will pass some cache event metric with improper | ||
537 | * event opcode -- it's fine from hardware point of view | ||
538 | * but completely nonsence from "meaning" of such action. | ||
539 | * | ||
540 | * So at moment let leave metrics turned on forever -- it's | ||
541 | * ok for now but need to be revisited! | ||
542 | * | ||
543 | * (void)checking_wrmsrl(MSR_IA32_PEBS_ENABLE, (u64)0); | ||
544 | * (void)checking_wrmsrl(MSR_P4_PEBS_MATRIX_VERT, (u64)0); | ||
545 | */ | ||
546 | } | ||
547 | |||
485 | static inline void p4_pmu_disable_event(struct perf_event *event) | 548 | static inline void p4_pmu_disable_event(struct perf_event *event) |
486 | { | 549 | { |
487 | struct hw_perf_event *hwc = &event->hw; | 550 | struct hw_perf_event *hwc = &event->hw; |
@@ -507,6 +570,26 @@ static void p4_pmu_disable_all(void) | |||
507 | continue; | 570 | continue; |
508 | p4_pmu_disable_event(event); | 571 | p4_pmu_disable_event(event); |
509 | } | 572 | } |
573 | |||
574 | p4_pmu_disable_pebs(); | ||
575 | } | ||
576 | |||
577 | /* configuration must be valid */ | ||
578 | static void p4_pmu_enable_pebs(u64 config) | ||
579 | { | ||
580 | struct p4_pebs_bind *bind; | ||
581 | unsigned int idx; | ||
582 | |||
583 | BUILD_BUG_ON(P4_PEBS_METRIC__max > P4_PEBS_CONFIG_METRIC_MASK); | ||
584 | |||
585 | idx = p4_config_unpack_metric(config); | ||
586 | if (idx == P4_PEBS_METRIC__none) | ||
587 | return; | ||
588 | |||
589 | bind = &p4_pebs_bind_map[idx]; | ||
590 | |||
591 | (void)checking_wrmsrl(MSR_IA32_PEBS_ENABLE, (u64)bind->metric_pebs); | ||
592 | (void)checking_wrmsrl(MSR_P4_PEBS_MATRIX_VERT, (u64)bind->metric_vert); | ||
510 | } | 593 | } |
511 | 594 | ||
512 | static void p4_pmu_enable_event(struct perf_event *event) | 595 | static void p4_pmu_enable_event(struct perf_event *event) |
@@ -515,9 +598,7 @@ static void p4_pmu_enable_event(struct perf_event *event) | |||
515 | int thread = p4_ht_config_thread(hwc->config); | 598 | int thread = p4_ht_config_thread(hwc->config); |
516 | u64 escr_conf = p4_config_unpack_escr(p4_clear_ht_bit(hwc->config)); | 599 | u64 escr_conf = p4_config_unpack_escr(p4_clear_ht_bit(hwc->config)); |
517 | unsigned int idx = p4_config_unpack_event(hwc->config); | 600 | unsigned int idx = p4_config_unpack_event(hwc->config); |
518 | unsigned int idx_cache = p4_config_unpack_cache_event(hwc->config); | ||
519 | struct p4_event_bind *bind; | 601 | struct p4_event_bind *bind; |
520 | struct p4_cache_event_bind *bind_cache; | ||
521 | u64 escr_addr, cccr; | 602 | u64 escr_addr, cccr; |
522 | 603 | ||
523 | bind = &p4_event_bind_map[idx]; | 604 | bind = &p4_event_bind_map[idx]; |
@@ -537,16 +618,10 @@ static void p4_pmu_enable_event(struct perf_event *event) | |||
537 | cccr = p4_config_unpack_cccr(hwc->config); | 618 | cccr = p4_config_unpack_cccr(hwc->config); |
538 | 619 | ||
539 | /* | 620 | /* |
540 | * it could be Cache event so that we need to | 621 | * it could be Cache event so we need to write metrics |
541 | * set metrics into additional MSRs | 622 | * into additional MSRs |
542 | */ | 623 | */ |
543 | BUILD_BUG_ON(P4_CACHE__MAX > P4_CCCR_CACHE_OPS_MASK); | 624 | p4_pmu_enable_pebs(hwc->config); |
544 | if (idx_cache > P4_CACHE__NONE && | ||
545 | idx_cache < ARRAY_SIZE(p4_cache_event_bind_map)) { | ||
546 | bind_cache = &p4_cache_event_bind_map[idx_cache]; | ||
547 | (void)checking_wrmsrl(MSR_IA32_PEBS_ENABLE, (u64)bind_cache->metric_pebs); | ||
548 | (void)checking_wrmsrl(MSR_P4_PEBS_MATRIX_VERT, (u64)bind_cache->metric_vert); | ||
549 | } | ||
550 | 625 | ||
551 | (void)checking_wrmsrl(escr_addr, escr_conf); | 626 | (void)checking_wrmsrl(escr_addr, escr_conf); |
552 | (void)checking_wrmsrl(hwc->config_base + hwc->idx, | 627 | (void)checking_wrmsrl(hwc->config_base + hwc->idx, |
@@ -581,6 +656,7 @@ static int p4_pmu_handle_irq(struct pt_regs *regs) | |||
581 | cpuc = &__get_cpu_var(cpu_hw_events); | 656 | cpuc = &__get_cpu_var(cpu_hw_events); |
582 | 657 | ||
583 | for (idx = 0; idx < x86_pmu.num_counters; idx++) { | 658 | for (idx = 0; idx < x86_pmu.num_counters; idx++) { |
659 | int overflow; | ||
584 | 660 | ||
585 | if (!test_bit(idx, cpuc->active_mask)) | 661 | if (!test_bit(idx, cpuc->active_mask)) |
586 | continue; | 662 | continue; |
@@ -591,12 +667,14 @@ static int p4_pmu_handle_irq(struct pt_regs *regs) | |||
591 | WARN_ON_ONCE(hwc->idx != idx); | 667 | WARN_ON_ONCE(hwc->idx != idx); |
592 | 668 | ||
593 | /* it might be unflagged overflow */ | 669 | /* it might be unflagged overflow */ |
594 | handled = p4_pmu_clear_cccr_ovf(hwc); | 670 | overflow = p4_pmu_clear_cccr_ovf(hwc); |
595 | 671 | ||
596 | val = x86_perf_event_update(event); | 672 | val = x86_perf_event_update(event); |
597 | if (!handled && (val & (1ULL << (x86_pmu.cntval_bits - 1)))) | 673 | if (!overflow && (val & (1ULL << (x86_pmu.cntval_bits - 1)))) |
598 | continue; | 674 | continue; |
599 | 675 | ||
676 | handled += overflow; | ||
677 | |||
600 | /* event overflow for sure */ | 678 | /* event overflow for sure */ |
601 | data.period = event->hw.last_period; | 679 | data.period = event->hw.last_period; |
602 | 680 | ||
@@ -612,7 +690,7 @@ static int p4_pmu_handle_irq(struct pt_regs *regs) | |||
612 | inc_irq_stat(apic_perf_irqs); | 690 | inc_irq_stat(apic_perf_irqs); |
613 | } | 691 | } |
614 | 692 | ||
615 | return handled; | 693 | return handled > 0; |
616 | } | 694 | } |
617 | 695 | ||
618 | /* | 696 | /* |
@@ -829,6 +907,15 @@ static __initconst const struct x86_pmu p4_pmu = { | |||
829 | .max_period = (1ULL << 39) - 1, | 907 | .max_period = (1ULL << 39) - 1, |
830 | .hw_config = p4_hw_config, | 908 | .hw_config = p4_hw_config, |
831 | .schedule_events = p4_pmu_schedule_events, | 909 | .schedule_events = p4_pmu_schedule_events, |
910 | /* | ||
911 | * This handles erratum N15 in intel doc 249199-029, | ||
912 | * the counter may not be updated correctly on write | ||
913 | * so we need a second write operation to do the trick | ||
914 | * (the official workaround didn't work) | ||
915 | * | ||
916 | * the former idea is taken from OProfile code | ||
917 | */ | ||
918 | .perfctr_second_write = 1, | ||
832 | }; | 919 | }; |
833 | 920 | ||
834 | static __init int p4_pmu_init(void) | 921 | static __init int p4_pmu_init(void) |
diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c new file mode 100644 index 000000000000..34b4dad6f0b8 --- /dev/null +++ b/arch/x86/kernel/cpu/scattered.c | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * Routines to indentify additional cpu features that are scattered in | ||
3 | * cpuid space. | ||
4 | */ | ||
5 | #include <linux/cpu.h> | ||
6 | |||
7 | #include <asm/pat.h> | ||
8 | #include <asm/processor.h> | ||
9 | |||
10 | #include <asm/apic.h> | ||
11 | |||
12 | struct cpuid_bit { | ||
13 | u16 feature; | ||
14 | u8 reg; | ||
15 | u8 bit; | ||
16 | u32 level; | ||
17 | u32 sub_leaf; | ||
18 | }; | ||
19 | |||
20 | enum cpuid_regs { | ||
21 | CR_EAX = 0, | ||
22 | CR_ECX, | ||
23 | CR_EDX, | ||
24 | CR_EBX | ||
25 | }; | ||
26 | |||
27 | void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c) | ||
28 | { | ||
29 | u32 max_level; | ||
30 | u32 regs[4]; | ||
31 | const struct cpuid_bit *cb; | ||
32 | |||
33 | static const struct cpuid_bit __cpuinitconst cpuid_bits[] = { | ||
34 | { X86_FEATURE_IDA, CR_EAX, 1, 0x00000006, 0 }, | ||
35 | { X86_FEATURE_ARAT, CR_EAX, 2, 0x00000006, 0 }, | ||
36 | { X86_FEATURE_PLN, CR_EAX, 4, 0x00000006, 0 }, | ||
37 | { X86_FEATURE_PTS, CR_EAX, 6, 0x00000006, 0 }, | ||
38 | { X86_FEATURE_APERFMPERF, CR_ECX, 0, 0x00000006, 0 }, | ||
39 | { X86_FEATURE_EPB, CR_ECX, 3, 0x00000006, 0 }, | ||
40 | { X86_FEATURE_XSAVEOPT, CR_EAX, 0, 0x0000000d, 1 }, | ||
41 | { X86_FEATURE_CPB, CR_EDX, 9, 0x80000007, 0 }, | ||
42 | { X86_FEATURE_NPT, CR_EDX, 0, 0x8000000a, 0 }, | ||
43 | { X86_FEATURE_LBRV, CR_EDX, 1, 0x8000000a, 0 }, | ||
44 | { X86_FEATURE_SVML, CR_EDX, 2, 0x8000000a, 0 }, | ||
45 | { X86_FEATURE_NRIPS, CR_EDX, 3, 0x8000000a, 0 }, | ||
46 | { 0, 0, 0, 0, 0 } | ||
47 | }; | ||
48 | |||
49 | for (cb = cpuid_bits; cb->feature; cb++) { | ||
50 | |||
51 | /* Verify that the level is valid */ | ||
52 | max_level = cpuid_eax(cb->level & 0xffff0000); | ||
53 | if (max_level < cb->level || | ||
54 | max_level > (cb->level | 0xffff)) | ||
55 | continue; | ||
56 | |||
57 | cpuid_count(cb->level, cb->sub_leaf, ®s[CR_EAX], | ||
58 | ®s[CR_EBX], ®s[CR_ECX], ®s[CR_EDX]); | ||
59 | |||
60 | if (regs[cb->reg] & (1 << cb->bit)) | ||
61 | set_cpu_cap(c, cb->feature); | ||
62 | } | ||
63 | } | ||
diff --git a/arch/x86/kernel/cpu/addon_cpuid_features.c b/arch/x86/kernel/cpu/topology.c index 10fa5684a662..4397e987a1cf 100644 --- a/arch/x86/kernel/cpu/addon_cpuid_features.c +++ b/arch/x86/kernel/cpu/topology.c | |||
@@ -1,62 +1,14 @@ | |||
1 | /* | 1 | /* |
2 | * Routines to indentify additional cpu features that are scattered in | 2 | * Check for extended topology enumeration cpuid leaf 0xb and if it |
3 | * cpuid space. | 3 | * exists, use it for populating initial_apicid and cpu topology |
4 | * detection. | ||
4 | */ | 5 | */ |
5 | #include <linux/cpu.h> | ||
6 | 6 | ||
7 | #include <linux/cpu.h> | ||
8 | #include <asm/apic.h> | ||
7 | #include <asm/pat.h> | 9 | #include <asm/pat.h> |
8 | #include <asm/processor.h> | 10 | #include <asm/processor.h> |
9 | 11 | ||
10 | #include <asm/apic.h> | ||
11 | |||
12 | struct cpuid_bit { | ||
13 | u16 feature; | ||
14 | u8 reg; | ||
15 | u8 bit; | ||
16 | u32 level; | ||
17 | }; | ||
18 | |||
19 | enum cpuid_regs { | ||
20 | CR_EAX = 0, | ||
21 | CR_ECX, | ||
22 | CR_EDX, | ||
23 | CR_EBX | ||
24 | }; | ||
25 | |||
26 | void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c) | ||
27 | { | ||
28 | u32 max_level; | ||
29 | u32 regs[4]; | ||
30 | const struct cpuid_bit *cb; | ||
31 | |||
32 | static const struct cpuid_bit __cpuinitconst cpuid_bits[] = { | ||
33 | { X86_FEATURE_IDA, CR_EAX, 1, 0x00000006 }, | ||
34 | { X86_FEATURE_ARAT, CR_EAX, 2, 0x00000006 }, | ||
35 | { X86_FEATURE_APERFMPERF, CR_ECX, 0, 0x00000006 }, | ||
36 | { X86_FEATURE_CPB, CR_EDX, 9, 0x80000007 }, | ||
37 | { X86_FEATURE_NPT, CR_EDX, 0, 0x8000000a }, | ||
38 | { X86_FEATURE_LBRV, CR_EDX, 1, 0x8000000a }, | ||
39 | { X86_FEATURE_SVML, CR_EDX, 2, 0x8000000a }, | ||
40 | { X86_FEATURE_NRIPS, CR_EDX, 3, 0x8000000a }, | ||
41 | { 0, 0, 0, 0 } | ||
42 | }; | ||
43 | |||
44 | for (cb = cpuid_bits; cb->feature; cb++) { | ||
45 | |||
46 | /* Verify that the level is valid */ | ||
47 | max_level = cpuid_eax(cb->level & 0xffff0000); | ||
48 | if (max_level < cb->level || | ||
49 | max_level > (cb->level | 0xffff)) | ||
50 | continue; | ||
51 | |||
52 | cpuid(cb->level, ®s[CR_EAX], ®s[CR_EBX], | ||
53 | ®s[CR_ECX], ®s[CR_EDX]); | ||
54 | |||
55 | if (regs[cb->reg] & (1 << cb->bit)) | ||
56 | set_cpu_cap(c, cb->feature); | ||
57 | } | ||
58 | } | ||
59 | |||
60 | /* leaf 0xb SMT level */ | 12 | /* leaf 0xb SMT level */ |
61 | #define SMT_LEVEL 0 | 13 | #define SMT_LEVEL 0 |
62 | 14 | ||
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index b9d1ff588445..227b0448960d 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c | |||
@@ -51,7 +51,7 @@ static inline int __vmware_platform(void) | |||
51 | 51 | ||
52 | static unsigned long vmware_get_tsc_khz(void) | 52 | static unsigned long vmware_get_tsc_khz(void) |
53 | { | 53 | { |
54 | uint64_t tsc_hz; | 54 | uint64_t tsc_hz, lpj; |
55 | uint32_t eax, ebx, ecx, edx; | 55 | uint32_t eax, ebx, ecx, edx; |
56 | 56 | ||
57 | VMWARE_PORT(GETHZ, eax, ebx, ecx, edx); | 57 | VMWARE_PORT(GETHZ, eax, ebx, ecx, edx); |
@@ -62,6 +62,13 @@ static unsigned long vmware_get_tsc_khz(void) | |||
62 | printk(KERN_INFO "TSC freq read from hypervisor : %lu.%03lu MHz\n", | 62 | printk(KERN_INFO "TSC freq read from hypervisor : %lu.%03lu MHz\n", |
63 | (unsigned long) tsc_hz / 1000, | 63 | (unsigned long) tsc_hz / 1000, |
64 | (unsigned long) tsc_hz % 1000); | 64 | (unsigned long) tsc_hz % 1000); |
65 | |||
66 | if (!preset_lpj) { | ||
67 | lpj = ((u64)tsc_hz * 1000); | ||
68 | do_div(lpj, HZ); | ||
69 | preset_lpj = lpj; | ||
70 | } | ||
71 | |||
65 | return tsc_hz; | 72 | return tsc_hz; |
66 | } | 73 | } |
67 | 74 | ||
diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c index ebd4c51d096a..764c7c2b1811 100644 --- a/arch/x86/kernel/crash.c +++ b/arch/x86/kernel/crash.c | |||
@@ -28,6 +28,8 @@ | |||
28 | #include <asm/reboot.h> | 28 | #include <asm/reboot.h> |
29 | #include <asm/virtext.h> | 29 | #include <asm/virtext.h> |
30 | 30 | ||
31 | int in_crash_kexec; | ||
32 | |||
31 | #if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC) | 33 | #if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC) |
32 | 34 | ||
33 | static void kdump_nmi_callback(int cpu, struct die_args *args) | 35 | static void kdump_nmi_callback(int cpu, struct die_args *args) |
@@ -61,6 +63,7 @@ static void kdump_nmi_callback(int cpu, struct die_args *args) | |||
61 | 63 | ||
62 | static void kdump_nmi_shootdown_cpus(void) | 64 | static void kdump_nmi_shootdown_cpus(void) |
63 | { | 65 | { |
66 | in_crash_kexec = 1; | ||
64 | nmi_shootdown_cpus(kdump_nmi_callback); | 67 | nmi_shootdown_cpus(kdump_nmi_callback); |
65 | 68 | ||
66 | disable_local_APIC(); | 69 | disable_local_APIC(); |
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c index c89a386930b7..6e8752c1bd52 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c | |||
@@ -18,7 +18,6 @@ | |||
18 | 18 | ||
19 | #include <asm/stacktrace.h> | 19 | #include <asm/stacktrace.h> |
20 | 20 | ||
21 | #include "dumpstack.h" | ||
22 | 21 | ||
23 | int panic_on_unrecovered_nmi; | 22 | int panic_on_unrecovered_nmi; |
24 | int panic_on_io_nmi; | 23 | int panic_on_io_nmi; |
diff --git a/arch/x86/kernel/dumpstack.h b/arch/x86/kernel/dumpstack.h deleted file mode 100644 index e1a93be4fd44..000000000000 --- a/arch/x86/kernel/dumpstack.h +++ /dev/null | |||
@@ -1,56 +0,0 @@ | |||
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 | #include <linux/uaccess.h> | ||
18 | |||
19 | extern void | ||
20 | show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
21 | unsigned long *stack, unsigned long bp, char *log_lvl); | ||
22 | |||
23 | extern void | ||
24 | show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | ||
25 | unsigned long *sp, unsigned long bp, char *log_lvl); | ||
26 | |||
27 | extern unsigned int code_bytes; | ||
28 | |||
29 | /* The form of the top of the frame on the stack */ | ||
30 | struct stack_frame { | ||
31 | struct stack_frame *next_frame; | ||
32 | unsigned long return_address; | ||
33 | }; | ||
34 | |||
35 | struct stack_frame_ia32 { | ||
36 | u32 next_frame; | ||
37 | u32 return_address; | ||
38 | }; | ||
39 | |||
40 | static inline unsigned long rewind_frame_pointer(int n) | ||
41 | { | ||
42 | struct stack_frame *frame; | ||
43 | |||
44 | get_bp(frame); | ||
45 | |||
46 | #ifdef CONFIG_FRAME_POINTER | ||
47 | while (n--) { | ||
48 | if (probe_kernel_address(&frame->next_frame, frame)) | ||
49 | break; | ||
50 | } | ||
51 | #endif | ||
52 | |||
53 | return (unsigned long)frame; | ||
54 | } | ||
55 | |||
56 | #endif /* DUMPSTACK_H */ | ||
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c index 11540a189d93..0f6376ffa2d9 100644 --- a/arch/x86/kernel/dumpstack_32.c +++ b/arch/x86/kernel/dumpstack_32.c | |||
@@ -16,8 +16,6 @@ | |||
16 | 16 | ||
17 | #include <asm/stacktrace.h> | 17 | #include <asm/stacktrace.h> |
18 | 18 | ||
19 | #include "dumpstack.h" | ||
20 | |||
21 | 19 | ||
22 | void dump_trace(struct task_struct *task, struct pt_regs *regs, | 20 | void dump_trace(struct task_struct *task, struct pt_regs *regs, |
23 | unsigned long *stack, unsigned long bp, | 21 | unsigned long *stack, unsigned long bp, |
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index 272c9f1f05f3..57a21f11c791 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
@@ -16,7 +16,6 @@ | |||
16 | 16 | ||
17 | #include <asm/stacktrace.h> | 17 | #include <asm/stacktrace.h> |
18 | 18 | ||
19 | #include "dumpstack.h" | ||
20 | 19 | ||
21 | #define N_EXCEPTION_STACKS_END \ | 20 | #define N_EXCEPTION_STACKS_END \ |
22 | (N_EXCEPTION_STACKS + DEBUG_STKSZ/EXCEPTION_STKSZ - 2) | 21 | (N_EXCEPTION_STACKS + DEBUG_STKSZ/EXCEPTION_STKSZ - 2) |
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index cd49141cf153..227d00920d2f 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
@@ -611,14 +611,14 @@ ldt_ss: | |||
611 | * compensating for the offset by changing to the ESPFIX segment with | 611 | * compensating for the offset by changing to the ESPFIX segment with |
612 | * a base address that matches for the difference. | 612 | * a base address that matches for the difference. |
613 | */ | 613 | */ |
614 | #define GDT_ESPFIX_SS PER_CPU_VAR(gdt_page) + (GDT_ENTRY_ESPFIX_SS * 8) | ||
614 | mov %esp, %edx /* load kernel esp */ | 615 | mov %esp, %edx /* load kernel esp */ |
615 | mov PT_OLDESP(%esp), %eax /* load userspace esp */ | 616 | mov PT_OLDESP(%esp), %eax /* load userspace esp */ |
616 | mov %dx, %ax /* eax: new kernel esp */ | 617 | mov %dx, %ax /* eax: new kernel esp */ |
617 | sub %eax, %edx /* offset (low word is 0) */ | 618 | sub %eax, %edx /* offset (low word is 0) */ |
618 | PER_CPU(gdt_page, %ebx) | ||
619 | shr $16, %edx | 619 | shr $16, %edx |
620 | mov %dl, GDT_ENTRY_ESPFIX_SS * 8 + 4(%ebx) /* bits 16..23 */ | 620 | mov %dl, GDT_ESPFIX_SS + 4 /* bits 16..23 */ |
621 | mov %dh, GDT_ENTRY_ESPFIX_SS * 8 + 7(%ebx) /* bits 24..31 */ | 621 | mov %dh, GDT_ESPFIX_SS + 7 /* bits 24..31 */ |
622 | pushl $__ESPFIX_SS | 622 | pushl $__ESPFIX_SS |
623 | CFI_ADJUST_CFA_OFFSET 4 | 623 | CFI_ADJUST_CFA_OFFSET 4 |
624 | push %eax /* new kernel esp */ | 624 | push %eax /* new kernel esp */ |
@@ -791,9 +791,8 @@ ptregs_clone: | |||
791 | * normal stack and adjusts ESP with the matching offset. | 791 | * normal stack and adjusts ESP with the matching offset. |
792 | */ | 792 | */ |
793 | /* fixup the stack */ | 793 | /* fixup the stack */ |
794 | PER_CPU(gdt_page, %ebx) | 794 | mov GDT_ESPFIX_SS + 4, %al /* bits 16..23 */ |
795 | mov GDT_ENTRY_ESPFIX_SS * 8 + 4(%ebx), %al /* bits 16..23 */ | 795 | mov GDT_ESPFIX_SS + 7, %ah /* bits 24..31 */ |
796 | mov GDT_ENTRY_ESPFIX_SS * 8 + 7(%ebx), %ah /* bits 24..31 */ | ||
797 | shl $16, %eax | 796 | shl $16, %eax |
798 | addl %esp, %eax /* the adjusted stack pointer */ | 797 | addl %esp, %eax /* the adjusted stack pointer */ |
799 | pushl $__KERNEL_DS | 798 | pushl $__KERNEL_DS |
@@ -914,7 +913,7 @@ ENTRY(simd_coprocessor_error) | |||
914 | .balign 4 | 913 | .balign 4 |
915 | .long 661b | 914 | .long 661b |
916 | .long 663f | 915 | .long 663f |
917 | .byte X86_FEATURE_XMM | 916 | .word X86_FEATURE_XMM |
918 | .byte 662b-661b | 917 | .byte 662b-661b |
919 | .byte 664f-663f | 918 | .byte 664f-663f |
920 | .previous | 919 | .previous |
@@ -1166,6 +1165,9 @@ ENTRY(xen_failsafe_callback) | |||
1166 | .previous | 1165 | .previous |
1167 | ENDPROC(xen_failsafe_callback) | 1166 | ENDPROC(xen_failsafe_callback) |
1168 | 1167 | ||
1168 | BUILD_INTERRUPT3(xen_hvm_callback_vector, XEN_HVM_EVTCHN_CALLBACK, | ||
1169 | xen_evtchn_do_upcall) | ||
1170 | |||
1169 | #endif /* CONFIG_XEN */ | 1171 | #endif /* CONFIG_XEN */ |
1170 | 1172 | ||
1171 | #ifdef CONFIG_FUNCTION_TRACER | 1173 | #ifdef CONFIG_FUNCTION_TRACER |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 4db7c4d12ffa..17be5ec7cbba 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -1065,6 +1065,7 @@ ENTRY(\sym) | |||
1065 | END(\sym) | 1065 | END(\sym) |
1066 | .endm | 1066 | .endm |
1067 | 1067 | ||
1068 | #define INIT_TSS_IST(x) PER_CPU_VAR(init_tss) + (TSS_ist + ((x) - 1) * 8) | ||
1068 | .macro paranoidzeroentry_ist sym do_sym ist | 1069 | .macro paranoidzeroentry_ist sym do_sym ist |
1069 | ENTRY(\sym) | 1070 | ENTRY(\sym) |
1070 | INTR_FRAME | 1071 | INTR_FRAME |
@@ -1076,10 +1077,9 @@ ENTRY(\sym) | |||
1076 | TRACE_IRQS_OFF | 1077 | TRACE_IRQS_OFF |
1077 | movq %rsp,%rdi /* pt_regs pointer */ | 1078 | movq %rsp,%rdi /* pt_regs pointer */ |
1078 | xorl %esi,%esi /* no error code */ | 1079 | xorl %esi,%esi /* no error code */ |
1079 | PER_CPU(init_tss, %r12) | 1080 | subq $EXCEPTION_STKSZ, INIT_TSS_IST(\ist) |
1080 | subq $EXCEPTION_STKSZ, TSS_ist + (\ist - 1) * 8(%r12) | ||
1081 | call \do_sym | 1081 | call \do_sym |
1082 | addq $EXCEPTION_STKSZ, TSS_ist + (\ist - 1) * 8(%r12) | 1082 | addq $EXCEPTION_STKSZ, INIT_TSS_IST(\ist) |
1083 | jmp paranoid_exit /* %ebx: no swapgs flag */ | 1083 | jmp paranoid_exit /* %ebx: no swapgs flag */ |
1084 | CFI_ENDPROC | 1084 | CFI_ENDPROC |
1085 | END(\sym) | 1085 | END(\sym) |
@@ -1185,13 +1185,13 @@ END(kernel_thread_helper) | |||
1185 | * execve(). This function needs to use IRET, not SYSRET, to set up all state properly. | 1185 | * execve(). This function needs to use IRET, not SYSRET, to set up all state properly. |
1186 | * | 1186 | * |
1187 | * C extern interface: | 1187 | * C extern interface: |
1188 | * extern long execve(char *name, char **argv, char **envp) | 1188 | * extern long execve(const char *name, char **argv, char **envp) |
1189 | * | 1189 | * |
1190 | * asm input arguments: | 1190 | * asm input arguments: |
1191 | * rdi: name, rsi: argv, rdx: envp | 1191 | * rdi: name, rsi: argv, rdx: envp |
1192 | * | 1192 | * |
1193 | * We want to fallback into: | 1193 | * We want to fallback into: |
1194 | * extern long sys_execve(char *name, char **argv,char **envp, struct pt_regs *regs) | 1194 | * extern long sys_execve(const char *name, char **argv,char **envp, struct pt_regs *regs) |
1195 | * | 1195 | * |
1196 | * do_sys_execve asm fallback arguments: | 1196 | * do_sys_execve asm fallback arguments: |
1197 | * rdi: name, rsi: argv, rdx: envp, rcx: fake frame on the stack | 1197 | * rdi: name, rsi: argv, rdx: envp, rcx: fake frame on the stack |
@@ -1329,6 +1329,9 @@ ENTRY(xen_failsafe_callback) | |||
1329 | CFI_ENDPROC | 1329 | CFI_ENDPROC |
1330 | END(xen_failsafe_callback) | 1330 | END(xen_failsafe_callback) |
1331 | 1331 | ||
1332 | apicinterrupt XEN_HVM_EVTCHN_CALLBACK \ | ||
1333 | xen_hvm_callback_vector xen_evtchn_do_upcall | ||
1334 | |||
1332 | #endif /* CONFIG_XEN */ | 1335 | #endif /* CONFIG_XEN */ |
1333 | 1336 | ||
1334 | /* | 1337 | /* |
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index 37c3d4b17d85..fa8c1b8e09fb 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S | |||
@@ -131,6 +131,12 @@ ENTRY(startup_32) | |||
131 | movsl | 131 | movsl |
132 | 1: | 132 | 1: |
133 | 133 | ||
134 | #ifdef CONFIG_OLPC_OPENFIRMWARE | ||
135 | /* save OFW's pgdir table for later use when calling into OFW */ | ||
136 | movl %cr3, %eax | ||
137 | movl %eax, pa(olpc_ofw_pgd) | ||
138 | #endif | ||
139 | |||
134 | #ifdef CONFIG_PARAVIRT | 140 | #ifdef CONFIG_PARAVIRT |
135 | /* This is can only trip for a broken bootloader... */ | 141 | /* This is can only trip for a broken bootloader... */ |
136 | cmpw $0x207, pa(boot_params + BP_version) | 142 | cmpw $0x207, pa(boot_params + BP_version) |
@@ -328,7 +334,7 @@ ENTRY(startup_32_smp) | |||
328 | /* | 334 | /* |
329 | * Enable paging | 335 | * Enable paging |
330 | */ | 336 | */ |
331 | movl $pa(swapper_pg_dir),%eax | 337 | movl pa(initial_page_table), %eax |
332 | movl %eax,%cr3 /* set the page table pointer.. */ | 338 | movl %eax,%cr3 /* set the page table pointer.. */ |
333 | movl %cr0,%eax | 339 | movl %cr0,%eax |
334 | orl $X86_CR0_PG,%eax | 340 | orl $X86_CR0_PG,%eax |
@@ -608,6 +614,8 @@ ignore_int: | |||
608 | .align 4 | 614 | .align 4 |
609 | ENTRY(initial_code) | 615 | ENTRY(initial_code) |
610 | .long i386_start_kernel | 616 | .long i386_start_kernel |
617 | ENTRY(initial_page_table) | ||
618 | .long pa(swapper_pg_dir) | ||
611 | 619 | ||
612 | /* | 620 | /* |
613 | * BSS section | 621 | * BSS section |
@@ -623,6 +631,10 @@ ENTRY(swapper_pg_dir) | |||
623 | #endif | 631 | #endif |
624 | swapper_pg_fixmap: | 632 | swapper_pg_fixmap: |
625 | .fill 1024,4,0 | 633 | .fill 1024,4,0 |
634 | #ifdef CONFIG_X86_TRAMPOLINE | ||
635 | ENTRY(trampoline_pg_dir) | ||
636 | .fill 1024,4,0 | ||
637 | #endif | ||
626 | ENTRY(empty_zero_page) | 638 | ENTRY(empty_zero_page) |
627 | .fill 4096,1,0 | 639 | .fill 4096,1,0 |
628 | 640 | ||
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 3d1e6f16b7a6..239046bd447f 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
@@ -234,9 +234,8 @@ ENTRY(secondary_startup_64) | |||
234 | * init data section till per cpu areas are set up. | 234 | * init data section till per cpu areas are set up. |
235 | */ | 235 | */ |
236 | movl $MSR_GS_BASE,%ecx | 236 | movl $MSR_GS_BASE,%ecx |
237 | movq initial_gs(%rip),%rax | 237 | movl initial_gs(%rip),%eax |
238 | movq %rax,%rdx | 238 | movl initial_gs+4(%rip),%edx |
239 | shrq $32,%rdx | ||
240 | wrmsr | 239 | wrmsr |
241 | 240 | ||
242 | /* esi is pointer to real mode structure with interesting info. | 241 | /* esi is pointer to real mode structure with interesting info. |
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index ba390d731175..351f9c0fea1f 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
@@ -16,7 +16,6 @@ | |||
16 | #include <asm/hpet.h> | 16 | #include <asm/hpet.h> |
17 | 17 | ||
18 | #define HPET_MASK CLOCKSOURCE_MASK(32) | 18 | #define HPET_MASK CLOCKSOURCE_MASK(32) |
19 | #define HPET_SHIFT 22 | ||
20 | 19 | ||
21 | /* FSEC = 10^-15 | 20 | /* FSEC = 10^-15 |
22 | NSEC = 10^-9 */ | 21 | NSEC = 10^-9 */ |
@@ -583,7 +582,7 @@ static void init_one_hpet_msi_clockevent(struct hpet_dev *hdev, int cpu) | |||
583 | * scaled math multiplication factor for nanosecond to hpet tick | 582 | * scaled math multiplication factor for nanosecond to hpet tick |
584 | * conversion. | 583 | * conversion. |
585 | */ | 584 | */ |
586 | hpet_freq = 1000000000000000ULL; | 585 | hpet_freq = FSEC_PER_SEC; |
587 | do_div(hpet_freq, hpet_period); | 586 | do_div(hpet_freq, hpet_period); |
588 | evt->mult = div_sc((unsigned long) hpet_freq, | 587 | evt->mult = div_sc((unsigned long) hpet_freq, |
589 | NSEC_PER_SEC, evt->shift); | 588 | NSEC_PER_SEC, evt->shift); |
@@ -787,7 +786,6 @@ static struct clocksource clocksource_hpet = { | |||
787 | .rating = 250, | 786 | .rating = 250, |
788 | .read = read_hpet, | 787 | .read = read_hpet, |
789 | .mask = HPET_MASK, | 788 | .mask = HPET_MASK, |
790 | .shift = HPET_SHIFT, | ||
791 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 789 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
792 | .resume = hpet_resume_counter, | 790 | .resume = hpet_resume_counter, |
793 | #ifdef CONFIG_X86_64 | 791 | #ifdef CONFIG_X86_64 |
@@ -798,6 +796,7 @@ static struct clocksource clocksource_hpet = { | |||
798 | static int hpet_clocksource_register(void) | 796 | static int hpet_clocksource_register(void) |
799 | { | 797 | { |
800 | u64 start, now; | 798 | u64 start, now; |
799 | u64 hpet_freq; | ||
801 | cycle_t t1; | 800 | cycle_t t1; |
802 | 801 | ||
803 | /* Start the counter */ | 802 | /* Start the counter */ |
@@ -832,9 +831,15 @@ static int hpet_clocksource_register(void) | |||
832 | * mult = (hpet_period * 2^shift)/10^6 | 831 | * mult = (hpet_period * 2^shift)/10^6 |
833 | * mult = (hpet_period << shift)/FSEC_PER_NSEC | 832 | * mult = (hpet_period << shift)/FSEC_PER_NSEC |
834 | */ | 833 | */ |
835 | clocksource_hpet.mult = div_sc(hpet_period, FSEC_PER_NSEC, HPET_SHIFT); | ||
836 | 834 | ||
837 | clocksource_register(&clocksource_hpet); | 835 | /* Need to convert hpet_period (fsec/cyc) to cyc/sec: |
836 | * | ||
837 | * cyc/sec = FSEC_PER_SEC/hpet_period(fsec/cyc) | ||
838 | * cyc/sec = (FSEC_PER_NSEC * NSEC_PER_SEC)/hpet_period | ||
839 | */ | ||
840 | hpet_freq = FSEC_PER_SEC; | ||
841 | do_div(hpet_freq, hpet_period); | ||
842 | clocksource_register_hz(&clocksource_hpet, (u32)hpet_freq); | ||
838 | 843 | ||
839 | return 0; | 844 | return 0; |
840 | } | 845 | } |
diff --git a/arch/x86/kernel/hw_breakpoint.c b/arch/x86/kernel/hw_breakpoint.c index a8f1b803d2fd..a474ec37c32f 100644 --- a/arch/x86/kernel/hw_breakpoint.c +++ b/arch/x86/kernel/hw_breakpoint.c | |||
@@ -208,6 +208,9 @@ int arch_bp_generic_fields(int x86_len, int x86_type, | |||
208 | { | 208 | { |
209 | /* Len */ | 209 | /* Len */ |
210 | switch (x86_len) { | 210 | switch (x86_len) { |
211 | case X86_BREAKPOINT_LEN_X: | ||
212 | *gen_len = sizeof(long); | ||
213 | break; | ||
211 | case X86_BREAKPOINT_LEN_1: | 214 | case X86_BREAKPOINT_LEN_1: |
212 | *gen_len = HW_BREAKPOINT_LEN_1; | 215 | *gen_len = HW_BREAKPOINT_LEN_1; |
213 | break; | 216 | break; |
@@ -251,6 +254,29 @@ static int arch_build_bp_info(struct perf_event *bp) | |||
251 | 254 | ||
252 | info->address = bp->attr.bp_addr; | 255 | info->address = bp->attr.bp_addr; |
253 | 256 | ||
257 | /* Type */ | ||
258 | switch (bp->attr.bp_type) { | ||
259 | case HW_BREAKPOINT_W: | ||
260 | info->type = X86_BREAKPOINT_WRITE; | ||
261 | break; | ||
262 | case HW_BREAKPOINT_W | HW_BREAKPOINT_R: | ||
263 | info->type = X86_BREAKPOINT_RW; | ||
264 | break; | ||
265 | case HW_BREAKPOINT_X: | ||
266 | info->type = X86_BREAKPOINT_EXECUTE; | ||
267 | /* | ||
268 | * x86 inst breakpoints need to have a specific undefined len. | ||
269 | * But we still need to check userspace is not trying to setup | ||
270 | * an unsupported length, to get a range breakpoint for example. | ||
271 | */ | ||
272 | if (bp->attr.bp_len == sizeof(long)) { | ||
273 | info->len = X86_BREAKPOINT_LEN_X; | ||
274 | return 0; | ||
275 | } | ||
276 | default: | ||
277 | return -EINVAL; | ||
278 | } | ||
279 | |||
254 | /* Len */ | 280 | /* Len */ |
255 | switch (bp->attr.bp_len) { | 281 | switch (bp->attr.bp_len) { |
256 | case HW_BREAKPOINT_LEN_1: | 282 | case HW_BREAKPOINT_LEN_1: |
@@ -271,21 +297,6 @@ static int arch_build_bp_info(struct perf_event *bp) | |||
271 | return -EINVAL; | 297 | return -EINVAL; |
272 | } | 298 | } |
273 | 299 | ||
274 | /* Type */ | ||
275 | switch (bp->attr.bp_type) { | ||
276 | case HW_BREAKPOINT_W: | ||
277 | info->type = X86_BREAKPOINT_WRITE; | ||
278 | break; | ||
279 | case HW_BREAKPOINT_W | HW_BREAKPOINT_R: | ||
280 | info->type = X86_BREAKPOINT_RW; | ||
281 | break; | ||
282 | case HW_BREAKPOINT_X: | ||
283 | info->type = X86_BREAKPOINT_EXECUTE; | ||
284 | break; | ||
285 | default: | ||
286 | return -EINVAL; | ||
287 | } | ||
288 | |||
289 | return 0; | 300 | return 0; |
290 | } | 301 | } |
291 | /* | 302 | /* |
@@ -305,6 +316,9 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp) | |||
305 | ret = -EINVAL; | 316 | ret = -EINVAL; |
306 | 317 | ||
307 | switch (info->len) { | 318 | switch (info->len) { |
319 | case X86_BREAKPOINT_LEN_X: | ||
320 | align = sizeof(long) -1; | ||
321 | break; | ||
308 | case X86_BREAKPOINT_LEN_1: | 322 | case X86_BREAKPOINT_LEN_1: |
309 | align = 0; | 323 | align = 0; |
310 | break; | 324 | break; |
@@ -466,6 +480,13 @@ static int __kprobes hw_breakpoint_handler(struct die_args *args) | |||
466 | 480 | ||
467 | perf_bp_event(bp, args->regs); | 481 | perf_bp_event(bp, args->regs); |
468 | 482 | ||
483 | /* | ||
484 | * Set up resume flag to avoid breakpoint recursion when | ||
485 | * returning back to origin. | ||
486 | */ | ||
487 | if (bp->hw.info.type == X86_BREAKPOINT_EXECUTE) | ||
488 | args->regs->flags |= X86_EFLAGS_RF; | ||
489 | |||
469 | rcu_read_unlock(); | 490 | rcu_read_unlock(); |
470 | } | 491 | } |
471 | /* | 492 | /* |
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c index f855658d2784..a46cb3522c0c 100644 --- a/arch/x86/kernel/i387.c +++ b/arch/x86/kernel/i387.c | |||
@@ -60,18 +60,18 @@ void __cpuinit mxcsr_feature_mask_init(void) | |||
60 | stts(); | 60 | stts(); |
61 | } | 61 | } |
62 | 62 | ||
63 | void __cpuinit init_thread_xstate(void) | 63 | static void __cpuinit init_thread_xstate(void) |
64 | { | 64 | { |
65 | /* | ||
66 | * Note that xstate_size might be overwriten later during | ||
67 | * xsave_init(). | ||
68 | */ | ||
69 | |||
65 | if (!HAVE_HWFP) { | 70 | if (!HAVE_HWFP) { |
66 | xstate_size = sizeof(struct i387_soft_struct); | 71 | xstate_size = sizeof(struct i387_soft_struct); |
67 | return; | 72 | return; |
68 | } | 73 | } |
69 | 74 | ||
70 | if (cpu_has_xsave) { | ||
71 | xsave_cntxt_init(); | ||
72 | return; | ||
73 | } | ||
74 | |||
75 | if (cpu_has_fxsr) | 75 | if (cpu_has_fxsr) |
76 | xstate_size = sizeof(struct i387_fxsave_struct); | 76 | xstate_size = sizeof(struct i387_fxsave_struct); |
77 | #ifdef CONFIG_X86_32 | 77 | #ifdef CONFIG_X86_32 |
@@ -85,6 +85,7 @@ void __cpuinit init_thread_xstate(void) | |||
85 | * Called at bootup to set up the initial FPU state that is later cloned | 85 | * Called at bootup to set up the initial FPU state that is later cloned |
86 | * into all processes. | 86 | * into all processes. |
87 | */ | 87 | */ |
88 | |||
88 | void __cpuinit fpu_init(void) | 89 | void __cpuinit fpu_init(void) |
89 | { | 90 | { |
90 | unsigned long oldcr0 = read_cr0(); | 91 | unsigned long oldcr0 = read_cr0(); |
@@ -94,19 +95,24 @@ void __cpuinit fpu_init(void) | |||
94 | 95 | ||
95 | write_cr0(oldcr0 & ~(X86_CR0_TS|X86_CR0_EM)); /* clear TS and EM */ | 96 | write_cr0(oldcr0 & ~(X86_CR0_TS|X86_CR0_EM)); /* clear TS and EM */ |
96 | 97 | ||
97 | /* | ||
98 | * Boot processor to setup the FP and extended state context info. | ||
99 | */ | ||
100 | if (!smp_processor_id()) | 98 | if (!smp_processor_id()) |
101 | init_thread_xstate(); | 99 | init_thread_xstate(); |
102 | xsave_init(); | ||
103 | 100 | ||
104 | mxcsr_feature_mask_init(); | 101 | mxcsr_feature_mask_init(); |
105 | /* clean state in init */ | 102 | /* clean state in init */ |
106 | current_thread_info()->status = 0; | 103 | current_thread_info()->status = 0; |
107 | clear_used_math(); | 104 | clear_used_math(); |
108 | } | 105 | } |
109 | #endif /* CONFIG_X86_64 */ | 106 | |
107 | #else /* CONFIG_X86_64 */ | ||
108 | |||
109 | void __cpuinit fpu_init(void) | ||
110 | { | ||
111 | if (!smp_processor_id()) | ||
112 | init_thread_xstate(); | ||
113 | } | ||
114 | |||
115 | #endif /* CONFIG_X86_32 */ | ||
110 | 116 | ||
111 | void fpu_finit(struct fpu *fpu) | 117 | void fpu_finit(struct fpu *fpu) |
112 | { | 118 | { |
@@ -192,6 +198,8 @@ int xfpregs_get(struct task_struct *target, const struct user_regset *regset, | |||
192 | if (ret) | 198 | if (ret) |
193 | return ret; | 199 | return ret; |
194 | 200 | ||
201 | sanitize_i387_state(target); | ||
202 | |||
195 | return user_regset_copyout(&pos, &count, &kbuf, &ubuf, | 203 | return user_regset_copyout(&pos, &count, &kbuf, &ubuf, |
196 | &target->thread.fpu.state->fxsave, 0, -1); | 204 | &target->thread.fpu.state->fxsave, 0, -1); |
197 | } | 205 | } |
@@ -209,6 +217,8 @@ int xfpregs_set(struct task_struct *target, const struct user_regset *regset, | |||
209 | if (ret) | 217 | if (ret) |
210 | return ret; | 218 | return ret; |
211 | 219 | ||
220 | sanitize_i387_state(target); | ||
221 | |||
212 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, | 222 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, |
213 | &target->thread.fpu.state->fxsave, 0, -1); | 223 | &target->thread.fpu.state->fxsave, 0, -1); |
214 | 224 | ||
@@ -448,6 +458,8 @@ int fpregs_get(struct task_struct *target, const struct user_regset *regset, | |||
448 | -1); | 458 | -1); |
449 | } | 459 | } |
450 | 460 | ||
461 | sanitize_i387_state(target); | ||
462 | |||
451 | if (kbuf && pos == 0 && count == sizeof(env)) { | 463 | if (kbuf && pos == 0 && count == sizeof(env)) { |
452 | convert_from_fxsr(kbuf, target); | 464 | convert_from_fxsr(kbuf, target); |
453 | return 0; | 465 | return 0; |
@@ -469,6 +481,8 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset, | |||
469 | if (ret) | 481 | if (ret) |
470 | return ret; | 482 | return ret; |
471 | 483 | ||
484 | sanitize_i387_state(target); | ||
485 | |||
472 | if (!HAVE_HWFP) | 486 | if (!HAVE_HWFP) |
473 | return fpregs_soft_set(target, regset, pos, count, kbuf, ubuf); | 487 | return fpregs_soft_set(target, regset, pos, count, kbuf, ubuf); |
474 | 488 | ||
@@ -535,6 +549,9 @@ static int save_i387_xsave(void __user *buf) | |||
535 | struct _fpstate_ia32 __user *fx = buf; | 549 | struct _fpstate_ia32 __user *fx = buf; |
536 | int err = 0; | 550 | int err = 0; |
537 | 551 | ||
552 | |||
553 | sanitize_i387_state(tsk); | ||
554 | |||
538 | /* | 555 | /* |
539 | * For legacy compatible, we always set FP/SSE bits in the bit | 556 | * For legacy compatible, we always set FP/SSE bits in the bit |
540 | * vector while saving the state to the user context. | 557 | * vector while saving the state to the user context. |
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c index 01ab17ae2ae7..852b81967a37 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c | |||
@@ -49,55 +49,94 @@ | |||
49 | #include <asm/system.h> | 49 | #include <asm/system.h> |
50 | #include <asm/apic.h> | 50 | #include <asm/apic.h> |
51 | 51 | ||
52 | /** | 52 | struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = |
53 | * pt_regs_to_gdb_regs - Convert ptrace regs to GDB regs | ||
54 | * @gdb_regs: A pointer to hold the registers in the order GDB wants. | ||
55 | * @regs: The &struct pt_regs of the current process. | ||
56 | * | ||
57 | * Convert the pt_regs in @regs into the format for registers that | ||
58 | * GDB expects, stored in @gdb_regs. | ||
59 | */ | ||
60 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | ||
61 | { | 53 | { |
62 | #ifndef CONFIG_X86_32 | 54 | #ifdef CONFIG_X86_32 |
63 | u32 *gdb_regs32 = (u32 *)gdb_regs; | 55 | { "ax", 4, offsetof(struct pt_regs, ax) }, |
56 | { "cx", 4, offsetof(struct pt_regs, cx) }, | ||
57 | { "dx", 4, offsetof(struct pt_regs, dx) }, | ||
58 | { "bx", 4, offsetof(struct pt_regs, bx) }, | ||
59 | { "sp", 4, offsetof(struct pt_regs, sp) }, | ||
60 | { "bp", 4, offsetof(struct pt_regs, bp) }, | ||
61 | { "si", 4, offsetof(struct pt_regs, si) }, | ||
62 | { "di", 4, offsetof(struct pt_regs, di) }, | ||
63 | { "ip", 4, offsetof(struct pt_regs, ip) }, | ||
64 | { "flags", 4, offsetof(struct pt_regs, flags) }, | ||
65 | { "cs", 4, offsetof(struct pt_regs, cs) }, | ||
66 | { "ss", 4, offsetof(struct pt_regs, ss) }, | ||
67 | { "ds", 4, offsetof(struct pt_regs, ds) }, | ||
68 | { "es", 4, offsetof(struct pt_regs, es) }, | ||
69 | { "fs", 4, -1 }, | ||
70 | { "gs", 4, -1 }, | ||
71 | #else | ||
72 | { "ax", 8, offsetof(struct pt_regs, ax) }, | ||
73 | { "bx", 8, offsetof(struct pt_regs, bx) }, | ||
74 | { "cx", 8, offsetof(struct pt_regs, cx) }, | ||
75 | { "dx", 8, offsetof(struct pt_regs, dx) }, | ||
76 | { "si", 8, offsetof(struct pt_regs, dx) }, | ||
77 | { "di", 8, offsetof(struct pt_regs, di) }, | ||
78 | { "bp", 8, offsetof(struct pt_regs, bp) }, | ||
79 | { "sp", 8, offsetof(struct pt_regs, sp) }, | ||
80 | { "r8", 8, offsetof(struct pt_regs, r8) }, | ||
81 | { "r9", 8, offsetof(struct pt_regs, r9) }, | ||
82 | { "r10", 8, offsetof(struct pt_regs, r10) }, | ||
83 | { "r11", 8, offsetof(struct pt_regs, r11) }, | ||
84 | { "r12", 8, offsetof(struct pt_regs, r12) }, | ||
85 | { "r13", 8, offsetof(struct pt_regs, r13) }, | ||
86 | { "r14", 8, offsetof(struct pt_regs, r14) }, | ||
87 | { "r15", 8, offsetof(struct pt_regs, r15) }, | ||
88 | { "ip", 8, offsetof(struct pt_regs, ip) }, | ||
89 | { "flags", 4, offsetof(struct pt_regs, flags) }, | ||
90 | { "cs", 4, offsetof(struct pt_regs, cs) }, | ||
91 | { "ss", 4, offsetof(struct pt_regs, ss) }, | ||
64 | #endif | 92 | #endif |
65 | gdb_regs[GDB_AX] = regs->ax; | 93 | }; |
66 | gdb_regs[GDB_BX] = regs->bx; | 94 | |
67 | gdb_regs[GDB_CX] = regs->cx; | 95 | int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) |
68 | gdb_regs[GDB_DX] = regs->dx; | 96 | { |
69 | gdb_regs[GDB_SI] = regs->si; | 97 | if ( |
70 | gdb_regs[GDB_DI] = regs->di; | ||
71 | gdb_regs[GDB_BP] = regs->bp; | ||
72 | gdb_regs[GDB_PC] = regs->ip; | ||
73 | #ifdef CONFIG_X86_32 | 98 | #ifdef CONFIG_X86_32 |
74 | gdb_regs[GDB_PS] = regs->flags; | 99 | regno == GDB_SS || regno == GDB_FS || regno == GDB_GS || |
75 | gdb_regs[GDB_DS] = regs->ds; | 100 | #endif |
76 | gdb_regs[GDB_ES] = regs->es; | 101 | regno == GDB_SP || regno == GDB_ORIG_AX) |
77 | gdb_regs[GDB_CS] = regs->cs; | 102 | return 0; |
78 | gdb_regs[GDB_FS] = 0xFFFF; | 103 | |
79 | gdb_regs[GDB_GS] = 0xFFFF; | 104 | if (dbg_reg_def[regno].offset != -1) |
80 | if (user_mode_vm(regs)) { | 105 | memcpy((void *)regs + dbg_reg_def[regno].offset, mem, |
81 | gdb_regs[GDB_SS] = regs->ss; | 106 | dbg_reg_def[regno].size); |
82 | gdb_regs[GDB_SP] = regs->sp; | 107 | return 0; |
83 | } else { | 108 | } |
84 | gdb_regs[GDB_SS] = __KERNEL_DS; | 109 | |
85 | gdb_regs[GDB_SP] = kernel_stack_pointer(regs); | 110 | char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs) |
111 | { | ||
112 | if (regno == GDB_ORIG_AX) { | ||
113 | memcpy(mem, ®s->orig_ax, sizeof(regs->orig_ax)); | ||
114 | return "orig_ax"; | ||
86 | } | 115 | } |
87 | #else | 116 | if (regno >= DBG_MAX_REG_NUM || regno < 0) |
88 | gdb_regs[GDB_R8] = regs->r8; | 117 | return NULL; |
89 | gdb_regs[GDB_R9] = regs->r9; | 118 | |
90 | gdb_regs[GDB_R10] = regs->r10; | 119 | if (dbg_reg_def[regno].offset != -1) |
91 | gdb_regs[GDB_R11] = regs->r11; | 120 | memcpy(mem, (void *)regs + dbg_reg_def[regno].offset, |
92 | gdb_regs[GDB_R12] = regs->r12; | 121 | dbg_reg_def[regno].size); |
93 | gdb_regs[GDB_R13] = regs->r13; | 122 | |
94 | gdb_regs[GDB_R14] = regs->r14; | 123 | switch (regno) { |
95 | gdb_regs[GDB_R15] = regs->r15; | 124 | #ifdef CONFIG_X86_32 |
96 | gdb_regs32[GDB_PS] = regs->flags; | 125 | case GDB_SS: |
97 | gdb_regs32[GDB_CS] = regs->cs; | 126 | if (!user_mode_vm(regs)) |
98 | gdb_regs32[GDB_SS] = regs->ss; | 127 | *(unsigned long *)mem = __KERNEL_DS; |
99 | gdb_regs[GDB_SP] = kernel_stack_pointer(regs); | 128 | break; |
129 | case GDB_SP: | ||
130 | if (!user_mode_vm(regs)) | ||
131 | *(unsigned long *)mem = kernel_stack_pointer(regs); | ||
132 | break; | ||
133 | case GDB_GS: | ||
134 | case GDB_FS: | ||
135 | *(unsigned long *)mem = 0xFFFF; | ||
136 | break; | ||
100 | #endif | 137 | #endif |
138 | } | ||
139 | return dbg_reg_def[regno].name; | ||
101 | } | 140 | } |
102 | 141 | ||
103 | /** | 142 | /** |
@@ -150,54 +189,13 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) | |||
150 | gdb_regs[GDB_SP] = p->thread.sp; | 189 | gdb_regs[GDB_SP] = p->thread.sp; |
151 | } | 190 | } |
152 | 191 | ||
153 | /** | ||
154 | * gdb_regs_to_pt_regs - Convert GDB regs to ptrace regs. | ||
155 | * @gdb_regs: A pointer to hold the registers we've received from GDB. | ||
156 | * @regs: A pointer to a &struct pt_regs to hold these values in. | ||
157 | * | ||
158 | * Convert the GDB regs in @gdb_regs into the pt_regs, and store them | ||
159 | * in @regs. | ||
160 | */ | ||
161 | void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) | ||
162 | { | ||
163 | #ifndef CONFIG_X86_32 | ||
164 | u32 *gdb_regs32 = (u32 *)gdb_regs; | ||
165 | #endif | ||
166 | regs->ax = gdb_regs[GDB_AX]; | ||
167 | regs->bx = gdb_regs[GDB_BX]; | ||
168 | regs->cx = gdb_regs[GDB_CX]; | ||
169 | regs->dx = gdb_regs[GDB_DX]; | ||
170 | regs->si = gdb_regs[GDB_SI]; | ||
171 | regs->di = gdb_regs[GDB_DI]; | ||
172 | regs->bp = gdb_regs[GDB_BP]; | ||
173 | regs->ip = gdb_regs[GDB_PC]; | ||
174 | #ifdef CONFIG_X86_32 | ||
175 | regs->flags = gdb_regs[GDB_PS]; | ||
176 | regs->ds = gdb_regs[GDB_DS]; | ||
177 | regs->es = gdb_regs[GDB_ES]; | ||
178 | regs->cs = gdb_regs[GDB_CS]; | ||
179 | #else | ||
180 | regs->r8 = gdb_regs[GDB_R8]; | ||
181 | regs->r9 = gdb_regs[GDB_R9]; | ||
182 | regs->r10 = gdb_regs[GDB_R10]; | ||
183 | regs->r11 = gdb_regs[GDB_R11]; | ||
184 | regs->r12 = gdb_regs[GDB_R12]; | ||
185 | regs->r13 = gdb_regs[GDB_R13]; | ||
186 | regs->r14 = gdb_regs[GDB_R14]; | ||
187 | regs->r15 = gdb_regs[GDB_R15]; | ||
188 | regs->flags = gdb_regs32[GDB_PS]; | ||
189 | regs->cs = gdb_regs32[GDB_CS]; | ||
190 | regs->ss = gdb_regs32[GDB_SS]; | ||
191 | #endif | ||
192 | } | ||
193 | |||
194 | static struct hw_breakpoint { | 192 | static struct hw_breakpoint { |
195 | unsigned enabled; | 193 | unsigned enabled; |
196 | unsigned long addr; | 194 | unsigned long addr; |
197 | int len; | 195 | int len; |
198 | int type; | 196 | int type; |
199 | struct perf_event **pev; | 197 | struct perf_event * __percpu *pev; |
200 | } breakinfo[4]; | 198 | } breakinfo[HBP_NUM]; |
201 | 199 | ||
202 | static unsigned long early_dr7; | 200 | static unsigned long early_dr7; |
203 | 201 | ||
@@ -205,7 +203,7 @@ static void kgdb_correct_hw_break(void) | |||
205 | { | 203 | { |
206 | int breakno; | 204 | int breakno; |
207 | 205 | ||
208 | for (breakno = 0; breakno < 4; breakno++) { | 206 | for (breakno = 0; breakno < HBP_NUM; breakno++) { |
209 | struct perf_event *bp; | 207 | struct perf_event *bp; |
210 | struct arch_hw_breakpoint *info; | 208 | struct arch_hw_breakpoint *info; |
211 | int val; | 209 | int val; |
@@ -292,10 +290,10 @@ kgdb_remove_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype) | |||
292 | { | 290 | { |
293 | int i; | 291 | int i; |
294 | 292 | ||
295 | for (i = 0; i < 4; i++) | 293 | for (i = 0; i < HBP_NUM; i++) |
296 | if (breakinfo[i].addr == addr && breakinfo[i].enabled) | 294 | if (breakinfo[i].addr == addr && breakinfo[i].enabled) |
297 | break; | 295 | break; |
298 | if (i == 4) | 296 | if (i == HBP_NUM) |
299 | return -1; | 297 | return -1; |
300 | 298 | ||
301 | if (hw_break_release_slot(i)) { | 299 | if (hw_break_release_slot(i)) { |
@@ -313,7 +311,7 @@ static void kgdb_remove_all_hw_break(void) | |||
313 | int cpu = raw_smp_processor_id(); | 311 | int cpu = raw_smp_processor_id(); |
314 | struct perf_event *bp; | 312 | struct perf_event *bp; |
315 | 313 | ||
316 | for (i = 0; i < 4; i++) { | 314 | for (i = 0; i < HBP_NUM; i++) { |
317 | if (!breakinfo[i].enabled) | 315 | if (!breakinfo[i].enabled) |
318 | continue; | 316 | continue; |
319 | bp = *per_cpu_ptr(breakinfo[i].pev, cpu); | 317 | bp = *per_cpu_ptr(breakinfo[i].pev, cpu); |
@@ -333,10 +331,10 @@ kgdb_set_hw_break(unsigned long addr, int len, enum kgdb_bptype bptype) | |||
333 | { | 331 | { |
334 | int i; | 332 | int i; |
335 | 333 | ||
336 | for (i = 0; i < 4; i++) | 334 | for (i = 0; i < HBP_NUM; i++) |
337 | if (!breakinfo[i].enabled) | 335 | if (!breakinfo[i].enabled) |
338 | break; | 336 | break; |
339 | if (i == 4) | 337 | if (i == HBP_NUM) |
340 | return -1; | 338 | return -1; |
341 | 339 | ||
342 | switch (bptype) { | 340 | switch (bptype) { |
@@ -397,7 +395,7 @@ void kgdb_disable_hw_debug(struct pt_regs *regs) | |||
397 | 395 | ||
398 | /* Disable hardware debugging while we are in kgdb: */ | 396 | /* Disable hardware debugging while we are in kgdb: */ |
399 | set_debugreg(0UL, 7); | 397 | set_debugreg(0UL, 7); |
400 | for (i = 0; i < 4; i++) { | 398 | for (i = 0; i < HBP_NUM; i++) { |
401 | if (!breakinfo[i].enabled) | 399 | if (!breakinfo[i].enabled) |
402 | continue; | 400 | continue; |
403 | if (dbg_is_early) { | 401 | if (dbg_is_early) { |
@@ -458,7 +456,6 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, | |||
458 | { | 456 | { |
459 | unsigned long addr; | 457 | unsigned long addr; |
460 | char *ptr; | 458 | char *ptr; |
461 | int newPC; | ||
462 | 459 | ||
463 | switch (remcomInBuffer[0]) { | 460 | switch (remcomInBuffer[0]) { |
464 | case 'c': | 461 | case 'c': |
@@ -469,8 +466,6 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, | |||
469 | linux_regs->ip = addr; | 466 | linux_regs->ip = addr; |
470 | case 'D': | 467 | case 'D': |
471 | case 'k': | 468 | case 'k': |
472 | newPC = linux_regs->ip; | ||
473 | |||
474 | /* clear the trace bit */ | 469 | /* clear the trace bit */ |
475 | linux_regs->flags &= ~X86_EFLAGS_TF; | 470 | linux_regs->flags &= ~X86_EFLAGS_TF; |
476 | atomic_set(&kgdb_cpu_doing_single_step, -1); | 471 | atomic_set(&kgdb_cpu_doing_single_step, -1); |
@@ -645,7 +640,7 @@ void kgdb_arch_late(void) | |||
645 | attr.bp_len = HW_BREAKPOINT_LEN_1; | 640 | attr.bp_len = HW_BREAKPOINT_LEN_1; |
646 | attr.bp_type = HW_BREAKPOINT_W; | 641 | attr.bp_type = HW_BREAKPOINT_W; |
647 | attr.disabled = 1; | 642 | attr.disabled = 1; |
648 | for (i = 0; i < 4; i++) { | 643 | for (i = 0; i < HBP_NUM; i++) { |
649 | if (breakinfo[i].pev) | 644 | if (breakinfo[i].pev) |
650 | continue; | 645 | continue; |
651 | breakinfo[i].pev = register_wide_hw_breakpoint(&attr, NULL); | 646 | breakinfo[i].pev = register_wide_hw_breakpoint(&attr, NULL); |
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c index 675879b65ce6..770ebfb349e9 100644 --- a/arch/x86/kernel/kprobes.c +++ b/arch/x86/kernel/kprobes.c | |||
@@ -126,16 +126,22 @@ static void __kprobes synthesize_reljump(void *from, void *to) | |||
126 | } | 126 | } |
127 | 127 | ||
128 | /* | 128 | /* |
129 | * Check for the REX prefix which can only exist on X86_64 | 129 | * Skip the prefixes of the instruction. |
130 | * X86_32 always returns 0 | ||
131 | */ | 130 | */ |
132 | static int __kprobes is_REX_prefix(kprobe_opcode_t *insn) | 131 | static kprobe_opcode_t *__kprobes skip_prefixes(kprobe_opcode_t *insn) |
133 | { | 132 | { |
133 | insn_attr_t attr; | ||
134 | |||
135 | attr = inat_get_opcode_attribute((insn_byte_t)*insn); | ||
136 | while (inat_is_legacy_prefix(attr)) { | ||
137 | insn++; | ||
138 | attr = inat_get_opcode_attribute((insn_byte_t)*insn); | ||
139 | } | ||
134 | #ifdef CONFIG_X86_64 | 140 | #ifdef CONFIG_X86_64 |
135 | if ((*insn & 0xf0) == 0x40) | 141 | if (inat_is_rex_prefix(attr)) |
136 | return 1; | 142 | insn++; |
137 | #endif | 143 | #endif |
138 | return 0; | 144 | return insn; |
139 | } | 145 | } |
140 | 146 | ||
141 | /* | 147 | /* |
@@ -272,6 +278,9 @@ static int __kprobes can_probe(unsigned long paddr) | |||
272 | */ | 278 | */ |
273 | static int __kprobes is_IF_modifier(kprobe_opcode_t *insn) | 279 | static int __kprobes is_IF_modifier(kprobe_opcode_t *insn) |
274 | { | 280 | { |
281 | /* Skip prefixes */ | ||
282 | insn = skip_prefixes(insn); | ||
283 | |||
275 | switch (*insn) { | 284 | switch (*insn) { |
276 | case 0xfa: /* cli */ | 285 | case 0xfa: /* cli */ |
277 | case 0xfb: /* sti */ | 286 | case 0xfb: /* sti */ |
@@ -280,13 +289,6 @@ static int __kprobes is_IF_modifier(kprobe_opcode_t *insn) | |||
280 | return 1; | 289 | return 1; |
281 | } | 290 | } |
282 | 291 | ||
283 | /* | ||
284 | * on X86_64, 0x40-0x4f are REX prefixes so we need to look | ||
285 | * at the next byte instead.. but of course not recurse infinitely | ||
286 | */ | ||
287 | if (is_REX_prefix(insn)) | ||
288 | return is_IF_modifier(++insn); | ||
289 | |||
290 | return 0; | 292 | return 0; |
291 | } | 293 | } |
292 | 294 | ||
@@ -707,6 +709,7 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs) | |||
707 | struct hlist_node *node, *tmp; | 709 | struct hlist_node *node, *tmp; |
708 | unsigned long flags, orig_ret_address = 0; | 710 | unsigned long flags, orig_ret_address = 0; |
709 | unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline; | 711 | unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline; |
712 | kprobe_opcode_t *correct_ret_addr = NULL; | ||
710 | 713 | ||
711 | INIT_HLIST_HEAD(&empty_rp); | 714 | INIT_HLIST_HEAD(&empty_rp); |
712 | kretprobe_hash_lock(current, &head, &flags); | 715 | kretprobe_hash_lock(current, &head, &flags); |
@@ -738,14 +741,34 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs) | |||
738 | /* another task is sharing our hash bucket */ | 741 | /* another task is sharing our hash bucket */ |
739 | continue; | 742 | continue; |
740 | 743 | ||
744 | orig_ret_address = (unsigned long)ri->ret_addr; | ||
745 | |||
746 | if (orig_ret_address != trampoline_address) | ||
747 | /* | ||
748 | * This is the real return address. Any other | ||
749 | * instances associated with this task are for | ||
750 | * other calls deeper on the call stack | ||
751 | */ | ||
752 | break; | ||
753 | } | ||
754 | |||
755 | kretprobe_assert(ri, orig_ret_address, trampoline_address); | ||
756 | |||
757 | correct_ret_addr = ri->ret_addr; | ||
758 | hlist_for_each_entry_safe(ri, node, tmp, head, hlist) { | ||
759 | if (ri->task != current) | ||
760 | /* another task is sharing our hash bucket */ | ||
761 | continue; | ||
762 | |||
763 | orig_ret_address = (unsigned long)ri->ret_addr; | ||
741 | if (ri->rp && ri->rp->handler) { | 764 | if (ri->rp && ri->rp->handler) { |
742 | __get_cpu_var(current_kprobe) = &ri->rp->kp; | 765 | __get_cpu_var(current_kprobe) = &ri->rp->kp; |
743 | get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE; | 766 | get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE; |
767 | ri->ret_addr = correct_ret_addr; | ||
744 | ri->rp->handler(ri, regs); | 768 | ri->rp->handler(ri, regs); |
745 | __get_cpu_var(current_kprobe) = NULL; | 769 | __get_cpu_var(current_kprobe) = NULL; |
746 | } | 770 | } |
747 | 771 | ||
748 | orig_ret_address = (unsigned long)ri->ret_addr; | ||
749 | recycle_rp_inst(ri, &empty_rp); | 772 | recycle_rp_inst(ri, &empty_rp); |
750 | 773 | ||
751 | if (orig_ret_address != trampoline_address) | 774 | if (orig_ret_address != trampoline_address) |
@@ -757,8 +780,6 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs) | |||
757 | break; | 780 | break; |
758 | } | 781 | } |
759 | 782 | ||
760 | kretprobe_assert(ri, orig_ret_address, trampoline_address); | ||
761 | |||
762 | kretprobe_hash_unlock(current, &flags); | 783 | kretprobe_hash_unlock(current, &flags); |
763 | 784 | ||
764 | hlist_for_each_entry_safe(ri, node, tmp, &empty_rp, hlist) { | 785 | hlist_for_each_entry_safe(ri, node, tmp, &empty_rp, hlist) { |
@@ -803,9 +824,8 @@ static void __kprobes resume_execution(struct kprobe *p, | |||
803 | unsigned long orig_ip = (unsigned long)p->addr; | 824 | unsigned long orig_ip = (unsigned long)p->addr; |
804 | kprobe_opcode_t *insn = p->ainsn.insn; | 825 | kprobe_opcode_t *insn = p->ainsn.insn; |
805 | 826 | ||
806 | /*skip the REX prefix*/ | 827 | /* Skip prefixes */ |
807 | if (is_REX_prefix(insn)) | 828 | insn = skip_prefixes(insn); |
808 | insn++; | ||
809 | 829 | ||
810 | regs->flags &= ~X86_EFLAGS_TF; | 830 | regs->flags &= ~X86_EFLAGS_TF; |
811 | switch (*insn) { | 831 | switch (*insn) { |
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index d86dbf7e54be..d7b6f7fb4fec 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
@@ -274,6 +274,18 @@ static void __init smp_dump_mptable(struct mpc_table *mpc, unsigned char *mpt) | |||
274 | 274 | ||
275 | void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { } | 275 | void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { } |
276 | 276 | ||
277 | static void __init smp_register_lapic_address(unsigned long address) | ||
278 | { | ||
279 | mp_lapic_addr = address; | ||
280 | |||
281 | set_fixmap_nocache(FIX_APIC_BASE, address); | ||
282 | if (boot_cpu_physical_apicid == -1U) { | ||
283 | boot_cpu_physical_apicid = read_apic_id(); | ||
284 | apic_version[boot_cpu_physical_apicid] = | ||
285 | GET_APIC_VERSION(apic_read(APIC_LVR)); | ||
286 | } | ||
287 | } | ||
288 | |||
277 | static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) | 289 | static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) |
278 | { | 290 | { |
279 | char str[16]; | 291 | char str[16]; |
@@ -295,6 +307,10 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) | |||
295 | if (early) | 307 | if (early) |
296 | return 1; | 308 | return 1; |
297 | 309 | ||
310 | /* Initialize the lapic mapping */ | ||
311 | if (!acpi_lapic) | ||
312 | smp_register_lapic_address(mpc->lapic); | ||
313 | |||
298 | if (mpc->oemptr) | 314 | if (mpc->oemptr) |
299 | x86_init.mpparse.smp_read_mpc_oem(mpc); | 315 | x86_init.mpparse.smp_read_mpc_oem(mpc); |
300 | 316 | ||
diff --git a/arch/x86/kernel/mrst.c b/arch/x86/kernel/mrst.c index 5915e0b33303..79ae68154e87 100644 --- a/arch/x86/kernel/mrst.c +++ b/arch/x86/kernel/mrst.c | |||
@@ -25,8 +25,34 @@ | |||
25 | #include <asm/i8259.h> | 25 | #include <asm/i8259.h> |
26 | #include <asm/apb_timer.h> | 26 | #include <asm/apb_timer.h> |
27 | 27 | ||
28 | /* | ||
29 | * the clockevent devices on Moorestown/Medfield can be APBT or LAPIC clock, | ||
30 | * cmdline option x86_mrst_timer can be used to override the configuration | ||
31 | * to prefer one or the other. | ||
32 | * at runtime, there are basically three timer configurations: | ||
33 | * 1. per cpu apbt clock only | ||
34 | * 2. per cpu always-on lapic clocks only, this is Penwell/Medfield only | ||
35 | * 3. per cpu lapic clock (C3STOP) and one apbt clock, with broadcast. | ||
36 | * | ||
37 | * by default (without cmdline option), platform code first detects cpu type | ||
38 | * to see if we are on lincroft or penwell, then set up both lapic or apbt | ||
39 | * clocks accordingly. | ||
40 | * i.e. by default, medfield uses configuration #2, moorestown uses #1. | ||
41 | * config #3 is supported but not recommended on medfield. | ||
42 | * | ||
43 | * rating and feature summary: | ||
44 | * lapic (with C3STOP) --------- 100 | ||
45 | * apbt (always-on) ------------ 110 | ||
46 | * lapic (always-on,ARAT) ------ 150 | ||
47 | */ | ||
48 | |||
49 | __cpuinitdata enum mrst_timer_options mrst_timer_options; | ||
50 | |||
28 | static u32 sfi_mtimer_usage[SFI_MTMR_MAX_NUM]; | 51 | static u32 sfi_mtimer_usage[SFI_MTMR_MAX_NUM]; |
29 | static struct sfi_timer_table_entry sfi_mtimer_array[SFI_MTMR_MAX_NUM]; | 52 | static struct sfi_timer_table_entry sfi_mtimer_array[SFI_MTMR_MAX_NUM]; |
53 | enum mrst_cpu_type __mrst_cpu_chip; | ||
54 | EXPORT_SYMBOL_GPL(__mrst_cpu_chip); | ||
55 | |||
30 | int sfi_mtimer_num; | 56 | int sfi_mtimer_num; |
31 | 57 | ||
32 | struct sfi_rtc_table_entry sfi_mrtc_array[SFI_MRTC_MAX]; | 58 | struct sfi_rtc_table_entry sfi_mrtc_array[SFI_MRTC_MAX]; |
@@ -167,18 +193,6 @@ int __init sfi_parse_mrtc(struct sfi_table_header *table) | |||
167 | return 0; | 193 | return 0; |
168 | } | 194 | } |
169 | 195 | ||
170 | /* | ||
171 | * the secondary clock in Moorestown can be APBT or LAPIC clock, default to | ||
172 | * APBT but cmdline option can also override it. | ||
173 | */ | ||
174 | static void __cpuinit mrst_setup_secondary_clock(void) | ||
175 | { | ||
176 | /* restore default lapic clock if disabled by cmdline */ | ||
177 | if (disable_apbt_percpu) | ||
178 | return setup_secondary_APIC_clock(); | ||
179 | apbt_setup_secondary_clock(); | ||
180 | } | ||
181 | |||
182 | static unsigned long __init mrst_calibrate_tsc(void) | 196 | static unsigned long __init mrst_calibrate_tsc(void) |
183 | { | 197 | { |
184 | unsigned long flags, fast_calibrate; | 198 | unsigned long flags, fast_calibrate; |
@@ -195,6 +209,21 @@ static unsigned long __init mrst_calibrate_tsc(void) | |||
195 | 209 | ||
196 | void __init mrst_time_init(void) | 210 | void __init mrst_time_init(void) |
197 | { | 211 | { |
212 | switch (mrst_timer_options) { | ||
213 | case MRST_TIMER_APBT_ONLY: | ||
214 | break; | ||
215 | case MRST_TIMER_LAPIC_APBT: | ||
216 | x86_init.timers.setup_percpu_clockev = setup_boot_APIC_clock; | ||
217 | x86_cpuinit.setup_percpu_clockev = setup_secondary_APIC_clock; | ||
218 | break; | ||
219 | default: | ||
220 | if (!boot_cpu_has(X86_FEATURE_ARAT)) | ||
221 | break; | ||
222 | x86_init.timers.setup_percpu_clockev = setup_boot_APIC_clock; | ||
223 | x86_cpuinit.setup_percpu_clockev = setup_secondary_APIC_clock; | ||
224 | return; | ||
225 | } | ||
226 | /* we need at least one APB timer */ | ||
198 | sfi_table_parse(SFI_SIG_MTMR, NULL, NULL, sfi_parse_mtmr); | 227 | sfi_table_parse(SFI_SIG_MTMR, NULL, NULL, sfi_parse_mtmr); |
199 | pre_init_apic_IRQ0(); | 228 | pre_init_apic_IRQ0(); |
200 | apbt_time_init(); | 229 | apbt_time_init(); |
@@ -205,16 +234,21 @@ void __init mrst_rtc_init(void) | |||
205 | sfi_table_parse(SFI_SIG_MRTC, NULL, NULL, sfi_parse_mrtc); | 234 | sfi_table_parse(SFI_SIG_MRTC, NULL, NULL, sfi_parse_mrtc); |
206 | } | 235 | } |
207 | 236 | ||
208 | /* | 237 | void __cpuinit mrst_arch_setup(void) |
209 | * if we use per cpu apb timer, the bootclock already setup. if we use lapic | ||
210 | * timer and one apbt timer for broadcast, we need to set up lapic boot clock. | ||
211 | */ | ||
212 | static void __init mrst_setup_boot_clock(void) | ||
213 | { | 238 | { |
214 | pr_info("%s: per cpu apbt flag %d \n", __func__, disable_apbt_percpu); | 239 | if (boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model == 0x27) |
215 | if (disable_apbt_percpu) | 240 | __mrst_cpu_chip = MRST_CPU_CHIP_PENWELL; |
216 | setup_boot_APIC_clock(); | 241 | else if (boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model == 0x26) |
217 | }; | 242 | __mrst_cpu_chip = MRST_CPU_CHIP_LINCROFT; |
243 | else { | ||
244 | pr_err("Unknown Moorestown CPU (%d:%d), default to Lincroft\n", | ||
245 | boot_cpu_data.x86, boot_cpu_data.x86_model); | ||
246 | __mrst_cpu_chip = MRST_CPU_CHIP_LINCROFT; | ||
247 | } | ||
248 | pr_debug("Moorestown CPU %s identified\n", | ||
249 | (__mrst_cpu_chip == MRST_CPU_CHIP_LINCROFT) ? | ||
250 | "Lincroft" : "Penwell"); | ||
251 | } | ||
218 | 252 | ||
219 | /* MID systems don't have i8042 controller */ | 253 | /* MID systems don't have i8042 controller */ |
220 | static int mrst_i8042_detect(void) | 254 | static int mrst_i8042_detect(void) |
@@ -232,11 +266,13 @@ void __init x86_mrst_early_setup(void) | |||
232 | x86_init.resources.reserve_resources = x86_init_noop; | 266 | x86_init.resources.reserve_resources = x86_init_noop; |
233 | 267 | ||
234 | x86_init.timers.timer_init = mrst_time_init; | 268 | x86_init.timers.timer_init = mrst_time_init; |
235 | x86_init.timers.setup_percpu_clockev = mrst_setup_boot_clock; | 269 | x86_init.timers.setup_percpu_clockev = x86_init_noop; |
236 | 270 | ||
237 | x86_init.irqs.pre_vector_init = x86_init_noop; | 271 | x86_init.irqs.pre_vector_init = x86_init_noop; |
238 | 272 | ||
239 | x86_cpuinit.setup_percpu_clockev = mrst_setup_secondary_clock; | 273 | x86_init.oem.arch_setup = mrst_arch_setup; |
274 | |||
275 | x86_cpuinit.setup_percpu_clockev = apbt_setup_secondary_clock; | ||
240 | 276 | ||
241 | x86_platform.calibrate_tsc = mrst_calibrate_tsc; | 277 | x86_platform.calibrate_tsc = mrst_calibrate_tsc; |
242 | x86_platform.i8042_detect = mrst_i8042_detect; | 278 | x86_platform.i8042_detect = mrst_i8042_detect; |
@@ -250,3 +286,26 @@ void __init x86_mrst_early_setup(void) | |||
250 | x86_init.mpparse.get_smp_config = x86_init_uint_noop; | 286 | x86_init.mpparse.get_smp_config = x86_init_uint_noop; |
251 | 287 | ||
252 | } | 288 | } |
289 | |||
290 | /* | ||
291 | * if user does not want to use per CPU apb timer, just give it a lower rating | ||
292 | * than local apic timer and skip the late per cpu timer init. | ||
293 | */ | ||
294 | static inline int __init setup_x86_mrst_timer(char *arg) | ||
295 | { | ||
296 | if (!arg) | ||
297 | return -EINVAL; | ||
298 | |||
299 | if (strcmp("apbt_only", arg) == 0) | ||
300 | mrst_timer_options = MRST_TIMER_APBT_ONLY; | ||
301 | else if (strcmp("lapic_and_apbt", arg) == 0) | ||
302 | mrst_timer_options = MRST_TIMER_LAPIC_APBT; | ||
303 | else { | ||
304 | pr_warning("X86 MRST timer option %s not recognised" | ||
305 | " use x86_mrst_timer=apbt_only or lapic_and_apbt\n", | ||
306 | arg); | ||
307 | return -EINVAL; | ||
308 | } | ||
309 | return 0; | ||
310 | } | ||
311 | __setup("x86_mrst_timer=", setup_x86_mrst_timer); | ||
diff --git a/arch/x86/kernel/olpc.c b/arch/x86/kernel/olpc.c index 8297160c41b3..0e0cdde519be 100644 --- a/arch/x86/kernel/olpc.c +++ b/arch/x86/kernel/olpc.c | |||
@@ -21,10 +21,7 @@ | |||
21 | #include <asm/geode.h> | 21 | #include <asm/geode.h> |
22 | #include <asm/setup.h> | 22 | #include <asm/setup.h> |
23 | #include <asm/olpc.h> | 23 | #include <asm/olpc.h> |
24 | 24 | #include <asm/olpc_ofw.h> | |
25 | #ifdef CONFIG_OPEN_FIRMWARE | ||
26 | #include <asm/ofw.h> | ||
27 | #endif | ||
28 | 25 | ||
29 | struct olpc_platform_t olpc_platform_info; | 26 | struct olpc_platform_t olpc_platform_info; |
30 | EXPORT_SYMBOL_GPL(olpc_platform_info); | 27 | EXPORT_SYMBOL_GPL(olpc_platform_info); |
@@ -145,7 +142,7 @@ restart: | |||
145 | * The OBF flag will sometimes misbehave due to what we believe | 142 | * The OBF flag will sometimes misbehave due to what we believe |
146 | * is a hardware quirk.. | 143 | * is a hardware quirk.. |
147 | */ | 144 | */ |
148 | printk(KERN_DEBUG "olpc-ec: running cmd 0x%x\n", cmd); | 145 | pr_devel("olpc-ec: running cmd 0x%x\n", cmd); |
149 | outb(cmd, 0x6c); | 146 | outb(cmd, 0x6c); |
150 | 147 | ||
151 | if (wait_on_ibf(0x6c, 0)) { | 148 | if (wait_on_ibf(0x6c, 0)) { |
@@ -162,8 +159,7 @@ restart: | |||
162 | " EC accept data!\n"); | 159 | " EC accept data!\n"); |
163 | goto err; | 160 | goto err; |
164 | } | 161 | } |
165 | printk(KERN_DEBUG "olpc-ec: sending cmd arg 0x%x\n", | 162 | pr_devel("olpc-ec: sending cmd arg 0x%x\n", inbuf[i]); |
166 | inbuf[i]); | ||
167 | outb(inbuf[i], 0x68); | 163 | outb(inbuf[i], 0x68); |
168 | } | 164 | } |
169 | } | 165 | } |
@@ -176,8 +172,7 @@ restart: | |||
176 | goto restart; | 172 | goto restart; |
177 | } | 173 | } |
178 | outbuf[i] = inb(0x68); | 174 | outbuf[i] = inb(0x68); |
179 | printk(KERN_DEBUG "olpc-ec: received 0x%x\n", | 175 | pr_devel("olpc-ec: received 0x%x\n", outbuf[i]); |
180 | outbuf[i]); | ||
181 | } | 176 | } |
182 | } | 177 | } |
183 | 178 | ||
@@ -188,14 +183,15 @@ err: | |||
188 | } | 183 | } |
189 | EXPORT_SYMBOL_GPL(olpc_ec_cmd); | 184 | EXPORT_SYMBOL_GPL(olpc_ec_cmd); |
190 | 185 | ||
191 | #ifdef CONFIG_OPEN_FIRMWARE | 186 | #ifdef CONFIG_OLPC_OPENFIRMWARE |
192 | static void __init platform_detect(void) | 187 | static void __init platform_detect(void) |
193 | { | 188 | { |
194 | size_t propsize; | 189 | size_t propsize; |
195 | __be32 rev; | 190 | __be32 rev; |
191 | const void *args[] = { NULL, "board-revision-int", &rev, (void *)4 }; | ||
192 | void *res[] = { &propsize }; | ||
196 | 193 | ||
197 | if (ofw("getprop", 4, 1, NULL, "board-revision-int", &rev, 4, | 194 | if (olpc_ofw("getprop", args, res) || propsize != 4) { |
198 | &propsize) || propsize != 4) { | ||
199 | printk(KERN_ERR "ofw: getprop call failed!\n"); | 195 | printk(KERN_ERR "ofw: getprop call failed!\n"); |
200 | rev = cpu_to_be32(0); | 196 | rev = cpu_to_be32(0); |
201 | } | 197 | } |
diff --git a/arch/x86/kernel/olpc_ofw.c b/arch/x86/kernel/olpc_ofw.c new file mode 100644 index 000000000000..3218aa71ab5e --- /dev/null +++ b/arch/x86/kernel/olpc_ofw.c | |||
@@ -0,0 +1,106 @@ | |||
1 | #include <linux/kernel.h> | ||
2 | #include <linux/module.h> | ||
3 | #include <linux/init.h> | ||
4 | #include <asm/page.h> | ||
5 | #include <asm/setup.h> | ||
6 | #include <asm/io.h> | ||
7 | #include <asm/pgtable.h> | ||
8 | #include <asm/olpc_ofw.h> | ||
9 | |||
10 | /* address of OFW callback interface; will be NULL if OFW isn't found */ | ||
11 | static int (*olpc_ofw_cif)(int *); | ||
12 | |||
13 | /* page dir entry containing OFW's pgdir table; filled in by head_32.S */ | ||
14 | u32 olpc_ofw_pgd __initdata; | ||
15 | |||
16 | static DEFINE_SPINLOCK(ofw_lock); | ||
17 | |||
18 | #define MAXARGS 10 | ||
19 | |||
20 | void __init setup_olpc_ofw_pgd(void) | ||
21 | { | ||
22 | pgd_t *base, *ofw_pde; | ||
23 | |||
24 | if (!olpc_ofw_cif) | ||
25 | return; | ||
26 | |||
27 | /* fetch OFW's PDE */ | ||
28 | base = early_ioremap(olpc_ofw_pgd, sizeof(olpc_ofw_pgd) * PTRS_PER_PGD); | ||
29 | if (!base) { | ||
30 | printk(KERN_ERR "failed to remap OFW's pgd - disabling OFW!\n"); | ||
31 | olpc_ofw_cif = NULL; | ||
32 | return; | ||
33 | } | ||
34 | ofw_pde = &base[OLPC_OFW_PDE_NR]; | ||
35 | |||
36 | /* install OFW's PDE permanently into the kernel's pgtable */ | ||
37 | set_pgd(&swapper_pg_dir[OLPC_OFW_PDE_NR], *ofw_pde); | ||
38 | /* implicit optimization barrier here due to uninline function return */ | ||
39 | |||
40 | early_iounmap(base, sizeof(olpc_ofw_pgd) * PTRS_PER_PGD); | ||
41 | } | ||
42 | |||
43 | int __olpc_ofw(const char *name, int nr_args, const void **args, int nr_res, | ||
44 | void **res) | ||
45 | { | ||
46 | int ofw_args[MAXARGS + 3]; | ||
47 | unsigned long flags; | ||
48 | int ret, i, *p; | ||
49 | |||
50 | BUG_ON(nr_args + nr_res > MAXARGS); | ||
51 | |||
52 | if (!olpc_ofw_cif) | ||
53 | return -EIO; | ||
54 | |||
55 | ofw_args[0] = (int)name; | ||
56 | ofw_args[1] = nr_args; | ||
57 | ofw_args[2] = nr_res; | ||
58 | |||
59 | p = &ofw_args[3]; | ||
60 | for (i = 0; i < nr_args; i++, p++) | ||
61 | *p = (int)args[i]; | ||
62 | |||
63 | /* call into ofw */ | ||
64 | spin_lock_irqsave(&ofw_lock, flags); | ||
65 | ret = olpc_ofw_cif(ofw_args); | ||
66 | spin_unlock_irqrestore(&ofw_lock, flags); | ||
67 | |||
68 | if (!ret) { | ||
69 | for (i = 0; i < nr_res; i++, p++) | ||
70 | *((int *)res[i]) = *p; | ||
71 | } | ||
72 | |||
73 | return ret; | ||
74 | } | ||
75 | EXPORT_SYMBOL_GPL(__olpc_ofw); | ||
76 | |||
77 | /* OFW cif _should_ be above this address */ | ||
78 | #define OFW_MIN 0xff000000 | ||
79 | |||
80 | /* OFW starts on a 1MB boundary */ | ||
81 | #define OFW_BOUND (1<<20) | ||
82 | |||
83 | void __init olpc_ofw_detect(void) | ||
84 | { | ||
85 | struct olpc_ofw_header *hdr = &boot_params.olpc_ofw_header; | ||
86 | unsigned long start; | ||
87 | |||
88 | /* ensure OFW booted us by checking for "OFW " string */ | ||
89 | if (hdr->ofw_magic != OLPC_OFW_SIG) | ||
90 | return; | ||
91 | |||
92 | olpc_ofw_cif = (int (*)(int *))hdr->cif_handler; | ||
93 | |||
94 | if ((unsigned long)olpc_ofw_cif < OFW_MIN) { | ||
95 | printk(KERN_ERR "OFW detected, but cif has invalid address 0x%lx - disabling.\n", | ||
96 | (unsigned long)olpc_ofw_cif); | ||
97 | olpc_ofw_cif = NULL; | ||
98 | return; | ||
99 | } | ||
100 | |||
101 | /* determine where OFW starts in memory */ | ||
102 | start = round_down((unsigned long)olpc_ofw_cif, OFW_BOUND); | ||
103 | printk(KERN_INFO "OFW detected in memory, cif @ 0x%lx (reserving top %ldMB)\n", | ||
104 | (unsigned long)olpc_ofw_cif, (-start) >> 20); | ||
105 | reserve_top_address(-start); | ||
106 | } | ||
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 4b7e3d8b01dd..9f07cfcbd3a5 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <asm/calgary.h> | 13 | #include <asm/calgary.h> |
14 | #include <asm/amd_iommu.h> | 14 | #include <asm/amd_iommu.h> |
15 | #include <asm/x86_init.h> | 15 | #include <asm/x86_init.h> |
16 | #include <asm/xen/swiotlb-xen.h> | ||
16 | 17 | ||
17 | static int forbid_dac __read_mostly; | 18 | static int forbid_dac __read_mostly; |
18 | 19 | ||
@@ -132,7 +133,7 @@ void __init pci_iommu_alloc(void) | |||
132 | /* free the range so iommu could get some range less than 4G */ | 133 | /* free the range so iommu could get some range less than 4G */ |
133 | dma32_free_bootmem(); | 134 | dma32_free_bootmem(); |
134 | 135 | ||
135 | if (pci_swiotlb_detect()) | 136 | if (pci_xen_swiotlb_detect() || pci_swiotlb_detect()) |
136 | goto out; | 137 | goto out; |
137 | 138 | ||
138 | gart_iommu_hole_init(); | 139 | gart_iommu_hole_init(); |
@@ -144,6 +145,8 @@ void __init pci_iommu_alloc(void) | |||
144 | /* needs to be called after gart_iommu_hole_init */ | 145 | /* needs to be called after gart_iommu_hole_init */ |
145 | amd_iommu_detect(); | 146 | amd_iommu_detect(); |
146 | out: | 147 | out: |
148 | pci_xen_swiotlb_init(); | ||
149 | |||
147 | pci_swiotlb_init(); | 150 | pci_swiotlb_init(); |
148 | } | 151 | } |
149 | 152 | ||
@@ -296,7 +299,7 @@ static int __init pci_iommu_init(void) | |||
296 | #endif | 299 | #endif |
297 | x86_init.iommu.iommu_init(); | 300 | x86_init.iommu.iommu_init(); |
298 | 301 | ||
299 | if (swiotlb) { | 302 | if (swiotlb || xen_swiotlb) { |
300 | printk(KERN_INFO "PCI-DMA: " | 303 | printk(KERN_INFO "PCI-DMA: " |
301 | "Using software bounce buffering for IO (SWIOTLB)\n"); | 304 | "Using software bounce buffering for IO (SWIOTLB)\n"); |
302 | swiotlb_print_info(); | 305 | swiotlb_print_info(); |
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index cbcf013a0ec6..57d1868a86aa 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
@@ -301,8 +301,9 @@ EXPORT_SYMBOL(kernel_thread); | |||
301 | /* | 301 | /* |
302 | * sys_execve() executes a new program. | 302 | * sys_execve() executes a new program. |
303 | */ | 303 | */ |
304 | long sys_execve(char __user *name, char __user * __user *argv, | 304 | long sys_execve(const char __user *name, |
305 | char __user * __user *envp, struct pt_regs *regs) | 305 | const char __user *const __user *argv, |
306 | const char __user *const __user *envp, struct pt_regs *regs) | ||
306 | { | 307 | { |
307 | long error; | 308 | long error; |
308 | char *filename; | 309 | char *filename; |
@@ -526,44 +527,10 @@ static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c) | |||
526 | return (edx & MWAIT_EDX_C1); | 527 | return (edx & MWAIT_EDX_C1); |
527 | } | 528 | } |
528 | 529 | ||
529 | /* | 530 | bool c1e_detected; |
530 | * Check for AMD CPUs, where APIC timer interrupt does not wake up CPU from C1e. | 531 | EXPORT_SYMBOL(c1e_detected); |
531 | * For more information see | ||
532 | * - Erratum #400 for NPT family 0xf and family 0x10 CPUs | ||
533 | * - Erratum #365 for family 0x11 (not affected because C1e not in use) | ||
534 | */ | ||
535 | static int __cpuinit check_c1e_idle(const struct cpuinfo_x86 *c) | ||
536 | { | ||
537 | u64 val; | ||
538 | if (c->x86_vendor != X86_VENDOR_AMD) | ||
539 | goto no_c1e_idle; | ||
540 | |||
541 | /* Family 0x0f models < rev F do not have C1E */ | ||
542 | if (c->x86 == 0x0F && c->x86_model >= 0x40) | ||
543 | return 1; | ||
544 | |||
545 | if (c->x86 == 0x10) { | ||
546 | /* | ||
547 | * check OSVW bit for CPUs that are not affected | ||
548 | * by erratum #400 | ||
549 | */ | ||
550 | if (cpu_has(c, X86_FEATURE_OSVW)) { | ||
551 | rdmsrl(MSR_AMD64_OSVW_ID_LENGTH, val); | ||
552 | if (val >= 2) { | ||
553 | rdmsrl(MSR_AMD64_OSVW_STATUS, val); | ||
554 | if (!(val & BIT(1))) | ||
555 | goto no_c1e_idle; | ||
556 | } | ||
557 | } | ||
558 | return 1; | ||
559 | } | ||
560 | |||
561 | no_c1e_idle: | ||
562 | return 0; | ||
563 | } | ||
564 | 532 | ||
565 | static cpumask_var_t c1e_mask; | 533 | static cpumask_var_t c1e_mask; |
566 | static int c1e_detected; | ||
567 | 534 | ||
568 | void c1e_remove_cpu(int cpu) | 535 | void c1e_remove_cpu(int cpu) |
569 | { | 536 | { |
@@ -585,12 +552,12 @@ static void c1e_idle(void) | |||
585 | u32 lo, hi; | 552 | u32 lo, hi; |
586 | 553 | ||
587 | rdmsr(MSR_K8_INT_PENDING_MSG, lo, hi); | 554 | rdmsr(MSR_K8_INT_PENDING_MSG, lo, hi); |
555 | |||
588 | if (lo & K8_INTP_C1E_ACTIVE_MASK) { | 556 | if (lo & K8_INTP_C1E_ACTIVE_MASK) { |
589 | c1e_detected = 1; | 557 | c1e_detected = true; |
590 | if (!boot_cpu_has(X86_FEATURE_NONSTOP_TSC)) | 558 | if (!boot_cpu_has(X86_FEATURE_NONSTOP_TSC)) |
591 | mark_tsc_unstable("TSC halt in AMD C1E"); | 559 | mark_tsc_unstable("TSC halt in AMD C1E"); |
592 | printk(KERN_INFO "System has AMD C1E enabled\n"); | 560 | printk(KERN_INFO "System has AMD C1E enabled\n"); |
593 | set_cpu_cap(&boot_cpu_data, X86_FEATURE_AMDC1E); | ||
594 | } | 561 | } |
595 | } | 562 | } |
596 | 563 | ||
@@ -639,7 +606,8 @@ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c) | |||
639 | */ | 606 | */ |
640 | printk(KERN_INFO "using mwait in idle threads.\n"); | 607 | printk(KERN_INFO "using mwait in idle threads.\n"); |
641 | pm_idle = mwait_idle; | 608 | pm_idle = mwait_idle; |
642 | } else if (check_c1e_idle(c)) { | 609 | } else if (cpu_has_amd_erratum(amd_erratum_400)) { |
610 | /* E400: APIC timer interrupt does not wake up CPU from C1e */ | ||
643 | printk(KERN_INFO "using C1E aware idle routine\n"); | 611 | printk(KERN_INFO "using C1E aware idle routine\n"); |
644 | pm_idle = c1e_idle; | 612 | pm_idle = c1e_idle; |
645 | } else | 613 | } else |
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 8d128783af47..96586c3cbbbf 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
@@ -57,6 +57,8 @@ | |||
57 | #include <asm/syscalls.h> | 57 | #include <asm/syscalls.h> |
58 | #include <asm/debugreg.h> | 58 | #include <asm/debugreg.h> |
59 | 59 | ||
60 | #include <trace/events/power.h> | ||
61 | |||
60 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); | 62 | asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); |
61 | 63 | ||
62 | /* | 64 | /* |
@@ -111,6 +113,8 @@ void cpu_idle(void) | |||
111 | stop_critical_timings(); | 113 | stop_critical_timings(); |
112 | pm_idle(); | 114 | pm_idle(); |
113 | start_critical_timings(); | 115 | start_critical_timings(); |
116 | |||
117 | trace_power_end(smp_processor_id()); | ||
114 | } | 118 | } |
115 | tick_nohz_restart_sched_tick(); | 119 | tick_nohz_restart_sched_tick(); |
116 | preempt_enable_no_resched(); | 120 | preempt_enable_no_resched(); |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 3c2422a99f1f..3d9ea531ddd1 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
@@ -51,6 +51,8 @@ | |||
51 | #include <asm/syscalls.h> | 51 | #include <asm/syscalls.h> |
52 | #include <asm/debugreg.h> | 52 | #include <asm/debugreg.h> |
53 | 53 | ||
54 | #include <trace/events/power.h> | ||
55 | |||
54 | asmlinkage extern void ret_from_fork(void); | 56 | asmlinkage extern void ret_from_fork(void); |
55 | 57 | ||
56 | DEFINE_PER_CPU(unsigned long, old_rsp); | 58 | DEFINE_PER_CPU(unsigned long, old_rsp); |
@@ -138,6 +140,9 @@ void cpu_idle(void) | |||
138 | stop_critical_timings(); | 140 | stop_critical_timings(); |
139 | pm_idle(); | 141 | pm_idle(); |
140 | start_critical_timings(); | 142 | start_critical_timings(); |
143 | |||
144 | trace_power_end(smp_processor_id()); | ||
145 | |||
141 | /* In many cases the interrupt that ended idle | 146 | /* In many cases the interrupt that ended idle |
142 | has already called exit_idle. But some idle | 147 | has already called exit_idle. But some idle |
143 | loops can be woken up without interrupt. */ | 148 | loops can be woken up without interrupt. */ |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index b4ae4acbd031..c3a4fbb2b996 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -102,6 +102,7 @@ | |||
102 | 102 | ||
103 | #include <asm/paravirt.h> | 103 | #include <asm/paravirt.h> |
104 | #include <asm/hypervisor.h> | 104 | #include <asm/hypervisor.h> |
105 | #include <asm/olpc_ofw.h> | ||
105 | 106 | ||
106 | #include <asm/percpu.h> | 107 | #include <asm/percpu.h> |
107 | #include <asm/topology.h> | 108 | #include <asm/topology.h> |
@@ -736,10 +737,15 @@ void __init setup_arch(char **cmdline_p) | |||
736 | /* VMI may relocate the fixmap; do this before touching ioremap area */ | 737 | /* VMI may relocate the fixmap; do this before touching ioremap area */ |
737 | vmi_init(); | 738 | vmi_init(); |
738 | 739 | ||
740 | /* OFW also may relocate the fixmap */ | ||
741 | olpc_ofw_detect(); | ||
742 | |||
739 | early_trap_init(); | 743 | early_trap_init(); |
740 | early_cpu_init(); | 744 | early_cpu_init(); |
741 | early_ioremap_init(); | 745 | early_ioremap_init(); |
742 | 746 | ||
747 | setup_olpc_ofw_pgd(); | ||
748 | |||
743 | ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); | 749 | ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); |
744 | screen_info = boot_params.screen_info; | 750 | screen_info = boot_params.screen_info; |
745 | edid_info = boot_params.edid_info; | 751 | edid_info = boot_params.edid_info; |
@@ -1008,6 +1014,8 @@ void __init setup_arch(char **cmdline_p) | |||
1008 | paging_init(); | 1014 | paging_init(); |
1009 | x86_init.paging.pagetable_setup_done(swapper_pg_dir); | 1015 | x86_init.paging.pagetable_setup_done(swapper_pg_dir); |
1010 | 1016 | ||
1017 | setup_trampoline_page_table(); | ||
1018 | |||
1011 | tboot_probe(); | 1019 | tboot_probe(); |
1012 | 1020 | ||
1013 | #ifdef CONFIG_X86_64 | 1021 | #ifdef CONFIG_X86_64 |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index c4f33b2e77d6..8b3bfc4dd708 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -73,7 +73,6 @@ | |||
73 | 73 | ||
74 | #ifdef CONFIG_X86_32 | 74 | #ifdef CONFIG_X86_32 |
75 | u8 apicid_2_node[MAX_APICID]; | 75 | u8 apicid_2_node[MAX_APICID]; |
76 | static int low_mappings; | ||
77 | #endif | 76 | #endif |
78 | 77 | ||
79 | /* State of each CPU */ | 78 | /* State of each CPU */ |
@@ -91,6 +90,25 @@ DEFINE_PER_CPU(int, cpu_state) = { 0 }; | |||
91 | static DEFINE_PER_CPU(struct task_struct *, idle_thread_array); | 90 | static DEFINE_PER_CPU(struct task_struct *, idle_thread_array); |
92 | #define get_idle_for_cpu(x) (per_cpu(idle_thread_array, x)) | 91 | #define get_idle_for_cpu(x) (per_cpu(idle_thread_array, x)) |
93 | #define set_idle_for_cpu(x, p) (per_cpu(idle_thread_array, x) = (p)) | 92 | #define set_idle_for_cpu(x, p) (per_cpu(idle_thread_array, x) = (p)) |
93 | |||
94 | /* | ||
95 | * We need this for trampoline_base protection from concurrent accesses when | ||
96 | * off- and onlining cores wildly. | ||
97 | */ | ||
98 | static DEFINE_MUTEX(x86_cpu_hotplug_driver_mutex); | ||
99 | |||
100 | void cpu_hotplug_driver_lock() | ||
101 | { | ||
102 | mutex_lock(&x86_cpu_hotplug_driver_mutex); | ||
103 | } | ||
104 | |||
105 | void cpu_hotplug_driver_unlock() | ||
106 | { | ||
107 | mutex_unlock(&x86_cpu_hotplug_driver_mutex); | ||
108 | } | ||
109 | |||
110 | ssize_t arch_cpu_probe(const char *buf, size_t count) { return -1; } | ||
111 | ssize_t arch_cpu_release(const char *buf, size_t count) { return -1; } | ||
94 | #else | 112 | #else |
95 | static struct task_struct *idle_thread_array[NR_CPUS] __cpuinitdata ; | 113 | static struct task_struct *idle_thread_array[NR_CPUS] __cpuinitdata ; |
96 | #define get_idle_for_cpu(x) (idle_thread_array[(x)]) | 114 | #define get_idle_for_cpu(x) (idle_thread_array[(x)]) |
@@ -281,6 +299,18 @@ notrace static void __cpuinit start_secondary(void *unused) | |||
281 | * fragile that we want to limit the things done here to the | 299 | * fragile that we want to limit the things done here to the |
282 | * most necessary things. | 300 | * most necessary things. |
283 | */ | 301 | */ |
302 | |||
303 | #ifdef CONFIG_X86_32 | ||
304 | /* | ||
305 | * Switch away from the trampoline page-table | ||
306 | * | ||
307 | * Do this before cpu_init() because it needs to access per-cpu | ||
308 | * data which may not be mapped in the trampoline page-table. | ||
309 | */ | ||
310 | load_cr3(swapper_pg_dir); | ||
311 | __flush_tlb_all(); | ||
312 | #endif | ||
313 | |||
284 | vmi_bringup(); | 314 | vmi_bringup(); |
285 | cpu_init(); | 315 | cpu_init(); |
286 | preempt_disable(); | 316 | preempt_disable(); |
@@ -299,12 +329,6 @@ notrace static void __cpuinit start_secondary(void *unused) | |||
299 | legacy_pic->chip->unmask(0); | 329 | legacy_pic->chip->unmask(0); |
300 | } | 330 | } |
301 | 331 | ||
302 | #ifdef CONFIG_X86_32 | ||
303 | while (low_mappings) | ||
304 | cpu_relax(); | ||
305 | __flush_tlb_all(); | ||
306 | #endif | ||
307 | |||
308 | /* This must be done before setting cpu_online_mask */ | 332 | /* This must be done before setting cpu_online_mask */ |
309 | set_cpu_sibling_map(raw_smp_processor_id()); | 333 | set_cpu_sibling_map(raw_smp_processor_id()); |
310 | wmb(); | 334 | wmb(); |
@@ -735,12 +759,8 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu) | |||
735 | goto do_rest; | 759 | goto do_rest; |
736 | } | 760 | } |
737 | 761 | ||
738 | if (!keventd_up() || current_is_keventd()) | 762 | schedule_work(&c_idle.work); |
739 | c_idle.work.func(&c_idle.work); | 763 | wait_for_completion(&c_idle.done); |
740 | else { | ||
741 | schedule_work(&c_idle.work); | ||
742 | wait_for_completion(&c_idle.done); | ||
743 | } | ||
744 | 764 | ||
745 | if (IS_ERR(c_idle.idle)) { | 765 | if (IS_ERR(c_idle.idle)) { |
746 | printk("failed fork for CPU %d\n", cpu); | 766 | printk("failed fork for CPU %d\n", cpu); |
@@ -754,6 +774,7 @@ do_rest: | |||
754 | #ifdef CONFIG_X86_32 | 774 | #ifdef CONFIG_X86_32 |
755 | /* Stack for startup_32 can be just as for start_secondary onwards */ | 775 | /* Stack for startup_32 can be just as for start_secondary onwards */ |
756 | irq_ctx_init(cpu); | 776 | irq_ctx_init(cpu); |
777 | initial_page_table = __pa(&trampoline_pg_dir); | ||
757 | #else | 778 | #else |
758 | clear_tsk_thread_flag(c_idle.idle, TIF_FORK); | 779 | clear_tsk_thread_flag(c_idle.idle, TIF_FORK); |
759 | initial_gs = per_cpu_offset(cpu); | 780 | initial_gs = per_cpu_offset(cpu); |
@@ -816,6 +837,13 @@ do_rest: | |||
816 | if (cpumask_test_cpu(cpu, cpu_callin_mask)) | 837 | if (cpumask_test_cpu(cpu, cpu_callin_mask)) |
817 | break; /* It has booted */ | 838 | break; /* It has booted */ |
818 | udelay(100); | 839 | udelay(100); |
840 | /* | ||
841 | * Allow other tasks to run while we wait for the | ||
842 | * AP to come online. This also gives a chance | ||
843 | * for the MTRR work(triggered by the AP coming online) | ||
844 | * to be completed in the stop machine context. | ||
845 | */ | ||
846 | schedule(); | ||
819 | } | 847 | } |
820 | 848 | ||
821 | if (cpumask_test_cpu(cpu, cpu_callin_mask)) | 849 | if (cpumask_test_cpu(cpu, cpu_callin_mask)) |
@@ -894,20 +922,8 @@ int __cpuinit native_cpu_up(unsigned int cpu) | |||
894 | 922 | ||
895 | per_cpu(cpu_state, cpu) = CPU_UP_PREPARE; | 923 | per_cpu(cpu_state, cpu) = CPU_UP_PREPARE; |
896 | 924 | ||
897 | #ifdef CONFIG_X86_32 | ||
898 | /* init low mem mapping */ | ||
899 | clone_pgd_range(swapper_pg_dir, swapper_pg_dir + KERNEL_PGD_BOUNDARY, | ||
900 | min_t(unsigned long, KERNEL_PGD_PTRS, KERNEL_PGD_BOUNDARY)); | ||
901 | flush_tlb_all(); | ||
902 | low_mappings = 1; | ||
903 | |||
904 | err = do_boot_cpu(apicid, cpu); | 925 | err = do_boot_cpu(apicid, cpu); |
905 | 926 | ||
906 | zap_low_mappings(false); | ||
907 | low_mappings = 0; | ||
908 | #else | ||
909 | err = do_boot_cpu(apicid, cpu); | ||
910 | #endif | ||
911 | if (err) { | 927 | if (err) { |
912 | pr_debug("do_boot_cpu failed %d\n", err); | 928 | pr_debug("do_boot_cpu failed %d\n", err); |
913 | return -EIO; | 929 | return -EIO; |
diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c index 922eefbb3f6c..b53c525368a7 100644 --- a/arch/x86/kernel/stacktrace.c +++ b/arch/x86/kernel/stacktrace.c | |||
@@ -23,11 +23,16 @@ static int save_stack_stack(void *data, char *name) | |||
23 | return 0; | 23 | return 0; |
24 | } | 24 | } |
25 | 25 | ||
26 | static void save_stack_address(void *data, unsigned long addr, int reliable) | 26 | static void |
27 | __save_stack_address(void *data, unsigned long addr, bool reliable, bool nosched) | ||
27 | { | 28 | { |
28 | struct stack_trace *trace = data; | 29 | struct stack_trace *trace = data; |
30 | #ifdef CONFIG_FRAME_POINTER | ||
29 | if (!reliable) | 31 | if (!reliable) |
30 | return; | 32 | return; |
33 | #endif | ||
34 | if (nosched && in_sched_functions(addr)) | ||
35 | return; | ||
31 | if (trace->skip > 0) { | 36 | if (trace->skip > 0) { |
32 | trace->skip--; | 37 | trace->skip--; |
33 | return; | 38 | return; |
@@ -36,20 +41,15 @@ static void save_stack_address(void *data, unsigned long addr, int reliable) | |||
36 | trace->entries[trace->nr_entries++] = addr; | 41 | trace->entries[trace->nr_entries++] = addr; |
37 | } | 42 | } |
38 | 43 | ||
44 | static void save_stack_address(void *data, unsigned long addr, int reliable) | ||
45 | { | ||
46 | return __save_stack_address(data, addr, reliable, false); | ||
47 | } | ||
48 | |||
39 | static void | 49 | static void |
40 | save_stack_address_nosched(void *data, unsigned long addr, int reliable) | 50 | save_stack_address_nosched(void *data, unsigned long addr, int reliable) |
41 | { | 51 | { |
42 | struct stack_trace *trace = (struct stack_trace *)data; | 52 | return __save_stack_address(data, addr, reliable, true); |
43 | if (!reliable) | ||
44 | return; | ||
45 | if (in_sched_functions(addr)) | ||
46 | return; | ||
47 | if (trace->skip > 0) { | ||
48 | trace->skip--; | ||
49 | return; | ||
50 | } | ||
51 | if (trace->nr_entries < trace->max_entries) | ||
52 | trace->entries[trace->nr_entries++] = addr; | ||
53 | } | 53 | } |
54 | 54 | ||
55 | static const struct stacktrace_ops save_stack_ops = { | 55 | static const struct stacktrace_ops save_stack_ops = { |
@@ -96,12 +96,13 @@ EXPORT_SYMBOL_GPL(save_stack_trace_tsk); | |||
96 | 96 | ||
97 | /* Userspace stacktrace - based on kernel/trace/trace_sysprof.c */ | 97 | /* Userspace stacktrace - based on kernel/trace/trace_sysprof.c */ |
98 | 98 | ||
99 | struct stack_frame { | 99 | struct stack_frame_user { |
100 | const void __user *next_fp; | 100 | const void __user *next_fp; |
101 | unsigned long ret_addr; | 101 | unsigned long ret_addr; |
102 | }; | 102 | }; |
103 | 103 | ||
104 | static int copy_stack_frame(const void __user *fp, struct stack_frame *frame) | 104 | static int |
105 | copy_stack_frame(const void __user *fp, struct stack_frame_user *frame) | ||
105 | { | 106 | { |
106 | int ret; | 107 | int ret; |
107 | 108 | ||
@@ -126,7 +127,7 @@ static inline void __save_stack_trace_user(struct stack_trace *trace) | |||
126 | trace->entries[trace->nr_entries++] = regs->ip; | 127 | trace->entries[trace->nr_entries++] = regs->ip; |
127 | 128 | ||
128 | while (trace->nr_entries < trace->max_entries) { | 129 | while (trace->nr_entries < trace->max_entries) { |
129 | struct stack_frame frame; | 130 | struct stack_frame_user frame; |
130 | 131 | ||
131 | frame.next_fp = NULL; | 132 | frame.next_fp = NULL; |
132 | frame.ret_addr = 0; | 133 | frame.ret_addr = 0; |
diff --git a/arch/x86/kernel/sys_i386_32.c b/arch/x86/kernel/sys_i386_32.c index 196552bb412c..d5e06624e34a 100644 --- a/arch/x86/kernel/sys_i386_32.c +++ b/arch/x86/kernel/sys_i386_32.c | |||
@@ -28,7 +28,9 @@ | |||
28 | * Do a system call from kernel instead of calling sys_execve so we | 28 | * Do a system call from kernel instead of calling sys_execve so we |
29 | * end up with proper pt_regs. | 29 | * end up with proper pt_regs. |
30 | */ | 30 | */ |
31 | int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | 31 | int kernel_execve(const char *filename, |
32 | const char *const argv[], | ||
33 | const char *const envp[]) | ||
32 | { | 34 | { |
33 | long __res; | 35 | long __res; |
34 | asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" | 36 | asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" |
diff --git a/arch/x86/kernel/syscall_table_32.S b/arch/x86/kernel/syscall_table_32.S index 8b3729341216..b35786dc9b8f 100644 --- a/arch/x86/kernel/syscall_table_32.S +++ b/arch/x86/kernel/syscall_table_32.S | |||
@@ -337,3 +337,6 @@ ENTRY(sys_call_table) | |||
337 | .long sys_rt_tgsigqueueinfo /* 335 */ | 337 | .long sys_rt_tgsigqueueinfo /* 335 */ |
338 | .long sys_perf_event_open | 338 | .long sys_perf_event_open |
339 | .long sys_recvmmsg | 339 | .long sys_recvmmsg |
340 | .long sys_fanotify_init | ||
341 | .long sys_fanotify_mark | ||
342 | .long sys_prlimit64 /* 340 */ | ||
diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c index 7fea555929e2..312ef0292815 100644 --- a/arch/x86/kernel/tlb_uv.c +++ b/arch/x86/kernel/tlb_uv.c | |||
@@ -8,6 +8,7 @@ | |||
8 | */ | 8 | */ |
9 | #include <linux/seq_file.h> | 9 | #include <linux/seq_file.h> |
10 | #include <linux/proc_fs.h> | 10 | #include <linux/proc_fs.h> |
11 | #include <linux/debugfs.h> | ||
11 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
12 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
13 | 14 | ||
@@ -22,19 +23,37 @@ | |||
22 | #include <asm/irq_vectors.h> | 23 | #include <asm/irq_vectors.h> |
23 | #include <asm/timer.h> | 24 | #include <asm/timer.h> |
24 | 25 | ||
25 | struct msg_desc { | 26 | /* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */ |
26 | struct bau_payload_queue_entry *msg; | 27 | static int timeout_base_ns[] = { |
27 | int msg_slot; | 28 | 20, |
28 | int sw_ack_slot; | 29 | 160, |
29 | struct bau_payload_queue_entry *va_queue_first; | 30 | 1280, |
30 | struct bau_payload_queue_entry *va_queue_last; | 31 | 10240, |
32 | 81920, | ||
33 | 655360, | ||
34 | 5242880, | ||
35 | 167772160 | ||
31 | }; | 36 | }; |
32 | 37 | static int timeout_us; | |
33 | #define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD 0x000000000bUL | ||
34 | |||
35 | static int uv_bau_max_concurrent __read_mostly; | ||
36 | |||
37 | static int nobau; | 38 | static int nobau; |
39 | static int baudisabled; | ||
40 | static spinlock_t disable_lock; | ||
41 | static cycles_t congested_cycles; | ||
42 | |||
43 | /* tunables: */ | ||
44 | static int max_bau_concurrent = MAX_BAU_CONCURRENT; | ||
45 | static int max_bau_concurrent_constant = MAX_BAU_CONCURRENT; | ||
46 | static int plugged_delay = PLUGGED_DELAY; | ||
47 | static int plugsb4reset = PLUGSB4RESET; | ||
48 | static int timeoutsb4reset = TIMEOUTSB4RESET; | ||
49 | static int ipi_reset_limit = IPI_RESET_LIMIT; | ||
50 | static int complete_threshold = COMPLETE_THRESHOLD; | ||
51 | static int congested_response_us = CONGESTED_RESPONSE_US; | ||
52 | static int congested_reps = CONGESTED_REPS; | ||
53 | static int congested_period = CONGESTED_PERIOD; | ||
54 | static struct dentry *tunables_dir; | ||
55 | static struct dentry *tunables_file; | ||
56 | |||
38 | static int __init setup_nobau(char *arg) | 57 | static int __init setup_nobau(char *arg) |
39 | { | 58 | { |
40 | nobau = 1; | 59 | nobau = 1; |
@@ -52,10 +71,6 @@ static DEFINE_PER_CPU(struct ptc_stats, ptcstats); | |||
52 | static DEFINE_PER_CPU(struct bau_control, bau_control); | 71 | static DEFINE_PER_CPU(struct bau_control, bau_control); |
53 | static DEFINE_PER_CPU(cpumask_var_t, uv_flush_tlb_mask); | 72 | static DEFINE_PER_CPU(cpumask_var_t, uv_flush_tlb_mask); |
54 | 73 | ||
55 | struct reset_args { | ||
56 | int sender; | ||
57 | }; | ||
58 | |||
59 | /* | 74 | /* |
60 | * Determine the first node on a uvhub. 'Nodes' are used for kernel | 75 | * Determine the first node on a uvhub. 'Nodes' are used for kernel |
61 | * memory allocation. | 76 | * memory allocation. |
@@ -126,7 +141,7 @@ static inline void uv_bau_process_retry_msg(struct msg_desc *mdp, | |||
126 | struct ptc_stats *stat; | 141 | struct ptc_stats *stat; |
127 | 142 | ||
128 | msg = mdp->msg; | 143 | msg = mdp->msg; |
129 | stat = &per_cpu(ptcstats, bcp->cpu); | 144 | stat = bcp->statp; |
130 | stat->d_retries++; | 145 | stat->d_retries++; |
131 | /* | 146 | /* |
132 | * cancel any message from msg+1 to the retry itself | 147 | * cancel any message from msg+1 to the retry itself |
@@ -146,15 +161,14 @@ static inline void uv_bau_process_retry_msg(struct msg_desc *mdp, | |||
146 | slot2 = msg2 - mdp->va_queue_first; | 161 | slot2 = msg2 - mdp->va_queue_first; |
147 | mmr = uv_read_local_mmr | 162 | mmr = uv_read_local_mmr |
148 | (UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE); | 163 | (UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE); |
149 | msg_res = ((msg2->sw_ack_vector << 8) | | 164 | msg_res = msg2->sw_ack_vector; |
150 | msg2->sw_ack_vector); | ||
151 | /* | 165 | /* |
152 | * This is a message retry; clear the resources held | 166 | * This is a message retry; clear the resources held |
153 | * by the previous message only if they timed out. | 167 | * by the previous message only if they timed out. |
154 | * If it has not timed out we have an unexpected | 168 | * If it has not timed out we have an unexpected |
155 | * situation to report. | 169 | * situation to report. |
156 | */ | 170 | */ |
157 | if (mmr & (msg_res << 8)) { | 171 | if (mmr & (msg_res << UV_SW_ACK_NPENDING)) { |
158 | /* | 172 | /* |
159 | * is the resource timed out? | 173 | * is the resource timed out? |
160 | * make everyone ignore the cancelled message. | 174 | * make everyone ignore the cancelled message. |
@@ -164,9 +178,9 @@ static inline void uv_bau_process_retry_msg(struct msg_desc *mdp, | |||
164 | cancel_count++; | 178 | cancel_count++; |
165 | uv_write_local_mmr( | 179 | uv_write_local_mmr( |
166 | UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS, | 180 | UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS, |
167 | (msg_res << 8) | msg_res); | 181 | (msg_res << UV_SW_ACK_NPENDING) | |
168 | } else | 182 | msg_res); |
169 | printk(KERN_INFO "note bau retry: no effect\n"); | 183 | } |
170 | } | 184 | } |
171 | } | 185 | } |
172 | if (!cancel_count) | 186 | if (!cancel_count) |
@@ -190,7 +204,7 @@ static void uv_bau_process_message(struct msg_desc *mdp, | |||
190 | * This must be a normal message, or retry of a normal message | 204 | * This must be a normal message, or retry of a normal message |
191 | */ | 205 | */ |
192 | msg = mdp->msg; | 206 | msg = mdp->msg; |
193 | stat = &per_cpu(ptcstats, bcp->cpu); | 207 | stat = bcp->statp; |
194 | if (msg->address == TLB_FLUSH_ALL) { | 208 | if (msg->address == TLB_FLUSH_ALL) { |
195 | local_flush_tlb(); | 209 | local_flush_tlb(); |
196 | stat->d_alltlb++; | 210 | stat->d_alltlb++; |
@@ -274,7 +288,7 @@ uv_do_reset(void *ptr) | |||
274 | 288 | ||
275 | bcp = &per_cpu(bau_control, smp_processor_id()); | 289 | bcp = &per_cpu(bau_control, smp_processor_id()); |
276 | rap = (struct reset_args *)ptr; | 290 | rap = (struct reset_args *)ptr; |
277 | stat = &per_cpu(ptcstats, bcp->cpu); | 291 | stat = bcp->statp; |
278 | stat->d_resets++; | 292 | stat->d_resets++; |
279 | 293 | ||
280 | /* | 294 | /* |
@@ -302,13 +316,13 @@ uv_do_reset(void *ptr) | |||
302 | */ | 316 | */ |
303 | mmr = uv_read_local_mmr | 317 | mmr = uv_read_local_mmr |
304 | (UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE); | 318 | (UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE); |
305 | msg_res = ((msg->sw_ack_vector << 8) | | 319 | msg_res = msg->sw_ack_vector; |
306 | msg->sw_ack_vector); | ||
307 | if (mmr & msg_res) { | 320 | if (mmr & msg_res) { |
308 | stat->d_rcanceled++; | 321 | stat->d_rcanceled++; |
309 | uv_write_local_mmr( | 322 | uv_write_local_mmr( |
310 | UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS, | 323 | UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE_ALIAS, |
311 | msg_res); | 324 | (msg_res << UV_SW_ACK_NPENDING) | |
325 | msg_res); | ||
312 | } | 326 | } |
313 | } | 327 | } |
314 | } | 328 | } |
@@ -386,17 +400,12 @@ static int uv_wait_completion(struct bau_desc *bau_desc, | |||
386 | unsigned long mmr_offset, int right_shift, int this_cpu, | 400 | unsigned long mmr_offset, int right_shift, int this_cpu, |
387 | struct bau_control *bcp, struct bau_control *smaster, long try) | 401 | struct bau_control *bcp, struct bau_control *smaster, long try) |
388 | { | 402 | { |
389 | int relaxes = 0; | ||
390 | unsigned long descriptor_status; | 403 | unsigned long descriptor_status; |
391 | unsigned long mmr; | ||
392 | unsigned long mask; | ||
393 | cycles_t ttime; | 404 | cycles_t ttime; |
394 | cycles_t timeout_time; | 405 | struct ptc_stats *stat = bcp->statp; |
395 | struct ptc_stats *stat = &per_cpu(ptcstats, this_cpu); | ||
396 | struct bau_control *hmaster; | 406 | struct bau_control *hmaster; |
397 | 407 | ||
398 | hmaster = bcp->uvhub_master; | 408 | hmaster = bcp->uvhub_master; |
399 | timeout_time = get_cycles() + bcp->timeout_interval; | ||
400 | 409 | ||
401 | /* spin on the status MMR, waiting for it to go idle */ | 410 | /* spin on the status MMR, waiting for it to go idle */ |
402 | while ((descriptor_status = (((unsigned long) | 411 | while ((descriptor_status = (((unsigned long) |
@@ -423,7 +432,8 @@ static int uv_wait_completion(struct bau_desc *bau_desc, | |||
423 | * pending. In that case hardware returns the | 432 | * pending. In that case hardware returns the |
424 | * ERROR that looks like a destination timeout. | 433 | * ERROR that looks like a destination timeout. |
425 | */ | 434 | */ |
426 | if (cycles_2_us(ttime - bcp->send_message) < BIOS_TO) { | 435 | if (cycles_2_us(ttime - bcp->send_message) < |
436 | timeout_us) { | ||
427 | bcp->conseccompletes = 0; | 437 | bcp->conseccompletes = 0; |
428 | return FLUSH_RETRY_PLUGGED; | 438 | return FLUSH_RETRY_PLUGGED; |
429 | } | 439 | } |
@@ -435,26 +445,6 @@ static int uv_wait_completion(struct bau_desc *bau_desc, | |||
435 | * descriptor_status is still BUSY | 445 | * descriptor_status is still BUSY |
436 | */ | 446 | */ |
437 | cpu_relax(); | 447 | cpu_relax(); |
438 | relaxes++; | ||
439 | if (relaxes >= 10000) { | ||
440 | relaxes = 0; | ||
441 | if (get_cycles() > timeout_time) { | ||
442 | quiesce_local_uvhub(hmaster); | ||
443 | |||
444 | /* single-thread the register change */ | ||
445 | spin_lock(&hmaster->masks_lock); | ||
446 | mmr = uv_read_local_mmr(mmr_offset); | ||
447 | mask = 0UL; | ||
448 | mask |= (3UL < right_shift); | ||
449 | mask = ~mask; | ||
450 | mmr &= mask; | ||
451 | uv_write_local_mmr(mmr_offset, mmr); | ||
452 | spin_unlock(&hmaster->masks_lock); | ||
453 | end_uvhub_quiesce(hmaster); | ||
454 | stat->s_busy++; | ||
455 | return FLUSH_GIVEUP; | ||
456 | } | ||
457 | } | ||
458 | } | 448 | } |
459 | } | 449 | } |
460 | bcp->conseccompletes++; | 450 | bcp->conseccompletes++; |
@@ -494,56 +484,116 @@ static inline int atomic_inc_unless_ge(spinlock_t *lock, atomic_t *v, int u) | |||
494 | return 1; | 484 | return 1; |
495 | } | 485 | } |
496 | 486 | ||
487 | /* | ||
488 | * Our retries are blocked by all destination swack resources being | ||
489 | * in use, and a timeout is pending. In that case hardware immediately | ||
490 | * returns the ERROR that looks like a destination timeout. | ||
491 | */ | ||
492 | static void | ||
493 | destination_plugged(struct bau_desc *bau_desc, struct bau_control *bcp, | ||
494 | struct bau_control *hmaster, struct ptc_stats *stat) | ||
495 | { | ||
496 | udelay(bcp->plugged_delay); | ||
497 | bcp->plugged_tries++; | ||
498 | if (bcp->plugged_tries >= bcp->plugsb4reset) { | ||
499 | bcp->plugged_tries = 0; | ||
500 | quiesce_local_uvhub(hmaster); | ||
501 | spin_lock(&hmaster->queue_lock); | ||
502 | uv_reset_with_ipi(&bau_desc->distribution, bcp->cpu); | ||
503 | spin_unlock(&hmaster->queue_lock); | ||
504 | end_uvhub_quiesce(hmaster); | ||
505 | bcp->ipi_attempts++; | ||
506 | stat->s_resets_plug++; | ||
507 | } | ||
508 | } | ||
509 | |||
510 | static void | ||
511 | destination_timeout(struct bau_desc *bau_desc, struct bau_control *bcp, | ||
512 | struct bau_control *hmaster, struct ptc_stats *stat) | ||
513 | { | ||
514 | hmaster->max_bau_concurrent = 1; | ||
515 | bcp->timeout_tries++; | ||
516 | if (bcp->timeout_tries >= bcp->timeoutsb4reset) { | ||
517 | bcp->timeout_tries = 0; | ||
518 | quiesce_local_uvhub(hmaster); | ||
519 | spin_lock(&hmaster->queue_lock); | ||
520 | uv_reset_with_ipi(&bau_desc->distribution, bcp->cpu); | ||
521 | spin_unlock(&hmaster->queue_lock); | ||
522 | end_uvhub_quiesce(hmaster); | ||
523 | bcp->ipi_attempts++; | ||
524 | stat->s_resets_timeout++; | ||
525 | } | ||
526 | } | ||
527 | |||
528 | /* | ||
529 | * Completions are taking a very long time due to a congested numalink | ||
530 | * network. | ||
531 | */ | ||
532 | static void | ||
533 | disable_for_congestion(struct bau_control *bcp, struct ptc_stats *stat) | ||
534 | { | ||
535 | int tcpu; | ||
536 | struct bau_control *tbcp; | ||
537 | |||
538 | /* let only one cpu do this disabling */ | ||
539 | spin_lock(&disable_lock); | ||
540 | if (!baudisabled && bcp->period_requests && | ||
541 | ((bcp->period_time / bcp->period_requests) > congested_cycles)) { | ||
542 | /* it becomes this cpu's job to turn on the use of the | ||
543 | BAU again */ | ||
544 | baudisabled = 1; | ||
545 | bcp->set_bau_off = 1; | ||
546 | bcp->set_bau_on_time = get_cycles() + | ||
547 | sec_2_cycles(bcp->congested_period); | ||
548 | stat->s_bau_disabled++; | ||
549 | for_each_present_cpu(tcpu) { | ||
550 | tbcp = &per_cpu(bau_control, tcpu); | ||
551 | tbcp->baudisabled = 1; | ||
552 | } | ||
553 | } | ||
554 | spin_unlock(&disable_lock); | ||
555 | } | ||
556 | |||
497 | /** | 557 | /** |
498 | * uv_flush_send_and_wait | 558 | * uv_flush_send_and_wait |
499 | * | 559 | * |
500 | * Send a broadcast and wait for it to complete. | 560 | * Send a broadcast and wait for it to complete. |
501 | * | 561 | * |
502 | * The flush_mask contains the cpus the broadcast is to be sent to, plus | 562 | * The flush_mask contains the cpus the broadcast is to be sent to including |
503 | * cpus that are on the local uvhub. | 563 | * cpus that are on the local uvhub. |
504 | * | 564 | * |
505 | * Returns NULL if all flushing represented in the mask was done. The mask | 565 | * Returns 0 if all flushing represented in the mask was done. |
506 | * is zeroed. | 566 | * Returns 1 if it gives up entirely and the original cpu mask is to be |
507 | * Returns @flush_mask if some remote flushing remains to be done. The | 567 | * returned to the kernel. |
508 | * mask will have some bits still set, representing any cpus on the local | ||
509 | * uvhub (not current cpu) and any on remote uvhubs if the broadcast failed. | ||
510 | */ | 568 | */ |
511 | const struct cpumask *uv_flush_send_and_wait(struct bau_desc *bau_desc, | 569 | int uv_flush_send_and_wait(struct bau_desc *bau_desc, |
512 | struct cpumask *flush_mask, | 570 | struct cpumask *flush_mask, struct bau_control *bcp) |
513 | struct bau_control *bcp) | ||
514 | { | 571 | { |
515 | int right_shift; | 572 | int right_shift; |
516 | int uvhub; | ||
517 | int bit; | ||
518 | int completion_status = 0; | 573 | int completion_status = 0; |
519 | int seq_number = 0; | 574 | int seq_number = 0; |
520 | long try = 0; | 575 | long try = 0; |
521 | int cpu = bcp->uvhub_cpu; | 576 | int cpu = bcp->uvhub_cpu; |
522 | int this_cpu = bcp->cpu; | 577 | int this_cpu = bcp->cpu; |
523 | int this_uvhub = bcp->uvhub; | ||
524 | unsigned long mmr_offset; | 578 | unsigned long mmr_offset; |
525 | unsigned long index; | 579 | unsigned long index; |
526 | cycles_t time1; | 580 | cycles_t time1; |
527 | cycles_t time2; | 581 | cycles_t time2; |
528 | struct ptc_stats *stat = &per_cpu(ptcstats, bcp->cpu); | 582 | cycles_t elapsed; |
583 | struct ptc_stats *stat = bcp->statp; | ||
529 | struct bau_control *smaster = bcp->socket_master; | 584 | struct bau_control *smaster = bcp->socket_master; |
530 | struct bau_control *hmaster = bcp->uvhub_master; | 585 | struct bau_control *hmaster = bcp->uvhub_master; |
531 | 586 | ||
532 | /* | ||
533 | * Spin here while there are hmaster->max_concurrent or more active | ||
534 | * descriptors. This is the per-uvhub 'throttle'. | ||
535 | */ | ||
536 | if (!atomic_inc_unless_ge(&hmaster->uvhub_lock, | 587 | if (!atomic_inc_unless_ge(&hmaster->uvhub_lock, |
537 | &hmaster->active_descriptor_count, | 588 | &hmaster->active_descriptor_count, |
538 | hmaster->max_concurrent)) { | 589 | hmaster->max_bau_concurrent)) { |
539 | stat->s_throttles++; | 590 | stat->s_throttles++; |
540 | do { | 591 | do { |
541 | cpu_relax(); | 592 | cpu_relax(); |
542 | } while (!atomic_inc_unless_ge(&hmaster->uvhub_lock, | 593 | } while (!atomic_inc_unless_ge(&hmaster->uvhub_lock, |
543 | &hmaster->active_descriptor_count, | 594 | &hmaster->active_descriptor_count, |
544 | hmaster->max_concurrent)); | 595 | hmaster->max_bau_concurrent)); |
545 | } | 596 | } |
546 | |||
547 | while (hmaster->uvhub_quiesce) | 597 | while (hmaster->uvhub_quiesce) |
548 | cpu_relax(); | 598 | cpu_relax(); |
549 | 599 | ||
@@ -557,23 +607,10 @@ const struct cpumask *uv_flush_send_and_wait(struct bau_desc *bau_desc, | |||
557 | } | 607 | } |
558 | time1 = get_cycles(); | 608 | time1 = get_cycles(); |
559 | do { | 609 | do { |
560 | /* | ||
561 | * Every message from any given cpu gets a unique message | ||
562 | * sequence number. But retries use that same number. | ||
563 | * Our message may have timed out at the destination because | ||
564 | * all sw-ack resources are in use and there is a timeout | ||
565 | * pending there. In that case, our last send never got | ||
566 | * placed into the queue and we need to persist until it | ||
567 | * does. | ||
568 | * | ||
569 | * Make any retry a type MSG_RETRY so that the destination will | ||
570 | * free any resource held by a previous message from this cpu. | ||
571 | */ | ||
572 | if (try == 0) { | 610 | if (try == 0) { |
573 | /* use message type set by the caller the first time */ | 611 | bau_desc->header.msg_type = MSG_REGULAR; |
574 | seq_number = bcp->message_number++; | 612 | seq_number = bcp->message_number++; |
575 | } else { | 613 | } else { |
576 | /* use RETRY type on all the rest; same sequence */ | ||
577 | bau_desc->header.msg_type = MSG_RETRY; | 614 | bau_desc->header.msg_type = MSG_RETRY; |
578 | stat->s_retry_messages++; | 615 | stat->s_retry_messages++; |
579 | } | 616 | } |
@@ -581,50 +618,17 @@ const struct cpumask *uv_flush_send_and_wait(struct bau_desc *bau_desc, | |||
581 | index = (1UL << UVH_LB_BAU_SB_ACTIVATION_CONTROL_PUSH_SHFT) | | 618 | index = (1UL << UVH_LB_BAU_SB_ACTIVATION_CONTROL_PUSH_SHFT) | |
582 | bcp->uvhub_cpu; | 619 | bcp->uvhub_cpu; |
583 | bcp->send_message = get_cycles(); | 620 | bcp->send_message = get_cycles(); |
584 | |||
585 | uv_write_local_mmr(UVH_LB_BAU_SB_ACTIVATION_CONTROL, index); | 621 | uv_write_local_mmr(UVH_LB_BAU_SB_ACTIVATION_CONTROL, index); |
586 | |||
587 | try++; | 622 | try++; |
588 | completion_status = uv_wait_completion(bau_desc, mmr_offset, | 623 | completion_status = uv_wait_completion(bau_desc, mmr_offset, |
589 | right_shift, this_cpu, bcp, smaster, try); | 624 | right_shift, this_cpu, bcp, smaster, try); |
590 | 625 | ||
591 | if (completion_status == FLUSH_RETRY_PLUGGED) { | 626 | if (completion_status == FLUSH_RETRY_PLUGGED) { |
592 | /* | 627 | destination_plugged(bau_desc, bcp, hmaster, stat); |
593 | * Our retries may be blocked by all destination swack | ||
594 | * resources being consumed, and a timeout pending. In | ||
595 | * that case hardware immediately returns the ERROR | ||
596 | * that looks like a destination timeout. | ||
597 | */ | ||
598 | udelay(TIMEOUT_DELAY); | ||
599 | bcp->plugged_tries++; | ||
600 | if (bcp->plugged_tries >= PLUGSB4RESET) { | ||
601 | bcp->plugged_tries = 0; | ||
602 | quiesce_local_uvhub(hmaster); | ||
603 | spin_lock(&hmaster->queue_lock); | ||
604 | uv_reset_with_ipi(&bau_desc->distribution, | ||
605 | this_cpu); | ||
606 | spin_unlock(&hmaster->queue_lock); | ||
607 | end_uvhub_quiesce(hmaster); | ||
608 | bcp->ipi_attempts++; | ||
609 | stat->s_resets_plug++; | ||
610 | } | ||
611 | } else if (completion_status == FLUSH_RETRY_TIMEOUT) { | 628 | } else if (completion_status == FLUSH_RETRY_TIMEOUT) { |
612 | hmaster->max_concurrent = 1; | 629 | destination_timeout(bau_desc, bcp, hmaster, stat); |
613 | bcp->timeout_tries++; | ||
614 | udelay(TIMEOUT_DELAY); | ||
615 | if (bcp->timeout_tries >= TIMEOUTSB4RESET) { | ||
616 | bcp->timeout_tries = 0; | ||
617 | quiesce_local_uvhub(hmaster); | ||
618 | spin_lock(&hmaster->queue_lock); | ||
619 | uv_reset_with_ipi(&bau_desc->distribution, | ||
620 | this_cpu); | ||
621 | spin_unlock(&hmaster->queue_lock); | ||
622 | end_uvhub_quiesce(hmaster); | ||
623 | bcp->ipi_attempts++; | ||
624 | stat->s_resets_timeout++; | ||
625 | } | ||
626 | } | 630 | } |
627 | if (bcp->ipi_attempts >= 3) { | 631 | if (bcp->ipi_attempts >= bcp->ipi_reset_limit) { |
628 | bcp->ipi_attempts = 0; | 632 | bcp->ipi_attempts = 0; |
629 | completion_status = FLUSH_GIVEUP; | 633 | completion_status = FLUSH_GIVEUP; |
630 | break; | 634 | break; |
@@ -633,49 +637,36 @@ const struct cpumask *uv_flush_send_and_wait(struct bau_desc *bau_desc, | |||
633 | } while ((completion_status == FLUSH_RETRY_PLUGGED) || | 637 | } while ((completion_status == FLUSH_RETRY_PLUGGED) || |
634 | (completion_status == FLUSH_RETRY_TIMEOUT)); | 638 | (completion_status == FLUSH_RETRY_TIMEOUT)); |
635 | time2 = get_cycles(); | 639 | time2 = get_cycles(); |
636 | 640 | bcp->plugged_tries = 0; | |
637 | if ((completion_status == FLUSH_COMPLETE) && (bcp->conseccompletes > 5) | 641 | bcp->timeout_tries = 0; |
638 | && (hmaster->max_concurrent < hmaster->max_concurrent_constant)) | 642 | if ((completion_status == FLUSH_COMPLETE) && |
639 | hmaster->max_concurrent++; | 643 | (bcp->conseccompletes > bcp->complete_threshold) && |
640 | 644 | (hmaster->max_bau_concurrent < | |
641 | /* | 645 | hmaster->max_bau_concurrent_constant)) |
642 | * hold any cpu not timing out here; no other cpu currently held by | 646 | hmaster->max_bau_concurrent++; |
643 | * the 'throttle' should enter the activation code | ||
644 | */ | ||
645 | while (hmaster->uvhub_quiesce) | 647 | while (hmaster->uvhub_quiesce) |
646 | cpu_relax(); | 648 | cpu_relax(); |
647 | atomic_dec(&hmaster->active_descriptor_count); | 649 | atomic_dec(&hmaster->active_descriptor_count); |
648 | 650 | if (time2 > time1) { | |
649 | /* guard against cycles wrap */ | 651 | elapsed = time2 - time1; |
650 | if (time2 > time1) | 652 | stat->s_time += elapsed; |
651 | stat->s_time += (time2 - time1); | 653 | if ((completion_status == FLUSH_COMPLETE) && (try == 1)) { |
652 | else | 654 | bcp->period_requests++; |
653 | stat->s_requestor--; /* don't count this one */ | 655 | bcp->period_time += elapsed; |
656 | if ((elapsed > congested_cycles) && | ||
657 | (bcp->period_requests > bcp->congested_reps)) { | ||
658 | disable_for_congestion(bcp, stat); | ||
659 | } | ||
660 | } | ||
661 | } else | ||
662 | stat->s_requestor--; | ||
654 | if (completion_status == FLUSH_COMPLETE && try > 1) | 663 | if (completion_status == FLUSH_COMPLETE && try > 1) |
655 | stat->s_retriesok++; | 664 | stat->s_retriesok++; |
656 | else if (completion_status == FLUSH_GIVEUP) { | 665 | else if (completion_status == FLUSH_GIVEUP) { |
657 | /* | ||
658 | * Cause the caller to do an IPI-style TLB shootdown on | ||
659 | * the target cpu's, all of which are still in the mask. | ||
660 | */ | ||
661 | stat->s_giveup++; | 666 | stat->s_giveup++; |
662 | return flush_mask; | 667 | return 1; |
663 | } | ||
664 | |||
665 | /* | ||
666 | * Success, so clear the remote cpu's from the mask so we don't | ||
667 | * use the IPI method of shootdown on them. | ||
668 | */ | ||
669 | for_each_cpu(bit, flush_mask) { | ||
670 | uvhub = uv_cpu_to_blade_id(bit); | ||
671 | if (uvhub == this_uvhub) | ||
672 | continue; | ||
673 | cpumask_clear_cpu(bit, flush_mask); | ||
674 | } | 668 | } |
675 | if (!cpumask_empty(flush_mask)) | 669 | return 0; |
676 | return flush_mask; | ||
677 | |||
678 | return NULL; | ||
679 | } | 670 | } |
680 | 671 | ||
681 | /** | 672 | /** |
@@ -707,70 +698,89 @@ const struct cpumask *uv_flush_tlb_others(const struct cpumask *cpumask, | |||
707 | struct mm_struct *mm, | 698 | struct mm_struct *mm, |
708 | unsigned long va, unsigned int cpu) | 699 | unsigned long va, unsigned int cpu) |
709 | { | 700 | { |
710 | int remotes; | ||
711 | int tcpu; | 701 | int tcpu; |
712 | int uvhub; | 702 | int uvhub; |
713 | int locals = 0; | 703 | int locals = 0; |
704 | int remotes = 0; | ||
705 | int hubs = 0; | ||
714 | struct bau_desc *bau_desc; | 706 | struct bau_desc *bau_desc; |
715 | struct cpumask *flush_mask; | 707 | struct cpumask *flush_mask; |
716 | struct ptc_stats *stat; | 708 | struct ptc_stats *stat; |
717 | struct bau_control *bcp; | 709 | struct bau_control *bcp; |
710 | struct bau_control *tbcp; | ||
718 | 711 | ||
712 | /* kernel was booted 'nobau' */ | ||
719 | if (nobau) | 713 | if (nobau) |
720 | return cpumask; | 714 | return cpumask; |
721 | 715 | ||
722 | bcp = &per_cpu(bau_control, cpu); | 716 | bcp = &per_cpu(bau_control, cpu); |
717 | stat = bcp->statp; | ||
718 | |||
719 | /* bau was disabled due to slow response */ | ||
720 | if (bcp->baudisabled) { | ||
721 | /* the cpu that disabled it must re-enable it */ | ||
722 | if (bcp->set_bau_off) { | ||
723 | if (get_cycles() >= bcp->set_bau_on_time) { | ||
724 | stat->s_bau_reenabled++; | ||
725 | baudisabled = 0; | ||
726 | for_each_present_cpu(tcpu) { | ||
727 | tbcp = &per_cpu(bau_control, tcpu); | ||
728 | tbcp->baudisabled = 0; | ||
729 | tbcp->period_requests = 0; | ||
730 | tbcp->period_time = 0; | ||
731 | } | ||
732 | } | ||
733 | } | ||
734 | return cpumask; | ||
735 | } | ||
736 | |||
723 | /* | 737 | /* |
724 | * Each sending cpu has a per-cpu mask which it fills from the caller's | 738 | * Each sending cpu has a per-cpu mask which it fills from the caller's |
725 | * cpu mask. Only remote cpus are converted to uvhubs and copied. | 739 | * cpu mask. All cpus are converted to uvhubs and copied to the |
740 | * activation descriptor. | ||
726 | */ | 741 | */ |
727 | flush_mask = (struct cpumask *)per_cpu(uv_flush_tlb_mask, cpu); | 742 | flush_mask = (struct cpumask *)per_cpu(uv_flush_tlb_mask, cpu); |
728 | /* | 743 | /* don't actually do a shootdown of the local cpu */ |
729 | * copy cpumask to flush_mask, removing current cpu | ||
730 | * (current cpu should already have been flushed by the caller and | ||
731 | * should never be returned if we return flush_mask) | ||
732 | */ | ||
733 | cpumask_andnot(flush_mask, cpumask, cpumask_of(cpu)); | 744 | cpumask_andnot(flush_mask, cpumask, cpumask_of(cpu)); |
734 | if (cpu_isset(cpu, *cpumask)) | 745 | if (cpu_isset(cpu, *cpumask)) |
735 | locals++; /* current cpu was targeted */ | 746 | stat->s_ntargself++; |
736 | 747 | ||
737 | bau_desc = bcp->descriptor_base; | 748 | bau_desc = bcp->descriptor_base; |
738 | bau_desc += UV_ITEMS_PER_DESCRIPTOR * bcp->uvhub_cpu; | 749 | bau_desc += UV_ITEMS_PER_DESCRIPTOR * bcp->uvhub_cpu; |
739 | |||
740 | bau_uvhubs_clear(&bau_desc->distribution, UV_DISTRIBUTION_SIZE); | 750 | bau_uvhubs_clear(&bau_desc->distribution, UV_DISTRIBUTION_SIZE); |
741 | remotes = 0; | 751 | |
752 | /* cpu statistics */ | ||
742 | for_each_cpu(tcpu, flush_mask) { | 753 | for_each_cpu(tcpu, flush_mask) { |
743 | uvhub = uv_cpu_to_blade_id(tcpu); | 754 | uvhub = uv_cpu_to_blade_id(tcpu); |
744 | if (uvhub == bcp->uvhub) { | ||
745 | locals++; | ||
746 | continue; | ||
747 | } | ||
748 | bau_uvhub_set(uvhub, &bau_desc->distribution); | 755 | bau_uvhub_set(uvhub, &bau_desc->distribution); |
749 | remotes++; | 756 | if (uvhub == bcp->uvhub) |
750 | } | 757 | locals++; |
751 | if (remotes == 0) { | ||
752 | /* | ||
753 | * No off_hub flushing; return status for local hub. | ||
754 | * Return the caller's mask if all were local (the current | ||
755 | * cpu may be in that mask). | ||
756 | */ | ||
757 | if (locals) | ||
758 | return cpumask; | ||
759 | else | 758 | else |
760 | return NULL; | 759 | remotes++; |
761 | } | 760 | } |
762 | stat = &per_cpu(ptcstats, cpu); | 761 | if ((locals + remotes) == 0) |
762 | return NULL; | ||
763 | stat->s_requestor++; | 763 | stat->s_requestor++; |
764 | stat->s_ntargcpu += remotes; | 764 | stat->s_ntargcpu += remotes + locals; |
765 | stat->s_ntargremotes += remotes; | ||
766 | stat->s_ntarglocals += locals; | ||
765 | remotes = bau_uvhub_weight(&bau_desc->distribution); | 767 | remotes = bau_uvhub_weight(&bau_desc->distribution); |
766 | stat->s_ntarguvhub += remotes; | 768 | |
767 | if (remotes >= 16) | 769 | /* uvhub statistics */ |
770 | hubs = bau_uvhub_weight(&bau_desc->distribution); | ||
771 | if (locals) { | ||
772 | stat->s_ntarglocaluvhub++; | ||
773 | stat->s_ntargremoteuvhub += (hubs - 1); | ||
774 | } else | ||
775 | stat->s_ntargremoteuvhub += hubs; | ||
776 | stat->s_ntarguvhub += hubs; | ||
777 | if (hubs >= 16) | ||
768 | stat->s_ntarguvhub16++; | 778 | stat->s_ntarguvhub16++; |
769 | else if (remotes >= 8) | 779 | else if (hubs >= 8) |
770 | stat->s_ntarguvhub8++; | 780 | stat->s_ntarguvhub8++; |
771 | else if (remotes >= 4) | 781 | else if (hubs >= 4) |
772 | stat->s_ntarguvhub4++; | 782 | stat->s_ntarguvhub4++; |
773 | else if (remotes >= 2) | 783 | else if (hubs >= 2) |
774 | stat->s_ntarguvhub2++; | 784 | stat->s_ntarguvhub2++; |
775 | else | 785 | else |
776 | stat->s_ntarguvhub1++; | 786 | stat->s_ntarguvhub1++; |
@@ -779,10 +789,13 @@ const struct cpumask *uv_flush_tlb_others(const struct cpumask *cpumask, | |||
779 | bau_desc->payload.sending_cpu = cpu; | 789 | bau_desc->payload.sending_cpu = cpu; |
780 | 790 | ||
781 | /* | 791 | /* |
782 | * uv_flush_send_and_wait returns null if all cpu's were messaged, or | 792 | * uv_flush_send_and_wait returns 0 if all cpu's were messaged, |
783 | * the adjusted flush_mask if any cpu's were not messaged. | 793 | * or 1 if it gave up and the original cpumask should be returned. |
784 | */ | 794 | */ |
785 | return uv_flush_send_and_wait(bau_desc, flush_mask, bcp); | 795 | if (!uv_flush_send_and_wait(bau_desc, flush_mask, bcp)) |
796 | return NULL; | ||
797 | else | ||
798 | return cpumask; | ||
786 | } | 799 | } |
787 | 800 | ||
788 | /* | 801 | /* |
@@ -810,7 +823,7 @@ void uv_bau_message_interrupt(struct pt_regs *regs) | |||
810 | 823 | ||
811 | time_start = get_cycles(); | 824 | time_start = get_cycles(); |
812 | bcp = &per_cpu(bau_control, smp_processor_id()); | 825 | bcp = &per_cpu(bau_control, smp_processor_id()); |
813 | stat = &per_cpu(ptcstats, smp_processor_id()); | 826 | stat = bcp->statp; |
814 | msgdesc.va_queue_first = bcp->va_queue_first; | 827 | msgdesc.va_queue_first = bcp->va_queue_first; |
815 | msgdesc.va_queue_last = bcp->va_queue_last; | 828 | msgdesc.va_queue_last = bcp->va_queue_last; |
816 | msg = bcp->bau_msg_head; | 829 | msg = bcp->bau_msg_head; |
@@ -908,12 +921,12 @@ static void uv_ptc_seq_stop(struct seq_file *file, void *data) | |||
908 | } | 921 | } |
909 | 922 | ||
910 | static inline unsigned long long | 923 | static inline unsigned long long |
911 | millisec_2_cycles(unsigned long millisec) | 924 | microsec_2_cycles(unsigned long microsec) |
912 | { | 925 | { |
913 | unsigned long ns; | 926 | unsigned long ns; |
914 | unsigned long long cyc; | 927 | unsigned long long cyc; |
915 | 928 | ||
916 | ns = millisec * 1000; | 929 | ns = microsec * 1000; |
917 | cyc = (ns << CYC2NS_SCALE_FACTOR)/(per_cpu(cyc2ns, smp_processor_id())); | 930 | cyc = (ns << CYC2NS_SCALE_FACTOR)/(per_cpu(cyc2ns, smp_processor_id())); |
918 | return cyc; | 931 | return cyc; |
919 | } | 932 | } |
@@ -931,15 +944,19 @@ static int uv_ptc_seq_show(struct seq_file *file, void *data) | |||
931 | 944 | ||
932 | if (!cpu) { | 945 | if (!cpu) { |
933 | seq_printf(file, | 946 | seq_printf(file, |
934 | "# cpu sent stime numuvhubs numuvhubs16 numuvhubs8 "); | 947 | "# cpu sent stime self locals remotes ncpus localhub "); |
948 | seq_printf(file, | ||
949 | "remotehub numuvhubs numuvhubs16 numuvhubs8 "); | ||
935 | seq_printf(file, | 950 | seq_printf(file, |
936 | "numuvhubs4 numuvhubs2 numuvhubs1 numcpus dto "); | 951 | "numuvhubs4 numuvhubs2 numuvhubs1 dto "); |
937 | seq_printf(file, | 952 | seq_printf(file, |
938 | "retries rok resetp resett giveup sto bz throt "); | 953 | "retries rok resetp resett giveup sto bz throt "); |
939 | seq_printf(file, | 954 | seq_printf(file, |
940 | "sw_ack recv rtime all "); | 955 | "sw_ack recv rtime all "); |
941 | seq_printf(file, | 956 | seq_printf(file, |
942 | "one mult none retry canc nocan reset rcan\n"); | 957 | "one mult none retry canc nocan reset rcan "); |
958 | seq_printf(file, | ||
959 | "disable enable\n"); | ||
943 | } | 960 | } |
944 | if (cpu < num_possible_cpus() && cpu_online(cpu)) { | 961 | if (cpu < num_possible_cpus() && cpu_online(cpu)) { |
945 | stat = &per_cpu(ptcstats, cpu); | 962 | stat = &per_cpu(ptcstats, cpu); |
@@ -947,18 +964,23 @@ static int uv_ptc_seq_show(struct seq_file *file, void *data) | |||
947 | seq_printf(file, | 964 | seq_printf(file, |
948 | "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld ", | 965 | "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld ", |
949 | cpu, stat->s_requestor, cycles_2_us(stat->s_time), | 966 | cpu, stat->s_requestor, cycles_2_us(stat->s_time), |
950 | stat->s_ntarguvhub, stat->s_ntarguvhub16, | 967 | stat->s_ntargself, stat->s_ntarglocals, |
968 | stat->s_ntargremotes, stat->s_ntargcpu, | ||
969 | stat->s_ntarglocaluvhub, stat->s_ntargremoteuvhub, | ||
970 | stat->s_ntarguvhub, stat->s_ntarguvhub16); | ||
971 | seq_printf(file, "%ld %ld %ld %ld %ld ", | ||
951 | stat->s_ntarguvhub8, stat->s_ntarguvhub4, | 972 | stat->s_ntarguvhub8, stat->s_ntarguvhub4, |
952 | stat->s_ntarguvhub2, stat->s_ntarguvhub1, | 973 | stat->s_ntarguvhub2, stat->s_ntarguvhub1, |
953 | stat->s_ntargcpu, stat->s_dtimeout); | 974 | stat->s_dtimeout); |
954 | seq_printf(file, "%ld %ld %ld %ld %ld %ld %ld %ld ", | 975 | seq_printf(file, "%ld %ld %ld %ld %ld %ld %ld %ld ", |
955 | stat->s_retry_messages, stat->s_retriesok, | 976 | stat->s_retry_messages, stat->s_retriesok, |
956 | stat->s_resets_plug, stat->s_resets_timeout, | 977 | stat->s_resets_plug, stat->s_resets_timeout, |
957 | stat->s_giveup, stat->s_stimeout, | 978 | stat->s_giveup, stat->s_stimeout, |
958 | stat->s_busy, stat->s_throttles); | 979 | stat->s_busy, stat->s_throttles); |
980 | |||
959 | /* destination side statistics */ | 981 | /* destination side statistics */ |
960 | seq_printf(file, | 982 | seq_printf(file, |
961 | "%lx %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n", | 983 | "%lx %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld ", |
962 | uv_read_global_mmr64(uv_cpu_to_pnode(cpu), | 984 | uv_read_global_mmr64(uv_cpu_to_pnode(cpu), |
963 | UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE), | 985 | UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE), |
964 | stat->d_requestee, cycles_2_us(stat->d_time), | 986 | stat->d_requestee, cycles_2_us(stat->d_time), |
@@ -966,15 +988,36 @@ static int uv_ptc_seq_show(struct seq_file *file, void *data) | |||
966 | stat->d_nomsg, stat->d_retries, stat->d_canceled, | 988 | stat->d_nomsg, stat->d_retries, stat->d_canceled, |
967 | stat->d_nocanceled, stat->d_resets, | 989 | stat->d_nocanceled, stat->d_resets, |
968 | stat->d_rcanceled); | 990 | stat->d_rcanceled); |
991 | seq_printf(file, "%ld %ld\n", | ||
992 | stat->s_bau_disabled, stat->s_bau_reenabled); | ||
969 | } | 993 | } |
970 | 994 | ||
971 | return 0; | 995 | return 0; |
972 | } | 996 | } |
973 | 997 | ||
974 | /* | 998 | /* |
999 | * Display the tunables thru debugfs | ||
1000 | */ | ||
1001 | static ssize_t tunables_read(struct file *file, char __user *userbuf, | ||
1002 | size_t count, loff_t *ppos) | ||
1003 | { | ||
1004 | char buf[300]; | ||
1005 | int ret; | ||
1006 | |||
1007 | ret = snprintf(buf, 300, "%s %s %s\n%d %d %d %d %d %d %d %d %d\n", | ||
1008 | "max_bau_concurrent plugged_delay plugsb4reset", | ||
1009 | "timeoutsb4reset ipi_reset_limit complete_threshold", | ||
1010 | "congested_response_us congested_reps congested_period", | ||
1011 | max_bau_concurrent, plugged_delay, plugsb4reset, | ||
1012 | timeoutsb4reset, ipi_reset_limit, complete_threshold, | ||
1013 | congested_response_us, congested_reps, congested_period); | ||
1014 | |||
1015 | return simple_read_from_buffer(userbuf, count, ppos, buf, ret); | ||
1016 | } | ||
1017 | |||
1018 | /* | ||
975 | * -1: resetf the statistics | 1019 | * -1: resetf the statistics |
976 | * 0: display meaning of the statistics | 1020 | * 0: display meaning of the statistics |
977 | * >0: maximum concurrent active descriptors per uvhub (throttle) | ||
978 | */ | 1021 | */ |
979 | static ssize_t uv_ptc_proc_write(struct file *file, const char __user *user, | 1022 | static ssize_t uv_ptc_proc_write(struct file *file, const char __user *user, |
980 | size_t count, loff_t *data) | 1023 | size_t count, loff_t *data) |
@@ -983,7 +1026,6 @@ static ssize_t uv_ptc_proc_write(struct file *file, const char __user *user, | |||
983 | long input_arg; | 1026 | long input_arg; |
984 | char optstr[64]; | 1027 | char optstr[64]; |
985 | struct ptc_stats *stat; | 1028 | struct ptc_stats *stat; |
986 | struct bau_control *bcp; | ||
987 | 1029 | ||
988 | if (count == 0 || count > sizeof(optstr)) | 1030 | if (count == 0 || count > sizeof(optstr)) |
989 | return -EINVAL; | 1031 | return -EINVAL; |
@@ -1059,29 +1101,158 @@ static ssize_t uv_ptc_proc_write(struct file *file, const char __user *user, | |||
1059 | "reset: number of ipi-style reset requests processed\n"); | 1101 | "reset: number of ipi-style reset requests processed\n"); |
1060 | printk(KERN_DEBUG | 1102 | printk(KERN_DEBUG |
1061 | "rcan: number messages canceled by reset requests\n"); | 1103 | "rcan: number messages canceled by reset requests\n"); |
1104 | printk(KERN_DEBUG | ||
1105 | "disable: number times use of the BAU was disabled\n"); | ||
1106 | printk(KERN_DEBUG | ||
1107 | "enable: number times use of the BAU was re-enabled\n"); | ||
1062 | } else if (input_arg == -1) { | 1108 | } else if (input_arg == -1) { |
1063 | for_each_present_cpu(cpu) { | 1109 | for_each_present_cpu(cpu) { |
1064 | stat = &per_cpu(ptcstats, cpu); | 1110 | stat = &per_cpu(ptcstats, cpu); |
1065 | memset(stat, 0, sizeof(struct ptc_stats)); | 1111 | memset(stat, 0, sizeof(struct ptc_stats)); |
1066 | } | 1112 | } |
1067 | } else { | 1113 | } |
1068 | uv_bau_max_concurrent = input_arg; | 1114 | |
1069 | bcp = &per_cpu(bau_control, smp_processor_id()); | 1115 | return count; |
1070 | if (uv_bau_max_concurrent < 1 || | 1116 | } |
1071 | uv_bau_max_concurrent > bcp->cpus_in_uvhub) { | 1117 | |
1072 | printk(KERN_DEBUG | 1118 | static int local_atoi(const char *name) |
1073 | "Error: BAU max concurrent %d; %d is invalid\n", | 1119 | { |
1074 | bcp->max_concurrent, uv_bau_max_concurrent); | 1120 | int val = 0; |
1075 | return -EINVAL; | 1121 | |
1076 | } | 1122 | for (;; name++) { |
1077 | printk(KERN_DEBUG "Set BAU max concurrent:%d\n", | 1123 | switch (*name) { |
1078 | uv_bau_max_concurrent); | 1124 | case '0' ... '9': |
1079 | for_each_present_cpu(cpu) { | 1125 | val = 10*val+(*name-'0'); |
1080 | bcp = &per_cpu(bau_control, cpu); | 1126 | break; |
1081 | bcp->max_concurrent = uv_bau_max_concurrent; | 1127 | default: |
1128 | return val; | ||
1082 | } | 1129 | } |
1083 | } | 1130 | } |
1131 | } | ||
1132 | |||
1133 | /* | ||
1134 | * set the tunables | ||
1135 | * 0 values reset them to defaults | ||
1136 | */ | ||
1137 | static ssize_t tunables_write(struct file *file, const char __user *user, | ||
1138 | size_t count, loff_t *data) | ||
1139 | { | ||
1140 | int cpu; | ||
1141 | int cnt = 0; | ||
1142 | int val; | ||
1143 | char *p; | ||
1144 | char *q; | ||
1145 | char instr[64]; | ||
1146 | struct bau_control *bcp; | ||
1147 | |||
1148 | if (count == 0 || count > sizeof(instr)-1) | ||
1149 | return -EINVAL; | ||
1150 | if (copy_from_user(instr, user, count)) | ||
1151 | return -EFAULT; | ||
1084 | 1152 | ||
1153 | instr[count] = '\0'; | ||
1154 | /* count the fields */ | ||
1155 | p = instr + strspn(instr, WHITESPACE); | ||
1156 | q = p; | ||
1157 | for (; *p; p = q + strspn(q, WHITESPACE)) { | ||
1158 | q = p + strcspn(p, WHITESPACE); | ||
1159 | cnt++; | ||
1160 | if (q == p) | ||
1161 | break; | ||
1162 | } | ||
1163 | if (cnt != 9) { | ||
1164 | printk(KERN_INFO "bau tunable error: should be 9 numbers\n"); | ||
1165 | return -EINVAL; | ||
1166 | } | ||
1167 | |||
1168 | p = instr + strspn(instr, WHITESPACE); | ||
1169 | q = p; | ||
1170 | for (cnt = 0; *p; p = q + strspn(q, WHITESPACE), cnt++) { | ||
1171 | q = p + strcspn(p, WHITESPACE); | ||
1172 | val = local_atoi(p); | ||
1173 | switch (cnt) { | ||
1174 | case 0: | ||
1175 | if (val == 0) { | ||
1176 | max_bau_concurrent = MAX_BAU_CONCURRENT; | ||
1177 | max_bau_concurrent_constant = | ||
1178 | MAX_BAU_CONCURRENT; | ||
1179 | continue; | ||
1180 | } | ||
1181 | bcp = &per_cpu(bau_control, smp_processor_id()); | ||
1182 | if (val < 1 || val > bcp->cpus_in_uvhub) { | ||
1183 | printk(KERN_DEBUG | ||
1184 | "Error: BAU max concurrent %d is invalid\n", | ||
1185 | val); | ||
1186 | return -EINVAL; | ||
1187 | } | ||
1188 | max_bau_concurrent = val; | ||
1189 | max_bau_concurrent_constant = val; | ||
1190 | continue; | ||
1191 | case 1: | ||
1192 | if (val == 0) | ||
1193 | plugged_delay = PLUGGED_DELAY; | ||
1194 | else | ||
1195 | plugged_delay = val; | ||
1196 | continue; | ||
1197 | case 2: | ||
1198 | if (val == 0) | ||
1199 | plugsb4reset = PLUGSB4RESET; | ||
1200 | else | ||
1201 | plugsb4reset = val; | ||
1202 | continue; | ||
1203 | case 3: | ||
1204 | if (val == 0) | ||
1205 | timeoutsb4reset = TIMEOUTSB4RESET; | ||
1206 | else | ||
1207 | timeoutsb4reset = val; | ||
1208 | continue; | ||
1209 | case 4: | ||
1210 | if (val == 0) | ||
1211 | ipi_reset_limit = IPI_RESET_LIMIT; | ||
1212 | else | ||
1213 | ipi_reset_limit = val; | ||
1214 | continue; | ||
1215 | case 5: | ||
1216 | if (val == 0) | ||
1217 | complete_threshold = COMPLETE_THRESHOLD; | ||
1218 | else | ||
1219 | complete_threshold = val; | ||
1220 | continue; | ||
1221 | case 6: | ||
1222 | if (val == 0) | ||
1223 | congested_response_us = CONGESTED_RESPONSE_US; | ||
1224 | else | ||
1225 | congested_response_us = val; | ||
1226 | continue; | ||
1227 | case 7: | ||
1228 | if (val == 0) | ||
1229 | congested_reps = CONGESTED_REPS; | ||
1230 | else | ||
1231 | congested_reps = val; | ||
1232 | continue; | ||
1233 | case 8: | ||
1234 | if (val == 0) | ||
1235 | congested_period = CONGESTED_PERIOD; | ||
1236 | else | ||
1237 | congested_period = val; | ||
1238 | continue; | ||
1239 | } | ||
1240 | if (q == p) | ||
1241 | break; | ||
1242 | } | ||
1243 | for_each_present_cpu(cpu) { | ||
1244 | bcp = &per_cpu(bau_control, cpu); | ||
1245 | bcp->max_bau_concurrent = max_bau_concurrent; | ||
1246 | bcp->max_bau_concurrent_constant = max_bau_concurrent; | ||
1247 | bcp->plugged_delay = plugged_delay; | ||
1248 | bcp->plugsb4reset = plugsb4reset; | ||
1249 | bcp->timeoutsb4reset = timeoutsb4reset; | ||
1250 | bcp->ipi_reset_limit = ipi_reset_limit; | ||
1251 | bcp->complete_threshold = complete_threshold; | ||
1252 | bcp->congested_response_us = congested_response_us; | ||
1253 | bcp->congested_reps = congested_reps; | ||
1254 | bcp->congested_period = congested_period; | ||
1255 | } | ||
1085 | return count; | 1256 | return count; |
1086 | } | 1257 | } |
1087 | 1258 | ||
@@ -1097,6 +1268,11 @@ static int uv_ptc_proc_open(struct inode *inode, struct file *file) | |||
1097 | return seq_open(file, &uv_ptc_seq_ops); | 1268 | return seq_open(file, &uv_ptc_seq_ops); |
1098 | } | 1269 | } |
1099 | 1270 | ||
1271 | static int tunables_open(struct inode *inode, struct file *file) | ||
1272 | { | ||
1273 | return 0; | ||
1274 | } | ||
1275 | |||
1100 | static const struct file_operations proc_uv_ptc_operations = { | 1276 | static const struct file_operations proc_uv_ptc_operations = { |
1101 | .open = uv_ptc_proc_open, | 1277 | .open = uv_ptc_proc_open, |
1102 | .read = seq_read, | 1278 | .read = seq_read, |
@@ -1105,6 +1281,12 @@ static const struct file_operations proc_uv_ptc_operations = { | |||
1105 | .release = seq_release, | 1281 | .release = seq_release, |
1106 | }; | 1282 | }; |
1107 | 1283 | ||
1284 | static const struct file_operations tunables_fops = { | ||
1285 | .open = tunables_open, | ||
1286 | .read = tunables_read, | ||
1287 | .write = tunables_write, | ||
1288 | }; | ||
1289 | |||
1108 | static int __init uv_ptc_init(void) | 1290 | static int __init uv_ptc_init(void) |
1109 | { | 1291 | { |
1110 | struct proc_dir_entry *proc_uv_ptc; | 1292 | struct proc_dir_entry *proc_uv_ptc; |
@@ -1119,6 +1301,20 @@ static int __init uv_ptc_init(void) | |||
1119 | UV_PTC_BASENAME); | 1301 | UV_PTC_BASENAME); |
1120 | return -EINVAL; | 1302 | return -EINVAL; |
1121 | } | 1303 | } |
1304 | |||
1305 | tunables_dir = debugfs_create_dir(UV_BAU_TUNABLES_DIR, NULL); | ||
1306 | if (!tunables_dir) { | ||
1307 | printk(KERN_ERR "unable to create debugfs directory %s\n", | ||
1308 | UV_BAU_TUNABLES_DIR); | ||
1309 | return -EINVAL; | ||
1310 | } | ||
1311 | tunables_file = debugfs_create_file(UV_BAU_TUNABLES_FILE, 0600, | ||
1312 | tunables_dir, NULL, &tunables_fops); | ||
1313 | if (!tunables_file) { | ||
1314 | printk(KERN_ERR "unable to create debugfs file %s\n", | ||
1315 | UV_BAU_TUNABLES_FILE); | ||
1316 | return -EINVAL; | ||
1317 | } | ||
1122 | return 0; | 1318 | return 0; |
1123 | } | 1319 | } |
1124 | 1320 | ||
@@ -1259,15 +1455,45 @@ static void __init uv_init_uvhub(int uvhub, int vector) | |||
1259 | } | 1455 | } |
1260 | 1456 | ||
1261 | /* | 1457 | /* |
1458 | * We will set BAU_MISC_CONTROL with a timeout period. | ||
1459 | * But the BIOS has set UVH_AGING_PRESCALE_SEL and UVH_TRANSACTION_TIMEOUT. | ||
1460 | * So the destination timeout period has be be calculated from them. | ||
1461 | */ | ||
1462 | static int | ||
1463 | calculate_destination_timeout(void) | ||
1464 | { | ||
1465 | unsigned long mmr_image; | ||
1466 | int mult1; | ||
1467 | int mult2; | ||
1468 | int index; | ||
1469 | int base; | ||
1470 | int ret; | ||
1471 | unsigned long ts_ns; | ||
1472 | |||
1473 | mult1 = UV_INTD_SOFT_ACK_TIMEOUT_PERIOD & BAU_MISC_CONTROL_MULT_MASK; | ||
1474 | mmr_image = uv_read_local_mmr(UVH_AGING_PRESCALE_SEL); | ||
1475 | index = (mmr_image >> BAU_URGENCY_7_SHIFT) & BAU_URGENCY_7_MASK; | ||
1476 | mmr_image = uv_read_local_mmr(UVH_TRANSACTION_TIMEOUT); | ||
1477 | mult2 = (mmr_image >> BAU_TRANS_SHIFT) & BAU_TRANS_MASK; | ||
1478 | base = timeout_base_ns[index]; | ||
1479 | ts_ns = base * mult1 * mult2; | ||
1480 | ret = ts_ns / 1000; | ||
1481 | return ret; | ||
1482 | } | ||
1483 | |||
1484 | /* | ||
1262 | * initialize the bau_control structure for each cpu | 1485 | * initialize the bau_control structure for each cpu |
1263 | */ | 1486 | */ |
1264 | static void uv_init_per_cpu(int nuvhubs) | 1487 | static void __init uv_init_per_cpu(int nuvhubs) |
1265 | { | 1488 | { |
1266 | int i, j, k; | 1489 | int i; |
1267 | int cpu; | 1490 | int cpu; |
1268 | int pnode; | 1491 | int pnode; |
1269 | int uvhub; | 1492 | int uvhub; |
1493 | int have_hmaster; | ||
1270 | short socket = 0; | 1494 | short socket = 0; |
1495 | unsigned short socket_mask; | ||
1496 | unsigned char *uvhub_mask; | ||
1271 | struct bau_control *bcp; | 1497 | struct bau_control *bcp; |
1272 | struct uvhub_desc *bdp; | 1498 | struct uvhub_desc *bdp; |
1273 | struct socket_desc *sdp; | 1499 | struct socket_desc *sdp; |
@@ -1278,7 +1504,7 @@ static void uv_init_per_cpu(int nuvhubs) | |||
1278 | short cpu_number[16]; | 1504 | short cpu_number[16]; |
1279 | }; | 1505 | }; |
1280 | struct uvhub_desc { | 1506 | struct uvhub_desc { |
1281 | short num_sockets; | 1507 | unsigned short socket_mask; |
1282 | short num_cpus; | 1508 | short num_cpus; |
1283 | short uvhub; | 1509 | short uvhub; |
1284 | short pnode; | 1510 | short pnode; |
@@ -1286,57 +1512,84 @@ static void uv_init_per_cpu(int nuvhubs) | |||
1286 | }; | 1512 | }; |
1287 | struct uvhub_desc *uvhub_descs; | 1513 | struct uvhub_desc *uvhub_descs; |
1288 | 1514 | ||
1515 | timeout_us = calculate_destination_timeout(); | ||
1516 | |||
1289 | uvhub_descs = (struct uvhub_desc *) | 1517 | uvhub_descs = (struct uvhub_desc *) |
1290 | kmalloc(nuvhubs * sizeof(struct uvhub_desc), GFP_KERNEL); | 1518 | kmalloc(nuvhubs * sizeof(struct uvhub_desc), GFP_KERNEL); |
1291 | memset(uvhub_descs, 0, nuvhubs * sizeof(struct uvhub_desc)); | 1519 | memset(uvhub_descs, 0, nuvhubs * sizeof(struct uvhub_desc)); |
1520 | uvhub_mask = kzalloc((nuvhubs+7)/8, GFP_KERNEL); | ||
1292 | for_each_present_cpu(cpu) { | 1521 | for_each_present_cpu(cpu) { |
1293 | bcp = &per_cpu(bau_control, cpu); | 1522 | bcp = &per_cpu(bau_control, cpu); |
1294 | memset(bcp, 0, sizeof(struct bau_control)); | 1523 | memset(bcp, 0, sizeof(struct bau_control)); |
1295 | spin_lock_init(&bcp->masks_lock); | ||
1296 | bcp->max_concurrent = uv_bau_max_concurrent; | ||
1297 | pnode = uv_cpu_hub_info(cpu)->pnode; | 1524 | pnode = uv_cpu_hub_info(cpu)->pnode; |
1298 | uvhub = uv_cpu_hub_info(cpu)->numa_blade_id; | 1525 | uvhub = uv_cpu_hub_info(cpu)->numa_blade_id; |
1526 | *(uvhub_mask + (uvhub/8)) |= (1 << (uvhub%8)); | ||
1299 | bdp = &uvhub_descs[uvhub]; | 1527 | bdp = &uvhub_descs[uvhub]; |
1300 | bdp->num_cpus++; | 1528 | bdp->num_cpus++; |
1301 | bdp->uvhub = uvhub; | 1529 | bdp->uvhub = uvhub; |
1302 | bdp->pnode = pnode; | 1530 | bdp->pnode = pnode; |
1303 | /* time interval to catch a hardware stay-busy bug */ | 1531 | /* kludge: 'assuming' one node per socket, and assuming that |
1304 | bcp->timeout_interval = millisec_2_cycles(3); | 1532 | disabling a socket just leaves a gap in node numbers */ |
1305 | /* kludge: assume uv_hub.h is constant */ | 1533 | socket = (cpu_to_node(cpu) & 1); |
1306 | socket = (cpu_physical_id(cpu)>>5)&1; | 1534 | bdp->socket_mask |= (1 << socket); |
1307 | if (socket >= bdp->num_sockets) | ||
1308 | bdp->num_sockets = socket+1; | ||
1309 | sdp = &bdp->socket[socket]; | 1535 | sdp = &bdp->socket[socket]; |
1310 | sdp->cpu_number[sdp->num_cpus] = cpu; | 1536 | sdp->cpu_number[sdp->num_cpus] = cpu; |
1311 | sdp->num_cpus++; | 1537 | sdp->num_cpus++; |
1312 | } | 1538 | } |
1313 | socket = 0; | 1539 | for (uvhub = 0; uvhub < nuvhubs; uvhub++) { |
1314 | for_each_possible_blade(uvhub) { | 1540 | if (!(*(uvhub_mask + (uvhub/8)) & (1 << (uvhub%8)))) |
1541 | continue; | ||
1542 | have_hmaster = 0; | ||
1315 | bdp = &uvhub_descs[uvhub]; | 1543 | bdp = &uvhub_descs[uvhub]; |
1316 | for (i = 0; i < bdp->num_sockets; i++) { | 1544 | socket_mask = bdp->socket_mask; |
1317 | sdp = &bdp->socket[i]; | 1545 | socket = 0; |
1318 | for (j = 0; j < sdp->num_cpus; j++) { | 1546 | while (socket_mask) { |
1319 | cpu = sdp->cpu_number[j]; | 1547 | if (!(socket_mask & 1)) |
1548 | goto nextsocket; | ||
1549 | sdp = &bdp->socket[socket]; | ||
1550 | for (i = 0; i < sdp->num_cpus; i++) { | ||
1551 | cpu = sdp->cpu_number[i]; | ||
1320 | bcp = &per_cpu(bau_control, cpu); | 1552 | bcp = &per_cpu(bau_control, cpu); |
1321 | bcp->cpu = cpu; | 1553 | bcp->cpu = cpu; |
1322 | if (j == 0) { | 1554 | if (i == 0) { |
1323 | smaster = bcp; | 1555 | smaster = bcp; |
1324 | if (i == 0) | 1556 | if (!have_hmaster) { |
1557 | have_hmaster++; | ||
1325 | hmaster = bcp; | 1558 | hmaster = bcp; |
1559 | } | ||
1326 | } | 1560 | } |
1327 | bcp->cpus_in_uvhub = bdp->num_cpus; | 1561 | bcp->cpus_in_uvhub = bdp->num_cpus; |
1328 | bcp->cpus_in_socket = sdp->num_cpus; | 1562 | bcp->cpus_in_socket = sdp->num_cpus; |
1329 | bcp->socket_master = smaster; | 1563 | bcp->socket_master = smaster; |
1564 | bcp->uvhub = bdp->uvhub; | ||
1330 | bcp->uvhub_master = hmaster; | 1565 | bcp->uvhub_master = hmaster; |
1331 | for (k = 0; k < DEST_Q_SIZE; k++) | 1566 | bcp->uvhub_cpu = uv_cpu_hub_info(cpu)-> |
1332 | bcp->socket_acknowledge_count[k] = 0; | 1567 | blade_processor_id; |
1333 | bcp->uvhub_cpu = | ||
1334 | uv_cpu_hub_info(cpu)->blade_processor_id; | ||
1335 | } | 1568 | } |
1569 | nextsocket: | ||
1336 | socket++; | 1570 | socket++; |
1571 | socket_mask = (socket_mask >> 1); | ||
1337 | } | 1572 | } |
1338 | } | 1573 | } |
1339 | kfree(uvhub_descs); | 1574 | kfree(uvhub_descs); |
1575 | kfree(uvhub_mask); | ||
1576 | for_each_present_cpu(cpu) { | ||
1577 | bcp = &per_cpu(bau_control, cpu); | ||
1578 | bcp->baudisabled = 0; | ||
1579 | bcp->statp = &per_cpu(ptcstats, cpu); | ||
1580 | /* time interval to catch a hardware stay-busy bug */ | ||
1581 | bcp->timeout_interval = microsec_2_cycles(2*timeout_us); | ||
1582 | bcp->max_bau_concurrent = max_bau_concurrent; | ||
1583 | bcp->max_bau_concurrent_constant = max_bau_concurrent; | ||
1584 | bcp->plugged_delay = plugged_delay; | ||
1585 | bcp->plugsb4reset = plugsb4reset; | ||
1586 | bcp->timeoutsb4reset = timeoutsb4reset; | ||
1587 | bcp->ipi_reset_limit = ipi_reset_limit; | ||
1588 | bcp->complete_threshold = complete_threshold; | ||
1589 | bcp->congested_response_us = congested_response_us; | ||
1590 | bcp->congested_reps = congested_reps; | ||
1591 | bcp->congested_period = congested_period; | ||
1592 | } | ||
1340 | } | 1593 | } |
1341 | 1594 | ||
1342 | /* | 1595 | /* |
@@ -1361,10 +1614,11 @@ static int __init uv_bau_init(void) | |||
1361 | zalloc_cpumask_var_node(&per_cpu(uv_flush_tlb_mask, cur_cpu), | 1614 | zalloc_cpumask_var_node(&per_cpu(uv_flush_tlb_mask, cur_cpu), |
1362 | GFP_KERNEL, cpu_to_node(cur_cpu)); | 1615 | GFP_KERNEL, cpu_to_node(cur_cpu)); |
1363 | 1616 | ||
1364 | uv_bau_max_concurrent = MAX_BAU_CONCURRENT; | ||
1365 | uv_nshift = uv_hub_info->m_val; | 1617 | uv_nshift = uv_hub_info->m_val; |
1366 | uv_mmask = (1UL << uv_hub_info->m_val) - 1; | 1618 | uv_mmask = (1UL << uv_hub_info->m_val) - 1; |
1367 | nuvhubs = uv_num_possible_blades(); | 1619 | nuvhubs = uv_num_possible_blades(); |
1620 | spin_lock_init(&disable_lock); | ||
1621 | congested_cycles = microsec_2_cycles(congested_response_us); | ||
1368 | 1622 | ||
1369 | uv_init_per_cpu(nuvhubs); | 1623 | uv_init_per_cpu(nuvhubs); |
1370 | 1624 | ||
@@ -1383,15 +1637,19 @@ static int __init uv_bau_init(void) | |||
1383 | alloc_intr_gate(vector, uv_bau_message_intr1); | 1637 | alloc_intr_gate(vector, uv_bau_message_intr1); |
1384 | 1638 | ||
1385 | for_each_possible_blade(uvhub) { | 1639 | for_each_possible_blade(uvhub) { |
1386 | pnode = uv_blade_to_pnode(uvhub); | 1640 | if (uv_blade_nr_possible_cpus(uvhub)) { |
1387 | /* INIT the bau */ | 1641 | pnode = uv_blade_to_pnode(uvhub); |
1388 | uv_write_global_mmr64(pnode, UVH_LB_BAU_SB_ACTIVATION_CONTROL, | 1642 | /* INIT the bau */ |
1389 | ((unsigned long)1 << 63)); | 1643 | uv_write_global_mmr64(pnode, |
1390 | mmr = 1; /* should be 1 to broadcast to both sockets */ | 1644 | UVH_LB_BAU_SB_ACTIVATION_CONTROL, |
1391 | uv_write_global_mmr64(pnode, UVH_BAU_DATA_BROADCAST, mmr); | 1645 | ((unsigned long)1 << 63)); |
1646 | mmr = 1; /* should be 1 to broadcast to both sockets */ | ||
1647 | uv_write_global_mmr64(pnode, UVH_BAU_DATA_BROADCAST, | ||
1648 | mmr); | ||
1649 | } | ||
1392 | } | 1650 | } |
1393 | 1651 | ||
1394 | return 0; | 1652 | return 0; |
1395 | } | 1653 | } |
1396 | core_initcall(uv_bau_init); | 1654 | core_initcall(uv_bau_init); |
1397 | core_initcall(uv_ptc_init); | 1655 | fs_initcall(uv_ptc_init); |
diff --git a/arch/x86/kernel/trampoline.c b/arch/x86/kernel/trampoline.c index c652ef62742d..a874495b3673 100644 --- a/arch/x86/kernel/trampoline.c +++ b/arch/x86/kernel/trampoline.c | |||
@@ -1,6 +1,7 @@ | |||
1 | #include <linux/io.h> | 1 | #include <linux/io.h> |
2 | 2 | ||
3 | #include <asm/trampoline.h> | 3 | #include <asm/trampoline.h> |
4 | #include <asm/pgtable.h> | ||
4 | #include <asm/e820.h> | 5 | #include <asm/e820.h> |
5 | 6 | ||
6 | #if defined(CONFIG_X86_64) && defined(CONFIG_ACPI_SLEEP) | 7 | #if defined(CONFIG_X86_64) && defined(CONFIG_ACPI_SLEEP) |
@@ -37,3 +38,20 @@ unsigned long __trampinit setup_trampoline(void) | |||
37 | memcpy(trampoline_base, trampoline_data, TRAMPOLINE_SIZE); | 38 | memcpy(trampoline_base, trampoline_data, TRAMPOLINE_SIZE); |
38 | return virt_to_phys(trampoline_base); | 39 | return virt_to_phys(trampoline_base); |
39 | } | 40 | } |
41 | |||
42 | void __init setup_trampoline_page_table(void) | ||
43 | { | ||
44 | #ifdef CONFIG_X86_32 | ||
45 | /* Copy kernel address range */ | ||
46 | clone_pgd_range(trampoline_pg_dir + KERNEL_PGD_BOUNDARY, | ||
47 | swapper_pg_dir + KERNEL_PGD_BOUNDARY, | ||
48 | min_t(unsigned long, KERNEL_PGD_PTRS, | ||
49 | KERNEL_PGD_BOUNDARY)); | ||
50 | |||
51 | /* Initialize low mappings */ | ||
52 | clone_pgd_range(trampoline_pg_dir, | ||
53 | swapper_pg_dir + KERNEL_PGD_BOUNDARY, | ||
54 | min_t(unsigned long, KERNEL_PGD_PTRS, | ||
55 | KERNEL_PGD_BOUNDARY)); | ||
56 | #endif | ||
57 | } | ||
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 725ef4d17cd5..60788dee0f8a 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -392,7 +392,13 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs) | |||
392 | if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT) | 392 | if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT) |
393 | == NOTIFY_STOP) | 393 | == NOTIFY_STOP) |
394 | return; | 394 | return; |
395 | |||
395 | #ifdef CONFIG_X86_LOCAL_APIC | 396 | #ifdef CONFIG_X86_LOCAL_APIC |
397 | if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT) | ||
398 | == NOTIFY_STOP) | ||
399 | return; | ||
400 | |||
401 | #ifndef CONFIG_LOCKUP_DETECTOR | ||
396 | /* | 402 | /* |
397 | * Ok, so this is none of the documented NMI sources, | 403 | * Ok, so this is none of the documented NMI sources, |
398 | * so it must be the NMI watchdog. | 404 | * so it must be the NMI watchdog. |
@@ -400,6 +406,7 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs) | |||
400 | if (nmi_watchdog_tick(regs, reason)) | 406 | if (nmi_watchdog_tick(regs, reason)) |
401 | return; | 407 | return; |
402 | if (!do_nmi_callback(regs, cpu)) | 408 | if (!do_nmi_callback(regs, cpu)) |
409 | #endif /* !CONFIG_LOCKUP_DETECTOR */ | ||
403 | unknown_nmi_error(reason, regs); | 410 | unknown_nmi_error(reason, regs); |
404 | #else | 411 | #else |
405 | unknown_nmi_error(reason, regs); | 412 | unknown_nmi_error(reason, regs); |
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 9faf91ae1841..ce8e50239332 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c | |||
@@ -751,7 +751,6 @@ static struct clocksource clocksource_tsc = { | |||
751 | .read = read_tsc, | 751 | .read = read_tsc, |
752 | .resume = resume_tsc, | 752 | .resume = resume_tsc, |
753 | .mask = CLOCKSOURCE_MASK(64), | 753 | .mask = CLOCKSOURCE_MASK(64), |
754 | .shift = 22, | ||
755 | .flags = CLOCK_SOURCE_IS_CONTINUOUS | | 754 | .flags = CLOCK_SOURCE_IS_CONTINUOUS | |
756 | CLOCK_SOURCE_MUST_VERIFY, | 755 | CLOCK_SOURCE_MUST_VERIFY, |
757 | #ifdef CONFIG_X86_64 | 756 | #ifdef CONFIG_X86_64 |
@@ -845,8 +844,6 @@ __cpuinit int unsynchronized_tsc(void) | |||
845 | 844 | ||
846 | static void __init init_tsc_clocksource(void) | 845 | static void __init init_tsc_clocksource(void) |
847 | { | 846 | { |
848 | clocksource_tsc.mult = clocksource_khz2mult(tsc_khz, | ||
849 | clocksource_tsc.shift); | ||
850 | if (tsc_clocksource_reliable) | 847 | if (tsc_clocksource_reliable) |
851 | clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY; | 848 | clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY; |
852 | /* lower the rating if we already know its unstable: */ | 849 | /* lower the rating if we already know its unstable: */ |
@@ -854,7 +851,7 @@ static void __init init_tsc_clocksource(void) | |||
854 | clocksource_tsc.rating = 0; | 851 | clocksource_tsc.rating = 0; |
855 | clocksource_tsc.flags &= ~CLOCK_SOURCE_IS_CONTINUOUS; | 852 | clocksource_tsc.flags &= ~CLOCK_SOURCE_IS_CONTINUOUS; |
856 | } | 853 | } |
857 | clocksource_register(&clocksource_tsc); | 854 | clocksource_register_khz(&clocksource_tsc, tsc_khz); |
858 | } | 855 | } |
859 | 856 | ||
860 | #ifdef CONFIG_X86_64 | 857 | #ifdef CONFIG_X86_64 |
diff --git a/arch/x86/kernel/verify_cpu_64.S b/arch/x86/kernel/verify_cpu_64.S index 45b6f8a975a1..56a8c2a867d9 100644 --- a/arch/x86/kernel/verify_cpu_64.S +++ b/arch/x86/kernel/verify_cpu_64.S | |||
@@ -31,6 +31,7 @@ | |||
31 | */ | 31 | */ |
32 | 32 | ||
33 | #include <asm/cpufeature.h> | 33 | #include <asm/cpufeature.h> |
34 | #include <asm/msr-index.h> | ||
34 | 35 | ||
35 | verify_cpu: | 36 | verify_cpu: |
36 | pushfl # Save caller passed flags | 37 | pushfl # Save caller passed flags |
@@ -88,7 +89,7 @@ verify_cpu_sse_test: | |||
88 | je verify_cpu_sse_ok | 89 | je verify_cpu_sse_ok |
89 | test %di,%di | 90 | test %di,%di |
90 | jz verify_cpu_no_longmode # only try to force SSE on AMD | 91 | jz verify_cpu_no_longmode # only try to force SSE on AMD |
91 | movl $0xc0010015,%ecx # HWCR | 92 | movl $MSR_K7_HWCR,%ecx |
92 | rdmsr | 93 | rdmsr |
93 | btr $15,%eax # enable SSE | 94 | btr $15,%eax # enable SSE |
94 | wrmsr | 95 | wrmsr |
diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c index 1c0c6ab9c60f..dcbb28c4b694 100644 --- a/arch/x86/kernel/vsyscall_64.c +++ b/arch/x86/kernel/vsyscall_64.c | |||
@@ -73,8 +73,8 @@ void update_vsyscall_tz(void) | |||
73 | write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags); | 73 | write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags); |
74 | } | 74 | } |
75 | 75 | ||
76 | void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, | 76 | void update_vsyscall(struct timespec *wall_time, struct timespec *wtm, |
77 | u32 mult) | 77 | struct clocksource *clock, u32 mult) |
78 | { | 78 | { |
79 | unsigned long flags; | 79 | unsigned long flags; |
80 | 80 | ||
@@ -87,7 +87,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, | |||
87 | vsyscall_gtod_data.clock.shift = clock->shift; | 87 | vsyscall_gtod_data.clock.shift = clock->shift; |
88 | vsyscall_gtod_data.wall_time_sec = wall_time->tv_sec; | 88 | vsyscall_gtod_data.wall_time_sec = wall_time->tv_sec; |
89 | vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; | 89 | vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec; |
90 | vsyscall_gtod_data.wall_to_monotonic = wall_to_monotonic; | 90 | vsyscall_gtod_data.wall_to_monotonic = *wtm; |
91 | vsyscall_gtod_data.wall_time_coarse = __current_kernel_time(); | 91 | vsyscall_gtod_data.wall_time_coarse = __current_kernel_time(); |
92 | write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags); | 92 | write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags); |
93 | } | 93 | } |
@@ -169,13 +169,18 @@ int __vsyscall(0) vgettimeofday(struct timeval * tv, struct timezone * tz) | |||
169 | * unlikely */ | 169 | * unlikely */ |
170 | time_t __vsyscall(1) vtime(time_t *t) | 170 | time_t __vsyscall(1) vtime(time_t *t) |
171 | { | 171 | { |
172 | struct timeval tv; | 172 | unsigned seq; |
173 | time_t result; | 173 | time_t result; |
174 | if (unlikely(!__vsyscall_gtod_data.sysctl_enabled)) | 174 | if (unlikely(!__vsyscall_gtod_data.sysctl_enabled)) |
175 | return time_syscall(t); | 175 | return time_syscall(t); |
176 | 176 | ||
177 | vgettimeofday(&tv, NULL); | 177 | do { |
178 | result = tv.tv_sec; | 178 | seq = read_seqbegin(&__vsyscall_gtod_data.lock); |
179 | |||
180 | result = __vsyscall_gtod_data.wall_time_sec; | ||
181 | |||
182 | } while (read_seqretry(&__vsyscall_gtod_data.lock, seq)); | ||
183 | |||
179 | if (t) | 184 | if (t) |
180 | *t = result; | 185 | *t = result; |
181 | return result; | 186 | return result; |
diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c index 37e68fc5e24a..9c253bd65e24 100644 --- a/arch/x86/kernel/xsave.c +++ b/arch/x86/kernel/xsave.c | |||
@@ -16,11 +16,88 @@ | |||
16 | */ | 16 | */ |
17 | u64 pcntxt_mask; | 17 | u64 pcntxt_mask; |
18 | 18 | ||
19 | /* | ||
20 | * Represents init state for the supported extended state. | ||
21 | */ | ||
22 | static struct xsave_struct *init_xstate_buf; | ||
23 | |||
19 | struct _fpx_sw_bytes fx_sw_reserved; | 24 | struct _fpx_sw_bytes fx_sw_reserved; |
20 | #ifdef CONFIG_IA32_EMULATION | 25 | #ifdef CONFIG_IA32_EMULATION |
21 | struct _fpx_sw_bytes fx_sw_reserved_ia32; | 26 | struct _fpx_sw_bytes fx_sw_reserved_ia32; |
22 | #endif | 27 | #endif |
23 | 28 | ||
29 | static unsigned int *xstate_offsets, *xstate_sizes, xstate_features; | ||
30 | |||
31 | /* | ||
32 | * If a processor implementation discern that a processor state component is | ||
33 | * in its initialized state it may modify the corresponding bit in the | ||
34 | * xsave_hdr.xstate_bv as '0', with out modifying the corresponding memory | ||
35 | * layout in the case of xsaveopt. While presenting the xstate information to | ||
36 | * the user, we always ensure that the memory layout of a feature will be in | ||
37 | * the init state if the corresponding header bit is zero. This is to ensure | ||
38 | * that the user doesn't see some stale state in the memory layout during | ||
39 | * signal handling, debugging etc. | ||
40 | */ | ||
41 | void __sanitize_i387_state(struct task_struct *tsk) | ||
42 | { | ||
43 | u64 xstate_bv; | ||
44 | int feature_bit = 0x2; | ||
45 | struct i387_fxsave_struct *fx = &tsk->thread.fpu.state->fxsave; | ||
46 | |||
47 | if (!fx) | ||
48 | return; | ||
49 | |||
50 | BUG_ON(task_thread_info(tsk)->status & TS_USEDFPU); | ||
51 | |||
52 | xstate_bv = tsk->thread.fpu.state->xsave.xsave_hdr.xstate_bv; | ||
53 | |||
54 | /* | ||
55 | * None of the feature bits are in init state. So nothing else | ||
56 | * to do for us, as the memory layout is upto date. | ||
57 | */ | ||
58 | if ((xstate_bv & pcntxt_mask) == pcntxt_mask) | ||
59 | return; | ||
60 | |||
61 | /* | ||
62 | * FP is in init state | ||
63 | */ | ||
64 | if (!(xstate_bv & XSTATE_FP)) { | ||
65 | fx->cwd = 0x37f; | ||
66 | fx->swd = 0; | ||
67 | fx->twd = 0; | ||
68 | fx->fop = 0; | ||
69 | fx->rip = 0; | ||
70 | fx->rdp = 0; | ||
71 | memset(&fx->st_space[0], 0, 128); | ||
72 | } | ||
73 | |||
74 | /* | ||
75 | * SSE is in init state | ||
76 | */ | ||
77 | if (!(xstate_bv & XSTATE_SSE)) | ||
78 | memset(&fx->xmm_space[0], 0, 256); | ||
79 | |||
80 | xstate_bv = (pcntxt_mask & ~xstate_bv) >> 2; | ||
81 | |||
82 | /* | ||
83 | * Update all the other memory layouts for which the corresponding | ||
84 | * header bit is in the init state. | ||
85 | */ | ||
86 | while (xstate_bv) { | ||
87 | if (xstate_bv & 0x1) { | ||
88 | int offset = xstate_offsets[feature_bit]; | ||
89 | int size = xstate_sizes[feature_bit]; | ||
90 | |||
91 | memcpy(((void *) fx) + offset, | ||
92 | ((void *) init_xstate_buf) + offset, | ||
93 | size); | ||
94 | } | ||
95 | |||
96 | xstate_bv >>= 1; | ||
97 | feature_bit++; | ||
98 | } | ||
99 | } | ||
100 | |||
24 | /* | 101 | /* |
25 | * Check for the presence of extended state information in the | 102 | * Check for the presence of extended state information in the |
26 | * user fpstate pointer in the sigcontext. | 103 | * user fpstate pointer in the sigcontext. |
@@ -36,15 +113,14 @@ int check_for_xstate(struct i387_fxsave_struct __user *buf, | |||
36 | 113 | ||
37 | err = __copy_from_user(fx_sw_user, &buf->sw_reserved[0], | 114 | err = __copy_from_user(fx_sw_user, &buf->sw_reserved[0], |
38 | sizeof(struct _fpx_sw_bytes)); | 115 | sizeof(struct _fpx_sw_bytes)); |
39 | |||
40 | if (err) | 116 | if (err) |
41 | return err; | 117 | return -EFAULT; |
42 | 118 | ||
43 | /* | 119 | /* |
44 | * First Magic check failed. | 120 | * First Magic check failed. |
45 | */ | 121 | */ |
46 | if (fx_sw_user->magic1 != FP_XSTATE_MAGIC1) | 122 | if (fx_sw_user->magic1 != FP_XSTATE_MAGIC1) |
47 | return -1; | 123 | return -EINVAL; |
48 | 124 | ||
49 | /* | 125 | /* |
50 | * Check for error scenarios. | 126 | * Check for error scenarios. |
@@ -52,19 +128,21 @@ int check_for_xstate(struct i387_fxsave_struct __user *buf, | |||
52 | if (fx_sw_user->xstate_size < min_xstate_size || | 128 | if (fx_sw_user->xstate_size < min_xstate_size || |
53 | fx_sw_user->xstate_size > xstate_size || | 129 | fx_sw_user->xstate_size > xstate_size || |
54 | fx_sw_user->xstate_size > fx_sw_user->extended_size) | 130 | fx_sw_user->xstate_size > fx_sw_user->extended_size) |
55 | return -1; | 131 | return -EINVAL; |
56 | 132 | ||
57 | err = __get_user(magic2, (__u32 *) (((void *)fpstate) + | 133 | err = __get_user(magic2, (__u32 *) (((void *)fpstate) + |
58 | fx_sw_user->extended_size - | 134 | fx_sw_user->extended_size - |
59 | FP_XSTATE_MAGIC2_SIZE)); | 135 | FP_XSTATE_MAGIC2_SIZE)); |
136 | if (err) | ||
137 | return err; | ||
60 | /* | 138 | /* |
61 | * Check for the presence of second magic word at the end of memory | 139 | * Check for the presence of second magic word at the end of memory |
62 | * layout. This detects the case where the user just copied the legacy | 140 | * layout. This detects the case where the user just copied the legacy |
63 | * fpstate layout with out copying the extended state information | 141 | * fpstate layout with out copying the extended state information |
64 | * in the memory layout. | 142 | * in the memory layout. |
65 | */ | 143 | */ |
66 | if (err || magic2 != FP_XSTATE_MAGIC2) | 144 | if (magic2 != FP_XSTATE_MAGIC2) |
67 | return -1; | 145 | return -EFAULT; |
68 | 146 | ||
69 | return 0; | 147 | return 0; |
70 | } | 148 | } |
@@ -91,14 +169,6 @@ int save_i387_xstate(void __user *buf) | |||
91 | return 0; | 169 | return 0; |
92 | 170 | ||
93 | if (task_thread_info(tsk)->status & TS_USEDFPU) { | 171 | if (task_thread_info(tsk)->status & TS_USEDFPU) { |
94 | /* | ||
95 | * Start with clearing the user buffer. This will present a | ||
96 | * clean context for the bytes not touched by the fxsave/xsave. | ||
97 | */ | ||
98 | err = __clear_user(buf, sig_xstate_size); | ||
99 | if (err) | ||
100 | return err; | ||
101 | |||
102 | if (use_xsave()) | 172 | if (use_xsave()) |
103 | err = xsave_user(buf); | 173 | err = xsave_user(buf); |
104 | else | 174 | else |
@@ -109,6 +179,7 @@ int save_i387_xstate(void __user *buf) | |||
109 | task_thread_info(tsk)->status &= ~TS_USEDFPU; | 179 | task_thread_info(tsk)->status &= ~TS_USEDFPU; |
110 | stts(); | 180 | stts(); |
111 | } else { | 181 | } else { |
182 | sanitize_i387_state(tsk); | ||
112 | if (__copy_to_user(buf, &tsk->thread.fpu.state->fxsave, | 183 | if (__copy_to_user(buf, &tsk->thread.fpu.state->fxsave, |
113 | xstate_size)) | 184 | xstate_size)) |
114 | return -1; | 185 | return -1; |
@@ -184,8 +255,8 @@ static int restore_user_xstate(void __user *buf) | |||
184 | * init the state skipped by the user. | 255 | * init the state skipped by the user. |
185 | */ | 256 | */ |
186 | mask = pcntxt_mask & ~mask; | 257 | mask = pcntxt_mask & ~mask; |
187 | 258 | if (unlikely(mask)) | |
188 | xrstor_state(init_xstate_buf, mask); | 259 | xrstor_state(init_xstate_buf, mask); |
189 | 260 | ||
190 | return 0; | 261 | return 0; |
191 | 262 | ||
@@ -274,11 +345,6 @@ static void prepare_fx_sw_frame(void) | |||
274 | #endif | 345 | #endif |
275 | } | 346 | } |
276 | 347 | ||
277 | /* | ||
278 | * Represents init state for the supported extended state. | ||
279 | */ | ||
280 | struct xsave_struct *init_xstate_buf; | ||
281 | |||
282 | #ifdef CONFIG_X86_64 | 348 | #ifdef CONFIG_X86_64 |
283 | unsigned int sig_xstate_size = sizeof(struct _fpstate); | 349 | unsigned int sig_xstate_size = sizeof(struct _fpstate); |
284 | #endif | 350 | #endif |
@@ -286,37 +352,77 @@ unsigned int sig_xstate_size = sizeof(struct _fpstate); | |||
286 | /* | 352 | /* |
287 | * Enable the extended processor state save/restore feature | 353 | * Enable the extended processor state save/restore feature |
288 | */ | 354 | */ |
289 | void __cpuinit xsave_init(void) | 355 | static inline void xstate_enable(void) |
290 | { | 356 | { |
291 | if (!cpu_has_xsave) | ||
292 | return; | ||
293 | |||
294 | set_in_cr4(X86_CR4_OSXSAVE); | 357 | set_in_cr4(X86_CR4_OSXSAVE); |
295 | |||
296 | /* | ||
297 | * Enable all the features that the HW is capable of | ||
298 | * and the Linux kernel is aware of. | ||
299 | */ | ||
300 | xsetbv(XCR_XFEATURE_ENABLED_MASK, pcntxt_mask); | 358 | xsetbv(XCR_XFEATURE_ENABLED_MASK, pcntxt_mask); |
301 | } | 359 | } |
302 | 360 | ||
303 | /* | 361 | /* |
362 | * Record the offsets and sizes of different state managed by the xsave | ||
363 | * memory layout. | ||
364 | */ | ||
365 | static void __init setup_xstate_features(void) | ||
366 | { | ||
367 | int eax, ebx, ecx, edx, leaf = 0x2; | ||
368 | |||
369 | xstate_features = fls64(pcntxt_mask); | ||
370 | xstate_offsets = alloc_bootmem(xstate_features * sizeof(int)); | ||
371 | xstate_sizes = alloc_bootmem(xstate_features * sizeof(int)); | ||
372 | |||
373 | do { | ||
374 | cpuid_count(XSTATE_CPUID, leaf, &eax, &ebx, &ecx, &edx); | ||
375 | |||
376 | if (eax == 0) | ||
377 | break; | ||
378 | |||
379 | xstate_offsets[leaf] = ebx; | ||
380 | xstate_sizes[leaf] = eax; | ||
381 | |||
382 | leaf++; | ||
383 | } while (1); | ||
384 | } | ||
385 | |||
386 | /* | ||
304 | * setup the xstate image representing the init state | 387 | * setup the xstate image representing the init state |
305 | */ | 388 | */ |
306 | static void __init setup_xstate_init(void) | 389 | static void __init setup_xstate_init(void) |
307 | { | 390 | { |
391 | setup_xstate_features(); | ||
392 | |||
393 | /* | ||
394 | * Setup init_xstate_buf to represent the init state of | ||
395 | * all the features managed by the xsave | ||
396 | */ | ||
308 | init_xstate_buf = alloc_bootmem(xstate_size); | 397 | init_xstate_buf = alloc_bootmem(xstate_size); |
309 | init_xstate_buf->i387.mxcsr = MXCSR_DEFAULT; | 398 | init_xstate_buf->i387.mxcsr = MXCSR_DEFAULT; |
399 | |||
400 | clts(); | ||
401 | /* | ||
402 | * Init all the features state with header_bv being 0x0 | ||
403 | */ | ||
404 | xrstor_state(init_xstate_buf, -1); | ||
405 | /* | ||
406 | * Dump the init state again. This is to identify the init state | ||
407 | * of any feature which is not represented by all zero's. | ||
408 | */ | ||
409 | xsave_state(init_xstate_buf, -1); | ||
410 | stts(); | ||
310 | } | 411 | } |
311 | 412 | ||
312 | /* | 413 | /* |
313 | * Enable and initialize the xsave feature. | 414 | * Enable and initialize the xsave feature. |
314 | */ | 415 | */ |
315 | void __ref xsave_cntxt_init(void) | 416 | static void __init xstate_enable_boot_cpu(void) |
316 | { | 417 | { |
317 | unsigned int eax, ebx, ecx, edx; | 418 | unsigned int eax, ebx, ecx, edx; |
318 | 419 | ||
319 | cpuid_count(0xd, 0, &eax, &ebx, &ecx, &edx); | 420 | if (boot_cpu_data.cpuid_level < XSTATE_CPUID) { |
421 | WARN(1, KERN_ERR "XSTATE_CPUID missing\n"); | ||
422 | return; | ||
423 | } | ||
424 | |||
425 | cpuid_count(XSTATE_CPUID, 0, &eax, &ebx, &ecx, &edx); | ||
320 | pcntxt_mask = eax + ((u64)edx << 32); | 426 | pcntxt_mask = eax + ((u64)edx << 32); |
321 | 427 | ||
322 | if ((pcntxt_mask & XSTATE_FPSSE) != XSTATE_FPSSE) { | 428 | if ((pcntxt_mask & XSTATE_FPSSE) != XSTATE_FPSSE) { |
@@ -329,12 +435,13 @@ void __ref xsave_cntxt_init(void) | |||
329 | * Support only the state known to OS. | 435 | * Support only the state known to OS. |
330 | */ | 436 | */ |
331 | pcntxt_mask = pcntxt_mask & XCNTXT_MASK; | 437 | pcntxt_mask = pcntxt_mask & XCNTXT_MASK; |
332 | xsave_init(); | 438 | |
439 | xstate_enable(); | ||
333 | 440 | ||
334 | /* | 441 | /* |
335 | * Recompute the context size for enabled features | 442 | * Recompute the context size for enabled features |
336 | */ | 443 | */ |
337 | cpuid_count(0xd, 0, &eax, &ebx, &ecx, &edx); | 444 | cpuid_count(XSTATE_CPUID, 0, &eax, &ebx, &ecx, &edx); |
338 | xstate_size = ebx; | 445 | xstate_size = ebx; |
339 | 446 | ||
340 | update_regset_xstate_info(xstate_size, pcntxt_mask); | 447 | update_regset_xstate_info(xstate_size, pcntxt_mask); |
@@ -346,3 +453,23 @@ void __ref xsave_cntxt_init(void) | |||
346 | "cntxt size 0x%x\n", | 453 | "cntxt size 0x%x\n", |
347 | pcntxt_mask, xstate_size); | 454 | pcntxt_mask, xstate_size); |
348 | } | 455 | } |
456 | |||
457 | /* | ||
458 | * For the very first instance, this calls xstate_enable_boot_cpu(); | ||
459 | * for all subsequent instances, this calls xstate_enable(). | ||
460 | * | ||
461 | * This is somewhat obfuscated due to the lack of powerful enough | ||
462 | * overrides for the section checks. | ||
463 | */ | ||
464 | void __cpuinit xsave_init(void) | ||
465 | { | ||
466 | static __refdata void (*next_func)(void) = xstate_enable_boot_cpu; | ||
467 | void (*this_func)(void); | ||
468 | |||
469 | if (!cpu_has_xsave) | ||
470 | return; | ||
471 | |||
472 | this_func = next_func; | ||
473 | next_func = xstate_enable; | ||
474 | this_func(); | ||
475 | } | ||
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 0dcc95e09876..311f6dad8951 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -281,11 +281,7 @@ static gfn_t pse36_gfn_delta(u32 gpte) | |||
281 | 281 | ||
282 | static void __set_spte(u64 *sptep, u64 spte) | 282 | static void __set_spte(u64 *sptep, u64 spte) |
283 | { | 283 | { |
284 | #ifdef CONFIG_X86_64 | 284 | set_64bit(sptep, spte); |
285 | set_64bit((unsigned long *)sptep, spte); | ||
286 | #else | ||
287 | set_64bit((unsigned long long *)sptep, spte); | ||
288 | #endif | ||
289 | } | 285 | } |
290 | 286 | ||
291 | static u64 __xchg_spte(u64 *sptep, u64 new_spte) | 287 | static u64 __xchg_spte(u64 *sptep, u64 new_spte) |
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 56c9b6bd7655..bc5b9b8d4a33 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -131,7 +131,7 @@ static struct svm_direct_access_msrs { | |||
131 | u32 index; /* Index of the MSR */ | 131 | u32 index; /* Index of the MSR */ |
132 | bool always; /* True if intercept is always on */ | 132 | bool always; /* True if intercept is always on */ |
133 | } direct_access_msrs[] = { | 133 | } direct_access_msrs[] = { |
134 | { .index = MSR_K6_STAR, .always = true }, | 134 | { .index = MSR_STAR, .always = true }, |
135 | { .index = MSR_IA32_SYSENTER_CS, .always = true }, | 135 | { .index = MSR_IA32_SYSENTER_CS, .always = true }, |
136 | #ifdef CONFIG_X86_64 | 136 | #ifdef CONFIG_X86_64 |
137 | { .index = MSR_GS_BASE, .always = true }, | 137 | { .index = MSR_GS_BASE, .always = true }, |
@@ -384,8 +384,7 @@ static void svm_init_erratum_383(void) | |||
384 | int err; | 384 | int err; |
385 | u64 val; | 385 | u64 val; |
386 | 386 | ||
387 | /* Only Fam10h is affected */ | 387 | if (!cpu_has_amd_erratum(amd_erratum_383)) |
388 | if (boot_cpu_data.x86 != 0x10) | ||
389 | return; | 388 | return; |
390 | 389 | ||
391 | /* Use _safe variants to not break nested virtualization */ | 390 | /* Use _safe variants to not break nested virtualization */ |
@@ -2433,7 +2432,7 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 *data) | |||
2433 | *data = tsc_offset + native_read_tsc(); | 2432 | *data = tsc_offset + native_read_tsc(); |
2434 | break; | 2433 | break; |
2435 | } | 2434 | } |
2436 | case MSR_K6_STAR: | 2435 | case MSR_STAR: |
2437 | *data = svm->vmcb->save.star; | 2436 | *data = svm->vmcb->save.star; |
2438 | break; | 2437 | break; |
2439 | #ifdef CONFIG_X86_64 | 2438 | #ifdef CONFIG_X86_64 |
@@ -2557,7 +2556,7 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 data) | |||
2557 | 2556 | ||
2558 | break; | 2557 | break; |
2559 | } | 2558 | } |
2560 | case MSR_K6_STAR: | 2559 | case MSR_STAR: |
2561 | svm->vmcb->save.star = data; | 2560 | svm->vmcb->save.star = data; |
2562 | break; | 2561 | break; |
2563 | #ifdef CONFIG_X86_64 | 2562 | #ifdef CONFIG_X86_64 |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 27a0222c2946..49b25eee25ac 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -240,14 +240,14 @@ static u64 host_efer; | |||
240 | static void ept_save_pdptrs(struct kvm_vcpu *vcpu); | 240 | static void ept_save_pdptrs(struct kvm_vcpu *vcpu); |
241 | 241 | ||
242 | /* | 242 | /* |
243 | * Keep MSR_K6_STAR at the end, as setup_msrs() will try to optimize it | 243 | * Keep MSR_STAR at the end, as setup_msrs() will try to optimize it |
244 | * away by decrementing the array size. | 244 | * away by decrementing the array size. |
245 | */ | 245 | */ |
246 | static const u32 vmx_msr_index[] = { | 246 | static const u32 vmx_msr_index[] = { |
247 | #ifdef CONFIG_X86_64 | 247 | #ifdef CONFIG_X86_64 |
248 | MSR_SYSCALL_MASK, MSR_LSTAR, MSR_CSTAR, | 248 | MSR_SYSCALL_MASK, MSR_LSTAR, MSR_CSTAR, |
249 | #endif | 249 | #endif |
250 | MSR_EFER, MSR_TSC_AUX, MSR_K6_STAR, | 250 | MSR_EFER, MSR_TSC_AUX, MSR_STAR, |
251 | }; | 251 | }; |
252 | #define NR_VMX_MSR ARRAY_SIZE(vmx_msr_index) | 252 | #define NR_VMX_MSR ARRAY_SIZE(vmx_msr_index) |
253 | 253 | ||
@@ -1117,10 +1117,10 @@ static void setup_msrs(struct vcpu_vmx *vmx) | |||
1117 | if (index >= 0 && vmx->rdtscp_enabled) | 1117 | if (index >= 0 && vmx->rdtscp_enabled) |
1118 | move_msr_up(vmx, index, save_nmsrs++); | 1118 | move_msr_up(vmx, index, save_nmsrs++); |
1119 | /* | 1119 | /* |
1120 | * MSR_K6_STAR is only needed on long mode guests, and only | 1120 | * MSR_STAR is only needed on long mode guests, and only |
1121 | * if efer.sce is enabled. | 1121 | * if efer.sce is enabled. |
1122 | */ | 1122 | */ |
1123 | index = __find_msr_index(vmx, MSR_K6_STAR); | 1123 | index = __find_msr_index(vmx, MSR_STAR); |
1124 | if ((index >= 0) && (vmx->vcpu.arch.efer & EFER_SCE)) | 1124 | if ((index >= 0) && (vmx->vcpu.arch.efer & EFER_SCE)) |
1125 | move_msr_up(vmx, index, save_nmsrs++); | 1125 | move_msr_up(vmx, index, save_nmsrs++); |
1126 | } | 1126 | } |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index bb2347a69c07..3a09c625d526 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -733,7 +733,7 @@ static u32 msrs_to_save[] = { | |||
733 | HV_X64_MSR_GUEST_OS_ID, HV_X64_MSR_HYPERCALL, | 733 | HV_X64_MSR_GUEST_OS_ID, HV_X64_MSR_HYPERCALL, |
734 | HV_X64_MSR_APIC_ASSIST_PAGE, | 734 | HV_X64_MSR_APIC_ASSIST_PAGE, |
735 | MSR_IA32_SYSENTER_CS, MSR_IA32_SYSENTER_ESP, MSR_IA32_SYSENTER_EIP, | 735 | MSR_IA32_SYSENTER_CS, MSR_IA32_SYSENTER_ESP, MSR_IA32_SYSENTER_EIP, |
736 | MSR_K6_STAR, | 736 | MSR_STAR, |
737 | #ifdef CONFIG_X86_64 | 737 | #ifdef CONFIG_X86_64 |
738 | MSR_CSTAR, MSR_KERNEL_GS_BASE, MSR_SYSCALL_MASK, MSR_LSTAR, | 738 | MSR_CSTAR, MSR_KERNEL_GS_BASE, MSR_SYSCALL_MASK, MSR_LSTAR, |
739 | #endif | 739 | #endif |
diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile index f871e04b6965..e10cf070ede0 100644 --- a/arch/x86/lib/Makefile +++ b/arch/x86/lib/Makefile | |||
@@ -30,6 +30,7 @@ ifeq ($(CONFIG_X86_32),y) | |||
30 | lib-y += checksum_32.o | 30 | lib-y += checksum_32.o |
31 | lib-y += strstr_32.o | 31 | lib-y += strstr_32.o |
32 | lib-y += semaphore_32.o string_32.o | 32 | lib-y += semaphore_32.o string_32.o |
33 | lib-y += cmpxchg.o | ||
33 | ifneq ($(CONFIG_X86_CMPXCHG64),y) | 34 | ifneq ($(CONFIG_X86_CMPXCHG64),y) |
34 | lib-y += cmpxchg8b_emu.o atomic64_386_32.o | 35 | lib-y += cmpxchg8b_emu.o atomic64_386_32.o |
35 | endif | 36 | endif |
diff --git a/arch/x86/lib/atomic64_386_32.S b/arch/x86/lib/atomic64_386_32.S index 4a5979aa6883..2cda60a06e65 100644 --- a/arch/x86/lib/atomic64_386_32.S +++ b/arch/x86/lib/atomic64_386_32.S | |||
@@ -25,150 +25,172 @@ | |||
25 | CFI_ADJUST_CFA_OFFSET -4 | 25 | CFI_ADJUST_CFA_OFFSET -4 |
26 | .endm | 26 | .endm |
27 | 27 | ||
28 | .macro BEGIN func reg | 28 | #define BEGIN(op) \ |
29 | $v = \reg | 29 | .macro endp; \ |
30 | 30 | CFI_ENDPROC; \ | |
31 | ENTRY(atomic64_\func\()_386) | 31 | ENDPROC(atomic64_##op##_386); \ |
32 | CFI_STARTPROC | 32 | .purgem endp; \ |
33 | LOCK $v | 33 | .endm; \ |
34 | 34 | ENTRY(atomic64_##op##_386); \ | |
35 | .macro RETURN | 35 | CFI_STARTPROC; \ |
36 | UNLOCK $v | 36 | LOCK v; |
37 | |||
38 | #define ENDP endp | ||
39 | |||
40 | #define RET \ | ||
41 | UNLOCK v; \ | ||
37 | ret | 42 | ret |
38 | .endm | ||
39 | |||
40 | .macro END_ | ||
41 | CFI_ENDPROC | ||
42 | ENDPROC(atomic64_\func\()_386) | ||
43 | .purgem RETURN | ||
44 | .purgem END_ | ||
45 | .purgem END | ||
46 | .endm | ||
47 | |||
48 | .macro END | ||
49 | RETURN | ||
50 | END_ | ||
51 | .endm | ||
52 | .endm | ||
53 | 43 | ||
54 | BEGIN read %ecx | 44 | #define RET_ENDP \ |
55 | movl ($v), %eax | 45 | RET; \ |
56 | movl 4($v), %edx | 46 | ENDP |
57 | END | 47 | |
58 | 48 | #define v %ecx | |
59 | BEGIN set %esi | 49 | BEGIN(read) |
60 | movl %ebx, ($v) | 50 | movl (v), %eax |
61 | movl %ecx, 4($v) | 51 | movl 4(v), %edx |
62 | END | 52 | RET_ENDP |
63 | 53 | #undef v | |
64 | BEGIN xchg %esi | 54 | |
65 | movl ($v), %eax | 55 | #define v %esi |
66 | movl 4($v), %edx | 56 | BEGIN(set) |
67 | movl %ebx, ($v) | 57 | movl %ebx, (v) |
68 | movl %ecx, 4($v) | 58 | movl %ecx, 4(v) |
69 | END | 59 | RET_ENDP |
70 | 60 | #undef v | |
71 | BEGIN add %ecx | 61 | |
72 | addl %eax, ($v) | 62 | #define v %esi |
73 | adcl %edx, 4($v) | 63 | BEGIN(xchg) |
74 | END | 64 | movl (v), %eax |
75 | 65 | movl 4(v), %edx | |
76 | BEGIN add_return %ecx | 66 | movl %ebx, (v) |
77 | addl ($v), %eax | 67 | movl %ecx, 4(v) |
78 | adcl 4($v), %edx | 68 | RET_ENDP |
79 | movl %eax, ($v) | 69 | #undef v |
80 | movl %edx, 4($v) | 70 | |
81 | END | 71 | #define v %ecx |
82 | 72 | BEGIN(add) | |
83 | BEGIN sub %ecx | 73 | addl %eax, (v) |
84 | subl %eax, ($v) | 74 | adcl %edx, 4(v) |
85 | sbbl %edx, 4($v) | 75 | RET_ENDP |
86 | END | 76 | #undef v |
87 | 77 | ||
88 | BEGIN sub_return %ecx | 78 | #define v %ecx |
79 | BEGIN(add_return) | ||
80 | addl (v), %eax | ||
81 | adcl 4(v), %edx | ||
82 | movl %eax, (v) | ||
83 | movl %edx, 4(v) | ||
84 | RET_ENDP | ||
85 | #undef v | ||
86 | |||
87 | #define v %ecx | ||
88 | BEGIN(sub) | ||
89 | subl %eax, (v) | ||
90 | sbbl %edx, 4(v) | ||
91 | RET_ENDP | ||
92 | #undef v | ||
93 | |||
94 | #define v %ecx | ||
95 | BEGIN(sub_return) | ||
89 | negl %edx | 96 | negl %edx |
90 | negl %eax | 97 | negl %eax |
91 | sbbl $0, %edx | 98 | sbbl $0, %edx |
92 | addl ($v), %eax | 99 | addl (v), %eax |
93 | adcl 4($v), %edx | 100 | adcl 4(v), %edx |
94 | movl %eax, ($v) | 101 | movl %eax, (v) |
95 | movl %edx, 4($v) | 102 | movl %edx, 4(v) |
96 | END | 103 | RET_ENDP |
97 | 104 | #undef v | |
98 | BEGIN inc %esi | 105 | |
99 | addl $1, ($v) | 106 | #define v %esi |
100 | adcl $0, 4($v) | 107 | BEGIN(inc) |
101 | END | 108 | addl $1, (v) |
102 | 109 | adcl $0, 4(v) | |
103 | BEGIN inc_return %esi | 110 | RET_ENDP |
104 | movl ($v), %eax | 111 | #undef v |
105 | movl 4($v), %edx | 112 | |
113 | #define v %esi | ||
114 | BEGIN(inc_return) | ||
115 | movl (v), %eax | ||
116 | movl 4(v), %edx | ||
106 | addl $1, %eax | 117 | addl $1, %eax |
107 | adcl $0, %edx | 118 | adcl $0, %edx |
108 | movl %eax, ($v) | 119 | movl %eax, (v) |
109 | movl %edx, 4($v) | 120 | movl %edx, 4(v) |
110 | END | 121 | RET_ENDP |
111 | 122 | #undef v | |
112 | BEGIN dec %esi | 123 | |
113 | subl $1, ($v) | 124 | #define v %esi |
114 | sbbl $0, 4($v) | 125 | BEGIN(dec) |
115 | END | 126 | subl $1, (v) |
116 | 127 | sbbl $0, 4(v) | |
117 | BEGIN dec_return %esi | 128 | RET_ENDP |
118 | movl ($v), %eax | 129 | #undef v |
119 | movl 4($v), %edx | 130 | |
131 | #define v %esi | ||
132 | BEGIN(dec_return) | ||
133 | movl (v), %eax | ||
134 | movl 4(v), %edx | ||
120 | subl $1, %eax | 135 | subl $1, %eax |
121 | sbbl $0, %edx | 136 | sbbl $0, %edx |
122 | movl %eax, ($v) | 137 | movl %eax, (v) |
123 | movl %edx, 4($v) | 138 | movl %edx, 4(v) |
124 | END | 139 | RET_ENDP |
140 | #undef v | ||
125 | 141 | ||
126 | BEGIN add_unless %ecx | 142 | #define v %ecx |
143 | BEGIN(add_unless) | ||
127 | addl %eax, %esi | 144 | addl %eax, %esi |
128 | adcl %edx, %edi | 145 | adcl %edx, %edi |
129 | addl ($v), %eax | 146 | addl (v), %eax |
130 | adcl 4($v), %edx | 147 | adcl 4(v), %edx |
131 | cmpl %eax, %esi | 148 | cmpl %eax, %esi |
132 | je 3f | 149 | je 3f |
133 | 1: | 150 | 1: |
134 | movl %eax, ($v) | 151 | movl %eax, (v) |
135 | movl %edx, 4($v) | 152 | movl %edx, 4(v) |
136 | movl $1, %eax | 153 | movl $1, %eax |
137 | 2: | 154 | 2: |
138 | RETURN | 155 | RET |
139 | 3: | 156 | 3: |
140 | cmpl %edx, %edi | 157 | cmpl %edx, %edi |
141 | jne 1b | 158 | jne 1b |
142 | xorl %eax, %eax | 159 | xorl %eax, %eax |
143 | jmp 2b | 160 | jmp 2b |
144 | END_ | 161 | ENDP |
162 | #undef v | ||
145 | 163 | ||
146 | BEGIN inc_not_zero %esi | 164 | #define v %esi |
147 | movl ($v), %eax | 165 | BEGIN(inc_not_zero) |
148 | movl 4($v), %edx | 166 | movl (v), %eax |
167 | movl 4(v), %edx | ||
149 | testl %eax, %eax | 168 | testl %eax, %eax |
150 | je 3f | 169 | je 3f |
151 | 1: | 170 | 1: |
152 | addl $1, %eax | 171 | addl $1, %eax |
153 | adcl $0, %edx | 172 | adcl $0, %edx |
154 | movl %eax, ($v) | 173 | movl %eax, (v) |
155 | movl %edx, 4($v) | 174 | movl %edx, 4(v) |
156 | movl $1, %eax | 175 | movl $1, %eax |
157 | 2: | 176 | 2: |
158 | RETURN | 177 | RET |
159 | 3: | 178 | 3: |
160 | testl %edx, %edx | 179 | testl %edx, %edx |
161 | jne 1b | 180 | jne 1b |
162 | jmp 2b | 181 | jmp 2b |
163 | END_ | 182 | ENDP |
183 | #undef v | ||
164 | 184 | ||
165 | BEGIN dec_if_positive %esi | 185 | #define v %esi |
166 | movl ($v), %eax | 186 | BEGIN(dec_if_positive) |
167 | movl 4($v), %edx | 187 | movl (v), %eax |
188 | movl 4(v), %edx | ||
168 | subl $1, %eax | 189 | subl $1, %eax |
169 | sbbl $0, %edx | 190 | sbbl $0, %edx |
170 | js 1f | 191 | js 1f |
171 | movl %eax, ($v) | 192 | movl %eax, (v) |
172 | movl %edx, 4($v) | 193 | movl %edx, 4(v) |
173 | 1: | 194 | 1: |
174 | END | 195 | RET_ENDP |
196 | #undef v | ||
diff --git a/arch/x86/lib/clear_page_64.S b/arch/x86/lib/clear_page_64.S index ebeafcce04a9..aa4326bfb24a 100644 --- a/arch/x86/lib/clear_page_64.S +++ b/arch/x86/lib/clear_page_64.S | |||
@@ -52,7 +52,7 @@ ENDPROC(clear_page) | |||
52 | .align 8 | 52 | .align 8 |
53 | .quad clear_page | 53 | .quad clear_page |
54 | .quad 1b | 54 | .quad 1b |
55 | .byte X86_FEATURE_REP_GOOD | 55 | .word X86_FEATURE_REP_GOOD |
56 | .byte .Lclear_page_end - clear_page | 56 | .byte .Lclear_page_end - clear_page |
57 | .byte 2b - 1b | 57 | .byte 2b - 1b |
58 | .previous | 58 | .previous |
diff --git a/arch/x86/kernel/cpu/cmpxchg.c b/arch/x86/lib/cmpxchg.c index 2056ccf572cc..5d619f6df3ee 100644 --- a/arch/x86/kernel/cpu/cmpxchg.c +++ b/arch/x86/lib/cmpxchg.c | |||
@@ -52,21 +52,3 @@ unsigned long cmpxchg_386_u32(volatile void *ptr, u32 old, u32 new) | |||
52 | } | 52 | } |
53 | EXPORT_SYMBOL(cmpxchg_386_u32); | 53 | EXPORT_SYMBOL(cmpxchg_386_u32); |
54 | #endif | 54 | #endif |
55 | |||
56 | #ifndef CONFIG_X86_CMPXCHG64 | ||
57 | unsigned long long cmpxchg_486_u64(volatile void *ptr, u64 old, u64 new) | ||
58 | { | ||
59 | u64 prev; | ||
60 | unsigned long flags; | ||
61 | |||
62 | /* Poor man's cmpxchg8b for 386 and 486. Unsuitable for SMP */ | ||
63 | local_irq_save(flags); | ||
64 | prev = *(u64 *)ptr; | ||
65 | if (prev == old) | ||
66 | *(u64 *)ptr = new; | ||
67 | local_irq_restore(flags); | ||
68 | return prev; | ||
69 | } | ||
70 | EXPORT_SYMBOL(cmpxchg_486_u64); | ||
71 | #endif | ||
72 | |||
diff --git a/arch/x86/lib/copy_page_64.S b/arch/x86/lib/copy_page_64.S index 727a5d46d2fc..6fec2d1cebe1 100644 --- a/arch/x86/lib/copy_page_64.S +++ b/arch/x86/lib/copy_page_64.S | |||
@@ -113,7 +113,7 @@ ENDPROC(copy_page) | |||
113 | .align 8 | 113 | .align 8 |
114 | .quad copy_page | 114 | .quad copy_page |
115 | .quad 1b | 115 | .quad 1b |
116 | .byte X86_FEATURE_REP_GOOD | 116 | .word X86_FEATURE_REP_GOOD |
117 | .byte .Lcopy_page_end - copy_page | 117 | .byte .Lcopy_page_end - copy_page |
118 | .byte 2b - 1b | 118 | .byte 2b - 1b |
119 | .previous | 119 | .previous |
diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S index 71100c98e337..a460158b5ac5 100644 --- a/arch/x86/lib/copy_user_64.S +++ b/arch/x86/lib/copy_user_64.S | |||
@@ -29,7 +29,7 @@ | |||
29 | .align 8 | 29 | .align 8 |
30 | .quad 0b | 30 | .quad 0b |
31 | .quad 2b | 31 | .quad 2b |
32 | .byte \feature /* when feature is set */ | 32 | .word \feature /* when feature is set */ |
33 | .byte 5 | 33 | .byte 5 |
34 | .byte 5 | 34 | .byte 5 |
35 | .previous | 35 | .previous |
diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S index f82e884928af..bcbcd1e0f7d5 100644 --- a/arch/x86/lib/memcpy_64.S +++ b/arch/x86/lib/memcpy_64.S | |||
@@ -131,7 +131,7 @@ ENDPROC(__memcpy) | |||
131 | .align 8 | 131 | .align 8 |
132 | .quad memcpy | 132 | .quad memcpy |
133 | .quad .Lmemcpy_c | 133 | .quad .Lmemcpy_c |
134 | .byte X86_FEATURE_REP_GOOD | 134 | .word X86_FEATURE_REP_GOOD |
135 | 135 | ||
136 | /* | 136 | /* |
137 | * Replace only beginning, memcpy is used to apply alternatives, | 137 | * Replace only beginning, memcpy is used to apply alternatives, |
diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S index e88d3b81644a..09d344269652 100644 --- a/arch/x86/lib/memset_64.S +++ b/arch/x86/lib/memset_64.S | |||
@@ -121,7 +121,7 @@ ENDPROC(__memset) | |||
121 | .align 8 | 121 | .align 8 |
122 | .quad memset | 122 | .quad memset |
123 | .quad .Lmemset_c | 123 | .quad .Lmemset_c |
124 | .byte X86_FEATURE_REP_GOOD | 124 | .word X86_FEATURE_REP_GOOD |
125 | .byte .Lfinal - memset | 125 | .byte .Lfinal - memset |
126 | .byte .Lmemset_e - .Lmemset_c | 126 | .byte .Lmemset_e - .Lmemset_c |
127 | .previous | 127 | .previous |
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c index a725b7f760ae..0002a3a33081 100644 --- a/arch/x86/mm/dump_pagetables.c +++ b/arch/x86/mm/dump_pagetables.c | |||
@@ -37,6 +37,28 @@ struct addr_marker { | |||
37 | const char *name; | 37 | const char *name; |
38 | }; | 38 | }; |
39 | 39 | ||
40 | /* indices for address_markers; keep sync'd w/ address_markers below */ | ||
41 | enum address_markers_idx { | ||
42 | USER_SPACE_NR = 0, | ||
43 | #ifdef CONFIG_X86_64 | ||
44 | KERNEL_SPACE_NR, | ||
45 | LOW_KERNEL_NR, | ||
46 | VMALLOC_START_NR, | ||
47 | VMEMMAP_START_NR, | ||
48 | HIGH_KERNEL_NR, | ||
49 | MODULES_VADDR_NR, | ||
50 | MODULES_END_NR, | ||
51 | #else | ||
52 | KERNEL_SPACE_NR, | ||
53 | VMALLOC_START_NR, | ||
54 | VMALLOC_END_NR, | ||
55 | # ifdef CONFIG_HIGHMEM | ||
56 | PKMAP_BASE_NR, | ||
57 | # endif | ||
58 | FIXADDR_START_NR, | ||
59 | #endif | ||
60 | }; | ||
61 | |||
40 | /* Address space markers hints */ | 62 | /* Address space markers hints */ |
41 | static struct addr_marker address_markers[] = { | 63 | static struct addr_marker address_markers[] = { |
42 | { 0, "User Space" }, | 64 | { 0, "User Space" }, |
@@ -331,14 +353,12 @@ static int pt_dump_init(void) | |||
331 | 353 | ||
332 | #ifdef CONFIG_X86_32 | 354 | #ifdef CONFIG_X86_32 |
333 | /* Not a compile-time constant on x86-32 */ | 355 | /* Not a compile-time constant on x86-32 */ |
334 | address_markers[2].start_address = VMALLOC_START; | 356 | address_markers[VMALLOC_START_NR].start_address = VMALLOC_START; |
335 | address_markers[3].start_address = VMALLOC_END; | 357 | address_markers[VMALLOC_END_NR].start_address = VMALLOC_END; |
336 | # ifdef CONFIG_HIGHMEM | 358 | # ifdef CONFIG_HIGHMEM |
337 | address_markers[4].start_address = PKMAP_BASE; | 359 | address_markers[PKMAP_BASE_NR].start_address = PKMAP_BASE; |
338 | address_markers[5].start_address = FIXADDR_START; | ||
339 | # else | ||
340 | address_markers[4].start_address = FIXADDR_START; | ||
341 | # endif | 360 | # endif |
361 | address_markers[FIXADDR_START_NR].start_address = FIXADDR_START; | ||
342 | #endif | 362 | #endif |
343 | 363 | ||
344 | pe = debugfs_create_file("kernel_page_tables", 0600, NULL, NULL, | 364 | pe = debugfs_create_file("kernel_page_tables", 0600, NULL, NULL, |
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index f62777940dfb..4c4508e8a204 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -802,8 +802,10 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, | |||
802 | up_read(&mm->mmap_sem); | 802 | up_read(&mm->mmap_sem); |
803 | 803 | ||
804 | /* Kernel mode? Handle exceptions or die: */ | 804 | /* Kernel mode? Handle exceptions or die: */ |
805 | if (!(error_code & PF_USER)) | 805 | if (!(error_code & PF_USER)) { |
806 | no_context(regs, error_code, address); | 806 | no_context(regs, error_code, address); |
807 | return; | ||
808 | } | ||
807 | 809 | ||
808 | /* User-space => ok to do another page fault: */ | 810 | /* User-space => ok to do another page fault: */ |
809 | if (is_prefetch(regs, error_code, address)) | 811 | if (is_prefetch(regs, error_code, address)) |
diff --git a/arch/x86/mm/highmem_32.c b/arch/x86/mm/highmem_32.c index 63a6ba66cbe0..5e8fa12ef861 100644 --- a/arch/x86/mm/highmem_32.c +++ b/arch/x86/mm/highmem_32.c | |||
@@ -53,7 +53,7 @@ void *kmap_atomic(struct page *page, enum km_type type) | |||
53 | return kmap_atomic_prot(page, type, kmap_prot); | 53 | return kmap_atomic_prot(page, type, kmap_prot); |
54 | } | 54 | } |
55 | 55 | ||
56 | void kunmap_atomic(void *kvaddr, enum km_type type) | 56 | void kunmap_atomic_notypecheck(void *kvaddr, enum km_type type) |
57 | { | 57 | { |
58 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; | 58 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; |
59 | enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); | 59 | enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); |
@@ -102,7 +102,7 @@ struct page *kmap_atomic_to_page(void *ptr) | |||
102 | EXPORT_SYMBOL(kmap); | 102 | EXPORT_SYMBOL(kmap); |
103 | EXPORT_SYMBOL(kunmap); | 103 | EXPORT_SYMBOL(kunmap); |
104 | EXPORT_SYMBOL(kmap_atomic); | 104 | EXPORT_SYMBOL(kmap_atomic); |
105 | EXPORT_SYMBOL(kunmap_atomic); | 105 | EXPORT_SYMBOL(kunmap_atomic_notypecheck); |
106 | EXPORT_SYMBOL(kmap_atomic_prot); | 106 | EXPORT_SYMBOL(kmap_atomic_prot); |
107 | EXPORT_SYMBOL(kmap_atomic_to_page); | 107 | EXPORT_SYMBOL(kmap_atomic_to_page); |
108 | 108 | ||
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 12e4d2d3c110..3ba6e0608c55 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c | |||
@@ -62,8 +62,8 @@ int ioremap_change_attr(unsigned long vaddr, unsigned long size, | |||
62 | static void __iomem *__ioremap_caller(resource_size_t phys_addr, | 62 | static void __iomem *__ioremap_caller(resource_size_t phys_addr, |
63 | unsigned long size, unsigned long prot_val, void *caller) | 63 | unsigned long size, unsigned long prot_val, void *caller) |
64 | { | 64 | { |
65 | unsigned long pfn, offset, vaddr; | 65 | unsigned long offset, vaddr; |
66 | resource_size_t last_addr; | 66 | resource_size_t pfn, last_pfn, last_addr; |
67 | const resource_size_t unaligned_phys_addr = phys_addr; | 67 | const resource_size_t unaligned_phys_addr = phys_addr; |
68 | const unsigned long unaligned_size = size; | 68 | const unsigned long unaligned_size = size; |
69 | struct vm_struct *area; | 69 | struct vm_struct *area; |
@@ -100,10 +100,8 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr, | |||
100 | /* | 100 | /* |
101 | * Don't allow anybody to remap normal RAM that we're using.. | 101 | * Don't allow anybody to remap normal RAM that we're using.. |
102 | */ | 102 | */ |
103 | for (pfn = phys_addr >> PAGE_SHIFT; | 103 | last_pfn = last_addr >> PAGE_SHIFT; |
104 | (pfn << PAGE_SHIFT) < (last_addr & PAGE_MASK); | 104 | for (pfn = phys_addr >> PAGE_SHIFT; pfn <= last_pfn; pfn++) { |
105 | pfn++) { | ||
106 | |||
107 | int is_ram = page_is_ram(pfn); | 105 | int is_ram = page_is_ram(pfn); |
108 | 106 | ||
109 | if (is_ram && pfn_valid(pfn) && !PageReserved(pfn_to_page(pfn))) | 107 | if (is_ram && pfn_valid(pfn) && !PageReserved(pfn_to_page(pfn))) |
@@ -115,7 +113,7 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr, | |||
115 | * Mappings have to be page-aligned | 113 | * Mappings have to be page-aligned |
116 | */ | 114 | */ |
117 | offset = phys_addr & ~PAGE_MASK; | 115 | offset = phys_addr & ~PAGE_MASK; |
118 | phys_addr &= PAGE_MASK; | 116 | phys_addr &= PHYSICAL_PAGE_MASK; |
119 | size = PAGE_ALIGN(last_addr+1) - phys_addr; | 117 | size = PAGE_ALIGN(last_addr+1) - phys_addr; |
120 | 118 | ||
121 | retval = reserve_memtype(phys_addr, (u64)phys_addr + size, | 119 | retval = reserve_memtype(phys_addr, (u64)phys_addr + size, |
@@ -613,7 +611,7 @@ void __init early_iounmap(void __iomem *addr, unsigned long size) | |||
613 | return; | 611 | return; |
614 | } | 612 | } |
615 | offset = virt_addr & ~PAGE_MASK; | 613 | offset = virt_addr & ~PAGE_MASK; |
616 | nrpages = PAGE_ALIGN(offset + size - 1) >> PAGE_SHIFT; | 614 | nrpages = PAGE_ALIGN(offset + size) >> PAGE_SHIFT; |
617 | 615 | ||
618 | idx = FIX_BTMAP_BEGIN - NR_FIX_BTMAPS*slot; | 616 | idx = FIX_BTMAP_BEGIN - NR_FIX_BTMAPS*slot; |
619 | while (nrpages > 0) { | 617 | while (nrpages > 0) { |
diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c index 5d0e67fff1a6..e5d5e2ce9f77 100644 --- a/arch/x86/mm/kmmio.c +++ b/arch/x86/mm/kmmio.c | |||
@@ -45,6 +45,8 @@ struct kmmio_fault_page { | |||
45 | * Protected by kmmio_lock, when linked into kmmio_page_table. | 45 | * Protected by kmmio_lock, when linked into kmmio_page_table. |
46 | */ | 46 | */ |
47 | int count; | 47 | int count; |
48 | |||
49 | bool scheduled_for_release; | ||
48 | }; | 50 | }; |
49 | 51 | ||
50 | struct kmmio_delayed_release { | 52 | struct kmmio_delayed_release { |
@@ -398,8 +400,11 @@ static void release_kmmio_fault_page(unsigned long page, | |||
398 | BUG_ON(f->count < 0); | 400 | BUG_ON(f->count < 0); |
399 | if (!f->count) { | 401 | if (!f->count) { |
400 | disarm_kmmio_fault_page(f); | 402 | disarm_kmmio_fault_page(f); |
401 | f->release_next = *release_list; | 403 | if (!f->scheduled_for_release) { |
402 | *release_list = f; | 404 | f->release_next = *release_list; |
405 | *release_list = f; | ||
406 | f->scheduled_for_release = true; | ||
407 | } | ||
403 | } | 408 | } |
404 | } | 409 | } |
405 | 410 | ||
@@ -471,8 +476,10 @@ static void remove_kmmio_fault_pages(struct rcu_head *head) | |||
471 | prevp = &f->release_next; | 476 | prevp = &f->release_next; |
472 | } else { | 477 | } else { |
473 | *prevp = f->release_next; | 478 | *prevp = f->release_next; |
479 | f->release_next = NULL; | ||
480 | f->scheduled_for_release = false; | ||
474 | } | 481 | } |
475 | f = f->release_next; | 482 | f = *prevp; |
476 | } | 483 | } |
477 | spin_unlock_irqrestore(&kmmio_lock, flags); | 484 | spin_unlock_irqrestore(&kmmio_lock, flags); |
478 | 485 | ||
@@ -510,6 +517,9 @@ void unregister_kmmio_probe(struct kmmio_probe *p) | |||
510 | kmmio_count--; | 517 | kmmio_count--; |
511 | spin_unlock_irqrestore(&kmmio_lock, flags); | 518 | spin_unlock_irqrestore(&kmmio_lock, flags); |
512 | 519 | ||
520 | if (!release_list) | ||
521 | return; | ||
522 | |||
513 | drelease = kmalloc(sizeof(*drelease), GFP_ATOMIC); | 523 | drelease = kmalloc(sizeof(*drelease), GFP_ATOMIC); |
514 | if (!drelease) { | 524 | if (!drelease) { |
515 | pr_crit("leaking kmmio_fault_page objects.\n"); | 525 | pr_crit("leaking kmmio_fault_page objects.\n"); |
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 64121a18b8cb..f6ff57b7efa5 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c | |||
@@ -158,7 +158,7 @@ static unsigned long pat_x_mtrr_type(u64 start, u64 end, unsigned long req_type) | |||
158 | return req_type; | 158 | return req_type; |
159 | } | 159 | } |
160 | 160 | ||
161 | static int pat_pagerange_is_ram(unsigned long start, unsigned long end) | 161 | static int pat_pagerange_is_ram(resource_size_t start, resource_size_t end) |
162 | { | 162 | { |
163 | int ram_page = 0, not_rampage = 0; | 163 | int ram_page = 0, not_rampage = 0; |
164 | unsigned long page_nr; | 164 | unsigned long page_nr; |
diff --git a/arch/x86/mm/pf_in.c b/arch/x86/mm/pf_in.c index 308e32570d84..38e6d174c497 100644 --- a/arch/x86/mm/pf_in.c +++ b/arch/x86/mm/pf_in.c | |||
@@ -40,16 +40,16 @@ static unsigned char prefix_codes[] = { | |||
40 | static unsigned int reg_rop[] = { | 40 | static unsigned int reg_rop[] = { |
41 | 0x8A, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F | 41 | 0x8A, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F |
42 | }; | 42 | }; |
43 | static unsigned int reg_wop[] = { 0x88, 0x89 }; | 43 | static unsigned int reg_wop[] = { 0x88, 0x89, 0xAA, 0xAB }; |
44 | static unsigned int imm_wop[] = { 0xC6, 0xC7 }; | 44 | static unsigned int imm_wop[] = { 0xC6, 0xC7 }; |
45 | /* IA32 Manual 3, 3-432*/ | 45 | /* IA32 Manual 3, 3-432*/ |
46 | static unsigned int rw8[] = { 0x88, 0x8A, 0xC6 }; | 46 | static unsigned int rw8[] = { 0x88, 0x8A, 0xC6, 0xAA }; |
47 | static unsigned int rw32[] = { | 47 | static unsigned int rw32[] = { |
48 | 0x89, 0x8B, 0xC7, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F | 48 | 0x89, 0x8B, 0xC7, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F, 0xAB |
49 | }; | 49 | }; |
50 | static unsigned int mw8[] = { 0x88, 0x8A, 0xC6, 0xB60F, 0xBE0F }; | 50 | static unsigned int mw8[] = { 0x88, 0x8A, 0xC6, 0xB60F, 0xBE0F, 0xAA }; |
51 | static unsigned int mw16[] = { 0xB70F, 0xBF0F }; | 51 | static unsigned int mw16[] = { 0xB70F, 0xBF0F }; |
52 | static unsigned int mw32[] = { 0x89, 0x8B, 0xC7 }; | 52 | static unsigned int mw32[] = { 0x89, 0x8B, 0xC7, 0xAB }; |
53 | static unsigned int mw64[] = {}; | 53 | static unsigned int mw64[] = {}; |
54 | #else /* not __i386__ */ | 54 | #else /* not __i386__ */ |
55 | static unsigned char prefix_codes[] = { | 55 | static unsigned char prefix_codes[] = { |
@@ -63,20 +63,20 @@ static unsigned char prefix_codes[] = { | |||
63 | static unsigned int reg_rop[] = { | 63 | static unsigned int reg_rop[] = { |
64 | 0x8A, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F | 64 | 0x8A, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F |
65 | }; | 65 | }; |
66 | static unsigned int reg_wop[] = { 0x88, 0x89 }; | 66 | static unsigned int reg_wop[] = { 0x88, 0x89, 0xAA, 0xAB }; |
67 | static unsigned int imm_wop[] = { 0xC6, 0xC7 }; | 67 | static unsigned int imm_wop[] = { 0xC6, 0xC7 }; |
68 | static unsigned int rw8[] = { 0xC6, 0x88, 0x8A }; | 68 | static unsigned int rw8[] = { 0xC6, 0x88, 0x8A, 0xAA }; |
69 | static unsigned int rw32[] = { | 69 | static unsigned int rw32[] = { |
70 | 0xC7, 0x89, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F | 70 | 0xC7, 0x89, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F, 0xAB |
71 | }; | 71 | }; |
72 | /* 8 bit only */ | 72 | /* 8 bit only */ |
73 | static unsigned int mw8[] = { 0xC6, 0x88, 0x8A, 0xB60F, 0xBE0F }; | 73 | static unsigned int mw8[] = { 0xC6, 0x88, 0x8A, 0xB60F, 0xBE0F, 0xAA }; |
74 | /* 16 bit only */ | 74 | /* 16 bit only */ |
75 | static unsigned int mw16[] = { 0xB70F, 0xBF0F }; | 75 | static unsigned int mw16[] = { 0xB70F, 0xBF0F }; |
76 | /* 16 or 32 bit */ | 76 | /* 16 or 32 bit */ |
77 | static unsigned int mw32[] = { 0xC7 }; | 77 | static unsigned int mw32[] = { 0xC7 }; |
78 | /* 16, 32 or 64 bit */ | 78 | /* 16, 32 or 64 bit */ |
79 | static unsigned int mw64[] = { 0x89, 0x8B }; | 79 | static unsigned int mw64[] = { 0x89, 0x8B, 0xAB }; |
80 | #endif /* not __i386__ */ | 80 | #endif /* not __i386__ */ |
81 | 81 | ||
82 | struct prefix_bits { | 82 | struct prefix_bits { |
@@ -410,7 +410,6 @@ static unsigned long *get_reg_w32(int no, struct pt_regs *regs) | |||
410 | unsigned long get_ins_reg_val(unsigned long ins_addr, struct pt_regs *regs) | 410 | unsigned long get_ins_reg_val(unsigned long ins_addr, struct pt_regs *regs) |
411 | { | 411 | { |
412 | unsigned int opcode; | 412 | unsigned int opcode; |
413 | unsigned char mod_rm; | ||
414 | int reg; | 413 | int reg; |
415 | unsigned char *p; | 414 | unsigned char *p; |
416 | struct prefix_bits prf; | 415 | struct prefix_bits prf; |
@@ -437,8 +436,13 @@ unsigned long get_ins_reg_val(unsigned long ins_addr, struct pt_regs *regs) | |||
437 | goto err; | 436 | goto err; |
438 | 437 | ||
439 | do_work: | 438 | do_work: |
440 | mod_rm = *p; | 439 | /* for STOS, source register is fixed */ |
441 | reg = ((mod_rm >> 3) & 0x7) | (prf.rexr << 3); | 440 | if (opcode == 0xAA || opcode == 0xAB) { |
441 | reg = arg_AX; | ||
442 | } else { | ||
443 | unsigned char mod_rm = *p; | ||
444 | reg = ((mod_rm >> 3) & 0x7) | (prf.rexr << 3); | ||
445 | } | ||
442 | switch (get_ins_reg_width(ins_addr)) { | 446 | switch (get_ins_reg_width(ins_addr)) { |
443 | case 1: | 447 | case 1: |
444 | return *get_reg_w8(reg, prf.rex, regs); | 448 | return *get_reg_w8(reg, prf.rex, regs); |
diff --git a/arch/x86/mm/testmmiotrace.c b/arch/x86/mm/testmmiotrace.c index 8565d944f7cf..38868adf07ea 100644 --- a/arch/x86/mm/testmmiotrace.c +++ b/arch/x86/mm/testmmiotrace.c | |||
@@ -90,6 +90,27 @@ static void do_test(unsigned long size) | |||
90 | iounmap(p); | 90 | iounmap(p); |
91 | } | 91 | } |
92 | 92 | ||
93 | /* | ||
94 | * Tests how mmiotrace behaves in face of multiple ioremap / iounmaps in | ||
95 | * a short time. We had a bug in deferred freeing procedure which tried | ||
96 | * to free this region multiple times (ioremap can reuse the same address | ||
97 | * for many mappings). | ||
98 | */ | ||
99 | static void do_test_bulk_ioremapping(void) | ||
100 | { | ||
101 | void __iomem *p; | ||
102 | int i; | ||
103 | |||
104 | for (i = 0; i < 10; ++i) { | ||
105 | p = ioremap_nocache(mmio_address, PAGE_SIZE); | ||
106 | if (p) | ||
107 | iounmap(p); | ||
108 | } | ||
109 | |||
110 | /* Force freeing. If it will crash we will know why. */ | ||
111 | synchronize_rcu(); | ||
112 | } | ||
113 | |||
93 | static int __init init(void) | 114 | static int __init init(void) |
94 | { | 115 | { |
95 | unsigned long size = (read_far) ? (8 << 20) : (16 << 10); | 116 | unsigned long size = (read_far) ? (8 << 20) : (16 << 10); |
@@ -104,6 +125,7 @@ static int __init init(void) | |||
104 | "and writing 16 kB of rubbish in there.\n", | 125 | "and writing 16 kB of rubbish in there.\n", |
105 | size >> 10, mmio_address); | 126 | size >> 10, mmio_address); |
106 | do_test(size); | 127 | do_test(size); |
128 | do_test_bulk_ioremapping(); | ||
107 | pr_info("All done.\n"); | 129 | pr_info("All done.\n"); |
108 | return 0; | 130 | return 0; |
109 | } | 131 | } |
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c index 426f3a1a64d3..c03f14ab6667 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c | |||
@@ -278,11 +278,9 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long va) | |||
278 | 278 | ||
279 | static void do_flush_tlb_all(void *info) | 279 | static void do_flush_tlb_all(void *info) |
280 | { | 280 | { |
281 | unsigned long cpu = smp_processor_id(); | ||
282 | |||
283 | __flush_tlb_all(); | 281 | __flush_tlb_all(); |
284 | if (percpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY) | 282 | if (percpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY) |
285 | leave_mm(cpu); | 283 | leave_mm(smp_processor_id()); |
286 | } | 284 | } |
287 | 285 | ||
288 | void flush_tlb_all(void) | 286 | void flush_tlb_all(void) |
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index b28d2f1253bb..f6b48f6c5951 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c | |||
@@ -634,6 +634,18 @@ static int __init ppro_init(char **cpu_type) | |||
634 | if (force_arch_perfmon && cpu_has_arch_perfmon) | 634 | if (force_arch_perfmon && cpu_has_arch_perfmon) |
635 | return 0; | 635 | return 0; |
636 | 636 | ||
637 | /* | ||
638 | * Documentation on identifying Intel processors by CPU family | ||
639 | * and model can be found in the Intel Software Developer's | ||
640 | * Manuals (SDM): | ||
641 | * | ||
642 | * http://www.intel.com/products/processor/manuals/ | ||
643 | * | ||
644 | * As of May 2010 the documentation for this was in the: | ||
645 | * "Intel 64 and IA-32 Architectures Software Developer's | ||
646 | * Manual Volume 3B: System Programming Guide", "Table B-1 | ||
647 | * CPUID Signature Values of DisplayFamily_DisplayModel". | ||
648 | */ | ||
637 | switch (cpu_model) { | 649 | switch (cpu_model) { |
638 | case 0 ... 2: | 650 | case 0 ... 2: |
639 | *cpu_type = "i386/ppro"; | 651 | *cpu_type = "i386/ppro"; |
@@ -655,12 +667,13 @@ static int __init ppro_init(char **cpu_type) | |||
655 | case 15: case 23: | 667 | case 15: case 23: |
656 | *cpu_type = "i386/core_2"; | 668 | *cpu_type = "i386/core_2"; |
657 | break; | 669 | break; |
670 | case 0x1a: | ||
671 | case 0x1e: | ||
658 | case 0x2e: | 672 | case 0x2e: |
659 | case 26: | ||
660 | spec = &op_arch_perfmon_spec; | 673 | spec = &op_arch_perfmon_spec; |
661 | *cpu_type = "i386/core_i7"; | 674 | *cpu_type = "i386/core_i7"; |
662 | break; | 675 | break; |
663 | case 28: | 676 | case 0x1c: |
664 | *cpu_type = "i386/atom"; | 677 | *cpu_type = "i386/atom"; |
665 | break; | 678 | break; |
666 | default: | 679 | default: |
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index 2ec04c424a62..15466c096ba5 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c | |||
@@ -34,6 +34,15 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = { | |||
34 | DMI_MATCH(DMI_PRODUCT_NAME, "x3800"), | 34 | DMI_MATCH(DMI_PRODUCT_NAME, "x3800"), |
35 | }, | 35 | }, |
36 | }, | 36 | }, |
37 | /* https://bugzilla.kernel.org/show_bug.cgi?id=16007 */ | ||
38 | /* 2006 AMD HT/VIA system with two host bridges */ | ||
39 | { | ||
40 | .callback = set_use_crs, | ||
41 | .ident = "ASRock ALiveSATA2-GLAN", | ||
42 | .matches = { | ||
43 | DMI_MATCH(DMI_PRODUCT_NAME, "ALiveSATA2-GLAN"), | ||
44 | }, | ||
45 | }, | ||
37 | {} | 46 | {} |
38 | }; | 47 | }; |
39 | 48 | ||
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 215a27ae050d..a0772af64efb 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c | |||
@@ -125,6 +125,23 @@ void __init dmi_check_skip_isa_align(void) | |||
125 | static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) | 125 | static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) |
126 | { | 126 | { |
127 | struct resource *rom_r = &dev->resource[PCI_ROM_RESOURCE]; | 127 | struct resource *rom_r = &dev->resource[PCI_ROM_RESOURCE]; |
128 | struct resource *bar_r; | ||
129 | int bar; | ||
130 | |||
131 | if (pci_probe & PCI_NOASSIGN_BARS) { | ||
132 | /* | ||
133 | * If the BIOS did not assign the BAR, zero out the | ||
134 | * resource so the kernel doesn't attmept to assign | ||
135 | * it later on in pci_assign_unassigned_resources | ||
136 | */ | ||
137 | for (bar = 0; bar <= PCI_STD_RESOURCE_END; bar++) { | ||
138 | bar_r = &dev->resource[bar]; | ||
139 | if (bar_r->start == 0 && bar_r->end != 0) { | ||
140 | bar_r->flags = 0; | ||
141 | bar_r->end = 0; | ||
142 | } | ||
143 | } | ||
144 | } | ||
128 | 145 | ||
129 | if (pci_probe & PCI_NOASSIGN_ROMS) { | 146 | if (pci_probe & PCI_NOASSIGN_ROMS) { |
130 | if (rom_r->parent) | 147 | if (rom_r->parent) |
@@ -509,6 +526,9 @@ char * __devinit pcibios_setup(char *str) | |||
509 | } else if (!strcmp(str, "norom")) { | 526 | } else if (!strcmp(str, "norom")) { |
510 | pci_probe |= PCI_NOASSIGN_ROMS; | 527 | pci_probe |= PCI_NOASSIGN_ROMS; |
511 | return NULL; | 528 | return NULL; |
529 | } else if (!strcmp(str, "nobar")) { | ||
530 | pci_probe |= PCI_NOASSIGN_BARS; | ||
531 | return NULL; | ||
512 | } else if (!strcmp(str, "assign-busses")) { | 532 | } else if (!strcmp(str, "assign-busses")) { |
513 | pci_probe |= PCI_ASSIGN_ALL_BUSSES; | 533 | pci_probe |= PCI_ASSIGN_ALL_BUSSES; |
514 | return NULL; | 534 | return NULL; |
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c index 9810a0f76c91..f547ee05f715 100644 --- a/arch/x86/pci/irq.c +++ b/arch/x86/pci/irq.c | |||
@@ -989,7 +989,7 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign) | |||
989 | dev_info(&dev->dev, "%s PCI INT %c -> IRQ %d\n", msg, 'A' + pin - 1, irq); | 989 | dev_info(&dev->dev, "%s PCI INT %c -> IRQ %d\n", msg, 'A' + pin - 1, irq); |
990 | 990 | ||
991 | /* Update IRQ for all devices with the same pirq value */ | 991 | /* Update IRQ for all devices with the same pirq value */ |
992 | while ((dev2 = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev2)) != NULL) { | 992 | for_each_pci_dev(dev2) { |
993 | pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin); | 993 | pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin); |
994 | if (!pin) | 994 | if (!pin) |
995 | continue; | 995 | continue; |
@@ -1028,7 +1028,7 @@ void __init pcibios_fixup_irqs(void) | |||
1028 | u8 pin; | 1028 | u8 pin; |
1029 | 1029 | ||
1030 | DBG(KERN_DEBUG "PCI: IRQ fixup\n"); | 1030 | DBG(KERN_DEBUG "PCI: IRQ fixup\n"); |
1031 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { | 1031 | for_each_pci_dev(dev) { |
1032 | /* | 1032 | /* |
1033 | * If the BIOS has set an out of range IRQ number, just | 1033 | * If the BIOS has set an out of range IRQ number, just |
1034 | * ignore it. Also keep track of which IRQ's are | 1034 | * ignore it. Also keep track of which IRQ's are |
@@ -1052,7 +1052,7 @@ void __init pcibios_fixup_irqs(void) | |||
1052 | return; | 1052 | return; |
1053 | 1053 | ||
1054 | dev = NULL; | 1054 | dev = NULL; |
1055 | while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { | 1055 | for_each_pci_dev(dev) { |
1056 | pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); | 1056 | pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); |
1057 | if (!pin) | 1057 | if (!pin) |
1058 | continue; | 1058 | continue; |
diff --git a/arch/x86/pci/legacy.c b/arch/x86/pci/legacy.c index 8d460eaf524f..c89266be6048 100644 --- a/arch/x86/pci/legacy.c +++ b/arch/x86/pci/legacy.c | |||
@@ -36,7 +36,7 @@ int __init pci_legacy_init(void) | |||
36 | return 0; | 36 | return 0; |
37 | } | 37 | } |
38 | 38 | ||
39 | void pcibios_scan_specific_bus(int busn) | 39 | void __devinit pcibios_scan_specific_bus(int busn) |
40 | { | 40 | { |
41 | int devfn; | 41 | int devfn; |
42 | long node; | 42 | long node; |
diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile index 6b4ffedb93c9..4a2afa1bac51 100644 --- a/arch/x86/vdso/Makefile +++ b/arch/x86/vdso/Makefile | |||
@@ -120,7 +120,8 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE | |||
120 | quiet_cmd_vdso = VDSO $@ | 120 | quiet_cmd_vdso = VDSO $@ |
121 | cmd_vdso = $(CC) -nostdlib -o $@ \ | 121 | cmd_vdso = $(CC) -nostdlib -o $@ \ |
122 | $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ | 122 | $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \ |
123 | -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) | 123 | -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \ |
124 | sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@' | ||
124 | 125 | ||
125 | VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) | 126 | VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) |
126 | GCOV_PROFILE := n | 127 | GCOV_PROFILE := n |
diff --git a/arch/x86/vdso/checkundef.sh b/arch/x86/vdso/checkundef.sh new file mode 100755 index 000000000000..7ee90a9b549d --- /dev/null +++ b/arch/x86/vdso/checkundef.sh | |||
@@ -0,0 +1,10 @@ | |||
1 | #!/bin/sh | ||
2 | nm="$1" | ||
3 | file="$2" | ||
4 | $nm "$file" | grep '^ *U' > /dev/null 2>&1 | ||
5 | if [ $? -eq 1 ]; then | ||
6 | exit 0 | ||
7 | else | ||
8 | echo "$file: undefined symbols found" >&2 | ||
9 | exit 1 | ||
10 | fi | ||
diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c index 02b442e92007..36df991985b2 100644 --- a/arch/x86/vdso/vdso32-setup.c +++ b/arch/x86/vdso/vdso32-setup.c | |||
@@ -374,7 +374,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) | |||
374 | 374 | ||
375 | #ifdef CONFIG_X86_64 | 375 | #ifdef CONFIG_X86_64 |
376 | 376 | ||
377 | __initcall(sysenter_setup); | 377 | subsys_initcall(sysenter_setup); |
378 | 378 | ||
379 | #ifdef CONFIG_SYSCTL | 379 | #ifdef CONFIG_SYSCTL |
380 | /* Register vsyscall32 into the ABI table */ | 380 | /* Register vsyscall32 into the ABI table */ |
diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c index ac74869b8140..4b5d26f108bb 100644 --- a/arch/x86/vdso/vma.c +++ b/arch/x86/vdso/vma.c | |||
@@ -67,6 +67,7 @@ static int __init init_vdso_vars(void) | |||
67 | *(typeof(__ ## x) **) var_ref(VDSO64_SYMBOL(vbase, x), #x) = &__ ## x; | 67 | *(typeof(__ ## x) **) var_ref(VDSO64_SYMBOL(vbase, x), #x) = &__ ## x; |
68 | #include "vextern.h" | 68 | #include "vextern.h" |
69 | #undef VEXTERN | 69 | #undef VEXTERN |
70 | vunmap(vbase); | ||
70 | return 0; | 71 | return 0; |
71 | 72 | ||
72 | oom: | 73 | oom: |
@@ -74,7 +75,7 @@ static int __init init_vdso_vars(void) | |||
74 | vdso_enabled = 0; | 75 | vdso_enabled = 0; |
75 | return -ENOMEM; | 76 | return -ENOMEM; |
76 | } | 77 | } |
77 | __initcall(init_vdso_vars); | 78 | subsys_initcall(init_vdso_vars); |
78 | 79 | ||
79 | struct linux_binprm; | 80 | struct linux_binprm; |
80 | 81 | ||
diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig index b83e119fbeb0..68128a1b401a 100644 --- a/arch/x86/xen/Kconfig +++ b/arch/x86/xen/Kconfig | |||
@@ -13,6 +13,11 @@ config XEN | |||
13 | kernel to boot in a paravirtualized environment under the | 13 | kernel to boot in a paravirtualized environment under the |
14 | Xen hypervisor. | 14 | Xen hypervisor. |
15 | 15 | ||
16 | config XEN_PVHVM | ||
17 | def_bool y | ||
18 | depends on XEN | ||
19 | depends on X86_LOCAL_APIC | ||
20 | |||
16 | config XEN_MAX_DOMAIN_MEMORY | 21 | config XEN_MAX_DOMAIN_MEMORY |
17 | int "Maximum allowed size of a domain in gigabytes" | 22 | int "Maximum allowed size of a domain in gigabytes" |
18 | default 8 if X86_32 | 23 | default 8 if X86_32 |
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index 3bb4fc21f4f2..779385158915 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile | |||
@@ -12,9 +12,10 @@ CFLAGS_mmu.o := $(nostackp) | |||
12 | 12 | ||
13 | obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ | 13 | obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ |
14 | time.o xen-asm.o xen-asm_$(BITS).o \ | 14 | time.o xen-asm.o xen-asm_$(BITS).o \ |
15 | grant-table.o suspend.o | 15 | grant-table.o suspend.o platform-pci-unplug.o |
16 | 16 | ||
17 | obj-$(CONFIG_SMP) += smp.o | 17 | obj-$(CONFIG_SMP) += smp.o |
18 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o | 18 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o |
19 | obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o | 19 | obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o |
20 | 20 | ||
21 | obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o | ||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 65d8d79b46a8..7d46c8441418 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -11,6 +11,7 @@ | |||
11 | * Jeremy Fitzhardinge <jeremy@xensource.com>, XenSource Inc, 2007 | 11 | * Jeremy Fitzhardinge <jeremy@xensource.com>, XenSource Inc, 2007 |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/cpu.h> | ||
14 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
15 | #include <linux/init.h> | 16 | #include <linux/init.h> |
16 | #include <linux/smp.h> | 17 | #include <linux/smp.h> |
@@ -35,8 +36,10 @@ | |||
35 | #include <xen/interface/version.h> | 36 | #include <xen/interface/version.h> |
36 | #include <xen/interface/physdev.h> | 37 | #include <xen/interface/physdev.h> |
37 | #include <xen/interface/vcpu.h> | 38 | #include <xen/interface/vcpu.h> |
39 | #include <xen/interface/memory.h> | ||
38 | #include <xen/features.h> | 40 | #include <xen/features.h> |
39 | #include <xen/page.h> | 41 | #include <xen/page.h> |
42 | #include <xen/hvm.h> | ||
40 | #include <xen/hvc-console.h> | 43 | #include <xen/hvc-console.h> |
41 | 44 | ||
42 | #include <asm/paravirt.h> | 45 | #include <asm/paravirt.h> |
@@ -55,7 +58,9 @@ | |||
55 | #include <asm/pgtable.h> | 58 | #include <asm/pgtable.h> |
56 | #include <asm/tlbflush.h> | 59 | #include <asm/tlbflush.h> |
57 | #include <asm/reboot.h> | 60 | #include <asm/reboot.h> |
61 | #include <asm/setup.h> | ||
58 | #include <asm/stackprotector.h> | 62 | #include <asm/stackprotector.h> |
63 | #include <asm/hypervisor.h> | ||
59 | 64 | ||
60 | #include "xen-ops.h" | 65 | #include "xen-ops.h" |
61 | #include "mmu.h" | 66 | #include "mmu.h" |
@@ -76,6 +81,10 @@ struct shared_info xen_dummy_shared_info; | |||
76 | 81 | ||
77 | void *xen_initial_gdt; | 82 | void *xen_initial_gdt; |
78 | 83 | ||
84 | RESERVE_BRK(shared_info_page_brk, PAGE_SIZE); | ||
85 | __read_mostly int xen_have_vector_callback; | ||
86 | EXPORT_SYMBOL_GPL(xen_have_vector_callback); | ||
87 | |||
79 | /* | 88 | /* |
80 | * Point at some empty memory to start with. We map the real shared_info | 89 | * Point at some empty memory to start with. We map the real shared_info |
81 | * page as soon as fixmap is up and running. | 90 | * page as soon as fixmap is up and running. |
@@ -97,6 +106,14 @@ struct shared_info *HYPERVISOR_shared_info = (void *)&xen_dummy_shared_info; | |||
97 | */ | 106 | */ |
98 | static int have_vcpu_info_placement = 1; | 107 | static int have_vcpu_info_placement = 1; |
99 | 108 | ||
109 | static void clamp_max_cpus(void) | ||
110 | { | ||
111 | #ifdef CONFIG_SMP | ||
112 | if (setup_max_cpus > MAX_VIRT_CPUS) | ||
113 | setup_max_cpus = MAX_VIRT_CPUS; | ||
114 | #endif | ||
115 | } | ||
116 | |||
100 | static void xen_vcpu_setup(int cpu) | 117 | static void xen_vcpu_setup(int cpu) |
101 | { | 118 | { |
102 | struct vcpu_register_vcpu_info info; | 119 | struct vcpu_register_vcpu_info info; |
@@ -104,13 +121,17 @@ static void xen_vcpu_setup(int cpu) | |||
104 | struct vcpu_info *vcpup; | 121 | struct vcpu_info *vcpup; |
105 | 122 | ||
106 | BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info); | 123 | BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info); |
107 | per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; | ||
108 | 124 | ||
109 | if (!have_vcpu_info_placement) | 125 | if (cpu < MAX_VIRT_CPUS) |
110 | return; /* already tested, not available */ | 126 | per_cpu(xen_vcpu,cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; |
111 | 127 | ||
112 | vcpup = &per_cpu(xen_vcpu_info, cpu); | 128 | if (!have_vcpu_info_placement) { |
129 | if (cpu >= MAX_VIRT_CPUS) | ||
130 | clamp_max_cpus(); | ||
131 | return; | ||
132 | } | ||
113 | 133 | ||
134 | vcpup = &per_cpu(xen_vcpu_info, cpu); | ||
114 | info.mfn = arbitrary_virt_to_mfn(vcpup); | 135 | info.mfn = arbitrary_virt_to_mfn(vcpup); |
115 | info.offset = offset_in_page(vcpup); | 136 | info.offset = offset_in_page(vcpup); |
116 | 137 | ||
@@ -125,6 +146,7 @@ static void xen_vcpu_setup(int cpu) | |||
125 | if (err) { | 146 | if (err) { |
126 | printk(KERN_DEBUG "register_vcpu_info failed: err=%d\n", err); | 147 | printk(KERN_DEBUG "register_vcpu_info failed: err=%d\n", err); |
127 | have_vcpu_info_placement = 0; | 148 | have_vcpu_info_placement = 0; |
149 | clamp_max_cpus(); | ||
128 | } else { | 150 | } else { |
129 | /* This cpu is using the registered vcpu info, even if | 151 | /* This cpu is using the registered vcpu info, even if |
130 | later ones fail to. */ | 152 | later ones fail to. */ |
@@ -731,7 +753,6 @@ static void set_xen_basic_apic_ops(void) | |||
731 | 753 | ||
732 | #endif | 754 | #endif |
733 | 755 | ||
734 | |||
735 | static void xen_clts(void) | 756 | static void xen_clts(void) |
736 | { | 757 | { |
737 | struct multicall_space mcs; | 758 | struct multicall_space mcs; |
@@ -926,10 +947,6 @@ static const struct pv_init_ops xen_init_ops __initdata = { | |||
926 | .patch = xen_patch, | 947 | .patch = xen_patch, |
927 | }; | 948 | }; |
928 | 949 | ||
929 | static const struct pv_time_ops xen_time_ops __initdata = { | ||
930 | .sched_clock = xen_sched_clock, | ||
931 | }; | ||
932 | |||
933 | static const struct pv_cpu_ops xen_cpu_ops __initdata = { | 950 | static const struct pv_cpu_ops xen_cpu_ops __initdata = { |
934 | .cpuid = xen_cpuid, | 951 | .cpuid = xen_cpuid, |
935 | 952 | ||
@@ -1028,6 +1045,23 @@ static void xen_crash_shutdown(struct pt_regs *regs) | |||
1028 | xen_reboot(SHUTDOWN_crash); | 1045 | xen_reboot(SHUTDOWN_crash); |
1029 | } | 1046 | } |
1030 | 1047 | ||
1048 | static int | ||
1049 | xen_panic_event(struct notifier_block *this, unsigned long event, void *ptr) | ||
1050 | { | ||
1051 | xen_reboot(SHUTDOWN_crash); | ||
1052 | return NOTIFY_DONE; | ||
1053 | } | ||
1054 | |||
1055 | static struct notifier_block xen_panic_block = { | ||
1056 | .notifier_call= xen_panic_event, | ||
1057 | }; | ||
1058 | |||
1059 | int xen_panic_handler_init(void) | ||
1060 | { | ||
1061 | atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block); | ||
1062 | return 0; | ||
1063 | } | ||
1064 | |||
1031 | static const struct machine_ops __initdata xen_machine_ops = { | 1065 | static const struct machine_ops __initdata xen_machine_ops = { |
1032 | .restart = xen_restart, | 1066 | .restart = xen_restart, |
1033 | .halt = xen_machine_halt, | 1067 | .halt = xen_machine_halt, |
@@ -1067,7 +1101,6 @@ asmlinkage void __init xen_start_kernel(void) | |||
1067 | /* Install Xen paravirt ops */ | 1101 | /* Install Xen paravirt ops */ |
1068 | pv_info = xen_info; | 1102 | pv_info = xen_info; |
1069 | pv_init_ops = xen_init_ops; | 1103 | pv_init_ops = xen_init_ops; |
1070 | pv_time_ops = xen_time_ops; | ||
1071 | pv_cpu_ops = xen_cpu_ops; | 1104 | pv_cpu_ops = xen_cpu_ops; |
1072 | pv_apic_ops = xen_apic_ops; | 1105 | pv_apic_ops = xen_apic_ops; |
1073 | 1106 | ||
@@ -1075,13 +1108,7 @@ asmlinkage void __init xen_start_kernel(void) | |||
1075 | x86_init.oem.arch_setup = xen_arch_setup; | 1108 | x86_init.oem.arch_setup = xen_arch_setup; |
1076 | x86_init.oem.banner = xen_banner; | 1109 | x86_init.oem.banner = xen_banner; |
1077 | 1110 | ||
1078 | x86_init.timers.timer_init = xen_time_init; | 1111 | xen_init_time_ops(); |
1079 | x86_init.timers.setup_percpu_clockev = x86_init_noop; | ||
1080 | x86_cpuinit.setup_percpu_clockev = x86_init_noop; | ||
1081 | |||
1082 | x86_platform.calibrate_tsc = xen_tsc_khz; | ||
1083 | x86_platform.get_wallclock = xen_get_wallclock; | ||
1084 | x86_platform.set_wallclock = xen_set_wallclock; | ||
1085 | 1112 | ||
1086 | /* | 1113 | /* |
1087 | * Set up some pagetable state before starting to set any ptes. | 1114 | * Set up some pagetable state before starting to set any ptes. |
@@ -1145,6 +1172,10 @@ asmlinkage void __init xen_start_kernel(void) | |||
1145 | 1172 | ||
1146 | pgd = (pgd_t *)xen_start_info->pt_base; | 1173 | pgd = (pgd_t *)xen_start_info->pt_base; |
1147 | 1174 | ||
1175 | if (!xen_initial_domain()) | ||
1176 | __supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD); | ||
1177 | |||
1178 | __supported_pte_mask |= _PAGE_IOMAP; | ||
1148 | /* Don't do the full vcpu_info placement stuff until we have a | 1179 | /* Don't do the full vcpu_info placement stuff until we have a |
1149 | possible map and a non-dummy shared_info. */ | 1180 | possible map and a non-dummy shared_info. */ |
1150 | per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; | 1181 | per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; |
@@ -1206,3 +1237,139 @@ asmlinkage void __init xen_start_kernel(void) | |||
1206 | x86_64_start_reservations((char *)__pa_symbol(&boot_params)); | 1237 | x86_64_start_reservations((char *)__pa_symbol(&boot_params)); |
1207 | #endif | 1238 | #endif |
1208 | } | 1239 | } |
1240 | |||
1241 | static uint32_t xen_cpuid_base(void) | ||
1242 | { | ||
1243 | uint32_t base, eax, ebx, ecx, edx; | ||
1244 | char signature[13]; | ||
1245 | |||
1246 | for (base = 0x40000000; base < 0x40010000; base += 0x100) { | ||
1247 | cpuid(base, &eax, &ebx, &ecx, &edx); | ||
1248 | *(uint32_t *)(signature + 0) = ebx; | ||
1249 | *(uint32_t *)(signature + 4) = ecx; | ||
1250 | *(uint32_t *)(signature + 8) = edx; | ||
1251 | signature[12] = 0; | ||
1252 | |||
1253 | if (!strcmp("XenVMMXenVMM", signature) && ((eax - base) >= 2)) | ||
1254 | return base; | ||
1255 | } | ||
1256 | |||
1257 | return 0; | ||
1258 | } | ||
1259 | |||
1260 | static int init_hvm_pv_info(int *major, int *minor) | ||
1261 | { | ||
1262 | uint32_t eax, ebx, ecx, edx, pages, msr, base; | ||
1263 | u64 pfn; | ||
1264 | |||
1265 | base = xen_cpuid_base(); | ||
1266 | cpuid(base + 1, &eax, &ebx, &ecx, &edx); | ||
1267 | |||
1268 | *major = eax >> 16; | ||
1269 | *minor = eax & 0xffff; | ||
1270 | printk(KERN_INFO "Xen version %d.%d.\n", *major, *minor); | ||
1271 | |||
1272 | cpuid(base + 2, &pages, &msr, &ecx, &edx); | ||
1273 | |||
1274 | pfn = __pa(hypercall_page); | ||
1275 | wrmsr_safe(msr, (u32)pfn, (u32)(pfn >> 32)); | ||
1276 | |||
1277 | xen_setup_features(); | ||
1278 | |||
1279 | pv_info = xen_info; | ||
1280 | pv_info.kernel_rpl = 0; | ||
1281 | |||
1282 | xen_domain_type = XEN_HVM_DOMAIN; | ||
1283 | |||
1284 | return 0; | ||
1285 | } | ||
1286 | |||
1287 | void xen_hvm_init_shared_info(void) | ||
1288 | { | ||
1289 | int cpu; | ||
1290 | struct xen_add_to_physmap xatp; | ||
1291 | static struct shared_info *shared_info_page = 0; | ||
1292 | |||
1293 | if (!shared_info_page) | ||
1294 | shared_info_page = (struct shared_info *) | ||
1295 | extend_brk(PAGE_SIZE, PAGE_SIZE); | ||
1296 | xatp.domid = DOMID_SELF; | ||
1297 | xatp.idx = 0; | ||
1298 | xatp.space = XENMAPSPACE_shared_info; | ||
1299 | xatp.gpfn = __pa(shared_info_page) >> PAGE_SHIFT; | ||
1300 | if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp)) | ||
1301 | BUG(); | ||
1302 | |||
1303 | HYPERVISOR_shared_info = (struct shared_info *)shared_info_page; | ||
1304 | |||
1305 | /* xen_vcpu is a pointer to the vcpu_info struct in the shared_info | ||
1306 | * page, we use it in the event channel upcall and in some pvclock | ||
1307 | * related functions. We don't need the vcpu_info placement | ||
1308 | * optimizations because we don't use any pv_mmu or pv_irq op on | ||
1309 | * HVM. | ||
1310 | * When xen_hvm_init_shared_info is run at boot time only vcpu 0 is | ||
1311 | * online but xen_hvm_init_shared_info is run at resume time too and | ||
1312 | * in that case multiple vcpus might be online. */ | ||
1313 | for_each_online_cpu(cpu) { | ||
1314 | per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; | ||
1315 | } | ||
1316 | } | ||
1317 | |||
1318 | #ifdef CONFIG_XEN_PVHVM | ||
1319 | static int __cpuinit xen_hvm_cpu_notify(struct notifier_block *self, | ||
1320 | unsigned long action, void *hcpu) | ||
1321 | { | ||
1322 | int cpu = (long)hcpu; | ||
1323 | switch (action) { | ||
1324 | case CPU_UP_PREPARE: | ||
1325 | per_cpu(xen_vcpu, cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; | ||
1326 | break; | ||
1327 | default: | ||
1328 | break; | ||
1329 | } | ||
1330 | return NOTIFY_OK; | ||
1331 | } | ||
1332 | |||
1333 | static struct notifier_block __cpuinitdata xen_hvm_cpu_notifier = { | ||
1334 | .notifier_call = xen_hvm_cpu_notify, | ||
1335 | }; | ||
1336 | |||
1337 | static void __init xen_hvm_guest_init(void) | ||
1338 | { | ||
1339 | int r; | ||
1340 | int major, minor; | ||
1341 | |||
1342 | r = init_hvm_pv_info(&major, &minor); | ||
1343 | if (r < 0) | ||
1344 | return; | ||
1345 | |||
1346 | xen_hvm_init_shared_info(); | ||
1347 | |||
1348 | if (xen_feature(XENFEAT_hvm_callback_vector)) | ||
1349 | xen_have_vector_callback = 1; | ||
1350 | register_cpu_notifier(&xen_hvm_cpu_notifier); | ||
1351 | xen_unplug_emulated_devices(); | ||
1352 | have_vcpu_info_placement = 0; | ||
1353 | x86_init.irqs.intr_init = xen_init_IRQ; | ||
1354 | xen_hvm_init_time_ops(); | ||
1355 | xen_hvm_init_mmu_ops(); | ||
1356 | } | ||
1357 | |||
1358 | static bool __init xen_hvm_platform(void) | ||
1359 | { | ||
1360 | if (xen_pv_domain()) | ||
1361 | return false; | ||
1362 | |||
1363 | if (!xen_cpuid_base()) | ||
1364 | return false; | ||
1365 | |||
1366 | return true; | ||
1367 | } | ||
1368 | |||
1369 | const __refconst struct hypervisor_x86 x86_hyper_xen_hvm = { | ||
1370 | .name = "Xen HVM", | ||
1371 | .detect = xen_hvm_platform, | ||
1372 | .init_platform = xen_hvm_guest_init, | ||
1373 | }; | ||
1374 | EXPORT_SYMBOL(x86_hyper_xen_hvm); | ||
1375 | #endif | ||
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 914f04695ce5..42086ac406af 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <linux/highmem.h> | 42 | #include <linux/highmem.h> |
43 | #include <linux/debugfs.h> | 43 | #include <linux/debugfs.h> |
44 | #include <linux/bug.h> | 44 | #include <linux/bug.h> |
45 | #include <linux/vmalloc.h> | ||
45 | #include <linux/module.h> | 46 | #include <linux/module.h> |
46 | #include <linux/gfp.h> | 47 | #include <linux/gfp.h> |
47 | 48 | ||
@@ -51,14 +52,19 @@ | |||
51 | #include <asm/mmu_context.h> | 52 | #include <asm/mmu_context.h> |
52 | #include <asm/setup.h> | 53 | #include <asm/setup.h> |
53 | #include <asm/paravirt.h> | 54 | #include <asm/paravirt.h> |
55 | #include <asm/e820.h> | ||
54 | #include <asm/linkage.h> | 56 | #include <asm/linkage.h> |
57 | #include <asm/page.h> | ||
55 | 58 | ||
56 | #include <asm/xen/hypercall.h> | 59 | #include <asm/xen/hypercall.h> |
57 | #include <asm/xen/hypervisor.h> | 60 | #include <asm/xen/hypervisor.h> |
58 | 61 | ||
62 | #include <xen/xen.h> | ||
59 | #include <xen/page.h> | 63 | #include <xen/page.h> |
60 | #include <xen/interface/xen.h> | 64 | #include <xen/interface/xen.h> |
65 | #include <xen/interface/hvm/hvm_op.h> | ||
61 | #include <xen/interface/version.h> | 66 | #include <xen/interface/version.h> |
67 | #include <xen/interface/memory.h> | ||
62 | #include <xen/hvc-console.h> | 68 | #include <xen/hvc-console.h> |
63 | 69 | ||
64 | #include "multicalls.h" | 70 | #include "multicalls.h" |
@@ -67,6 +73,13 @@ | |||
67 | 73 | ||
68 | #define MMU_UPDATE_HISTO 30 | 74 | #define MMU_UPDATE_HISTO 30 |
69 | 75 | ||
76 | /* | ||
77 | * Protects atomic reservation decrease/increase against concurrent increases. | ||
78 | * Also protects non-atomic updates of current_pages and driver_pages, and | ||
79 | * balloon lists. | ||
80 | */ | ||
81 | DEFINE_SPINLOCK(xen_reservation_lock); | ||
82 | |||
70 | #ifdef CONFIG_XEN_DEBUG_FS | 83 | #ifdef CONFIG_XEN_DEBUG_FS |
71 | 84 | ||
72 | static struct { | 85 | static struct { |
@@ -377,6 +390,28 @@ static bool xen_page_pinned(void *ptr) | |||
377 | return PagePinned(page); | 390 | return PagePinned(page); |
378 | } | 391 | } |
379 | 392 | ||
393 | static bool xen_iomap_pte(pte_t pte) | ||
394 | { | ||
395 | return pte_flags(pte) & _PAGE_IOMAP; | ||
396 | } | ||
397 | |||
398 | static void xen_set_iomap_pte(pte_t *ptep, pte_t pteval) | ||
399 | { | ||
400 | struct multicall_space mcs; | ||
401 | struct mmu_update *u; | ||
402 | |||
403 | mcs = xen_mc_entry(sizeof(*u)); | ||
404 | u = mcs.args; | ||
405 | |||
406 | /* ptep might be kmapped when using 32-bit HIGHPTE */ | ||
407 | u->ptr = arbitrary_virt_to_machine(ptep).maddr; | ||
408 | u->val = pte_val_ma(pteval); | ||
409 | |||
410 | MULTI_mmu_update(mcs.mc, mcs.args, 1, NULL, DOMID_IO); | ||
411 | |||
412 | xen_mc_issue(PARAVIRT_LAZY_MMU); | ||
413 | } | ||
414 | |||
380 | static void xen_extend_mmu_update(const struct mmu_update *update) | 415 | static void xen_extend_mmu_update(const struct mmu_update *update) |
381 | { | 416 | { |
382 | struct multicall_space mcs; | 417 | struct multicall_space mcs; |
@@ -453,6 +488,11 @@ void set_pte_mfn(unsigned long vaddr, unsigned long mfn, pgprot_t flags) | |||
453 | void xen_set_pte_at(struct mm_struct *mm, unsigned long addr, | 488 | void xen_set_pte_at(struct mm_struct *mm, unsigned long addr, |
454 | pte_t *ptep, pte_t pteval) | 489 | pte_t *ptep, pte_t pteval) |
455 | { | 490 | { |
491 | if (xen_iomap_pte(pteval)) { | ||
492 | xen_set_iomap_pte(ptep, pteval); | ||
493 | goto out; | ||
494 | } | ||
495 | |||
456 | ADD_STATS(set_pte_at, 1); | 496 | ADD_STATS(set_pte_at, 1); |
457 | // ADD_STATS(set_pte_at_pinned, xen_page_pinned(ptep)); | 497 | // ADD_STATS(set_pte_at_pinned, xen_page_pinned(ptep)); |
458 | ADD_STATS(set_pte_at_current, mm == current->mm); | 498 | ADD_STATS(set_pte_at_current, mm == current->mm); |
@@ -523,8 +563,25 @@ static pteval_t pte_pfn_to_mfn(pteval_t val) | |||
523 | return val; | 563 | return val; |
524 | } | 564 | } |
525 | 565 | ||
566 | static pteval_t iomap_pte(pteval_t val) | ||
567 | { | ||
568 | if (val & _PAGE_PRESENT) { | ||
569 | unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; | ||
570 | pteval_t flags = val & PTE_FLAGS_MASK; | ||
571 | |||
572 | /* We assume the pte frame number is a MFN, so | ||
573 | just use it as-is. */ | ||
574 | val = ((pteval_t)pfn << PAGE_SHIFT) | flags; | ||
575 | } | ||
576 | |||
577 | return val; | ||
578 | } | ||
579 | |||
526 | pteval_t xen_pte_val(pte_t pte) | 580 | pteval_t xen_pte_val(pte_t pte) |
527 | { | 581 | { |
582 | if (xen_initial_domain() && (pte.pte & _PAGE_IOMAP)) | ||
583 | return pte.pte; | ||
584 | |||
528 | return pte_mfn_to_pfn(pte.pte); | 585 | return pte_mfn_to_pfn(pte.pte); |
529 | } | 586 | } |
530 | PV_CALLEE_SAVE_REGS_THUNK(xen_pte_val); | 587 | PV_CALLEE_SAVE_REGS_THUNK(xen_pte_val); |
@@ -537,7 +594,22 @@ PV_CALLEE_SAVE_REGS_THUNK(xen_pgd_val); | |||
537 | 594 | ||
538 | pte_t xen_make_pte(pteval_t pte) | 595 | pte_t xen_make_pte(pteval_t pte) |
539 | { | 596 | { |
540 | pte = pte_pfn_to_mfn(pte); | 597 | phys_addr_t addr = (pte & PTE_PFN_MASK); |
598 | |||
599 | /* | ||
600 | * Unprivileged domains are allowed to do IOMAPpings for | ||
601 | * PCI passthrough, but not map ISA space. The ISA | ||
602 | * mappings are just dummy local mappings to keep other | ||
603 | * parts of the kernel happy. | ||
604 | */ | ||
605 | if (unlikely(pte & _PAGE_IOMAP) && | ||
606 | (xen_initial_domain() || addr >= ISA_END_ADDRESS)) { | ||
607 | pte = iomap_pte(pte); | ||
608 | } else { | ||
609 | pte &= ~_PAGE_IOMAP; | ||
610 | pte = pte_pfn_to_mfn(pte); | ||
611 | } | ||
612 | |||
541 | return native_make_pte(pte); | 613 | return native_make_pte(pte); |
542 | } | 614 | } |
543 | PV_CALLEE_SAVE_REGS_THUNK(xen_make_pte); | 615 | PV_CALLEE_SAVE_REGS_THUNK(xen_make_pte); |
@@ -593,6 +665,11 @@ void xen_set_pud(pud_t *ptr, pud_t val) | |||
593 | 665 | ||
594 | void xen_set_pte(pte_t *ptep, pte_t pte) | 666 | void xen_set_pte(pte_t *ptep, pte_t pte) |
595 | { | 667 | { |
668 | if (xen_iomap_pte(pte)) { | ||
669 | xen_set_iomap_pte(ptep, pte); | ||
670 | return; | ||
671 | } | ||
672 | |||
596 | ADD_STATS(pte_update, 1); | 673 | ADD_STATS(pte_update, 1); |
597 | // ADD_STATS(pte_update_pinned, xen_page_pinned(ptep)); | 674 | // ADD_STATS(pte_update_pinned, xen_page_pinned(ptep)); |
598 | ADD_STATS(pte_update_batched, paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU); | 675 | ADD_STATS(pte_update_batched, paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU); |
@@ -609,6 +686,11 @@ void xen_set_pte(pte_t *ptep, pte_t pte) | |||
609 | #ifdef CONFIG_X86_PAE | 686 | #ifdef CONFIG_X86_PAE |
610 | void xen_set_pte_atomic(pte_t *ptep, pte_t pte) | 687 | void xen_set_pte_atomic(pte_t *ptep, pte_t pte) |
611 | { | 688 | { |
689 | if (xen_iomap_pte(pte)) { | ||
690 | xen_set_iomap_pte(ptep, pte); | ||
691 | return; | ||
692 | } | ||
693 | |||
612 | set_64bit((u64 *)ptep, native_pte_val(pte)); | 694 | set_64bit((u64 *)ptep, native_pte_val(pte)); |
613 | } | 695 | } |
614 | 696 | ||
@@ -935,8 +1017,6 @@ static int xen_pin_page(struct mm_struct *mm, struct page *page, | |||
935 | read-only, and can be pinned. */ | 1017 | read-only, and can be pinned. */ |
936 | static void __xen_pgd_pin(struct mm_struct *mm, pgd_t *pgd) | 1018 | static void __xen_pgd_pin(struct mm_struct *mm, pgd_t *pgd) |
937 | { | 1019 | { |
938 | vm_unmap_aliases(); | ||
939 | |||
940 | xen_mc_batch(); | 1020 | xen_mc_batch(); |
941 | 1021 | ||
942 | if (__xen_pgd_walk(mm, pgd, xen_pin_page, USER_LIMIT)) { | 1022 | if (__xen_pgd_walk(mm, pgd, xen_pin_page, USER_LIMIT)) { |
@@ -1500,7 +1580,6 @@ static void xen_alloc_ptpage(struct mm_struct *mm, unsigned long pfn, unsigned l | |||
1500 | if (PagePinned(virt_to_page(mm->pgd))) { | 1580 | if (PagePinned(virt_to_page(mm->pgd))) { |
1501 | SetPagePinned(page); | 1581 | SetPagePinned(page); |
1502 | 1582 | ||
1503 | vm_unmap_aliases(); | ||
1504 | if (!PageHighMem(page)) { | 1583 | if (!PageHighMem(page)) { |
1505 | make_lowmem_page_readonly(__va(PFN_PHYS((unsigned long)pfn))); | 1584 | make_lowmem_page_readonly(__va(PFN_PHYS((unsigned long)pfn))); |
1506 | if (level == PT_PTE && USE_SPLIT_PTLOCKS) | 1585 | if (level == PT_PTE && USE_SPLIT_PTLOCKS) |
@@ -1811,9 +1890,16 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot) | |||
1811 | pte = pfn_pte(phys, prot); | 1890 | pte = pfn_pte(phys, prot); |
1812 | break; | 1891 | break; |
1813 | 1892 | ||
1814 | default: | 1893 | case FIX_PARAVIRT_BOOTMAP: |
1894 | /* This is an MFN, but it isn't an IO mapping from the | ||
1895 | IO domain */ | ||
1815 | pte = mfn_pte(phys, prot); | 1896 | pte = mfn_pte(phys, prot); |
1816 | break; | 1897 | break; |
1898 | |||
1899 | default: | ||
1900 | /* By default, set_fixmap is used for hardware mappings */ | ||
1901 | pte = mfn_pte(phys, __pgprot(pgprot_val(prot) | _PAGE_IOMAP)); | ||
1902 | break; | ||
1817 | } | 1903 | } |
1818 | 1904 | ||
1819 | __native_set_fixmap(idx, pte); | 1905 | __native_set_fixmap(idx, pte); |
@@ -1939,8 +2025,240 @@ void __init xen_init_mmu_ops(void) | |||
1939 | x86_init.paging.pagetable_setup_start = xen_pagetable_setup_start; | 2025 | x86_init.paging.pagetable_setup_start = xen_pagetable_setup_start; |
1940 | x86_init.paging.pagetable_setup_done = xen_pagetable_setup_done; | 2026 | x86_init.paging.pagetable_setup_done = xen_pagetable_setup_done; |
1941 | pv_mmu_ops = xen_mmu_ops; | 2027 | pv_mmu_ops = xen_mmu_ops; |
2028 | |||
2029 | vmap_lazy_unmap = false; | ||
2030 | } | ||
2031 | |||
2032 | /* Protected by xen_reservation_lock. */ | ||
2033 | #define MAX_CONTIG_ORDER 9 /* 2MB */ | ||
2034 | static unsigned long discontig_frames[1<<MAX_CONTIG_ORDER]; | ||
2035 | |||
2036 | #define VOID_PTE (mfn_pte(0, __pgprot(0))) | ||
2037 | static void xen_zap_pfn_range(unsigned long vaddr, unsigned int order, | ||
2038 | unsigned long *in_frames, | ||
2039 | unsigned long *out_frames) | ||
2040 | { | ||
2041 | int i; | ||
2042 | struct multicall_space mcs; | ||
2043 | |||
2044 | xen_mc_batch(); | ||
2045 | for (i = 0; i < (1UL<<order); i++, vaddr += PAGE_SIZE) { | ||
2046 | mcs = __xen_mc_entry(0); | ||
2047 | |||
2048 | if (in_frames) | ||
2049 | in_frames[i] = virt_to_mfn(vaddr); | ||
2050 | |||
2051 | MULTI_update_va_mapping(mcs.mc, vaddr, VOID_PTE, 0); | ||
2052 | set_phys_to_machine(virt_to_pfn(vaddr), INVALID_P2M_ENTRY); | ||
2053 | |||
2054 | if (out_frames) | ||
2055 | out_frames[i] = virt_to_pfn(vaddr); | ||
2056 | } | ||
2057 | xen_mc_issue(0); | ||
2058 | } | ||
2059 | |||
2060 | /* | ||
2061 | * Update the pfn-to-mfn mappings for a virtual address range, either to | ||
2062 | * point to an array of mfns, or contiguously from a single starting | ||
2063 | * mfn. | ||
2064 | */ | ||
2065 | static void xen_remap_exchanged_ptes(unsigned long vaddr, int order, | ||
2066 | unsigned long *mfns, | ||
2067 | unsigned long first_mfn) | ||
2068 | { | ||
2069 | unsigned i, limit; | ||
2070 | unsigned long mfn; | ||
2071 | |||
2072 | xen_mc_batch(); | ||
2073 | |||
2074 | limit = 1u << order; | ||
2075 | for (i = 0; i < limit; i++, vaddr += PAGE_SIZE) { | ||
2076 | struct multicall_space mcs; | ||
2077 | unsigned flags; | ||
2078 | |||
2079 | mcs = __xen_mc_entry(0); | ||
2080 | if (mfns) | ||
2081 | mfn = mfns[i]; | ||
2082 | else | ||
2083 | mfn = first_mfn + i; | ||
2084 | |||
2085 | if (i < (limit - 1)) | ||
2086 | flags = 0; | ||
2087 | else { | ||
2088 | if (order == 0) | ||
2089 | flags = UVMF_INVLPG | UVMF_ALL; | ||
2090 | else | ||
2091 | flags = UVMF_TLB_FLUSH | UVMF_ALL; | ||
2092 | } | ||
2093 | |||
2094 | MULTI_update_va_mapping(mcs.mc, vaddr, | ||
2095 | mfn_pte(mfn, PAGE_KERNEL), flags); | ||
2096 | |||
2097 | set_phys_to_machine(virt_to_pfn(vaddr), mfn); | ||
2098 | } | ||
2099 | |||
2100 | xen_mc_issue(0); | ||
2101 | } | ||
2102 | |||
2103 | /* | ||
2104 | * Perform the hypercall to exchange a region of our pfns to point to | ||
2105 | * memory with the required contiguous alignment. Takes the pfns as | ||
2106 | * input, and populates mfns as output. | ||
2107 | * | ||
2108 | * Returns a success code indicating whether the hypervisor was able to | ||
2109 | * satisfy the request or not. | ||
2110 | */ | ||
2111 | static int xen_exchange_memory(unsigned long extents_in, unsigned int order_in, | ||
2112 | unsigned long *pfns_in, | ||
2113 | unsigned long extents_out, | ||
2114 | unsigned int order_out, | ||
2115 | unsigned long *mfns_out, | ||
2116 | unsigned int address_bits) | ||
2117 | { | ||
2118 | long rc; | ||
2119 | int success; | ||
2120 | |||
2121 | struct xen_memory_exchange exchange = { | ||
2122 | .in = { | ||
2123 | .nr_extents = extents_in, | ||
2124 | .extent_order = order_in, | ||
2125 | .extent_start = pfns_in, | ||
2126 | .domid = DOMID_SELF | ||
2127 | }, | ||
2128 | .out = { | ||
2129 | .nr_extents = extents_out, | ||
2130 | .extent_order = order_out, | ||
2131 | .extent_start = mfns_out, | ||
2132 | .address_bits = address_bits, | ||
2133 | .domid = DOMID_SELF | ||
2134 | } | ||
2135 | }; | ||
2136 | |||
2137 | BUG_ON(extents_in << order_in != extents_out << order_out); | ||
2138 | |||
2139 | rc = HYPERVISOR_memory_op(XENMEM_exchange, &exchange); | ||
2140 | success = (exchange.nr_exchanged == extents_in); | ||
2141 | |||
2142 | BUG_ON(!success && ((exchange.nr_exchanged != 0) || (rc == 0))); | ||
2143 | BUG_ON(success && (rc != 0)); | ||
2144 | |||
2145 | return success; | ||
1942 | } | 2146 | } |
1943 | 2147 | ||
2148 | int xen_create_contiguous_region(unsigned long vstart, unsigned int order, | ||
2149 | unsigned int address_bits) | ||
2150 | { | ||
2151 | unsigned long *in_frames = discontig_frames, out_frame; | ||
2152 | unsigned long flags; | ||
2153 | int success; | ||
2154 | |||
2155 | /* | ||
2156 | * Currently an auto-translated guest will not perform I/O, nor will | ||
2157 | * it require PAE page directories below 4GB. Therefore any calls to | ||
2158 | * this function are redundant and can be ignored. | ||
2159 | */ | ||
2160 | |||
2161 | if (xen_feature(XENFEAT_auto_translated_physmap)) | ||
2162 | return 0; | ||
2163 | |||
2164 | if (unlikely(order > MAX_CONTIG_ORDER)) | ||
2165 | return -ENOMEM; | ||
2166 | |||
2167 | memset((void *) vstart, 0, PAGE_SIZE << order); | ||
2168 | |||
2169 | spin_lock_irqsave(&xen_reservation_lock, flags); | ||
2170 | |||
2171 | /* 1. Zap current PTEs, remembering MFNs. */ | ||
2172 | xen_zap_pfn_range(vstart, order, in_frames, NULL); | ||
2173 | |||
2174 | /* 2. Get a new contiguous memory extent. */ | ||
2175 | out_frame = virt_to_pfn(vstart); | ||
2176 | success = xen_exchange_memory(1UL << order, 0, in_frames, | ||
2177 | 1, order, &out_frame, | ||
2178 | address_bits); | ||
2179 | |||
2180 | /* 3. Map the new extent in place of old pages. */ | ||
2181 | if (success) | ||
2182 | xen_remap_exchanged_ptes(vstart, order, NULL, out_frame); | ||
2183 | else | ||
2184 | xen_remap_exchanged_ptes(vstart, order, in_frames, 0); | ||
2185 | |||
2186 | spin_unlock_irqrestore(&xen_reservation_lock, flags); | ||
2187 | |||
2188 | return success ? 0 : -ENOMEM; | ||
2189 | } | ||
2190 | EXPORT_SYMBOL_GPL(xen_create_contiguous_region); | ||
2191 | |||
2192 | void xen_destroy_contiguous_region(unsigned long vstart, unsigned int order) | ||
2193 | { | ||
2194 | unsigned long *out_frames = discontig_frames, in_frame; | ||
2195 | unsigned long flags; | ||
2196 | int success; | ||
2197 | |||
2198 | if (xen_feature(XENFEAT_auto_translated_physmap)) | ||
2199 | return; | ||
2200 | |||
2201 | if (unlikely(order > MAX_CONTIG_ORDER)) | ||
2202 | return; | ||
2203 | |||
2204 | memset((void *) vstart, 0, PAGE_SIZE << order); | ||
2205 | |||
2206 | spin_lock_irqsave(&xen_reservation_lock, flags); | ||
2207 | |||
2208 | /* 1. Find start MFN of contiguous extent. */ | ||
2209 | in_frame = virt_to_mfn(vstart); | ||
2210 | |||
2211 | /* 2. Zap current PTEs. */ | ||
2212 | xen_zap_pfn_range(vstart, order, NULL, out_frames); | ||
2213 | |||
2214 | /* 3. Do the exchange for non-contiguous MFNs. */ | ||
2215 | success = xen_exchange_memory(1, order, &in_frame, 1UL << order, | ||
2216 | 0, out_frames, 0); | ||
2217 | |||
2218 | /* 4. Map new pages in place of old pages. */ | ||
2219 | if (success) | ||
2220 | xen_remap_exchanged_ptes(vstart, order, out_frames, 0); | ||
2221 | else | ||
2222 | xen_remap_exchanged_ptes(vstart, order, NULL, in_frame); | ||
2223 | |||
2224 | spin_unlock_irqrestore(&xen_reservation_lock, flags); | ||
2225 | } | ||
2226 | EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region); | ||
2227 | |||
2228 | #ifdef CONFIG_XEN_PVHVM | ||
2229 | static void xen_hvm_exit_mmap(struct mm_struct *mm) | ||
2230 | { | ||
2231 | struct xen_hvm_pagetable_dying a; | ||
2232 | int rc; | ||
2233 | |||
2234 | a.domid = DOMID_SELF; | ||
2235 | a.gpa = __pa(mm->pgd); | ||
2236 | rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); | ||
2237 | WARN_ON_ONCE(rc < 0); | ||
2238 | } | ||
2239 | |||
2240 | static int is_pagetable_dying_supported(void) | ||
2241 | { | ||
2242 | struct xen_hvm_pagetable_dying a; | ||
2243 | int rc = 0; | ||
2244 | |||
2245 | a.domid = DOMID_SELF; | ||
2246 | a.gpa = 0x00; | ||
2247 | rc = HYPERVISOR_hvm_op(HVMOP_pagetable_dying, &a); | ||
2248 | if (rc < 0) { | ||
2249 | printk(KERN_DEBUG "HVMOP_pagetable_dying not supported\n"); | ||
2250 | return 0; | ||
2251 | } | ||
2252 | return 1; | ||
2253 | } | ||
2254 | |||
2255 | void __init xen_hvm_init_mmu_ops(void) | ||
2256 | { | ||
2257 | if (is_pagetable_dying_supported()) | ||
2258 | pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap; | ||
2259 | } | ||
2260 | #endif | ||
2261 | |||
1944 | #ifdef CONFIG_XEN_DEBUG_FS | 2262 | #ifdef CONFIG_XEN_DEBUG_FS |
1945 | 2263 | ||
1946 | static struct dentry *d_mmu_debug; | 2264 | static struct dentry *d_mmu_debug; |
diff --git a/arch/x86/xen/mmu.h b/arch/x86/xen/mmu.h index 5fe6bc7f5ecf..fa938c4aa2f7 100644 --- a/arch/x86/xen/mmu.h +++ b/arch/x86/xen/mmu.h | |||
@@ -60,4 +60,5 @@ void xen_ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr, | |||
60 | unsigned long xen_read_cr2_direct(void); | 60 | unsigned long xen_read_cr2_direct(void); |
61 | 61 | ||
62 | extern void xen_init_mmu_ops(void); | 62 | extern void xen_init_mmu_ops(void); |
63 | extern void xen_hvm_init_mmu_ops(void); | ||
63 | #endif /* _XEN_MMU_H */ | 64 | #endif /* _XEN_MMU_H */ |
diff --git a/arch/x86/xen/pci-swiotlb-xen.c b/arch/x86/xen/pci-swiotlb-xen.c new file mode 100644 index 000000000000..a013ec9d0c54 --- /dev/null +++ b/arch/x86/xen/pci-swiotlb-xen.c | |||
@@ -0,0 +1,58 @@ | |||
1 | /* Glue code to lib/swiotlb-xen.c */ | ||
2 | |||
3 | #include <linux/dma-mapping.h> | ||
4 | #include <xen/swiotlb-xen.h> | ||
5 | |||
6 | #include <asm/xen/hypervisor.h> | ||
7 | #include <xen/xen.h> | ||
8 | |||
9 | int xen_swiotlb __read_mostly; | ||
10 | |||
11 | static struct dma_map_ops xen_swiotlb_dma_ops = { | ||
12 | .mapping_error = xen_swiotlb_dma_mapping_error, | ||
13 | .alloc_coherent = xen_swiotlb_alloc_coherent, | ||
14 | .free_coherent = xen_swiotlb_free_coherent, | ||
15 | .sync_single_for_cpu = xen_swiotlb_sync_single_for_cpu, | ||
16 | .sync_single_for_device = xen_swiotlb_sync_single_for_device, | ||
17 | .sync_sg_for_cpu = xen_swiotlb_sync_sg_for_cpu, | ||
18 | .sync_sg_for_device = xen_swiotlb_sync_sg_for_device, | ||
19 | .map_sg = xen_swiotlb_map_sg_attrs, | ||
20 | .unmap_sg = xen_swiotlb_unmap_sg_attrs, | ||
21 | .map_page = xen_swiotlb_map_page, | ||
22 | .unmap_page = xen_swiotlb_unmap_page, | ||
23 | .dma_supported = xen_swiotlb_dma_supported, | ||
24 | }; | ||
25 | |||
26 | /* | ||
27 | * pci_xen_swiotlb_detect - set xen_swiotlb to 1 if necessary | ||
28 | * | ||
29 | * This returns non-zero if we are forced to use xen_swiotlb (by the boot | ||
30 | * option). | ||
31 | */ | ||
32 | int __init pci_xen_swiotlb_detect(void) | ||
33 | { | ||
34 | |||
35 | /* If running as PV guest, either iommu=soft, or swiotlb=force will | ||
36 | * activate this IOMMU. If running as PV privileged, activate it | ||
37 | * irregardlesss. | ||
38 | */ | ||
39 | if ((xen_initial_domain() || swiotlb || swiotlb_force) && | ||
40 | (xen_pv_domain())) | ||
41 | xen_swiotlb = 1; | ||
42 | |||
43 | /* If we are running under Xen, we MUST disable the native SWIOTLB. | ||
44 | * Don't worry about swiotlb_force flag activating the native, as | ||
45 | * the 'swiotlb' flag is the only one turning it on. */ | ||
46 | if (xen_pv_domain()) | ||
47 | swiotlb = 0; | ||
48 | |||
49 | return xen_swiotlb; | ||
50 | } | ||
51 | |||
52 | void __init pci_xen_swiotlb_init(void) | ||
53 | { | ||
54 | if (xen_swiotlb) { | ||
55 | xen_swiotlb_init(1); | ||
56 | dma_ops = &xen_swiotlb_dma_ops; | ||
57 | } | ||
58 | } | ||
diff --git a/arch/x86/xen/platform-pci-unplug.c b/arch/x86/xen/platform-pci-unplug.c new file mode 100644 index 000000000000..554c002a1e1a --- /dev/null +++ b/arch/x86/xen/platform-pci-unplug.c | |||
@@ -0,0 +1,137 @@ | |||
1 | /****************************************************************************** | ||
2 | * platform-pci-unplug.c | ||
3 | * | ||
4 | * Xen platform PCI device driver | ||
5 | * Copyright (c) 2010, Citrix | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms and conditions of the GNU General Public License, | ||
9 | * version 2, as published by the Free Software Foundation. | ||
10 | * | ||
11 | * This program is distributed in the hope 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 for | ||
14 | * more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along with | ||
17 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
18 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | #include <linux/init.h> | ||
23 | #include <linux/io.h> | ||
24 | #include <linux/module.h> | ||
25 | |||
26 | #include <xen/platform_pci.h> | ||
27 | |||
28 | #define XEN_PLATFORM_ERR_MAGIC -1 | ||
29 | #define XEN_PLATFORM_ERR_PROTOCOL -2 | ||
30 | #define XEN_PLATFORM_ERR_BLACKLIST -3 | ||
31 | |||
32 | /* store the value of xen_emul_unplug after the unplug is done */ | ||
33 | int xen_platform_pci_unplug; | ||
34 | EXPORT_SYMBOL_GPL(xen_platform_pci_unplug); | ||
35 | #ifdef CONFIG_XEN_PVHVM | ||
36 | static int xen_emul_unplug; | ||
37 | |||
38 | static int __init check_platform_magic(void) | ||
39 | { | ||
40 | short magic; | ||
41 | char protocol; | ||
42 | |||
43 | magic = inw(XEN_IOPORT_MAGIC); | ||
44 | if (magic != XEN_IOPORT_MAGIC_VAL) { | ||
45 | printk(KERN_ERR "Xen Platform PCI: unrecognised magic value\n"); | ||
46 | return XEN_PLATFORM_ERR_MAGIC; | ||
47 | } | ||
48 | |||
49 | protocol = inb(XEN_IOPORT_PROTOVER); | ||
50 | |||
51 | printk(KERN_DEBUG "Xen Platform PCI: I/O protocol version %d\n", | ||
52 | protocol); | ||
53 | |||
54 | switch (protocol) { | ||
55 | case 1: | ||
56 | outw(XEN_IOPORT_LINUX_PRODNUM, XEN_IOPORT_PRODNUM); | ||
57 | outl(XEN_IOPORT_LINUX_DRVVER, XEN_IOPORT_DRVVER); | ||
58 | if (inw(XEN_IOPORT_MAGIC) != XEN_IOPORT_MAGIC_VAL) { | ||
59 | printk(KERN_ERR "Xen Platform: blacklisted by host\n"); | ||
60 | return XEN_PLATFORM_ERR_BLACKLIST; | ||
61 | } | ||
62 | break; | ||
63 | default: | ||
64 | printk(KERN_WARNING "Xen Platform PCI: unknown I/O protocol version"); | ||
65 | return XEN_PLATFORM_ERR_PROTOCOL; | ||
66 | } | ||
67 | |||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | void __init xen_unplug_emulated_devices(void) | ||
72 | { | ||
73 | int r; | ||
74 | |||
75 | /* check the version of the xen platform PCI device */ | ||
76 | r = check_platform_magic(); | ||
77 | /* If the version matches enable the Xen platform PCI driver. | ||
78 | * Also enable the Xen platform PCI driver if the version is really old | ||
79 | * and the user told us to ignore it. */ | ||
80 | if (r && !(r == XEN_PLATFORM_ERR_MAGIC && | ||
81 | (xen_emul_unplug & XEN_UNPLUG_IGNORE))) | ||
82 | return; | ||
83 | /* Set the default value of xen_emul_unplug depending on whether or | ||
84 | * not the Xen PV frontends and the Xen platform PCI driver have | ||
85 | * been compiled for this kernel (modules or built-in are both OK). */ | ||
86 | if (!xen_emul_unplug) { | ||
87 | if (xen_must_unplug_nics()) { | ||
88 | printk(KERN_INFO "Netfront and the Xen platform PCI driver have " | ||
89 | "been compiled for this kernel: unplug emulated NICs.\n"); | ||
90 | xen_emul_unplug |= XEN_UNPLUG_ALL_NICS; | ||
91 | } | ||
92 | if (xen_must_unplug_disks()) { | ||
93 | printk(KERN_INFO "Blkfront and the Xen platform PCI driver have " | ||
94 | "been compiled for this kernel: unplug emulated disks.\n" | ||
95 | "You might have to change the root device\n" | ||
96 | "from /dev/hd[a-d] to /dev/xvd[a-d]\n" | ||
97 | "in your root= kernel command line option\n"); | ||
98 | xen_emul_unplug |= XEN_UNPLUG_ALL_IDE_DISKS; | ||
99 | } | ||
100 | } | ||
101 | /* Now unplug the emulated devices */ | ||
102 | if (!(xen_emul_unplug & XEN_UNPLUG_IGNORE)) | ||
103 | outw(xen_emul_unplug, XEN_IOPORT_UNPLUG); | ||
104 | xen_platform_pci_unplug = xen_emul_unplug; | ||
105 | } | ||
106 | |||
107 | static int __init parse_xen_emul_unplug(char *arg) | ||
108 | { | ||
109 | char *p, *q; | ||
110 | int l; | ||
111 | |||
112 | for (p = arg; p; p = q) { | ||
113 | q = strchr(p, ','); | ||
114 | if (q) { | ||
115 | l = q - p; | ||
116 | q++; | ||
117 | } else { | ||
118 | l = strlen(p); | ||
119 | } | ||
120 | if (!strncmp(p, "all", l)) | ||
121 | xen_emul_unplug |= XEN_UNPLUG_ALL; | ||
122 | else if (!strncmp(p, "ide-disks", l)) | ||
123 | xen_emul_unplug |= XEN_UNPLUG_ALL_IDE_DISKS; | ||
124 | else if (!strncmp(p, "aux-ide-disks", l)) | ||
125 | xen_emul_unplug |= XEN_UNPLUG_AUX_IDE_DISKS; | ||
126 | else if (!strncmp(p, "nics", l)) | ||
127 | xen_emul_unplug |= XEN_UNPLUG_ALL_NICS; | ||
128 | else if (!strncmp(p, "ignore", l)) | ||
129 | xen_emul_unplug |= XEN_UNPLUG_IGNORE; | ||
130 | else | ||
131 | printk(KERN_WARNING "unrecognised option '%s' " | ||
132 | "in parameter 'xen_emul_unplug'\n", p); | ||
133 | } | ||
134 | return 0; | ||
135 | } | ||
136 | early_param("xen_emul_unplug", parse_xen_emul_unplug); | ||
137 | #endif | ||
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index ad0047f47cd4..328b00305426 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <xen/page.h> | 20 | #include <xen/page.h> |
21 | #include <xen/interface/callback.h> | 21 | #include <xen/interface/callback.h> |
22 | #include <xen/interface/physdev.h> | 22 | #include <xen/interface/physdev.h> |
23 | #include <xen/interface/memory.h> | ||
23 | #include <xen/features.h> | 24 | #include <xen/features.h> |
24 | 25 | ||
25 | #include "xen-ops.h" | 26 | #include "xen-ops.h" |
@@ -32,6 +33,73 @@ extern void xen_sysenter_target(void); | |||
32 | extern void xen_syscall_target(void); | 33 | extern void xen_syscall_target(void); |
33 | extern void xen_syscall32_target(void); | 34 | extern void xen_syscall32_target(void); |
34 | 35 | ||
36 | static unsigned long __init xen_release_chunk(phys_addr_t start_addr, | ||
37 | phys_addr_t end_addr) | ||
38 | { | ||
39 | struct xen_memory_reservation reservation = { | ||
40 | .address_bits = 0, | ||
41 | .extent_order = 0, | ||
42 | .domid = DOMID_SELF | ||
43 | }; | ||
44 | unsigned long start, end; | ||
45 | unsigned long len = 0; | ||
46 | unsigned long pfn; | ||
47 | int ret; | ||
48 | |||
49 | start = PFN_UP(start_addr); | ||
50 | end = PFN_DOWN(end_addr); | ||
51 | |||
52 | if (end <= start) | ||
53 | return 0; | ||
54 | |||
55 | printk(KERN_INFO "xen_release_chunk: looking at area pfn %lx-%lx: ", | ||
56 | start, end); | ||
57 | for(pfn = start; pfn < end; pfn++) { | ||
58 | unsigned long mfn = pfn_to_mfn(pfn); | ||
59 | |||
60 | /* Make sure pfn exists to start with */ | ||
61 | if (mfn == INVALID_P2M_ENTRY || mfn_to_pfn(mfn) != pfn) | ||
62 | continue; | ||
63 | |||
64 | set_xen_guest_handle(reservation.extent_start, &mfn); | ||
65 | reservation.nr_extents = 1; | ||
66 | |||
67 | ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, | ||
68 | &reservation); | ||
69 | WARN(ret != 1, "Failed to release memory %lx-%lx err=%d\n", | ||
70 | start, end, ret); | ||
71 | if (ret == 1) { | ||
72 | set_phys_to_machine(pfn, INVALID_P2M_ENTRY); | ||
73 | len++; | ||
74 | } | ||
75 | } | ||
76 | printk(KERN_CONT "%ld pages freed\n", len); | ||
77 | |||
78 | return len; | ||
79 | } | ||
80 | |||
81 | static unsigned long __init xen_return_unused_memory(unsigned long max_pfn, | ||
82 | const struct e820map *e820) | ||
83 | { | ||
84 | phys_addr_t max_addr = PFN_PHYS(max_pfn); | ||
85 | phys_addr_t last_end = 0; | ||
86 | unsigned long released = 0; | ||
87 | int i; | ||
88 | |||
89 | for (i = 0; i < e820->nr_map && last_end < max_addr; i++) { | ||
90 | phys_addr_t end = e820->map[i].addr; | ||
91 | end = min(max_addr, end); | ||
92 | |||
93 | released += xen_release_chunk(last_end, end); | ||
94 | last_end = e820->map[i].addr + e820->map[i].size; | ||
95 | } | ||
96 | |||
97 | if (last_end < max_addr) | ||
98 | released += xen_release_chunk(last_end, max_addr); | ||
99 | |||
100 | printk(KERN_INFO "released %ld pages of unused memory\n", released); | ||
101 | return released; | ||
102 | } | ||
35 | 103 | ||
36 | /** | 104 | /** |
37 | * machine_specific_memory_setup - Hook for machine specific memory setup. | 105 | * machine_specific_memory_setup - Hook for machine specific memory setup. |
@@ -67,6 +135,8 @@ char * __init xen_memory_setup(void) | |||
67 | 135 | ||
68 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); | 136 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); |
69 | 137 | ||
138 | xen_return_unused_memory(xen_start_info->nr_pages, &e820); | ||
139 | |||
70 | return "Xen"; | 140 | return "Xen"; |
71 | } | 141 | } |
72 | 142 | ||
@@ -156,6 +226,8 @@ void __init xen_arch_setup(void) | |||
156 | struct physdev_set_iopl set_iopl; | 226 | struct physdev_set_iopl set_iopl; |
157 | int rc; | 227 | int rc; |
158 | 228 | ||
229 | xen_panic_handler_init(); | ||
230 | |||
159 | HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_4gb_segments); | 231 | HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_4gb_segments); |
160 | HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_writable_pagetables); | 232 | HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_writable_pagetables); |
161 | 233 | ||
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index a29693fd3138..25f232b18a82 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
@@ -394,6 +394,8 @@ static void stop_self(void *v) | |||
394 | load_cr3(swapper_pg_dir); | 394 | load_cr3(swapper_pg_dir); |
395 | /* should set up a minimal gdt */ | 395 | /* should set up a minimal gdt */ |
396 | 396 | ||
397 | set_cpu_online(cpu, false); | ||
398 | |||
397 | HYPERVISOR_vcpu_op(VCPUOP_down, cpu, NULL); | 399 | HYPERVISOR_vcpu_op(VCPUOP_down, cpu, NULL); |
398 | BUG(); | 400 | BUG(); |
399 | } | 401 | } |
diff --git a/arch/x86/xen/suspend.c b/arch/x86/xen/suspend.c index a9c661108034..1d789d56877c 100644 --- a/arch/x86/xen/suspend.c +++ b/arch/x86/xen/suspend.c | |||
@@ -26,6 +26,18 @@ void xen_pre_suspend(void) | |||
26 | BUG(); | 26 | BUG(); |
27 | } | 27 | } |
28 | 28 | ||
29 | void xen_hvm_post_suspend(int suspend_cancelled) | ||
30 | { | ||
31 | int cpu; | ||
32 | xen_hvm_init_shared_info(); | ||
33 | xen_callback_vector(); | ||
34 | if (xen_feature(XENFEAT_hvm_safe_pvclock)) { | ||
35 | for_each_online_cpu(cpu) { | ||
36 | xen_setup_runstate_info(cpu); | ||
37 | } | ||
38 | } | ||
39 | } | ||
40 | |||
29 | void xen_post_suspend(int suspend_cancelled) | 41 | void xen_post_suspend(int suspend_cancelled) |
30 | { | 42 | { |
31 | xen_build_mfn_list_list(); | 43 | xen_build_mfn_list_list(); |
diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index b3c6c59ed302..1a5353a753fc 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <asm/xen/hypercall.h> | 20 | #include <asm/xen/hypercall.h> |
21 | 21 | ||
22 | #include <xen/events.h> | 22 | #include <xen/events.h> |
23 | #include <xen/features.h> | ||
23 | #include <xen/interface/xen.h> | 24 | #include <xen/interface/xen.h> |
24 | #include <xen/interface/vcpu.h> | 25 | #include <xen/interface/vcpu.h> |
25 | 26 | ||
@@ -155,47 +156,8 @@ static void do_stolen_accounting(void) | |||
155 | account_idle_ticks(ticks); | 156 | account_idle_ticks(ticks); |
156 | } | 157 | } |
157 | 158 | ||
158 | /* | ||
159 | * Xen sched_clock implementation. Returns the number of unstolen | ||
160 | * nanoseconds, which is nanoseconds the VCPU spent in RUNNING+BLOCKED | ||
161 | * states. | ||
162 | */ | ||
163 | unsigned long long xen_sched_clock(void) | ||
164 | { | ||
165 | struct vcpu_runstate_info state; | ||
166 | cycle_t now; | ||
167 | u64 ret; | ||
168 | s64 offset; | ||
169 | |||
170 | /* | ||
171 | * Ideally sched_clock should be called on a per-cpu basis | ||
172 | * anyway, so preempt should already be disabled, but that's | ||
173 | * not current practice at the moment. | ||
174 | */ | ||
175 | preempt_disable(); | ||
176 | |||
177 | now = xen_clocksource_read(); | ||
178 | |||
179 | get_runstate_snapshot(&state); | ||
180 | |||
181 | WARN_ON(state.state != RUNSTATE_running); | ||
182 | |||
183 | offset = now - state.state_entry_time; | ||
184 | if (offset < 0) | ||
185 | offset = 0; | ||
186 | |||
187 | ret = state.time[RUNSTATE_blocked] + | ||
188 | state.time[RUNSTATE_running] + | ||
189 | offset; | ||
190 | |||
191 | preempt_enable(); | ||
192 | |||
193 | return ret; | ||
194 | } | ||
195 | |||
196 | |||
197 | /* Get the TSC speed from Xen */ | 159 | /* Get the TSC speed from Xen */ |
198 | unsigned long xen_tsc_khz(void) | 160 | static unsigned long xen_tsc_khz(void) |
199 | { | 161 | { |
200 | struct pvclock_vcpu_time_info *info = | 162 | struct pvclock_vcpu_time_info *info = |
201 | &HYPERVISOR_shared_info->vcpu_info[0].time; | 163 | &HYPERVISOR_shared_info->vcpu_info[0].time; |
@@ -230,7 +192,7 @@ static void xen_read_wallclock(struct timespec *ts) | |||
230 | put_cpu_var(xen_vcpu); | 192 | put_cpu_var(xen_vcpu); |
231 | } | 193 | } |
232 | 194 | ||
233 | unsigned long xen_get_wallclock(void) | 195 | static unsigned long xen_get_wallclock(void) |
234 | { | 196 | { |
235 | struct timespec ts; | 197 | struct timespec ts; |
236 | 198 | ||
@@ -238,7 +200,7 @@ unsigned long xen_get_wallclock(void) | |||
238 | return ts.tv_sec; | 200 | return ts.tv_sec; |
239 | } | 201 | } |
240 | 202 | ||
241 | int xen_set_wallclock(unsigned long now) | 203 | static int xen_set_wallclock(unsigned long now) |
242 | { | 204 | { |
243 | /* do nothing for domU */ | 205 | /* do nothing for domU */ |
244 | return -1; | 206 | return -1; |
@@ -473,7 +435,11 @@ void xen_timer_resume(void) | |||
473 | } | 435 | } |
474 | } | 436 | } |
475 | 437 | ||
476 | __init void xen_time_init(void) | 438 | static const struct pv_time_ops xen_time_ops __initdata = { |
439 | .sched_clock = xen_clocksource_read, | ||
440 | }; | ||
441 | |||
442 | static __init void xen_time_init(void) | ||
477 | { | 443 | { |
478 | int cpu = smp_processor_id(); | 444 | int cpu = smp_processor_id(); |
479 | struct timespec tp; | 445 | struct timespec tp; |
@@ -497,3 +463,47 @@ __init void xen_time_init(void) | |||
497 | xen_setup_timer(cpu); | 463 | xen_setup_timer(cpu); |
498 | xen_setup_cpu_clockevents(); | 464 | xen_setup_cpu_clockevents(); |
499 | } | 465 | } |
466 | |||
467 | __init void xen_init_time_ops(void) | ||
468 | { | ||
469 | pv_time_ops = xen_time_ops; | ||
470 | |||
471 | x86_init.timers.timer_init = xen_time_init; | ||
472 | x86_init.timers.setup_percpu_clockev = x86_init_noop; | ||
473 | x86_cpuinit.setup_percpu_clockev = x86_init_noop; | ||
474 | |||
475 | x86_platform.calibrate_tsc = xen_tsc_khz; | ||
476 | x86_platform.get_wallclock = xen_get_wallclock; | ||
477 | x86_platform.set_wallclock = xen_set_wallclock; | ||
478 | } | ||
479 | |||
480 | #ifdef CONFIG_XEN_PVHVM | ||
481 | static void xen_hvm_setup_cpu_clockevents(void) | ||
482 | { | ||
483 | int cpu = smp_processor_id(); | ||
484 | xen_setup_runstate_info(cpu); | ||
485 | xen_setup_timer(cpu); | ||
486 | xen_setup_cpu_clockevents(); | ||
487 | } | ||
488 | |||
489 | __init void xen_hvm_init_time_ops(void) | ||
490 | { | ||
491 | /* vector callback is needed otherwise we cannot receive interrupts | ||
492 | * on cpu > 0 */ | ||
493 | if (!xen_have_vector_callback && num_present_cpus() > 1) | ||
494 | return; | ||
495 | if (!xen_feature(XENFEAT_hvm_safe_pvclock)) { | ||
496 | printk(KERN_INFO "Xen doesn't support pvclock on HVM," | ||
497 | "disable pv timer\n"); | ||
498 | return; | ||
499 | } | ||
500 | |||
501 | pv_time_ops = xen_time_ops; | ||
502 | x86_init.timers.setup_percpu_clockev = xen_time_init; | ||
503 | x86_cpuinit.setup_percpu_clockev = xen_hvm_setup_cpu_clockevents; | ||
504 | |||
505 | x86_platform.calibrate_tsc = xen_tsc_khz; | ||
506 | x86_platform.get_wallclock = xen_get_wallclock; | ||
507 | x86_platform.set_wallclock = xen_set_wallclock; | ||
508 | } | ||
509 | #endif | ||
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index f9153a300bce..7c8ab86163e9 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h | |||
@@ -38,6 +38,10 @@ void xen_enable_sysenter(void); | |||
38 | void xen_enable_syscall(void); | 38 | void xen_enable_syscall(void); |
39 | void xen_vcpu_restore(void); | 39 | void xen_vcpu_restore(void); |
40 | 40 | ||
41 | void xen_callback_vector(void); | ||
42 | void xen_hvm_init_shared_info(void); | ||
43 | void __init xen_unplug_emulated_devices(void); | ||
44 | |||
41 | void __init xen_build_dynamic_phys_to_machine(void); | 45 | void __init xen_build_dynamic_phys_to_machine(void); |
42 | 46 | ||
43 | void xen_init_irq_ops(void); | 47 | void xen_init_irq_ops(void); |
@@ -46,11 +50,8 @@ void xen_setup_runstate_info(int cpu); | |||
46 | void xen_teardown_timer(int cpu); | 50 | void xen_teardown_timer(int cpu); |
47 | cycle_t xen_clocksource_read(void); | 51 | cycle_t xen_clocksource_read(void); |
48 | void xen_setup_cpu_clockevents(void); | 52 | void xen_setup_cpu_clockevents(void); |
49 | unsigned long xen_tsc_khz(void); | 53 | void __init xen_init_time_ops(void); |
50 | void __init xen_time_init(void); | 54 | void __init xen_hvm_init_time_ops(void); |
51 | unsigned long xen_get_wallclock(void); | ||
52 | int xen_set_wallclock(unsigned long time); | ||
53 | unsigned long long xen_sched_clock(void); | ||
54 | 55 | ||
55 | irqreturn_t xen_debug_interrupt(int irq, void *dev_id); | 56 | irqreturn_t xen_debug_interrupt(int irq, void *dev_id); |
56 | 57 | ||
@@ -101,4 +102,6 @@ void xen_sysret32(void); | |||
101 | void xen_sysret64(void); | 102 | void xen_sysret64(void); |
102 | void xen_adjust_exception_frame(void); | 103 | void xen_adjust_exception_frame(void); |
103 | 104 | ||
105 | extern int xen_panic_handler_init(void); | ||
106 | |||
104 | #endif /* XEN_OPS_H */ | 107 | #endif /* XEN_OPS_H */ |