aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/Kconfig24
-rw-r--r--arch/x86/boot/Makefile8
-rw-r--r--arch/x86/boot/boot.h28
-rw-r--r--arch/x86/boot/cmdline.c6
-rw-r--r--arch/x86/boot/compressed/Makefile4
-rw-r--r--arch/x86/boot/compressed/cmdline.c21
-rw-r--r--arch/x86/boot/compressed/early_serial_console.c5
-rw-r--r--arch/x86/boot/compressed/head_32.S13
-rw-r--r--arch/x86/boot/compressed/head_64.S13
-rw-r--r--arch/x86/boot/compressed/misc.c56
-rw-r--r--arch/x86/boot/compressed/misc.h39
-rw-r--r--arch/x86/boot/compressed/string.c2
-rw-r--r--arch/x86/boot/compressed/vmlinux.lds.S6
-rw-r--r--arch/x86/boot/ctype.h21
-rw-r--r--arch/x86/boot/early_serial_console.c139
-rw-r--r--arch/x86/boot/main.c9
-rw-r--r--arch/x86/boot/printf.c4
-rw-r--r--arch/x86/boot/string.c63
-rw-r--r--arch/x86/boot/tty.c37
-rw-r--r--arch/x86/configs/i386_defconfig2241
-rw-r--r--arch/x86/configs/x86_64_defconfig2208
-rw-r--r--arch/x86/ia32/ia32entry.S3
-rw-r--r--arch/x86/ia32/sys_ia32.c23
-rw-r--r--arch/x86/include/asm/Kbuild29
-rw-r--r--arch/x86/include/asm/acpi.h2
-rw-r--r--arch/x86/include/asm/alternative.h7
-rw-r--r--arch/x86/include/asm/apb_timer.h1
-rw-r--r--arch/x86/include/asm/bootparam.h11
-rw-r--r--arch/x86/include/asm/cmpxchg_32.h198
-rw-r--r--arch/x86/include/asm/cmpxchg_64.h83
-rw-r--r--arch/x86/include/asm/cpufeature.h43
-rw-r--r--arch/x86/include/asm/dma-mapping.h8
-rw-r--r--arch/x86/include/asm/highmem.h2
-rw-r--r--arch/x86/include/asm/hw_breakpoint.h2
-rw-r--r--arch/x86/include/asm/hypervisor.h1
-rw-r--r--arch/x86/include/asm/i387.h24
-rw-r--r--arch/x86/include/asm/irq_vectors.h3
-rw-r--r--arch/x86/include/asm/kdebug.h6
-rw-r--r--arch/x86/include/asm/kgdb.h20
-rw-r--r--arch/x86/include/asm/local64.h1
-rw-r--r--arch/x86/include/asm/mce.h4
-rw-r--r--arch/x86/include/asm/mrst.h26
-rw-r--r--arch/x86/include/asm/msr-index.h24
-rw-r--r--arch/x86/include/asm/msr.h4
-rw-r--r--arch/x86/include/asm/nmi.h2
-rw-r--r--arch/x86/include/asm/olpc_ofw.h31
-rw-r--r--arch/x86/include/asm/page.h7
-rw-r--r--arch/x86/include/asm/pci_x86.h1
-rw-r--r--arch/x86/include/asm/perf_event.h18
-rw-r--r--arch/x86/include/asm/perf_event_p4.h99
-rw-r--r--arch/x86/include/asm/pgtable_32.h1
-rw-r--r--arch/x86/include/asm/pgtable_64.h4
-rw-r--r--arch/x86/include/asm/processor.h21
-rw-r--r--arch/x86/include/asm/required-features.h2
-rw-r--r--arch/x86/include/asm/rwsem.h21
-rw-r--r--arch/x86/include/asm/scatterlist.h1
-rw-r--r--arch/x86/include/asm/setup.h2
-rw-r--r--arch/x86/include/asm/stacktrace.h49
-rw-r--r--arch/x86/include/asm/sys_ia32.h15
-rw-r--r--arch/x86/include/asm/syscalls.h5
-rw-r--r--arch/x86/include/asm/trampoline.h5
-rw-r--r--arch/x86/include/asm/unistd_32.h5
-rw-r--r--arch/x86/include/asm/unistd_64.h6
-rw-r--r--arch/x86/include/asm/uv/uv_bau.h151
-rw-r--r--arch/x86/include/asm/xen/hypercall.h6
-rw-r--r--arch/x86/include/asm/xen/page.h8
-rw-r--r--arch/x86/include/asm/xen/swiotlb-xen.h14
-rw-r--r--arch/x86/include/asm/xsave.h34
-rw-r--r--arch/x86/kernel/Makefile1
-rw-r--r--arch/x86/kernel/acpi/realmode/wakeup.S2
-rw-r--r--arch/x86/kernel/alternative.c1
-rw-r--r--arch/x86/kernel/amd_iommu.c8
-rw-r--r--arch/x86/kernel/apb_timer.c37
-rw-r--r--arch/x86/kernel/aperture_64.c4
-rw-r--r--arch/x86/kernel/apic/Makefile7
-rw-r--r--arch/x86/kernel/apic/apic.c2
-rw-r--r--arch/x86/kernel/apic/es7000_32.c1
-rw-r--r--arch/x86/kernel/apic/hw_nmi.c107
-rw-r--r--arch/x86/kernel/apic/io_apic.c4
-rw-r--r--arch/x86/kernel/apic/nmi.c7
-rw-r--r--arch/x86/kernel/apic/x2apic_uv_x.c4
-rw-r--r--arch/x86/kernel/cpu/Makefile4
-rw-r--r--arch/x86/kernel/cpu/amd.c77
-rw-r--r--arch/x86/kernel/cpu/common.c28
-rw-r--r--arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c2
-rw-r--r--arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c2
-rw-r--r--arch/x86/kernel/cpu/hypervisor.c3
-rw-r--r--arch/x86/kernel/cpu/intel_cacheinfo.c108
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce-apei.c4
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce.c34
-rw-r--r--arch/x86/kernel/cpu/mcheck/mce_intel.c9
-rw-r--r--arch/x86/kernel/cpu/mcheck/therm_throt.c206
-rw-r--r--arch/x86/kernel/cpu/mshyperv.c1
-rw-r--r--arch/x86/kernel/cpu/mtrr/cleanup.c6
-rw-r--r--arch/x86/kernel/cpu/mtrr/generic.c3
-rw-r--r--arch/x86/kernel/cpu/mtrr/main.c56
-rw-r--r--arch/x86/kernel/cpu/perf_event.c62
-rw-r--r--arch/x86/kernel/cpu/perf_event_intel.c81
-rw-r--r--arch/x86/kernel/cpu/perf_event_p4.c165
-rw-r--r--arch/x86/kernel/cpu/scattered.c63
-rw-r--r--arch/x86/kernel/cpu/topology.c (renamed from arch/x86/kernel/cpu/addon_cpuid_features.c)58
-rw-r--r--arch/x86/kernel/cpu/vmware.c9
-rw-r--r--arch/x86/kernel/crash.c3
-rw-r--r--arch/x86/kernel/dumpstack.c1
-rw-r--r--arch/x86/kernel/dumpstack.h56
-rw-r--r--arch/x86/kernel/dumpstack_32.c2
-rw-r--r--arch/x86/kernel/dumpstack_64.c1
-rw-r--r--arch/x86/kernel/entry_32.S16
-rw-r--r--arch/x86/kernel/entry_64.S13
-rw-r--r--arch/x86/kernel/head_32.S14
-rw-r--r--arch/x86/kernel/head_64.S5
-rw-r--r--arch/x86/kernel/hpet.c15
-rw-r--r--arch/x86/kernel/hw_breakpoint.c51
-rw-r--r--arch/x86/kernel/i387.c39
-rw-r--r--arch/x86/kernel/kgdb.c191
-rw-r--r--arch/x86/kernel/kprobes.c58
-rw-r--r--arch/x86/kernel/mpparse.c16
-rw-r--r--arch/x86/kernel/mrst.c105
-rw-r--r--arch/x86/kernel/olpc.c20
-rw-r--r--arch/x86/kernel/olpc_ofw.c106
-rw-r--r--arch/x86/kernel/pci-dma.c7
-rw-r--r--arch/x86/kernel/process.c50
-rw-r--r--arch/x86/kernel/process_32.c4
-rw-r--r--arch/x86/kernel/process_64.c5
-rw-r--r--arch/x86/kernel/setup.c8
-rw-r--r--arch/x86/kernel/smpboot.c66
-rw-r--r--arch/x86/kernel/stacktrace.c31
-rw-r--r--arch/x86/kernel/sys_i386_32.c4
-rw-r--r--arch/x86/kernel/syscall_table_32.S3
-rw-r--r--arch/x86/kernel/tlb_uv.c760
-rw-r--r--arch/x86/kernel/trampoline.c18
-rw-r--r--arch/x86/kernel/traps.c7
-rw-r--r--arch/x86/kernel/tsc.c5
-rw-r--r--arch/x86/kernel/verify_cpu_64.S3
-rw-r--r--arch/x86/kernel/vsyscall_64.c17
-rw-r--r--arch/x86/kernel/xsave.c195
-rw-r--r--arch/x86/kvm/mmu.c6
-rw-r--r--arch/x86/kvm/svm.c9
-rw-r--r--arch/x86/kvm/vmx.c8
-rw-r--r--arch/x86/kvm/x86.c2
-rw-r--r--arch/x86/lib/Makefile1
-rw-r--r--arch/x86/lib/atomic64_386_32.S238
-rw-r--r--arch/x86/lib/clear_page_64.S2
-rw-r--r--arch/x86/lib/cmpxchg.c (renamed from arch/x86/kernel/cpu/cmpxchg.c)18
-rw-r--r--arch/x86/lib/copy_page_64.S2
-rw-r--r--arch/x86/lib/copy_user_64.S2
-rw-r--r--arch/x86/lib/memcpy_64.S2
-rw-r--r--arch/x86/lib/memset_64.S2
-rw-r--r--arch/x86/mm/dump_pagetables.c32
-rw-r--r--arch/x86/mm/fault.c4
-rw-r--r--arch/x86/mm/highmem_32.c4
-rw-r--r--arch/x86/mm/ioremap.c14
-rw-r--r--arch/x86/mm/kmmio.c16
-rw-r--r--arch/x86/mm/pat.c2
-rw-r--r--arch/x86/mm/pf_in.c30
-rw-r--r--arch/x86/mm/testmmiotrace.c22
-rw-r--r--arch/x86/mm/tlb.c4
-rw-r--r--arch/x86/oprofile/nmi_int.c17
-rw-r--r--arch/x86/pci/acpi.c9
-rw-r--r--arch/x86/pci/common.c20
-rw-r--r--arch/x86/pci/irq.c6
-rw-r--r--arch/x86/pci/legacy.c2
-rw-r--r--arch/x86/vdso/Makefile3
-rwxr-xr-xarch/x86/vdso/checkundef.sh10
-rw-r--r--arch/x86/vdso/vdso32-setup.c2
-rw-r--r--arch/x86/vdso/vma.c3
-rw-r--r--arch/x86/xen/Kconfig5
-rw-r--r--arch/x86/xen/Makefile3
-rw-r--r--arch/x86/xen/enlighten.c201
-rw-r--r--arch/x86/xen/mmu.c328
-rw-r--r--arch/x86/xen/mmu.h1
-rw-r--r--arch/x86/xen/pci-swiotlb-xen.c58
-rw-r--r--arch/x86/xen/platform-pci-unplug.c137
-rw-r--r--arch/x86/xen/setup.c72
-rw-r--r--arch/x86/xen/smp.c2
-rw-r--r--arch/x86/xen/suspend.c12
-rw-r--r--arch/x86/xen/time.c96
-rw-r--r--arch/x86/xen/xen-ops.h13
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
75config GENERIC_TIME
76 def_bool y
77
78config GENERIC_CMOS_UPDATE 76config GENERIC_CMOS_UPDATE
79 def_bool y 77 def_bool y
80 78
@@ -247,6 +245,11 @@ config ARCH_HWEIGHT_CFLAGS
247 245
248config KTIME_SCALAR 246config KTIME_SCALAR
249 def_bool X86_32 247 def_bool X86_32
248
249config ARCH_CPU_PROBE_RELEASE
250 def_bool y
251 depends on HOTPLUG_CPU
252
250source "init/Kconfig" 253source "init/Kconfig"
251source "kernel/Kconfig.freezer" 254source "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
753config MAXSMP 756config 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
761config NR_CPUS 764config NR_CPUS
@@ -2046,7 +2049,7 @@ config SCx200
2046 2049
2047config SCx200HR_TIMER 2050config 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
2068config 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
2065endif # X86_32 2077endif # X86_32
2066 2078
2067config K8_NB 2079config 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
26targets += fdimage fdimage144 fdimage288 image.iso mtools.conf 26targets += fdimage fdimage144 fdimage288 image.iso mtools.conf
27subdir- := compressed 27subdir- := compressed
28 28
29setup-y += a20.o bioscall.o cmdline.o copy.o cpu.o cpucheck.o edd.o 29setup-y += a20.o bioscall.o cmdline.o copy.o cpu.o cpucheck.o
30setup-y += header.o main.o mca.o memory.o pm.o pmjump.o 30setup-y += early_serial_console.o edd.o header.o main.o mca.o memory.o
31setup-y += printf.o regs.o string.o tty.o video.o video-mode.o 31setup-y += pm.o pmjump.o printf.o regs.o string.o tty.o video.o
32setup-y += version.o 32setup-y += video-mode.o version.o
33setup-$(CONFIG_X86_APM_BOOT) += apm.o 33setup-$(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 @@
37extern struct setup_header hdr; 38extern struct setup_header hdr;
38extern struct boot_params boot_params; 39extern 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 */
41static inline void outb(u8 v, u16 port) 44static 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
201static 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. */
207extern char _end[]; 205extern char _end[];
208extern char *HEAP; 206extern char *HEAP;
@@ -287,8 +285,18 @@ struct biosregs {
287void intcall(u8 int_no, const struct biosregs *ireg, struct biosregs *oreg); 285void intcall(u8 int_no, const struct biosregs *ireg, struct biosregs *oreg);
288 286
289/* cmdline.c */ 287/* cmdline.c */
290int cmdline_find_option(const char *option, char *buffer, int bufsize); 288int __cmdline_find_option(u32 cmdline_ptr, const char *option, char *buffer, int bufsize);
291int cmdline_find_option_bool(const char *option); 289int __cmdline_find_option_bool(u32 cmdline_ptr, const char *option);
290static 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
295static 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 */
294struct cpu_features { 302struct cpu_features {
@@ -300,6 +308,10 @@ extern struct cpu_features cpu;
300int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr); 308int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr);
301int validate_cpu(void); 309int validate_cpu(void);
302 310
311/* early_serial_console.c */
312extern int early_serial_base;
313void console_init(void);
314
303/* edd.c */ 315/* edd.c */
304void query_edd(void); 316void query_edd(void);
305 317
@@ -329,8 +341,10 @@ void initregs(struct biosregs *regs);
329 341
330/* string.c */ 342/* string.c */
331int strcmp(const char *str1, const char *str2); 343int strcmp(const char *str1, const char *str2);
344int strncmp(const char *cs, const char *ct, size_t count);
332size_t strnlen(const char *s, size_t maxlen); 345size_t strnlen(const char *s, size_t maxlen);
333unsigned int atou(const char *s); 346unsigned int atou(const char *s);
347unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base);
334 348
335/* tty.c */ 349/* tty.c */
336void puts(const char *); 350void 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 */
30int cmdline_find_option(const char *option, char *buffer, int bufsize) 30int __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 */
103int cmdline_find_option_bool(const char *option) 102int __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
7targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o piggy.o 7targets := 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
9KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 9KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2
10KBUILD_CFLAGS += -fno-strict-aliasing -fPIC 10KBUILD_CFLAGS += -fno-strict-aliasing -fPIC
@@ -23,7 +23,7 @@ LDFLAGS_vmlinux := -T
23 23
24hostprogs-y := mkpiggy 24hostprogs-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
3static unsigned long fs;
4static inline void set_fs(unsigned long seg)
5{
6 fs = seg << 4; /* shift it back */
7}
8typedef unsigned long addr_t;
9static inline char rdfs8(addr_t addr)
10{
11 return *((char *)(fs + addr));
12}
13#include "../cmdline.c"
14int 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}
18int 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
3int 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
1311:
132 cmpl %ecx, %edx
133 jae 2f
134 addl %ebx, (%edx)
135 addl $4, %edx
136 jmp 1b
1372:
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
2871:
288 cmpq %rcx, %rdx
289 jae 2f
290 addq %rbx, (%rdx)
291 addq $8, %rdx
292 jmp 1b
2932:
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 */
126static struct boot_params *real_mode; /* Pointer to real-mode data */ 110struct boot_params *real_mode; /* Pointer to real-mode data */
127static int quiet; 111static int quiet;
112static int debug;
128 113
129void *memset(void *s, int c, size_t n); 114void *memset(void *s, int c, size_t n);
130void *memcpy(void *dest, const void *src, size_t n); 115void *memcpy(void *dest, const void *src, size_t n);
131 116
132static 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
173static 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 */
159static 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
169void __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 */
26extern struct boot_params *real_mode; /* Pointer to real-mode data */
27void __putstr(int error, const char *s);
28#define putstr(__x) __putstr(0, __x)
29#define puts(__x) __putstr(0, __x)
30
31/* cmdline.c */
32int cmdline_find_option(const char *option, char *buffer, int bufsize);
33int cmdline_find_option_bool(const char *option);
34
35/* early_serial_console.c */
36extern int early_serial_base;
37void 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
5static inline int isdigit(int ch)
6{
7 return (ch >= '0') && (ch <= '9');
8}
9
10static 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
23static 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
43static 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)
87static 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
102static 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
133void 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) ({ \
38int __res; \ 38int __res; \
39__res = ((unsigned long) n) % (unsigned) base; \ 39__res = ((unsigned long) n) % (unsigned) base; \
40n = ((unsigned long) n) / (unsigned) base; \ 40n = ((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
33int 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
33size_t strnlen(const char *s, size_t maxlen) 49size_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
71static 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
90unsigned 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
18int 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
24void __attribute__((section(".inittext"))) putchar(int ch) 30static 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
40static 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
52void __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
39void __attribute__((section(".inittext"))) puts(const char *str) 63void __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
7CONFIG_X86_32=y
8# CONFIG_X86_64 is not set
9CONFIG_X86=y
10CONFIG_OUTPUT_FORMAT="elf32-i386"
11CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
12CONFIG_GENERIC_TIME=y
13CONFIG_GENERIC_CMOS_UPDATE=y
14CONFIG_CLOCKSOURCE_WATCHDOG=y
15CONFIG_GENERIC_CLOCKEVENTS=y
16CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
17CONFIG_LOCKDEP_SUPPORT=y
18CONFIG_STACKTRACE_SUPPORT=y
19CONFIG_HAVE_LATENCYTOP_SUPPORT=y
20CONFIG_FAST_CMPXCHG_LOCAL=y
21CONFIG_MMU=y
22CONFIG_ZONE_DMA=y
23CONFIG_GENERIC_ISA_DMA=y
24CONFIG_GENERIC_IOMAP=y
25CONFIG_GENERIC_BUG=y
26CONFIG_GENERIC_HWEIGHT=y
27CONFIG_ARCH_MAY_HAVE_PC_FDC=y
28# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
29CONFIG_RWSEM_XCHGADD_ALGORITHM=y
30CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
31CONFIG_GENERIC_CALIBRATE_DELAY=y
32# CONFIG_GENERIC_TIME_VSYSCALL is not set
33CONFIG_ARCH_HAS_CPU_RELAX=y
34CONFIG_ARCH_HAS_DEFAULT_IDLE=y
35CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
36CONFIG_HAVE_SETUP_PER_CPU_AREA=y
37CONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y
38# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
39CONFIG_ARCH_HIBERNATION_POSSIBLE=y
40CONFIG_ARCH_SUSPEND_POSSIBLE=y
41# CONFIG_ZONE_DMA32 is not set
42CONFIG_ARCH_POPULATES_NODE_MAP=y
43# CONFIG_AUDIT_ARCH is not set
44CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
45CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
46CONFIG_GENERIC_HARDIRQS=y
47CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
48CONFIG_GENERIC_IRQ_PROBE=y
49CONFIG_GENERIC_PENDING_IRQ=y
50CONFIG_USE_GENERIC_SMP_HELPERS=y
51CONFIG_X86_32_SMP=y
52CONFIG_X86_HT=y
53CONFIG_X86_TRAMPOLINE=y
54CONFIG_X86_32_LAZY_GS=y
55CONFIG_KTIME_SCALAR=y
56CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
57
58#
59# General setup
60#
61CONFIG_EXPERIMENTAL=y 1CONFIG_EXPERIMENTAL=y
62CONFIG_LOCK_KERNEL=y
63CONFIG_INIT_ENV_ARG_LIMIT=32
64CONFIG_LOCALVERSION=""
65# CONFIG_LOCALVERSION_AUTO is not set 2# CONFIG_LOCALVERSION_AUTO is not set
66CONFIG_HAVE_KERNEL_GZIP=y
67CONFIG_HAVE_KERNEL_BZIP2=y
68CONFIG_HAVE_KERNEL_LZMA=y
69CONFIG_KERNEL_GZIP=y
70# CONFIG_KERNEL_BZIP2 is not set
71# CONFIG_KERNEL_LZMA is not set
72CONFIG_SWAP=y
73CONFIG_SYSVIPC=y 3CONFIG_SYSVIPC=y
74CONFIG_SYSVIPC_SYSCTL=y
75CONFIG_POSIX_MQUEUE=y 4CONFIG_POSIX_MQUEUE=y
76CONFIG_POSIX_MQUEUE_SYSCTL=y
77CONFIG_BSD_PROCESS_ACCT=y 5CONFIG_BSD_PROCESS_ACCT=y
78# CONFIG_BSD_PROCESS_ACCT_V3 is not set
79CONFIG_TASKSTATS=y 6CONFIG_TASKSTATS=y
80CONFIG_TASK_DELAY_ACCT=y 7CONFIG_TASK_DELAY_ACCT=y
81CONFIG_TASK_XACCT=y 8CONFIG_TASK_XACCT=y
82CONFIG_TASK_IO_ACCOUNTING=y 9CONFIG_TASK_IO_ACCOUNTING=y
83CONFIG_AUDIT=y 10CONFIG_AUDIT=y
84CONFIG_AUDITSYSCALL=y
85CONFIG_AUDIT_TREE=y
86
87#
88# RCU Subsystem
89#
90# CONFIG_CLASSIC_RCU is not set
91CONFIG_TREE_RCU=y
92# CONFIG_PREEMPT_RCU is not set
93# CONFIG_RCU_TRACE is not set
94CONFIG_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
99CONFIG_LOG_BUF_SHIFT=18 11CONFIG_LOG_BUF_SHIFT=18
100CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
101CONFIG_GROUP_SCHED=y
102CONFIG_FAIR_GROUP_SCHED=y
103# CONFIG_RT_GROUP_SCHED is not set
104# CONFIG_USER_SCHED is not set
105CONFIG_CGROUP_SCHED=y
106CONFIG_CGROUPS=y 12CONFIG_CGROUPS=y
107# CONFIG_CGROUP_DEBUG is not set
108CONFIG_CGROUP_NS=y 13CONFIG_CGROUP_NS=y
109CONFIG_CGROUP_FREEZER=y 14CONFIG_CGROUP_FREEZER=y
110# CONFIG_CGROUP_DEVICE is not set
111CONFIG_CPUSETS=y 15CONFIG_CPUSETS=y
112CONFIG_PROC_PID_CPUSET=y
113CONFIG_CGROUP_CPUACCT=y 16CONFIG_CGROUP_CPUACCT=y
114CONFIG_RESOURCE_COUNTERS=y 17CONFIG_RESOURCE_COUNTERS=y
115# CONFIG_CGROUP_MEM_RES_CTLR is not set 18CONFIG_CGROUP_SCHED=y
116# CONFIG_SYSFS_DEPRECATED_V2 is not set
117CONFIG_RELAY=y
118CONFIG_NAMESPACES=y
119CONFIG_UTS_NS=y 19CONFIG_UTS_NS=y
120CONFIG_IPC_NS=y 20CONFIG_IPC_NS=y
121CONFIG_USER_NS=y 21CONFIG_USER_NS=y
122CONFIG_PID_NS=y 22CONFIG_PID_NS=y
123CONFIG_NET_NS=y 23CONFIG_NET_NS=y
124CONFIG_BLK_DEV_INITRD=y 24CONFIG_BLK_DEV_INITRD=y
125CONFIG_INITRAMFS_SOURCE=""
126CONFIG_RD_GZIP=y
127CONFIG_RD_BZIP2=y
128CONFIG_RD_LZMA=y
129CONFIG_CC_OPTIMIZE_FOR_SIZE=y
130CONFIG_SYSCTL=y
131CONFIG_ANON_INODES=y
132# CONFIG_EMBEDDED is not set
133CONFIG_UID16=y
134CONFIG_SYSCTL_SYSCALL=y
135CONFIG_KALLSYMS=y
136CONFIG_KALLSYMS_ALL=y
137CONFIG_KALLSYMS_EXTRA_PASS=y 25CONFIG_KALLSYMS_EXTRA_PASS=y
138# CONFIG_STRIP_ASM_SYMS is not set
139CONFIG_HOTPLUG=y
140CONFIG_PRINTK=y
141CONFIG_BUG=y
142CONFIG_ELF_CORE=y
143CONFIG_PCSPKR_PLATFORM=y
144CONFIG_BASE_FULL=y
145CONFIG_FUTEX=y
146CONFIG_EPOLL=y
147CONFIG_SIGNALFD=y
148CONFIG_TIMERFD=y
149CONFIG_EVENTFD=y
150CONFIG_SHMEM=y
151CONFIG_AIO=y
152CONFIG_VM_EVENT_COUNTERS=y
153CONFIG_PCI_QUIRKS=y
154CONFIG_SLUB_DEBUG=y
155# CONFIG_COMPAT_BRK is not set 26# CONFIG_COMPAT_BRK is not set
156# CONFIG_SLAB is not set
157CONFIG_SLUB=y
158# CONFIG_SLOB is not set
159CONFIG_PROFILING=y 27CONFIG_PROFILING=y
160CONFIG_TRACEPOINTS=y
161CONFIG_MARKERS=y
162# CONFIG_OPROFILE is not set
163CONFIG_HAVE_OPROFILE=y
164CONFIG_KPROBES=y 28CONFIG_KPROBES=y
165CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
166CONFIG_KRETPROBES=y
167CONFIG_HAVE_IOREMAP_PROT=y
168CONFIG_HAVE_KPROBES=y
169CONFIG_HAVE_KRETPROBES=y
170CONFIG_HAVE_ARCH_TRACEHOOK=y
171CONFIG_HAVE_DMA_API_DEBUG=y
172# CONFIG_SLOW_WORK is not set
173CONFIG_HAVE_GENERIC_DMA_COHERENT=y
174CONFIG_SLABINFO=y
175CONFIG_RT_MUTEXES=y
176CONFIG_BASE_SMALL=0
177CONFIG_MODULES=y 29CONFIG_MODULES=y
178# CONFIG_MODULE_FORCE_LOAD is not set
179CONFIG_MODULE_UNLOAD=y 30CONFIG_MODULE_UNLOAD=y
180CONFIG_MODULE_FORCE_UNLOAD=y 31CONFIG_MODULE_FORCE_UNLOAD=y
181# CONFIG_MODVERSIONS is not set
182# CONFIG_MODULE_SRCVERSION_ALL is not set
183CONFIG_STOP_MACHINE=y
184CONFIG_BLOCK=y
185# CONFIG_LBD is not set
186CONFIG_BLK_DEV_BSG=y
187# CONFIG_BLK_DEV_INTEGRITY is not set
188
189#
190# IO Schedulers
191#
192CONFIG_IOSCHED_NOOP=y
193CONFIG_IOSCHED_AS=y
194CONFIG_IOSCHED_DEADLINE=y
195CONFIG_IOSCHED_CFQ=y
196# CONFIG_DEFAULT_AS is not set
197# CONFIG_DEFAULT_DEADLINE is not set
198CONFIG_DEFAULT_CFQ=y
199# CONFIG_DEFAULT_NOOP is not set
200CONFIG_DEFAULT_IOSCHED="cfq"
201CONFIG_FREEZER=y
202
203#
204# Processor type and features
205#
206CONFIG_TICK_ONESHOT=y
207CONFIG_NO_HZ=y 32CONFIG_NO_HZ=y
208CONFIG_HIGH_RES_TIMERS=y 33CONFIG_HIGH_RES_TIMERS=y
209CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
210CONFIG_SMP=y 34CONFIG_SMP=y
211CONFIG_SPARSE_IRQ=y 35CONFIG_SPARSE_IRQ=y
212CONFIG_X86_MPPARSE=y
213# CONFIG_X86_BIGSMP is not set
214CONFIG_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
218CONFIG_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
226CONFIG_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
246CONFIG_X86_GENERIC=y 36CONFIG_X86_GENERIC=y
247CONFIG_X86_CPU=y
248CONFIG_X86_L1_CACHE_BYTES=64
249CONFIG_X86_INTERNODE_CACHE_BYTES=64
250CONFIG_X86_CMPXCHG=y
251CONFIG_X86_L1_CACHE_SHIFT=5
252CONFIG_X86_XADD=y
253# CONFIG_X86_PPRO_FENCE is not set
254CONFIG_X86_WP_WORKS_OK=y
255CONFIG_X86_INVLPG=y
256CONFIG_X86_BSWAP=y
257CONFIG_X86_POPAD_OK=y
258CONFIG_X86_INTEL_USERCOPY=y
259CONFIG_X86_USE_PPRO_CHECKSUM=y
260CONFIG_X86_TSC=y
261CONFIG_X86_CMOV=y
262CONFIG_X86_MINIMUM_CPU_FAMILY=4
263CONFIG_X86_DEBUGCTLMSR=y
264CONFIG_CPU_SUP_INTEL=y
265CONFIG_CPU_SUP_CYRIX_32=y
266CONFIG_CPU_SUP_AMD=y
267CONFIG_CPU_SUP_CENTAUR=y
268CONFIG_CPU_SUP_TRANSMETA_32=y
269CONFIG_CPU_SUP_UMC_32=y
270CONFIG_X86_DS=y
271CONFIG_X86_PTRACE_BTS=y
272CONFIG_HPET_TIMER=y 37CONFIG_HPET_TIMER=y
273CONFIG_HPET_EMULATE_RTC=y
274CONFIG_DMI=y
275# CONFIG_IOMMU_HELPER is not set
276# CONFIG_IOMMU_API is not set
277CONFIG_NR_CPUS=64
278CONFIG_SCHED_SMT=y 38CONFIG_SCHED_SMT=y
279CONFIG_SCHED_MC=y
280# CONFIG_PREEMPT_NONE is not set
281CONFIG_PREEMPT_VOLUNTARY=y 39CONFIG_PREEMPT_VOLUNTARY=y
282# CONFIG_PREEMPT is not set
283CONFIG_X86_LOCAL_APIC=y
284CONFIG_X86_IO_APIC=y
285CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y 40CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
286CONFIG_X86_MCE=y 41CONFIG_X86_MCE=y
287CONFIG_X86_MCE_NONFATAL=y
288CONFIG_X86_MCE_P4THERMAL=y
289CONFIG_VM86=y
290# CONFIG_TOSHIBA is not set
291# CONFIG_I8K is not set
292CONFIG_X86_REBOOTFIXUPS=y 42CONFIG_X86_REBOOTFIXUPS=y
293CONFIG_MICROCODE=y 43CONFIG_MICROCODE=y
294CONFIG_MICROCODE_INTEL=y
295CONFIG_MICROCODE_AMD=y 44CONFIG_MICROCODE_AMD=y
296CONFIG_MICROCODE_OLD_INTERFACE=y
297CONFIG_X86_MSR=y 45CONFIG_X86_MSR=y
298CONFIG_X86_CPUID=y 46CONFIG_X86_CPUID=y
299# CONFIG_X86_CPU_DEBUG is not set
300# CONFIG_NOHIGHMEM is not set
301CONFIG_HIGHMEM4G=y
302# CONFIG_HIGHMEM64G is not set
303CONFIG_PAGE_OFFSET=0xC0000000
304CONFIG_HIGHMEM=y
305# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
306CONFIG_ARCH_FLATMEM_ENABLE=y
307CONFIG_ARCH_SPARSEMEM_ENABLE=y
308CONFIG_ARCH_SELECT_MEMORY_MODEL=y
309CONFIG_SELECT_MEMORY_MODEL=y
310CONFIG_FLATMEM_MANUAL=y
311# CONFIG_DISCONTIGMEM_MANUAL is not set
312# CONFIG_SPARSEMEM_MANUAL is not set
313CONFIG_FLATMEM=y
314CONFIG_FLAT_NODE_MEM_MAP=y
315CONFIG_SPARSEMEM_STATIC=y
316CONFIG_PAGEFLAGS_EXTENDED=y
317CONFIG_SPLIT_PTLOCK_CPUS=4
318# CONFIG_PHYS_ADDR_T_64BIT is not set
319CONFIG_ZONE_DMA_FLAG=1
320CONFIG_BOUNCE=y
321CONFIG_VIRT_TO_BUS=y
322CONFIG_UNEVICTABLE_LRU=y
323CONFIG_HAVE_MLOCK=y
324CONFIG_HAVE_MLOCKED_PAGE_BIT=y
325CONFIG_HIGHPTE=y 47CONFIG_HIGHPTE=y
326CONFIG_X86_CHECK_BIOS_CORRUPTION=y 48CONFIG_X86_CHECK_BIOS_CORRUPTION=y
327CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
328CONFIG_X86_RESERVE_LOW_64K=y
329# CONFIG_MATH_EMULATION is not set
330CONFIG_MTRR=y
331# CONFIG_MTRR_SANITIZER is not set 49# CONFIG_MTRR_SANITIZER is not set
332CONFIG_X86_PAT=y
333CONFIG_EFI=y 50CONFIG_EFI=y
334CONFIG_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
339CONFIG_HZ_1000=y 51CONFIG_HZ_1000=y
340CONFIG_HZ=1000
341CONFIG_SCHED_HRTICK=y
342CONFIG_KEXEC=y 52CONFIG_KEXEC=y
343CONFIG_CRASH_DUMP=y 53CONFIG_CRASH_DUMP=y
344# CONFIG_KEXEC_JUMP is not set
345CONFIG_PHYSICAL_START=0x1000000
346CONFIG_RELOCATABLE=y
347CONFIG_X86_NEED_RELOCS=y
348CONFIG_PHYSICAL_ALIGN=0x1000000
349CONFIG_HOTPLUG_CPU=y
350# CONFIG_COMPAT_VDSO is not set 54# CONFIG_COMPAT_VDSO is not set
351# CONFIG_CMDLINE_BOOL is not set
352CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
353
354#
355# Power management and ACPI options
356#
357CONFIG_PM=y 55CONFIG_PM=y
358CONFIG_PM_DEBUG=y 56CONFIG_PM_DEBUG=y
359# CONFIG_PM_VERBOSE is not set
360CONFIG_CAN_PM_TRACE=y
361CONFIG_PM_TRACE=y
362CONFIG_PM_TRACE_RTC=y 57CONFIG_PM_TRACE_RTC=y
363CONFIG_PM_SLEEP_SMP=y
364CONFIG_PM_SLEEP=y
365CONFIG_SUSPEND=y
366# CONFIG_PM_TEST_SUSPEND is not set
367CONFIG_SUSPEND_FREEZER=y
368CONFIG_HIBERNATION=y 58CONFIG_HIBERNATION=y
369CONFIG_PM_STD_PARTITION=""
370CONFIG_ACPI=y
371CONFIG_ACPI_SLEEP=y
372CONFIG_ACPI_PROCFS=y 59CONFIG_ACPI_PROCFS=y
373CONFIG_ACPI_PROCFS_POWER=y
374CONFIG_ACPI_SYSFS_POWER=y
375CONFIG_ACPI_PROC_EVENT=y
376CONFIG_ACPI_AC=y
377CONFIG_ACPI_BATTERY=y
378CONFIG_ACPI_BUTTON=y
379CONFIG_ACPI_FAN=y
380CONFIG_ACPI_DOCK=y 60CONFIG_ACPI_DOCK=y
381CONFIG_ACPI_PROCESSOR=y
382CONFIG_ACPI_HOTPLUG_CPU=y
383CONFIG_ACPI_THERMAL=y
384# CONFIG_ACPI_CUSTOM_DSDT is not set
385CONFIG_ACPI_BLACKLIST_YEAR=0
386# CONFIG_ACPI_DEBUG is not set
387# CONFIG_ACPI_PCI_SLOT is not set
388CONFIG_X86_PM_TIMER=y
389CONFIG_ACPI_CONTAINER=y
390# CONFIG_ACPI_SBS is not set
391# CONFIG_APM is not set
392
393#
394# CPU Frequency scaling
395#
396CONFIG_CPU_FREQ=y 61CONFIG_CPU_FREQ=y
397CONFIG_CPU_FREQ_TABLE=y
398CONFIG_CPU_FREQ_DEBUG=y 62CONFIG_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
402CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y 64CONFIG_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
405CONFIG_CPU_FREQ_GOV_PERFORMANCE=y 65CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
406# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
407CONFIG_CPU_FREQ_GOV_USERSPACE=y
408CONFIG_CPU_FREQ_GOV_ONDEMAND=y 66CONFIG_CPU_FREQ_GOV_ONDEMAND=y
409# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
410
411#
412# CPUFreq processor drivers
413#
414CONFIG_X86_ACPI_CPUFREQ=y 67CONFIG_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
432CONFIG_CPU_IDLE=y
433CONFIG_CPU_IDLE_GOV_LADDER=y
434CONFIG_CPU_IDLE_GOV_MENU=y
435
436#
437# Bus options (PCI etc.)
438#
439CONFIG_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
444CONFIG_PCI_GOANY=y
445CONFIG_PCI_BIOS=y
446CONFIG_PCI_DIRECT=y
447CONFIG_PCI_MMCONFIG=y
448CONFIG_PCI_DOMAINS=y
449# CONFIG_DMAR is not set
450CONFIG_PCIEPORTBUS=y 68CONFIG_PCIEPORTBUS=y
451# CONFIG_HOTPLUG_PCI_PCIE is not set
452CONFIG_PCIEAER=y
453# CONFIG_PCIEASPM is not set
454CONFIG_ARCH_SUPPORTS_MSI=y
455CONFIG_PCI_MSI=y 69CONFIG_PCI_MSI=y
456# CONFIG_PCI_LEGACY is not set
457# CONFIG_PCI_DEBUG is not set
458# CONFIG_PCI_STUB is not set
459CONFIG_HT_IRQ=y
460# CONFIG_PCI_IOV is not set
461CONFIG_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
466CONFIG_K8_NB=y
467CONFIG_PCCARD=y 70CONFIG_PCCARD=y
468# CONFIG_PCMCIA_DEBUG is not set
469CONFIG_PCMCIA=y
470CONFIG_PCMCIA_LOAD_CIS=y
471CONFIG_PCMCIA_IOCTL=y
472CONFIG_CARDBUS=y
473
474#
475# PC-card bridges
476#
477CONFIG_YENTA=y 71CONFIG_YENTA=y
478CONFIG_YENTA_O2=y
479CONFIG_YENTA_RICOH=y
480CONFIG_YENTA_TI=y
481CONFIG_YENTA_ENE_TUNE=y
482CONFIG_YENTA_TOSHIBA=y
483# CONFIG_PD6729 is not set
484# CONFIG_I82092 is not set
485CONFIG_PCCARD_NONSTATIC=y
486CONFIG_HOTPLUG_PCI=y 72CONFIG_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#
496CONFIG_BINFMT_ELF=y
497CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y 73CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
498CONFIG_HAVE_AOUT=y
499# CONFIG_BINFMT_AOUT is not set
500CONFIG_BINFMT_MISC=y 74CONFIG_BINFMT_MISC=y
501CONFIG_HAVE_ATOMIC_IOMAP=y
502CONFIG_NET=y 75CONFIG_NET=y
503
504#
505# Networking options
506#
507CONFIG_PACKET=y 76CONFIG_PACKET=y
508CONFIG_PACKET_MMAP=y
509CONFIG_UNIX=y 77CONFIG_UNIX=y
510CONFIG_XFRM=y
511CONFIG_XFRM_USER=y 78CONFIG_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
516CONFIG_INET=y 79CONFIG_INET=y
517CONFIG_IP_MULTICAST=y 80CONFIG_IP_MULTICAST=y
518CONFIG_IP_ADVANCED_ROUTER=y 81CONFIG_IP_ADVANCED_ROUTER=y
519CONFIG_ASK_IP_FIB_HASH=y
520# CONFIG_IP_FIB_TRIE is not set
521CONFIG_IP_FIB_HASH=y
522CONFIG_IP_MULTIPLE_TABLES=y 82CONFIG_IP_MULTIPLE_TABLES=y
523CONFIG_IP_ROUTE_MULTIPATH=y 83CONFIG_IP_ROUTE_MULTIPATH=y
524CONFIG_IP_ROUTE_VERBOSE=y 84CONFIG_IP_ROUTE_VERBOSE=y
@@ -526,118 +86,46 @@ CONFIG_IP_PNP=y
526CONFIG_IP_PNP_DHCP=y 86CONFIG_IP_PNP_DHCP=y
527CONFIG_IP_PNP_BOOTP=y 87CONFIG_IP_PNP_BOOTP=y
528CONFIG_IP_PNP_RARP=y 88CONFIG_IP_PNP_RARP=y
529# CONFIG_NET_IPIP is not set
530# CONFIG_NET_IPGRE is not set
531CONFIG_IP_MROUTE=y 89CONFIG_IP_MROUTE=y
532CONFIG_IP_PIMSM_V1=y 90CONFIG_IP_PIMSM_V1=y
533CONFIG_IP_PIMSM_V2=y 91CONFIG_IP_PIMSM_V2=y
534# CONFIG_ARPD is not set
535CONFIG_SYN_COOKIES=y 92CONFIG_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
540CONFIG_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
544CONFIG_INET_LRO=y
545# CONFIG_INET_DIAG is not set 96# CONFIG_INET_DIAG is not set
546CONFIG_TCP_CONG_ADVANCED=y 97CONFIG_TCP_CONG_ADVANCED=y
547# CONFIG_TCP_CONG_BIC is not set 98# CONFIG_TCP_CONG_BIC is not set
548CONFIG_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
560CONFIG_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
565CONFIG_DEFAULT_TCP_CONG="cubic"
566CONFIG_TCP_MD5SIG=y 101CONFIG_TCP_MD5SIG=y
567CONFIG_IPV6=y 102CONFIG_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
571CONFIG_INET6_AH=y 103CONFIG_INET6_AH=y
572CONFIG_INET6_ESP=y 104CONFIG_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
577CONFIG_INET6_XFRM_MODE_TRANSPORT=y
578CONFIG_INET6_XFRM_MODE_TUNNEL=y
579CONFIG_INET6_XFRM_MODE_BEET=y
580# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
581CONFIG_IPV6_SIT=y
582CONFIG_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
586CONFIG_NETLABEL=y 105CONFIG_NETLABEL=y
587CONFIG_NETWORK_SECMARK=y
588CONFIG_NETFILTER=y 106CONFIG_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#
595CONFIG_NETFILTER_NETLINK=y
596CONFIG_NETFILTER_NETLINK_LOG=y
597CONFIG_NF_CONNTRACK=y 108CONFIG_NF_CONNTRACK=y
598CONFIG_NF_CONNTRACK_SECMARK=y
599CONFIG_NF_CONNTRACK_FTP=y 109CONFIG_NF_CONNTRACK_FTP=y
600CONFIG_NF_CONNTRACK_IRC=y 110CONFIG_NF_CONNTRACK_IRC=y
601CONFIG_NF_CONNTRACK_SIP=y 111CONFIG_NF_CONNTRACK_SIP=y
602CONFIG_NF_CT_NETLINK=y 112CONFIG_NF_CT_NETLINK=y
603CONFIG_NETFILTER_XTABLES=y
604CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y 113CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
605CONFIG_NETFILTER_XT_TARGET_MARK=y
606CONFIG_NETFILTER_XT_TARGET_NFLOG=y 114CONFIG_NETFILTER_XT_TARGET_NFLOG=y
607CONFIG_NETFILTER_XT_TARGET_SECMARK=y 115CONFIG_NETFILTER_XT_TARGET_SECMARK=y
608CONFIG_NETFILTER_XT_TARGET_TCPMSS=y 116CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
609CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y 117CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
610CONFIG_NETFILTER_XT_MATCH_MARK=y
611CONFIG_NETFILTER_XT_MATCH_POLICY=y 118CONFIG_NETFILTER_XT_MATCH_POLICY=y
612CONFIG_NETFILTER_XT_MATCH_STATE=y 119CONFIG_NETFILTER_XT_MATCH_STATE=y
613# CONFIG_IP_VS is not set
614
615#
616# IP: Netfilter Configuration
617#
618CONFIG_NF_DEFRAG_IPV4=y
619CONFIG_NF_CONNTRACK_IPV4=y 120CONFIG_NF_CONNTRACK_IPV4=y
620CONFIG_NF_CONNTRACK_PROC_COMPAT=y
621CONFIG_IP_NF_IPTABLES=y 121CONFIG_IP_NF_IPTABLES=y
622CONFIG_IP_NF_FILTER=y 122CONFIG_IP_NF_FILTER=y
623CONFIG_IP_NF_TARGET_REJECT=y 123CONFIG_IP_NF_TARGET_REJECT=y
624CONFIG_IP_NF_TARGET_LOG=y 124CONFIG_IP_NF_TARGET_LOG=y
625CONFIG_IP_NF_TARGET_ULOG=y 125CONFIG_IP_NF_TARGET_ULOG=y
626CONFIG_NF_NAT=y 126CONFIG_NF_NAT=y
627CONFIG_NF_NAT_NEEDED=y
628CONFIG_IP_NF_TARGET_MASQUERADE=y 127CONFIG_IP_NF_TARGET_MASQUERADE=y
629CONFIG_NF_NAT_FTP=y
630CONFIG_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
635CONFIG_NF_NAT_SIP=y
636CONFIG_IP_NF_MANGLE=y 128CONFIG_IP_NF_MANGLE=y
637
638#
639# IPv6: Netfilter Configuration
640#
641CONFIG_NF_CONNTRACK_IPV6=y 129CONFIG_NF_CONNTRACK_IPV6=y
642CONFIG_IP6_NF_IPTABLES=y 130CONFIG_IP6_NF_IPTABLES=y
643CONFIG_IP6_NF_MATCH_IPV6HEADER=y 131CONFIG_IP6_NF_MATCH_IPV6HEADER=y
@@ -645,1228 +133,115 @@ CONFIG_IP6_NF_TARGET_LOG=y
645CONFIG_IP6_NF_FILTER=y 133CONFIG_IP6_NF_FILTER=y
646CONFIG_IP6_NF_TARGET_REJECT=y 134CONFIG_IP6_NF_TARGET_REJECT=y
647CONFIG_IP6_NF_MANGLE=y 135CONFIG_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
656CONFIG_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
665CONFIG_NET_SCHED=y 136CONFIG_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#
688CONFIG_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
698CONFIG_NET_EMATCH=y 137CONFIG_NET_EMATCH=y
699CONFIG_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
705CONFIG_NET_CLS_ACT=y 138CONFIG_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
714CONFIG_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
723CONFIG_HAMRADIO=y 139CONFIG_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
733CONFIG_FIB_RULES=y
734CONFIG_WIRELESS=y
735CONFIG_CFG80211=y 140CONFIG_CFG80211=y
736# CONFIG_CFG80211_REG_DEBUG is not set
737CONFIG_WIRELESS_OLD_REGULATORY=y
738CONFIG_WIRELESS_EXT=y
739CONFIG_WIRELESS_EXT_SYSFS=y
740# CONFIG_LIB80211 is not set
741CONFIG_MAC80211=y 141CONFIG_MAC80211=y
742
743#
744# Rate control algorithm selection
745#
746CONFIG_MAC80211_RC_MINSTREL=y
747# CONFIG_MAC80211_RC_DEFAULT_PID is not set
748CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
749CONFIG_MAC80211_RC_DEFAULT="minstrel"
750# CONFIG_MAC80211_MESH is not set
751CONFIG_MAC80211_LEDS=y 142CONFIG_MAC80211_LEDS=y
752# CONFIG_MAC80211_DEBUGFS is not set
753# CONFIG_MAC80211_DEBUG_MENU is not set
754# CONFIG_WIMAX is not set
755CONFIG_RFKILL=y 143CONFIG_RFKILL=y
756# CONFIG_RFKILL_INPUT is not set
757CONFIG_RFKILL_LEDS=y
758# CONFIG_NET_9P is not set
759
760#
761# Device Drivers
762#
763
764#
765# Generic Driver Options
766#
767CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 144CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
768CONFIG_STANDALONE=y
769CONFIG_PREVENT_FIRMWARE_BUILD=y
770CONFIG_FW_LOADER=y
771CONFIG_FIRMWARE_IN_KERNEL=y
772CONFIG_EXTRA_FIRMWARE=""
773# CONFIG_DEBUG_DRIVER is not set
774CONFIG_DEBUG_DEVRES=y 145CONFIG_DEBUG_DEVRES=y
775# CONFIG_SYS_HYPERVISOR is not set
776CONFIG_CONNECTOR=y 146CONFIG_CONNECTOR=y
777CONFIG_PROC_EVENTS=y
778# CONFIG_MTD is not set
779# CONFIG_PARPORT is not set
780CONFIG_PNP=y
781CONFIG_PNP_DEBUG_MESSAGES=y
782
783#
784# Protocols
785#
786CONFIG_PNPACPI=y
787CONFIG_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
794CONFIG_BLK_DEV_LOOP=y 147CONFIG_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
799CONFIG_BLK_DEV_RAM=y 148CONFIG_BLK_DEV_RAM=y
800CONFIG_BLK_DEV_RAM_COUNT=16
801CONFIG_BLK_DEV_RAM_SIZE=16384 149CONFIG_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
806CONFIG_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
823CONFIG_HAVE_IDE=y
824# CONFIG_IDE is not set
825
826#
827# SCSI device support
828#
829# CONFIG_RAID_ATTRS is not set
830CONFIG_SCSI=y
831CONFIG_SCSI_DMA=y
832# CONFIG_SCSI_TGT is not set
833# CONFIG_SCSI_NETLINK is not set
834CONFIG_SCSI_PROC_FS=y
835
836#
837# SCSI support type (disk, tape, CD-ROM)
838#
839CONFIG_BLK_DEV_SD=y 150CONFIG_BLK_DEV_SD=y
840# CONFIG_CHR_DEV_ST is not set
841# CONFIG_CHR_DEV_OSST is not set
842CONFIG_BLK_DEV_SR=y 151CONFIG_BLK_DEV_SR=y
843CONFIG_BLK_DEV_SR_VENDOR=y 152CONFIG_BLK_DEV_SR_VENDOR=y
844CONFIG_CHR_DEV_SG=y 153CONFIG_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
851CONFIG_SCSI_CONSTANTS=y 154CONFIG_SCSI_CONSTANTS=y
852# CONFIG_SCSI_LOGGING is not set
853# CONFIG_SCSI_SCAN_ASYNC is not set
854CONFIG_SCSI_WAIT_SCAN=m
855
856#
857# SCSI Transports
858#
859CONFIG_SCSI_SPI_ATTRS=y 155CONFIG_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
869CONFIG_ATA=y 157CONFIG_ATA=y
870# CONFIG_ATA_NONSTANDARD is not set
871CONFIG_ATA_ACPI=y
872CONFIG_SATA_PMP=y
873CONFIG_SATA_AHCI=y 158CONFIG_SATA_AHCI=y
874# CONFIG_SATA_SIL24 is not set
875CONFIG_ATA_SFF=y
876# CONFIG_SATA_SVW is not set
877CONFIG_ATA_PIIX=y 159CONFIG_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
892CONFIG_PATA_AMD=y 160CONFIG_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
903CONFIG_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
913CONFIG_PATA_MPIIX=y
914CONFIG_PATA_OLDPIIX=y 161CONFIG_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
932CONFIG_PATA_SCH=y 162CONFIG_PATA_SCH=y
163CONFIG_PATA_MPIIX=y
164CONFIG_ATA_GENERIC=y
933CONFIG_MD=y 165CONFIG_MD=y
934CONFIG_BLK_DEV_MD=y 166CONFIG_BLK_DEV_MD=y
935CONFIG_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
943CONFIG_BLK_DEV_DM=y 167CONFIG_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
947CONFIG_DM_MIRROR=y 168CONFIG_DM_MIRROR=y
948CONFIG_DM_ZERO=y 169CONFIG_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
964CONFIG_MACINTOSH_DRIVERS=y 170CONFIG_MACINTOSH_DRIVERS=y
965CONFIG_MAC_EMUMOUSEBTN=y 171CONFIG_MAC_EMUMOUSEBTN=y
966CONFIG_NETDEVICES=y 172CONFIG_NETDEVICES=y
967CONFIG_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
977CONFIG_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
997CONFIG_NET_ETHERNET=y 173CONFIG_NET_ETHERNET=y
998CONFIG_MII=y
999# CONFIG_HAPPYMEAL is not set
1000# CONFIG_SUNGEM is not set
1001# CONFIG_CASSINI is not set
1002CONFIG_NET_VENDOR_3COM=y 174CONFIG_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
1007CONFIG_NET_TULIP=y 175CONFIG_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
1023CONFIG_NET_PCI=y 176CONFIG_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
1028CONFIG_FORCEDETH=y 177CONFIG_FORCEDETH=y
1029# CONFIG_FORCEDETH_NAPI is not set
1030CONFIG_E100=y 178CONFIG_E100=y
1031# CONFIG_FEALNX is not set
1032# CONFIG_NATSEMI is not set
1033CONFIG_NE2K_PCI=y 179CONFIG_NE2K_PCI=y
1034# CONFIG_8139CP is not set
1035CONFIG_8139TOO=y 180CONFIG_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
1049CONFIG_NETDEV_1000=y
1050# CONFIG_ACENIC is not set
1051# CONFIG_DL2K is not set
1052CONFIG_E1000=y 182CONFIG_E1000=y
1053CONFIG_E1000E=y 183CONFIG_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
1060CONFIG_R8169=y 184CONFIG_R8169=y
1061# CONFIG_SIS190 is not set
1062# CONFIG_SKGE is not set
1063CONFIG_SKY2=y 185CONFIG_SKY2=y
1064# CONFIG_SKY2_DEBUG is not set
1065# CONFIG_VIA_VELOCITY is not set
1066CONFIG_TIGON3=y 186CONFIG_TIGON3=y
1067CONFIG_BNX2=y 187CONFIG_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
1073CONFIG_NETDEV_10000=y
1074# CONFIG_CHELSIO_T1 is not set
1075CONFIG_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
1092CONFIG_TR=y 188CONFIG_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
1102CONFIG_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
1120CONFIG_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
1147CONFIG_NET_PCMCIA=y 189CONFIG_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
1158CONFIG_FDDI=y 190CONFIG_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
1165CONFIG_NETCONSOLE=y 191CONFIG_NETCONSOLE=y
1166# CONFIG_NETCONSOLE_DYNAMIC is not set
1167CONFIG_NETPOLL=y
1168# CONFIG_NETPOLL_TRAP is not set
1169CONFIG_NET_POLL_CONTROLLER=y
1170# CONFIG_ISDN is not set
1171# CONFIG_PHONE is not set
1172
1173#
1174# Input device support
1175#
1176CONFIG_INPUT=y
1177CONFIG_INPUT_FF_MEMLESS=y
1178CONFIG_INPUT_POLLDEV=y 192CONFIG_INPUT_POLLDEV=y
1179
1180#
1181# Userland interfaces
1182#
1183CONFIG_INPUT_MOUSEDEV=y
1184# CONFIG_INPUT_MOUSEDEV_PSAUX is not set 193# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
1185CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
1186CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1187# CONFIG_INPUT_JOYDEV is not set
1188CONFIG_INPUT_EVDEV=y 194CONFIG_INPUT_EVDEV=y
1189# CONFIG_INPUT_EVBUG is not set
1190
1191#
1192# Input Device Drivers
1193#
1194CONFIG_INPUT_KEYBOARD=y
1195CONFIG_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
1201CONFIG_INPUT_MOUSE=y
1202CONFIG_MOUSE_PS2=y
1203CONFIG_MOUSE_PS2_ALPS=y
1204CONFIG_MOUSE_PS2_LOGIPS2PP=y
1205CONFIG_MOUSE_PS2_SYNAPTICS=y
1206CONFIG_MOUSE_PS2_LIFEBOOK=y
1207CONFIG_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
1214CONFIG_INPUT_JOYSTICK=y 195CONFIG_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
1236CONFIG_INPUT_TABLET=y 196CONFIG_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
1242CONFIG_INPUT_TOUCHSCREEN=y 197CONFIG_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
1258CONFIG_INPUT_MISC=y 198CONFIG_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#
1274CONFIG_SERIO=y
1275CONFIG_SERIO_I8042=y
1276CONFIG_SERIO_SERPORT=y
1277# CONFIG_SERIO_CT82C710 is not set
1278# CONFIG_SERIO_PCIPS2 is not set
1279CONFIG_SERIO_LIBPS2=y
1280# CONFIG_SERIO_RAW is not set
1281# CONFIG_GAMEPORT is not set
1282
1283#
1284# Character devices
1285#
1286CONFIG_VT=y
1287CONFIG_CONSOLE_TRANSLATIONS=y
1288CONFIG_VT_CONSOLE=y
1289CONFIG_HW_CONSOLE=y
1290CONFIG_VT_HW_CONSOLE_BINDING=y 199CONFIG_VT_HW_CONSOLE_BINDING=y
1291CONFIG_DEVKMEM=y
1292CONFIG_SERIAL_NONSTANDARD=y 200CONFIG_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#
1314CONFIG_SERIAL_8250=y 201CONFIG_SERIAL_8250=y
1315CONFIG_SERIAL_8250_CONSOLE=y 202CONFIG_SERIAL_8250_CONSOLE=y
1316CONFIG_FIX_EARLYCON_MEM=y
1317CONFIG_SERIAL_8250_PCI=y
1318CONFIG_SERIAL_8250_PNP=y
1319# CONFIG_SERIAL_8250_CS is not set
1320CONFIG_SERIAL_8250_NR_UARTS=32 203CONFIG_SERIAL_8250_NR_UARTS=32
1321CONFIG_SERIAL_8250_RUNTIME_UARTS=4
1322CONFIG_SERIAL_8250_EXTENDED=y 204CONFIG_SERIAL_8250_EXTENDED=y
1323CONFIG_SERIAL_8250_MANY_PORTS=y 205CONFIG_SERIAL_8250_MANY_PORTS=y
1324CONFIG_SERIAL_8250_SHARE_IRQ=y 206CONFIG_SERIAL_8250_SHARE_IRQ=y
1325CONFIG_SERIAL_8250_DETECT_IRQ=y 207CONFIG_SERIAL_8250_DETECT_IRQ=y
1326CONFIG_SERIAL_8250_RSA=y 208CONFIG_SERIAL_8250_RSA=y
1327
1328#
1329# Non-8250 serial port support
1330#
1331CONFIG_SERIAL_CORE=y
1332CONFIG_SERIAL_CORE_CONSOLE=y
1333# CONFIG_SERIAL_JSM is not set
1334CONFIG_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
1338CONFIG_HW_RANDOM=y 210CONFIG_HW_RANDOM=y
1339# CONFIG_HW_RANDOM_TIMERIOMEM is not set
1340CONFIG_HW_RANDOM_INTEL=y
1341CONFIG_HW_RANDOM_AMD=y
1342CONFIG_HW_RANDOM_GEODE=y
1343CONFIG_HW_RANDOM_VIA=y
1344CONFIG_NVRAM=y 211CONFIG_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
1361CONFIG_HPET=y 212CONFIG_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
1366CONFIG_DEVPORT=y
1367CONFIG_I2C=y
1368CONFIG_I2C_BOARDINFO=y
1369# CONFIG_I2C_CHARDEV is not set
1370CONFIG_I2C_HELPER_AUTO=y
1371CONFIG_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
1385CONFIG_I2C_I801=y 214CONFIG_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
1434CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
1435# CONFIG_GPIOLIB is not set
1436# CONFIG_W1 is not set
1437CONFIG_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
1442CONFIG_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
1516CONFIG_THERMAL=y
1517# CONFIG_THERMAL_HWMON is not set
1518CONFIG_WATCHDOG=y 215CONFIG_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
1565CONFIG_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#
1600CONFIG_DAB=y
1601# CONFIG_USB_DABUSB is not set
1602
1603#
1604# Graphics support
1605#
1606CONFIG_AGP=y 216CONFIG_AGP=y
1607# CONFIG_AGP_ALI is not set
1608# CONFIG_AGP_ATI is not set
1609# CONFIG_AGP_AMD is not set
1610CONFIG_AGP_AMD64=y 217CONFIG_AGP_AMD64=y
1611CONFIG_AGP_INTEL=y 218CONFIG_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
1617CONFIG_DRM=y 219CONFIG_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
1623CONFIG_DRM_I915=y 220CONFIG_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
1631CONFIG_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
1635CONFIG_FB_CFB_FILLRECT=y
1636CONFIG_FB_CFB_COPYAREA=y
1637CONFIG_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
1647CONFIG_FB_MODE_HELPERS=y 221CONFIG_FB_MODE_HELPERS=y
1648CONFIG_FB_TILEBLITTING=y 222CONFIG_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
1662CONFIG_FB_EFI=y 223CONFIG_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
1693CONFIG_BACKLIGHT_LCD_SUPPORT=y 224CONFIG_BACKLIGHT_LCD_SUPPORT=y
1694# CONFIG_LCD_CLASS_DEVICE is not set 225# CONFIG_LCD_CLASS_DEVICE is not set
1695CONFIG_BACKLIGHT_CLASS_DEVICE=y
1696CONFIG_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#
1709CONFIG_VGA_CONSOLE=y
1710CONFIG_VGACON_SOFT_SCROLLBACK=y 226CONFIG_VGACON_SOFT_SCROLLBACK=y
1711CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
1712CONFIG_DUMMY_CONSOLE=y
1713# CONFIG_FRAMEBUFFER_CONSOLE is not set
1714CONFIG_LOGO=y 227CONFIG_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
1717CONFIG_LOGO_LINUX_CLUT224=y
1718CONFIG_SOUND=y 230CONFIG_SOUND=y
1719CONFIG_SOUND_OSS_CORE=y
1720CONFIG_SND=y 231CONFIG_SND=y
1721CONFIG_SND_TIMER=y
1722CONFIG_SND_PCM=y
1723CONFIG_SND_HWDEP=y
1724CONFIG_SND_JACK=y
1725CONFIG_SND_SEQUENCER=y 232CONFIG_SND_SEQUENCER=y
1726CONFIG_SND_SEQ_DUMMY=y 233CONFIG_SND_SEQ_DUMMY=y
1727CONFIG_SND_OSSEMUL=y
1728CONFIG_SND_MIXER_OSS=y 234CONFIG_SND_MIXER_OSS=y
1729CONFIG_SND_PCM_OSS=y 235CONFIG_SND_PCM_OSS=y
1730CONFIG_SND_PCM_OSS_PLUGINS=y
1731CONFIG_SND_SEQUENCER_OSS=y 236CONFIG_SND_SEQUENCER_OSS=y
1732CONFIG_SND_HRTIMER=y 237CONFIG_SND_HRTIMER=y
1733CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
1734CONFIG_SND_DYNAMIC_MINORS=y
1735CONFIG_SND_SUPPORT_OLD_API=y
1736CONFIG_SND_VERBOSE_PROCFS=y
1737# CONFIG_SND_VERBOSE_PRINTK is not set
1738# CONFIG_SND_DEBUG is not set
1739CONFIG_SND_VMASTER=y
1740CONFIG_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
1747CONFIG_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
1788CONFIG_SND_HDA_INTEL=y 238CONFIG_SND_HDA_INTEL=y
1789CONFIG_SND_HDA_HWDEP=y 239CONFIG_SND_HDA_HWDEP=y
1790# CONFIG_SND_HDA_RECONFIG is not set
1791# CONFIG_SND_HDA_INPUT_BEEP is not set
1792CONFIG_SND_HDA_CODEC_REALTEK=y
1793CONFIG_SND_HDA_CODEC_ANALOG=y
1794CONFIG_SND_HDA_CODEC_SIGMATEL=y
1795CONFIG_SND_HDA_CODEC_VIA=y
1796CONFIG_SND_HDA_CODEC_ATIHDMI=y
1797CONFIG_SND_HDA_CODEC_NVHDMI=y
1798CONFIG_SND_HDA_CODEC_INTELHDMI=y
1799CONFIG_SND_HDA_ELD=y
1800CONFIG_SND_HDA_CODEC_CONEXANT=y
1801CONFIG_SND_HDA_CODEC_CMEDIA=y
1802CONFIG_SND_HDA_CODEC_SI3054=y
1803CONFIG_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
1829CONFIG_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
1834CONFIG_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
1839CONFIG_HID_SUPPORT=y
1840CONFIG_HID=y
1841CONFIG_HID_DEBUG=y
1842CONFIG_HIDRAW=y 240CONFIG_HIDRAW=y
1843
1844#
1845# USB Input Devices
1846#
1847CONFIG_USB_HID=y
1848CONFIG_HID_PID=y 241CONFIG_HID_PID=y
1849CONFIG_USB_HIDDEV=y 242CONFIG_USB_HIDDEV=y
1850
1851#
1852# Special HID drivers
1853#
1854CONFIG_HID_A4TECH=y
1855CONFIG_HID_APPLE=y
1856CONFIG_HID_BELKIN=y
1857CONFIG_HID_CHERRY=y
1858CONFIG_HID_CHICONY=y
1859CONFIG_HID_CYPRESS=y
1860# CONFIG_DRAGONRISE_FF is not set
1861CONFIG_HID_EZKEY=y
1862CONFIG_HID_KYE=y
1863CONFIG_HID_GYRATION=y 243CONFIG_HID_GYRATION=y
1864CONFIG_HID_KENSINGTON=y
1865CONFIG_HID_LOGITECH=y
1866CONFIG_LOGITECH_FF=y 244CONFIG_LOGITECH_FF=y
1867# CONFIG_LOGIRUMBLEPAD2_FF is not set
1868CONFIG_HID_MICROSOFT=y
1869CONFIG_HID_MONTEREY=y
1870CONFIG_HID_NTRIG=y 245CONFIG_HID_NTRIG=y
1871CONFIG_HID_PANTHERLORD=y 246CONFIG_HID_PANTHERLORD=y
1872CONFIG_PANTHERLORD_FF=y 247CONFIG_PANTHERLORD_FF=y
@@ -1874,702 +249,92 @@ CONFIG_HID_PETALYNX=y
1874CONFIG_HID_SAMSUNG=y 249CONFIG_HID_SAMSUNG=y
1875CONFIG_HID_SONY=y 250CONFIG_HID_SONY=y
1876CONFIG_HID_SUNPLUS=y 251CONFIG_HID_SUNPLUS=y
1877# CONFIG_GREENASIA_FF is not set
1878CONFIG_HID_TOPSEED=y 252CONFIG_HID_TOPSEED=y
1879CONFIG_THRUSTMASTER_FF=y
1880CONFIG_ZEROPLUS_FF=y
1881CONFIG_USB_SUPPORT=y
1882CONFIG_USB_ARCH_HAS_HCD=y
1883CONFIG_USB_ARCH_HAS_OHCI=y
1884CONFIG_USB_ARCH_HAS_EHCI=y
1885CONFIG_USB=y 253CONFIG_USB=y
1886CONFIG_USB_DEBUG=y 254CONFIG_USB_DEBUG=y
1887CONFIG_USB_ANNOUNCE_NEW_DEVICES=y 255CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
1888
1889#
1890# Miscellaneous USB options
1891#
1892CONFIG_USB_DEVICEFS=y 256CONFIG_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
1895CONFIG_USB_SUSPEND=y
1896# CONFIG_USB_OTG is not set
1897CONFIG_USB_MON=y 258CONFIG_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
1905CONFIG_USB_EHCI_HCD=y 259CONFIG_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
1911CONFIG_USB_OHCI_HCD=y 261CONFIG_USB_OHCI_HCD=y
1912# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1913# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1914CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1915CONFIG_USB_UHCI_HCD=y 262CONFIG_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
1925CONFIG_USB_PRINTER=y 263CONFIG_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#
1936CONFIG_USB_STORAGE=y 264CONFIG_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
1949CONFIG_USB_LIBUSUAL=y 265CONFIG_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
1995CONFIG_NEW_LEDS=y
1996CONFIG_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#
2011CONFIG_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
2022CONFIG_EDAC=y 266CONFIG_EDAC=y
2023
2024#
2025# Reporting subsystems
2026#
2027# CONFIG_EDAC_DEBUG is not set
2028# CONFIG_EDAC_MM_EDAC is not set
2029CONFIG_RTC_LIB=y
2030CONFIG_RTC_CLASS=y 267CONFIG_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#
2037CONFIG_RTC_INTF_SYSFS=y
2038CONFIG_RTC_INTF_PROC=y
2039CONFIG_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#
2067CONFIG_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#
2082CONFIG_DMADEVICES=y 269CONFIG_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
2091CONFIG_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
2102CONFIG_EEEPC_LAPTOP=y 270CONFIG_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
2111CONFIG_FIRMWARE_MEMMAP=y
2112CONFIG_EFI_VARS=y 271CONFIG_EFI_VARS=y
2113# CONFIG_DELL_RBU is not set
2114# CONFIG_DCDBAS is not set
2115CONFIG_DMIID=y
2116# CONFIG_ISCSI_IBFT_FIND is not set
2117
2118#
2119# File systems
2120#
2121# CONFIG_EXT2_FS is not set
2122CONFIG_EXT3_FS=y 272CONFIG_EXT3_FS=y
2123# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set 273# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
2124CONFIG_EXT3_FS_XATTR=y
2125CONFIG_EXT3_FS_POSIX_ACL=y 274CONFIG_EXT3_FS_POSIX_ACL=y
2126CONFIG_EXT3_FS_SECURITY=y 275CONFIG_EXT3_FS_SECURITY=y
2127# CONFIG_EXT4_FS is not set
2128CONFIG_JBD=y
2129# CONFIG_JBD_DEBUG is not set
2130CONFIG_FS_MBCACHE=y
2131# CONFIG_REISERFS_FS is not set
2132# CONFIG_JFS_FS is not set
2133CONFIG_FS_POSIX_ACL=y
2134CONFIG_FILE_LOCKING=y
2135# CONFIG_XFS_FS is not set
2136# CONFIG_OCFS2_FS is not set
2137# CONFIG_BTRFS_FS is not set
2138CONFIG_DNOTIFY=y
2139CONFIG_INOTIFY=y
2140CONFIG_INOTIFY_USER=y
2141CONFIG_QUOTA=y 276CONFIG_QUOTA=y
2142CONFIG_QUOTA_NETLINK_INTERFACE=y 277CONFIG_QUOTA_NETLINK_INTERFACE=y
2143# CONFIG_PRINT_QUOTA_WARNING is not set 278# CONFIG_PRINT_QUOTA_WARNING is not set
2144CONFIG_QUOTA_TREE=y
2145# CONFIG_QFMT_V1 is not set
2146CONFIG_QFMT_V2=y 279CONFIG_QFMT_V2=y
2147CONFIG_QUOTACTL=y
2148# CONFIG_AUTOFS_FS is not set
2149CONFIG_AUTOFS4_FS=y 280CONFIG_AUTOFS4_FS=y
2150# CONFIG_FUSE_FS is not set
2151CONFIG_GENERIC_ACL=y
2152
2153#
2154# Caches
2155#
2156# CONFIG_FSCACHE is not set
2157
2158#
2159# CD-ROM/DVD Filesystems
2160#
2161CONFIG_ISO9660_FS=y 281CONFIG_ISO9660_FS=y
2162CONFIG_JOLIET=y 282CONFIG_JOLIET=y
2163CONFIG_ZISOFS=y 283CONFIG_ZISOFS=y
2164# CONFIG_UDF_FS is not set
2165
2166#
2167# DOS/FAT/NT Filesystems
2168#
2169CONFIG_FAT_FS=y
2170CONFIG_MSDOS_FS=y 284CONFIG_MSDOS_FS=y
2171CONFIG_VFAT_FS=y 285CONFIG_VFAT_FS=y
2172CONFIG_FAT_DEFAULT_CODEPAGE=437
2173CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
2174# CONFIG_NTFS_FS is not set
2175
2176#
2177# Pseudo filesystems
2178#
2179CONFIG_PROC_FS=y
2180CONFIG_PROC_KCORE=y 286CONFIG_PROC_KCORE=y
2181CONFIG_PROC_VMCORE=y
2182CONFIG_PROC_SYSCTL=y
2183CONFIG_PROC_PAGE_MONITOR=y
2184CONFIG_SYSFS=y
2185CONFIG_TMPFS=y 287CONFIG_TMPFS=y
2186CONFIG_TMPFS_POSIX_ACL=y 288CONFIG_TMPFS_POSIX_ACL=y
2187CONFIG_HUGETLBFS=y 289CONFIG_HUGETLBFS=y
2188CONFIG_HUGETLB_PAGE=y
2189# CONFIG_CONFIGFS_FS is not set
2190CONFIG_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
2210CONFIG_NETWORK_FILESYSTEMS=y
2211CONFIG_NFS_FS=y 290CONFIG_NFS_FS=y
2212CONFIG_NFS_V3=y 291CONFIG_NFS_V3=y
2213CONFIG_NFS_V3_ACL=y 292CONFIG_NFS_V3_ACL=y
2214CONFIG_NFS_V4=y 293CONFIG_NFS_V4=y
2215CONFIG_ROOT_NFS=y 294CONFIG_ROOT_NFS=y
2216# CONFIG_NFSD is not set
2217CONFIG_LOCKD=y
2218CONFIG_LOCKD_V4=y
2219CONFIG_NFS_ACL_SUPPORT=y
2220CONFIG_NFS_COMMON=y
2221CONFIG_SUNRPC=y
2222CONFIG_SUNRPC_GSS=y
2223CONFIG_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#
2234CONFIG_PARTITION_ADVANCED=y 295CONFIG_PARTITION_ADVANCED=y
2235# CONFIG_ACORN_PARTITION is not set
2236CONFIG_OSF_PARTITION=y 296CONFIG_OSF_PARTITION=y
2237CONFIG_AMIGA_PARTITION=y 297CONFIG_AMIGA_PARTITION=y
2238# CONFIG_ATARI_PARTITION is not set
2239CONFIG_MAC_PARTITION=y 298CONFIG_MAC_PARTITION=y
2240CONFIG_MSDOS_PARTITION=y
2241CONFIG_BSD_DISKLABEL=y 299CONFIG_BSD_DISKLABEL=y
2242CONFIG_MINIX_SUBPARTITION=y 300CONFIG_MINIX_SUBPARTITION=y
2243CONFIG_SOLARIS_X86_PARTITION=y 301CONFIG_SOLARIS_X86_PARTITION=y
2244CONFIG_UNIXWARE_DISKLABEL=y 302CONFIG_UNIXWARE_DISKLABEL=y
2245# CONFIG_LDM_PARTITION is not set
2246CONFIG_SGI_PARTITION=y 303CONFIG_SGI_PARTITION=y
2247# CONFIG_ULTRIX_PARTITION is not set
2248CONFIG_SUN_PARTITION=y 304CONFIG_SUN_PARTITION=y
2249CONFIG_KARMA_PARTITION=y 305CONFIG_KARMA_PARTITION=y
2250CONFIG_EFI_PARTITION=y 306CONFIG_EFI_PARTITION=y
2251# CONFIG_SYSV68_PARTITION is not set
2252CONFIG_NLS=y
2253CONFIG_NLS_DEFAULT="utf8" 307CONFIG_NLS_DEFAULT="utf8"
2254CONFIG_NLS_CODEPAGE_437=y 308CONFIG_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
2277CONFIG_NLS_ASCII=y 309CONFIG_NLS_ASCII=y
2278CONFIG_NLS_ISO8859_1=y 310CONFIG_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
2291CONFIG_NLS_UTF8=y 311CONFIG_NLS_UTF8=y
2292# CONFIG_DLM is not set
2293
2294#
2295# Kernel hacking
2296#
2297CONFIG_TRACE_IRQFLAGS_SUPPORT=y
2298CONFIG_PRINTK_TIME=y 312CONFIG_PRINTK_TIME=y
2299# CONFIG_ENABLE_WARN_DEPRECATED is not set 313# CONFIG_ENABLE_WARN_DEPRECATED is not set
2300CONFIG_ENABLE_MUST_CHECK=y
2301CONFIG_FRAME_WARN=2048 314CONFIG_FRAME_WARN=2048
2302CONFIG_MAGIC_SYSRQ=y 315CONFIG_MAGIC_SYSRQ=y
2303# CONFIG_UNUSED_SYMBOLS is not set 316# CONFIG_UNUSED_SYMBOLS is not set
2304CONFIG_DEBUG_FS=y
2305# CONFIG_HEADERS_CHECK is not set
2306CONFIG_DEBUG_KERNEL=y 317CONFIG_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
2311CONFIG_SCHEDSTATS=y 319CONFIG_SCHEDSTATS=y
2312CONFIG_TIMER_STATS=y 320CONFIG_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
2325CONFIG_STACKTRACE=y
2326# CONFIG_DEBUG_KOBJECT is not set
2327# CONFIG_DEBUG_HIGHMEM is not set
2328CONFIG_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
2333CONFIG_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
2337CONFIG_ARCH_WANT_FRAME_POINTERS=y
2338CONFIG_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
2348CONFIG_SYSCTL_SYSCALL_CHECK=y 322CONFIG_SYSCTL_SYSCALL_CHECK=y
2349# CONFIG_DEBUG_PAGEALLOC is not set
2350CONFIG_USER_STACKTRACE_SUPPORT=y
2351CONFIG_NOP_TRACER=y
2352CONFIG_HAVE_FUNCTION_TRACER=y
2353CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
2354CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
2355CONFIG_HAVE_DYNAMIC_FTRACE=y
2356CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
2357CONFIG_HAVE_HW_BRANCH_TRACER=y
2358CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
2359CONFIG_RING_BUFFER=y
2360CONFIG_TRACING=y
2361CONFIG_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
2380CONFIG_BLK_DEV_IO_TRACE=y 323CONFIG_BLK_DEV_IO_TRACE=y
2381# CONFIG_FTRACE_STARTUP_TEST is not set
2382# CONFIG_MMIOTRACE is not set
2383CONFIG_PROVIDE_OHCI1394_DMA_INIT=y 324CONFIG_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
2387CONFIG_HAVE_ARCH_KGDB=y
2388# CONFIG_KGDB is not set
2389# CONFIG_STRICT_DEVMEM is not set
2390CONFIG_X86_VERBOSE_BOOTUP=y
2391CONFIG_EARLY_PRINTK=y
2392CONFIG_EARLY_PRINTK_DBGP=y 325CONFIG_EARLY_PRINTK_DBGP=y
2393CONFIG_DEBUG_STACKOVERFLOW=y 326CONFIG_DEBUG_STACKOVERFLOW=y
2394CONFIG_DEBUG_STACK_USAGE=y 327CONFIG_DEBUG_STACK_USAGE=y
2395# CONFIG_DEBUG_PER_CPU_MAPS is not set
2396# CONFIG_X86_PTDUMP is not set
2397CONFIG_DEBUG_RODATA=y
2398# CONFIG_DEBUG_RODATA_TEST is not set 328# CONFIG_DEBUG_RODATA_TEST is not set
2399CONFIG_DEBUG_NX_TEST=m 329CONFIG_DEBUG_NX_TEST=m
2400# CONFIG_4KSTACKS is not set
2401CONFIG_DOUBLEFAULT=y
2402CONFIG_HAVE_MMIOTRACE_SUPPORT=y
2403CONFIG_IO_DELAY_TYPE_0X80=0
2404CONFIG_IO_DELAY_TYPE_0XED=1
2405CONFIG_IO_DELAY_TYPE_UDELAY=2
2406CONFIG_IO_DELAY_TYPE_NONE=3
2407CONFIG_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
2411CONFIG_DEFAULT_IO_DELAY_TYPE=0
2412CONFIG_DEBUG_BOOT_PARAMS=y 330CONFIG_DEBUG_BOOT_PARAMS=y
2413# CONFIG_CPA_DEBUG is not set
2414CONFIG_OPTIMIZE_INLINING=y 331CONFIG_OPTIMIZE_INLINING=y
2415
2416#
2417# Security options
2418#
2419CONFIG_KEYS=y
2420CONFIG_KEYS_DEBUG_PROC_KEYS=y 332CONFIG_KEYS_DEBUG_PROC_KEYS=y
2421CONFIG_SECURITY=y 333CONFIG_SECURITY=y
2422# CONFIG_SECURITYFS is not set
2423CONFIG_SECURITY_NETWORK=y 334CONFIG_SECURITY_NETWORK=y
2424# CONFIG_SECURITY_NETWORK_XFRM is not set
2425# CONFIG_SECURITY_PATH is not set
2426CONFIG_SECURITY_FILE_CAPABILITIES=y
2427# CONFIG_SECURITY_ROOTPLUG is not set
2428CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
2429CONFIG_SECURITY_SELINUX=y 335CONFIG_SECURITY_SELINUX=y
2430CONFIG_SECURITY_SELINUX_BOOTPARAM=y 336CONFIG_SECURITY_SELINUX_BOOTPARAM=y
2431CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
2432CONFIG_SECURITY_SELINUX_DISABLE=y 337CONFIG_SECURITY_SELINUX_DISABLE=y
2433CONFIG_SECURITY_SELINUX_DEVELOP=y
2434CONFIG_SECURITY_SELINUX_AVC_STATS=y
2435CONFIG_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
2440CONFIG_CRYPTO=y
2441
2442#
2443# Crypto core or helper
2444#
2445# CONFIG_CRYPTO_FIPS is not set
2446CONFIG_CRYPTO_ALGAPI=y
2447CONFIG_CRYPTO_ALGAPI2=y
2448CONFIG_CRYPTO_AEAD=y
2449CONFIG_CRYPTO_AEAD2=y
2450CONFIG_CRYPTO_BLKCIPHER=y
2451CONFIG_CRYPTO_BLKCIPHER2=y
2452CONFIG_CRYPTO_HASH=y
2453CONFIG_CRYPTO_HASH2=y
2454CONFIG_CRYPTO_RNG2=y
2455CONFIG_CRYPTO_PCOMP=y
2456CONFIG_CRYPTO_MANAGER=y
2457CONFIG_CRYPTO_MANAGER2=y
2458# CONFIG_CRYPTO_GF128MUL is not set
2459# CONFIG_CRYPTO_NULL is not set
2460CONFIG_CRYPTO_WORKQUEUE=y
2461# CONFIG_CRYPTO_CRYPTD is not set
2462CONFIG_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#
2475CONFIG_CRYPTO_CBC=y
2476# CONFIG_CRYPTO_CTR is not set
2477# CONFIG_CRYPTO_CTS is not set
2478CONFIG_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#
2486CONFIG_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
2495CONFIG_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
2501CONFIG_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#
2510CONFIG_CRYPTO_AES=y
2511CONFIG_CRYPTO_AES_586=y 338CONFIG_CRYPTO_AES_586=y
2512# CONFIG_CRYPTO_ANUBIS is not set
2513CONFIG_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
2518CONFIG_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
2540CONFIG_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
2544CONFIG_HAVE_KVM=y
2545CONFIG_HAVE_KVM_IRQCHIP=y
2546CONFIG_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
2551CONFIG_BINARY_PRINTF=y
2552
2553#
2554# Library routines
2555#
2556CONFIG_BITREVERSE=y
2557CONFIG_GENERIC_FIND_FIRST_BIT=y
2558CONFIG_GENERIC_FIND_NEXT_BIT=y
2559CONFIG_GENERIC_FIND_LAST_BIT=y
2560# CONFIG_CRC_CCITT is not set
2561# CONFIG_CRC16 is not set
2562CONFIG_CRC_T10DIF=y 340CONFIG_CRC_T10DIF=y
2563# CONFIG_CRC_ITU_T is not set
2564CONFIG_CRC32=y
2565# CONFIG_CRC7 is not set
2566# CONFIG_LIBCRC32C is not set
2567CONFIG_AUDIT_GENERIC=y
2568CONFIG_ZLIB_INFLATE=y
2569CONFIG_DECOMPRESS_GZIP=y
2570CONFIG_DECOMPRESS_BZIP2=y
2571CONFIG_DECOMPRESS_LZMA=y
2572CONFIG_HAS_IOMEM=y
2573CONFIG_HAS_IOPORT=y
2574CONFIG_HAS_DMA=y
2575CONFIG_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#
6CONFIG_64BIT=y 1CONFIG_64BIT=y
7# CONFIG_X86_32 is not set
8CONFIG_X86_64=y
9CONFIG_X86=y
10CONFIG_OUTPUT_FORMAT="elf64-x86-64"
11CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
12CONFIG_GENERIC_TIME=y
13CONFIG_GENERIC_CMOS_UPDATE=y
14CONFIG_CLOCKSOURCE_WATCHDOG=y
15CONFIG_GENERIC_CLOCKEVENTS=y
16CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
17CONFIG_LOCKDEP_SUPPORT=y
18CONFIG_STACKTRACE_SUPPORT=y
19CONFIG_HAVE_LATENCYTOP_SUPPORT=y
20CONFIG_FAST_CMPXCHG_LOCAL=y
21CONFIG_MMU=y
22CONFIG_ZONE_DMA=y
23CONFIG_GENERIC_ISA_DMA=y
24CONFIG_GENERIC_IOMAP=y
25CONFIG_GENERIC_BUG=y
26CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
27CONFIG_GENERIC_HWEIGHT=y
28CONFIG_ARCH_MAY_HAVE_PC_FDC=y
29CONFIG_RWSEM_GENERIC_SPINLOCK=y
30# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
31CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
32CONFIG_GENERIC_CALIBRATE_DELAY=y
33CONFIG_GENERIC_TIME_VSYSCALL=y
34CONFIG_ARCH_HAS_CPU_RELAX=y
35CONFIG_ARCH_HAS_DEFAULT_IDLE=y
36CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
37CONFIG_HAVE_SETUP_PER_CPU_AREA=y
38CONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y
39CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
40CONFIG_ARCH_HIBERNATION_POSSIBLE=y
41CONFIG_ARCH_SUSPEND_POSSIBLE=y
42CONFIG_ZONE_DMA32=y
43CONFIG_ARCH_POPULATES_NODE_MAP=y
44CONFIG_AUDIT_ARCH=y
45CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
46CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
47CONFIG_GENERIC_HARDIRQS=y
48CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
49CONFIG_GENERIC_IRQ_PROBE=y
50CONFIG_GENERIC_PENDING_IRQ=y
51CONFIG_USE_GENERIC_SMP_HELPERS=y
52CONFIG_X86_64_SMP=y
53CONFIG_X86_HT=y
54CONFIG_X86_TRAMPOLINE=y
55# CONFIG_KTIME_SCALAR is not set
56CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
57
58#
59# General setup
60#
61CONFIG_EXPERIMENTAL=y 2CONFIG_EXPERIMENTAL=y
62CONFIG_LOCK_KERNEL=y
63CONFIG_INIT_ENV_ARG_LIMIT=32
64CONFIG_LOCALVERSION=""
65# CONFIG_LOCALVERSION_AUTO is not set 3# CONFIG_LOCALVERSION_AUTO is not set
66CONFIG_HAVE_KERNEL_GZIP=y
67CONFIG_HAVE_KERNEL_BZIP2=y
68CONFIG_HAVE_KERNEL_LZMA=y
69CONFIG_KERNEL_GZIP=y
70# CONFIG_KERNEL_BZIP2 is not set
71# CONFIG_KERNEL_LZMA is not set
72CONFIG_SWAP=y
73CONFIG_SYSVIPC=y 4CONFIG_SYSVIPC=y
74CONFIG_SYSVIPC_SYSCTL=y
75CONFIG_POSIX_MQUEUE=y 5CONFIG_POSIX_MQUEUE=y
76CONFIG_POSIX_MQUEUE_SYSCTL=y
77CONFIG_BSD_PROCESS_ACCT=y 6CONFIG_BSD_PROCESS_ACCT=y
78# CONFIG_BSD_PROCESS_ACCT_V3 is not set
79CONFIG_TASKSTATS=y 7CONFIG_TASKSTATS=y
80CONFIG_TASK_DELAY_ACCT=y 8CONFIG_TASK_DELAY_ACCT=y
81CONFIG_TASK_XACCT=y 9CONFIG_TASK_XACCT=y
82CONFIG_TASK_IO_ACCOUNTING=y 10CONFIG_TASK_IO_ACCOUNTING=y
83CONFIG_AUDIT=y 11CONFIG_AUDIT=y
84CONFIG_AUDITSYSCALL=y
85CONFIG_AUDIT_TREE=y
86
87#
88# RCU Subsystem
89#
90# CONFIG_CLASSIC_RCU is not set
91CONFIG_TREE_RCU=y
92# CONFIG_PREEMPT_RCU is not set
93# CONFIG_RCU_TRACE is not set
94CONFIG_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
99CONFIG_LOG_BUF_SHIFT=18 12CONFIG_LOG_BUF_SHIFT=18
100CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
101CONFIG_GROUP_SCHED=y
102CONFIG_FAIR_GROUP_SCHED=y
103# CONFIG_RT_GROUP_SCHED is not set
104# CONFIG_USER_SCHED is not set
105CONFIG_CGROUP_SCHED=y
106CONFIG_CGROUPS=y 13CONFIG_CGROUPS=y
107# CONFIG_CGROUP_DEBUG is not set
108CONFIG_CGROUP_NS=y 14CONFIG_CGROUP_NS=y
109CONFIG_CGROUP_FREEZER=y 15CONFIG_CGROUP_FREEZER=y
110# CONFIG_CGROUP_DEVICE is not set
111CONFIG_CPUSETS=y 16CONFIG_CPUSETS=y
112CONFIG_PROC_PID_CPUSET=y
113CONFIG_CGROUP_CPUACCT=y 17CONFIG_CGROUP_CPUACCT=y
114CONFIG_RESOURCE_COUNTERS=y 18CONFIG_RESOURCE_COUNTERS=y
115# CONFIG_CGROUP_MEM_RES_CTLR is not set 19CONFIG_CGROUP_SCHED=y
116# CONFIG_SYSFS_DEPRECATED_V2 is not set
117CONFIG_RELAY=y
118CONFIG_NAMESPACES=y
119CONFIG_UTS_NS=y 20CONFIG_UTS_NS=y
120CONFIG_IPC_NS=y 21CONFIG_IPC_NS=y
121CONFIG_USER_NS=y 22CONFIG_USER_NS=y
122CONFIG_PID_NS=y 23CONFIG_PID_NS=y
123CONFIG_NET_NS=y 24CONFIG_NET_NS=y
124CONFIG_BLK_DEV_INITRD=y 25CONFIG_BLK_DEV_INITRD=y
125CONFIG_INITRAMFS_SOURCE=""
126CONFIG_RD_GZIP=y
127CONFIG_RD_BZIP2=y
128CONFIG_RD_LZMA=y
129CONFIG_CC_OPTIMIZE_FOR_SIZE=y
130CONFIG_SYSCTL=y
131CONFIG_ANON_INODES=y
132# CONFIG_EMBEDDED is not set
133CONFIG_UID16=y
134CONFIG_SYSCTL_SYSCALL=y
135CONFIG_KALLSYMS=y
136CONFIG_KALLSYMS_ALL=y
137CONFIG_KALLSYMS_EXTRA_PASS=y 26CONFIG_KALLSYMS_EXTRA_PASS=y
138# CONFIG_STRIP_ASM_SYMS is not set
139CONFIG_HOTPLUG=y
140CONFIG_PRINTK=y
141CONFIG_BUG=y
142CONFIG_ELF_CORE=y
143CONFIG_PCSPKR_PLATFORM=y
144CONFIG_BASE_FULL=y
145CONFIG_FUTEX=y
146CONFIG_EPOLL=y
147CONFIG_SIGNALFD=y
148CONFIG_TIMERFD=y
149CONFIG_EVENTFD=y
150CONFIG_SHMEM=y
151CONFIG_AIO=y
152CONFIG_VM_EVENT_COUNTERS=y
153CONFIG_PCI_QUIRKS=y
154CONFIG_SLUB_DEBUG=y
155# CONFIG_COMPAT_BRK is not set 27# CONFIG_COMPAT_BRK is not set
156# CONFIG_SLAB is not set
157CONFIG_SLUB=y
158# CONFIG_SLOB is not set
159CONFIG_PROFILING=y 28CONFIG_PROFILING=y
160CONFIG_TRACEPOINTS=y
161CONFIG_MARKERS=y
162# CONFIG_OPROFILE is not set
163CONFIG_HAVE_OPROFILE=y
164CONFIG_KPROBES=y 29CONFIG_KPROBES=y
165CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
166CONFIG_KRETPROBES=y
167CONFIG_HAVE_IOREMAP_PROT=y
168CONFIG_HAVE_KPROBES=y
169CONFIG_HAVE_KRETPROBES=y
170CONFIG_HAVE_ARCH_TRACEHOOK=y
171CONFIG_HAVE_DMA_API_DEBUG=y
172# CONFIG_SLOW_WORK is not set
173# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
174CONFIG_SLABINFO=y
175CONFIG_RT_MUTEXES=y
176CONFIG_BASE_SMALL=0
177CONFIG_MODULES=y 30CONFIG_MODULES=y
178# CONFIG_MODULE_FORCE_LOAD is not set
179CONFIG_MODULE_UNLOAD=y 31CONFIG_MODULE_UNLOAD=y
180CONFIG_MODULE_FORCE_UNLOAD=y 32CONFIG_MODULE_FORCE_UNLOAD=y
181# CONFIG_MODVERSIONS is not set
182# CONFIG_MODULE_SRCVERSION_ALL is not set
183CONFIG_STOP_MACHINE=y
184CONFIG_BLOCK=y
185CONFIG_BLK_DEV_BSG=y
186# CONFIG_BLK_DEV_INTEGRITY is not set
187CONFIG_BLOCK_COMPAT=y
188
189#
190# IO Schedulers
191#
192CONFIG_IOSCHED_NOOP=y
193CONFIG_IOSCHED_AS=y
194CONFIG_IOSCHED_DEADLINE=y
195CONFIG_IOSCHED_CFQ=y
196# CONFIG_DEFAULT_AS is not set
197# CONFIG_DEFAULT_DEADLINE is not set
198CONFIG_DEFAULT_CFQ=y
199# CONFIG_DEFAULT_NOOP is not set
200CONFIG_DEFAULT_IOSCHED="cfq"
201CONFIG_FREEZER=y
202
203#
204# Processor type and features
205#
206CONFIG_TICK_ONESHOT=y
207CONFIG_NO_HZ=y 33CONFIG_NO_HZ=y
208CONFIG_HIGH_RES_TIMERS=y 34CONFIG_HIGH_RES_TIMERS=y
209CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
210CONFIG_SMP=y 35CONFIG_SMP=y
211CONFIG_SPARSE_IRQ=y 36CONFIG_SPARSE_IRQ=y
212CONFIG_X86_MPPARSE=y
213CONFIG_X86_EXTENDED_PLATFORM=y
214# CONFIG_X86_VSMP is not set
215# CONFIG_X86_UV is not set
216CONFIG_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
243CONFIG_GENERIC_CPU=y
244CONFIG_X86_CPU=y
245CONFIG_X86_L1_CACHE_BYTES=64
246CONFIG_X86_INTERNODE_CACHE_BYTES=64
247CONFIG_X86_CMPXCHG=y
248CONFIG_X86_L1_CACHE_SHIFT=6
249CONFIG_X86_WP_WORKS_OK=y
250CONFIG_X86_TSC=y
251CONFIG_X86_CMPXCHG64=y
252CONFIG_X86_CMOV=y
253CONFIG_X86_MINIMUM_CPU_FAMILY=64
254CONFIG_X86_DEBUGCTLMSR=y
255CONFIG_CPU_SUP_INTEL=y
256CONFIG_CPU_SUP_AMD=y
257CONFIG_CPU_SUP_CENTAUR=y
258CONFIG_X86_DS=y
259CONFIG_X86_PTRACE_BTS=y
260CONFIG_HPET_TIMER=y
261CONFIG_HPET_EMULATE_RTC=y
262CONFIG_DMI=y
263CONFIG_GART_IOMMU=y
264CONFIG_CALGARY_IOMMU=y 37CONFIG_CALGARY_IOMMU=y
265CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
266CONFIG_AMD_IOMMU=y 38CONFIG_AMD_IOMMU=y
267CONFIG_AMD_IOMMU_STATS=y 39CONFIG_AMD_IOMMU_STATS=y
268CONFIG_SWIOTLB=y
269CONFIG_IOMMU_HELPER=y
270CONFIG_IOMMU_API=y
271# CONFIG_MAXSMP is not set
272CONFIG_NR_CPUS=64 40CONFIG_NR_CPUS=64
273CONFIG_SCHED_SMT=y 41CONFIG_SCHED_SMT=y
274CONFIG_SCHED_MC=y
275# CONFIG_PREEMPT_NONE is not set
276CONFIG_PREEMPT_VOLUNTARY=y 42CONFIG_PREEMPT_VOLUNTARY=y
277# CONFIG_PREEMPT is not set
278CONFIG_X86_LOCAL_APIC=y
279CONFIG_X86_IO_APIC=y
280CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y 43CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
281CONFIG_X86_MCE=y 44CONFIG_X86_MCE=y
282CONFIG_X86_MCE_INTEL=y
283CONFIG_X86_MCE_AMD=y
284CONFIG_X86_MCE_THRESHOLD=y
285# CONFIG_I8K is not set
286CONFIG_MICROCODE=y 45CONFIG_MICROCODE=y
287CONFIG_MICROCODE_INTEL=y
288CONFIG_MICROCODE_AMD=y 46CONFIG_MICROCODE_AMD=y
289CONFIG_MICROCODE_OLD_INTERFACE=y
290CONFIG_X86_MSR=y 47CONFIG_X86_MSR=y
291CONFIG_X86_CPUID=y 48CONFIG_X86_CPUID=y
292# CONFIG_X86_CPU_DEBUG is not set
293CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
294CONFIG_DIRECT_GBPAGES=y
295CONFIG_NUMA=y 49CONFIG_NUMA=y
296CONFIG_K8_NUMA=y
297CONFIG_X86_64_ACPI_NUMA=y
298CONFIG_NODES_SPAN_OTHER_NODES=y
299# CONFIG_NUMA_EMU is not set
300CONFIG_NODES_SHIFT=6
301CONFIG_ARCH_SPARSEMEM_DEFAULT=y
302CONFIG_ARCH_SPARSEMEM_ENABLE=y
303CONFIG_ARCH_SELECT_MEMORY_MODEL=y
304CONFIG_SELECT_MEMORY_MODEL=y
305# CONFIG_FLATMEM_MANUAL is not set
306# CONFIG_DISCONTIGMEM_MANUAL is not set
307CONFIG_SPARSEMEM_MANUAL=y
308CONFIG_SPARSEMEM=y
309CONFIG_NEED_MULTIPLE_NODES=y
310CONFIG_HAVE_MEMORY_PRESENT=y
311CONFIG_SPARSEMEM_EXTREME=y
312CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
313CONFIG_SPARSEMEM_VMEMMAP=y
314
315#
316# Memory hotplug is currently incompatible with Software Suspend
317#
318CONFIG_PAGEFLAGS_EXTENDED=y
319CONFIG_SPLIT_PTLOCK_CPUS=4
320CONFIG_MIGRATION=y
321CONFIG_PHYS_ADDR_T_64BIT=y
322CONFIG_ZONE_DMA_FLAG=1
323CONFIG_BOUNCE=y
324CONFIG_VIRT_TO_BUS=y
325CONFIG_UNEVICTABLE_LRU=y
326CONFIG_HAVE_MLOCK=y
327CONFIG_HAVE_MLOCKED_PAGE_BIT=y
328CONFIG_X86_CHECK_BIOS_CORRUPTION=y 50CONFIG_X86_CHECK_BIOS_CORRUPTION=y
329CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
330CONFIG_X86_RESERVE_LOW_64K=y
331CONFIG_MTRR=y
332# CONFIG_MTRR_SANITIZER is not set 51# CONFIG_MTRR_SANITIZER is not set
333CONFIG_X86_PAT=y
334CONFIG_EFI=y 52CONFIG_EFI=y
335CONFIG_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
340CONFIG_HZ_1000=y 53CONFIG_HZ_1000=y
341CONFIG_HZ=1000
342CONFIG_SCHED_HRTICK=y
343CONFIG_KEXEC=y 54CONFIG_KEXEC=y
344CONFIG_CRASH_DUMP=y 55CONFIG_CRASH_DUMP=y
345# CONFIG_KEXEC_JUMP is not set
346CONFIG_PHYSICAL_START=0x1000000
347CONFIG_RELOCATABLE=y
348CONFIG_PHYSICAL_ALIGN=0x1000000
349CONFIG_HOTPLUG_CPU=y
350# CONFIG_COMPAT_VDSO is not set 56# CONFIG_COMPAT_VDSO is not set
351# CONFIG_CMDLINE_BOOL is not set
352CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
353CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
354
355#
356# Power management and ACPI options
357#
358CONFIG_ARCH_HIBERNATION_HEADER=y
359CONFIG_PM=y 57CONFIG_PM=y
360CONFIG_PM_DEBUG=y 58CONFIG_PM_DEBUG=y
361# CONFIG_PM_VERBOSE is not set
362CONFIG_CAN_PM_TRACE=y
363CONFIG_PM_TRACE=y
364CONFIG_PM_TRACE_RTC=y 59CONFIG_PM_TRACE_RTC=y
365CONFIG_PM_SLEEP_SMP=y
366CONFIG_PM_SLEEP=y
367CONFIG_SUSPEND=y
368# CONFIG_PM_TEST_SUSPEND is not set
369CONFIG_SUSPEND_FREEZER=y
370CONFIG_HIBERNATION=y 60CONFIG_HIBERNATION=y
371CONFIG_PM_STD_PARTITION=""
372CONFIG_ACPI=y
373CONFIG_ACPI_SLEEP=y
374CONFIG_ACPI_PROCFS=y 61CONFIG_ACPI_PROCFS=y
375CONFIG_ACPI_PROCFS_POWER=y
376CONFIG_ACPI_SYSFS_POWER=y
377CONFIG_ACPI_PROC_EVENT=y
378CONFIG_ACPI_AC=y
379CONFIG_ACPI_BATTERY=y
380CONFIG_ACPI_BUTTON=y
381CONFIG_ACPI_FAN=y
382CONFIG_ACPI_DOCK=y 62CONFIG_ACPI_DOCK=y
383CONFIG_ACPI_PROCESSOR=y
384CONFIG_ACPI_HOTPLUG_CPU=y
385CONFIG_ACPI_THERMAL=y
386CONFIG_ACPI_NUMA=y
387# CONFIG_ACPI_CUSTOM_DSDT is not set
388CONFIG_ACPI_BLACKLIST_YEAR=0
389# CONFIG_ACPI_DEBUG is not set
390# CONFIG_ACPI_PCI_SLOT is not set
391CONFIG_X86_PM_TIMER=y
392CONFIG_ACPI_CONTAINER=y
393# CONFIG_ACPI_SBS is not set
394
395#
396# CPU Frequency scaling
397#
398CONFIG_CPU_FREQ=y 63CONFIG_CPU_FREQ=y
399CONFIG_CPU_FREQ_TABLE=y
400CONFIG_CPU_FREQ_DEBUG=y 64CONFIG_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
404CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y 66CONFIG_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
407CONFIG_CPU_FREQ_GOV_PERFORMANCE=y 67CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
408# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
409CONFIG_CPU_FREQ_GOV_USERSPACE=y
410CONFIG_CPU_FREQ_GOV_ONDEMAND=y 68CONFIG_CPU_FREQ_GOV_ONDEMAND=y
411# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
412
413#
414# CPUFreq processor drivers
415#
416CONFIG_X86_ACPI_CPUFREQ=y 69CONFIG_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
425CONFIG_CPU_IDLE=y
426CONFIG_CPU_IDLE_GOV_LADDER=y
427CONFIG_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#
437CONFIG_PCI=y
438CONFIG_PCI_DIRECT=y
439CONFIG_PCI_MMCONFIG=y 70CONFIG_PCI_MMCONFIG=y
440CONFIG_PCI_DOMAINS=y
441CONFIG_DMAR=y 71CONFIG_DMAR=y
442# CONFIG_DMAR_DEFAULT_ON is not set 72# CONFIG_DMAR_DEFAULT_ON is not set
443CONFIG_DMAR_GFX_WA=y
444CONFIG_DMAR_FLOPPY_WA=y
445# CONFIG_INTR_REMAP is not set
446CONFIG_PCIEPORTBUS=y 73CONFIG_PCIEPORTBUS=y
447# CONFIG_HOTPLUG_PCI_PCIE is not set
448CONFIG_PCIEAER=y
449# CONFIG_PCIEASPM is not set
450CONFIG_ARCH_SUPPORTS_MSI=y
451CONFIG_PCI_MSI=y
452# CONFIG_PCI_LEGACY is not set
453# CONFIG_PCI_DEBUG is not set
454# CONFIG_PCI_STUB is not set
455CONFIG_HT_IRQ=y
456# CONFIG_PCI_IOV is not set
457CONFIG_ISA_DMA_API=y
458CONFIG_K8_NB=y
459CONFIG_PCCARD=y 74CONFIG_PCCARD=y
460# CONFIG_PCMCIA_DEBUG is not set
461CONFIG_PCMCIA=y
462CONFIG_PCMCIA_LOAD_CIS=y
463CONFIG_PCMCIA_IOCTL=y
464CONFIG_CARDBUS=y
465
466#
467# PC-card bridges
468#
469CONFIG_YENTA=y 75CONFIG_YENTA=y
470CONFIG_YENTA_O2=y
471CONFIG_YENTA_RICOH=y
472CONFIG_YENTA_TI=y
473CONFIG_YENTA_ENE_TUNE=y
474CONFIG_YENTA_TOSHIBA=y
475# CONFIG_PD6729 is not set
476# CONFIG_I82092 is not set
477CONFIG_PCCARD_NONSTATIC=y
478CONFIG_HOTPLUG_PCI=y 76CONFIG_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#
487CONFIG_BINFMT_ELF=y
488CONFIG_COMPAT_BINFMT_ELF=y
489CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y 77CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
490# CONFIG_HAVE_AOUT is not set
491CONFIG_BINFMT_MISC=y 78CONFIG_BINFMT_MISC=y
492CONFIG_IA32_EMULATION=y 79CONFIG_IA32_EMULATION=y
493# CONFIG_IA32_AOUT is not set
494CONFIG_COMPAT=y
495CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
496CONFIG_SYSVIPC_COMPAT=y
497CONFIG_NET=y 80CONFIG_NET=y
498
499#
500# Networking options
501#
502CONFIG_PACKET=y 81CONFIG_PACKET=y
503CONFIG_PACKET_MMAP=y
504CONFIG_UNIX=y 82CONFIG_UNIX=y
505CONFIG_XFRM=y
506CONFIG_XFRM_USER=y 83CONFIG_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
511CONFIG_INET=y 84CONFIG_INET=y
512CONFIG_IP_MULTICAST=y 85CONFIG_IP_MULTICAST=y
513CONFIG_IP_ADVANCED_ROUTER=y 86CONFIG_IP_ADVANCED_ROUTER=y
514CONFIG_ASK_IP_FIB_HASH=y
515# CONFIG_IP_FIB_TRIE is not set
516CONFIG_IP_FIB_HASH=y
517CONFIG_IP_MULTIPLE_TABLES=y 87CONFIG_IP_MULTIPLE_TABLES=y
518CONFIG_IP_ROUTE_MULTIPATH=y 88CONFIG_IP_ROUTE_MULTIPATH=y
519CONFIG_IP_ROUTE_VERBOSE=y 89CONFIG_IP_ROUTE_VERBOSE=y
@@ -521,118 +91,46 @@ CONFIG_IP_PNP=y
521CONFIG_IP_PNP_DHCP=y 91CONFIG_IP_PNP_DHCP=y
522CONFIG_IP_PNP_BOOTP=y 92CONFIG_IP_PNP_BOOTP=y
523CONFIG_IP_PNP_RARP=y 93CONFIG_IP_PNP_RARP=y
524# CONFIG_NET_IPIP is not set
525# CONFIG_NET_IPGRE is not set
526CONFIG_IP_MROUTE=y 94CONFIG_IP_MROUTE=y
527CONFIG_IP_PIMSM_V1=y 95CONFIG_IP_PIMSM_V1=y
528CONFIG_IP_PIMSM_V2=y 96CONFIG_IP_PIMSM_V2=y
529# CONFIG_ARPD is not set
530CONFIG_SYN_COOKIES=y 97CONFIG_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
535CONFIG_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
539CONFIG_INET_LRO=y
540# CONFIG_INET_DIAG is not set 101# CONFIG_INET_DIAG is not set
541CONFIG_TCP_CONG_ADVANCED=y 102CONFIG_TCP_CONG_ADVANCED=y
542# CONFIG_TCP_CONG_BIC is not set 103# CONFIG_TCP_CONG_BIC is not set
543CONFIG_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
555CONFIG_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
560CONFIG_DEFAULT_TCP_CONG="cubic"
561CONFIG_TCP_MD5SIG=y 106CONFIG_TCP_MD5SIG=y
562CONFIG_IPV6=y 107CONFIG_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
566CONFIG_INET6_AH=y 108CONFIG_INET6_AH=y
567CONFIG_INET6_ESP=y 109CONFIG_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
572CONFIG_INET6_XFRM_MODE_TRANSPORT=y
573CONFIG_INET6_XFRM_MODE_TUNNEL=y
574CONFIG_INET6_XFRM_MODE_BEET=y
575# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
576CONFIG_IPV6_SIT=y
577CONFIG_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
581CONFIG_NETLABEL=y 110CONFIG_NETLABEL=y
582CONFIG_NETWORK_SECMARK=y
583CONFIG_NETFILTER=y 111CONFIG_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#
590CONFIG_NETFILTER_NETLINK=y
591CONFIG_NETFILTER_NETLINK_LOG=y
592CONFIG_NF_CONNTRACK=y 113CONFIG_NF_CONNTRACK=y
593CONFIG_NF_CONNTRACK_SECMARK=y
594CONFIG_NF_CONNTRACK_FTP=y 114CONFIG_NF_CONNTRACK_FTP=y
595CONFIG_NF_CONNTRACK_IRC=y 115CONFIG_NF_CONNTRACK_IRC=y
596CONFIG_NF_CONNTRACK_SIP=y 116CONFIG_NF_CONNTRACK_SIP=y
597CONFIG_NF_CT_NETLINK=y 117CONFIG_NF_CT_NETLINK=y
598CONFIG_NETFILTER_XTABLES=y
599CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y 118CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
600CONFIG_NETFILTER_XT_TARGET_MARK=y
601CONFIG_NETFILTER_XT_TARGET_NFLOG=y 119CONFIG_NETFILTER_XT_TARGET_NFLOG=y
602CONFIG_NETFILTER_XT_TARGET_SECMARK=y 120CONFIG_NETFILTER_XT_TARGET_SECMARK=y
603CONFIG_NETFILTER_XT_TARGET_TCPMSS=y 121CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
604CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y 122CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
605CONFIG_NETFILTER_XT_MATCH_MARK=y
606CONFIG_NETFILTER_XT_MATCH_POLICY=y 123CONFIG_NETFILTER_XT_MATCH_POLICY=y
607CONFIG_NETFILTER_XT_MATCH_STATE=y 124CONFIG_NETFILTER_XT_MATCH_STATE=y
608# CONFIG_IP_VS is not set
609
610#
611# IP: Netfilter Configuration
612#
613CONFIG_NF_DEFRAG_IPV4=y
614CONFIG_NF_CONNTRACK_IPV4=y 125CONFIG_NF_CONNTRACK_IPV4=y
615CONFIG_NF_CONNTRACK_PROC_COMPAT=y
616CONFIG_IP_NF_IPTABLES=y 126CONFIG_IP_NF_IPTABLES=y
617CONFIG_IP_NF_FILTER=y 127CONFIG_IP_NF_FILTER=y
618CONFIG_IP_NF_TARGET_REJECT=y 128CONFIG_IP_NF_TARGET_REJECT=y
619CONFIG_IP_NF_TARGET_LOG=y 129CONFIG_IP_NF_TARGET_LOG=y
620CONFIG_IP_NF_TARGET_ULOG=y 130CONFIG_IP_NF_TARGET_ULOG=y
621CONFIG_NF_NAT=y 131CONFIG_NF_NAT=y
622CONFIG_NF_NAT_NEEDED=y
623CONFIG_IP_NF_TARGET_MASQUERADE=y 132CONFIG_IP_NF_TARGET_MASQUERADE=y
624CONFIG_NF_NAT_FTP=y
625CONFIG_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
630CONFIG_NF_NAT_SIP=y
631CONFIG_IP_NF_MANGLE=y 133CONFIG_IP_NF_MANGLE=y
632
633#
634# IPv6: Netfilter Configuration
635#
636CONFIG_NF_CONNTRACK_IPV6=y 134CONFIG_NF_CONNTRACK_IPV6=y
637CONFIG_IP6_NF_IPTABLES=y 135CONFIG_IP6_NF_IPTABLES=y
638CONFIG_IP6_NF_MATCH_IPV6HEADER=y 136CONFIG_IP6_NF_MATCH_IPV6HEADER=y
@@ -640,1208 +138,111 @@ CONFIG_IP6_NF_TARGET_LOG=y
640CONFIG_IP6_NF_FILTER=y 138CONFIG_IP6_NF_FILTER=y
641CONFIG_IP6_NF_TARGET_REJECT=y 139CONFIG_IP6_NF_TARGET_REJECT=y
642CONFIG_IP6_NF_MANGLE=y 140CONFIG_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
651CONFIG_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
660CONFIG_NET_SCHED=y 141CONFIG_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#
683CONFIG_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
693CONFIG_NET_EMATCH=y 142CONFIG_NET_EMATCH=y
694CONFIG_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
700CONFIG_NET_CLS_ACT=y 143CONFIG_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
709CONFIG_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
718CONFIG_HAMRADIO=y 144CONFIG_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
728CONFIG_FIB_RULES=y
729CONFIG_WIRELESS=y
730CONFIG_CFG80211=y 145CONFIG_CFG80211=y
731# CONFIG_CFG80211_REG_DEBUG is not set
732CONFIG_WIRELESS_OLD_REGULATORY=y
733CONFIG_WIRELESS_EXT=y
734CONFIG_WIRELESS_EXT_SYSFS=y
735# CONFIG_LIB80211 is not set
736CONFIG_MAC80211=y 146CONFIG_MAC80211=y
737
738#
739# Rate control algorithm selection
740#
741CONFIG_MAC80211_RC_MINSTREL=y
742# CONFIG_MAC80211_RC_DEFAULT_PID is not set
743CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
744CONFIG_MAC80211_RC_DEFAULT="minstrel"
745# CONFIG_MAC80211_MESH is not set
746CONFIG_MAC80211_LEDS=y 147CONFIG_MAC80211_LEDS=y
747# CONFIG_MAC80211_DEBUGFS is not set
748# CONFIG_MAC80211_DEBUG_MENU is not set
749# CONFIG_WIMAX is not set
750CONFIG_RFKILL=y 148CONFIG_RFKILL=y
751# CONFIG_RFKILL_INPUT is not set
752CONFIG_RFKILL_LEDS=y
753# CONFIG_NET_9P is not set
754
755#
756# Device Drivers
757#
758
759#
760# Generic Driver Options
761#
762CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 149CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
763CONFIG_STANDALONE=y
764CONFIG_PREVENT_FIRMWARE_BUILD=y
765CONFIG_FW_LOADER=y
766CONFIG_FIRMWARE_IN_KERNEL=y
767CONFIG_EXTRA_FIRMWARE=""
768# CONFIG_DEBUG_DRIVER is not set
769CONFIG_DEBUG_DEVRES=y 150CONFIG_DEBUG_DEVRES=y
770# CONFIG_SYS_HYPERVISOR is not set
771CONFIG_CONNECTOR=y 151CONFIG_CONNECTOR=y
772CONFIG_PROC_EVENTS=y
773# CONFIG_MTD is not set
774# CONFIG_PARPORT is not set
775CONFIG_PNP=y
776CONFIG_PNP_DEBUG_MESSAGES=y
777
778#
779# Protocols
780#
781CONFIG_PNPACPI=y
782CONFIG_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
789CONFIG_BLK_DEV_LOOP=y 152CONFIG_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
794CONFIG_BLK_DEV_RAM=y 153CONFIG_BLK_DEV_RAM=y
795CONFIG_BLK_DEV_RAM_COUNT=16
796CONFIG_BLK_DEV_RAM_SIZE=16384 154CONFIG_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
801CONFIG_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
818CONFIG_HAVE_IDE=y
819# CONFIG_IDE is not set
820
821#
822# SCSI device support
823#
824# CONFIG_RAID_ATTRS is not set
825CONFIG_SCSI=y
826CONFIG_SCSI_DMA=y
827# CONFIG_SCSI_TGT is not set
828# CONFIG_SCSI_NETLINK is not set
829CONFIG_SCSI_PROC_FS=y
830
831#
832# SCSI support type (disk, tape, CD-ROM)
833#
834CONFIG_BLK_DEV_SD=y 155CONFIG_BLK_DEV_SD=y
835# CONFIG_CHR_DEV_ST is not set
836# CONFIG_CHR_DEV_OSST is not set
837CONFIG_BLK_DEV_SR=y 156CONFIG_BLK_DEV_SR=y
838CONFIG_BLK_DEV_SR_VENDOR=y 157CONFIG_BLK_DEV_SR_VENDOR=y
839CONFIG_CHR_DEV_SG=y 158CONFIG_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
846CONFIG_SCSI_CONSTANTS=y 159CONFIG_SCSI_CONSTANTS=y
847# CONFIG_SCSI_LOGGING is not set
848# CONFIG_SCSI_SCAN_ASYNC is not set
849CONFIG_SCSI_WAIT_SCAN=m
850
851#
852# SCSI Transports
853#
854CONFIG_SCSI_SPI_ATTRS=y 160CONFIG_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
864CONFIG_ATA=y 162CONFIG_ATA=y
865# CONFIG_ATA_NONSTANDARD is not set
866CONFIG_ATA_ACPI=y
867CONFIG_SATA_PMP=y
868CONFIG_SATA_AHCI=y 163CONFIG_SATA_AHCI=y
869# CONFIG_SATA_SIL24 is not set
870CONFIG_ATA_SFF=y
871# CONFIG_SATA_SVW is not set
872CONFIG_ATA_PIIX=y 164CONFIG_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
887CONFIG_PATA_AMD=y 165CONFIG_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
907CONFIG_PATA_OLDPIIX=y 166CONFIG_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
925CONFIG_PATA_SCH=y 167CONFIG_PATA_SCH=y
926CONFIG_MD=y 168CONFIG_MD=y
927CONFIG_BLK_DEV_MD=y 169CONFIG_BLK_DEV_MD=y
928CONFIG_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
936CONFIG_BLK_DEV_DM=y 170CONFIG_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
940CONFIG_DM_MIRROR=y 171CONFIG_DM_MIRROR=y
941CONFIG_DM_ZERO=y 172CONFIG_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
957CONFIG_MACINTOSH_DRIVERS=y 173CONFIG_MACINTOSH_DRIVERS=y
958CONFIG_MAC_EMUMOUSEBTN=y 174CONFIG_MAC_EMUMOUSEBTN=y
959CONFIG_NETDEVICES=y 175CONFIG_NETDEVICES=y
960CONFIG_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
970CONFIG_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
990CONFIG_NET_ETHERNET=y 176CONFIG_NET_ETHERNET=y
991CONFIG_MII=y
992# CONFIG_HAPPYMEAL is not set
993# CONFIG_SUNGEM is not set
994# CONFIG_CASSINI is not set
995CONFIG_NET_VENDOR_3COM=y 177CONFIG_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
1000CONFIG_NET_TULIP=y 178CONFIG_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
1016CONFIG_NET_PCI=y 179CONFIG_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
1021CONFIG_FORCEDETH=y 180CONFIG_FORCEDETH=y
1022# CONFIG_FORCEDETH_NAPI is not set
1023CONFIG_E100=y 181CONFIG_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
1028CONFIG_8139TOO=y 182CONFIG_8139TOO=y
1029CONFIG_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
1042CONFIG_NETDEV_1000=y
1043# CONFIG_ACENIC is not set
1044# CONFIG_DL2K is not set
1045CONFIG_E1000=y 183CONFIG_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
1056CONFIG_SKY2=y 184CONFIG_SKY2=y
1057# CONFIG_SKY2_DEBUG is not set
1058# CONFIG_VIA_VELOCITY is not set
1059CONFIG_TIGON3=y 185CONFIG_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
1066CONFIG_NETDEV_10000=y
1067# CONFIG_CHELSIO_T1 is not set
1068CONFIG_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
1085CONFIG_TR=y 186CONFIG_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
1094CONFIG_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
1112CONFIG_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
1139CONFIG_NET_PCMCIA=y 187CONFIG_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
1150CONFIG_FDDI=y 188CONFIG_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
1157CONFIG_NETCONSOLE=y 189CONFIG_NETCONSOLE=y
1158# CONFIG_NETCONSOLE_DYNAMIC is not set
1159CONFIG_NETPOLL=y
1160# CONFIG_NETPOLL_TRAP is not set
1161CONFIG_NET_POLL_CONTROLLER=y
1162# CONFIG_ISDN is not set
1163# CONFIG_PHONE is not set
1164
1165#
1166# Input device support
1167#
1168CONFIG_INPUT=y
1169CONFIG_INPUT_FF_MEMLESS=y
1170CONFIG_INPUT_POLLDEV=y 190CONFIG_INPUT_POLLDEV=y
1171
1172#
1173# Userland interfaces
1174#
1175CONFIG_INPUT_MOUSEDEV=y
1176# CONFIG_INPUT_MOUSEDEV_PSAUX is not set 191# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
1177CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
1178CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1179# CONFIG_INPUT_JOYDEV is not set
1180CONFIG_INPUT_EVDEV=y 192CONFIG_INPUT_EVDEV=y
1181# CONFIG_INPUT_EVBUG is not set
1182
1183#
1184# Input Device Drivers
1185#
1186CONFIG_INPUT_KEYBOARD=y
1187CONFIG_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
1193CONFIG_INPUT_MOUSE=y
1194CONFIG_MOUSE_PS2=y
1195CONFIG_MOUSE_PS2_ALPS=y
1196CONFIG_MOUSE_PS2_LOGIPS2PP=y
1197CONFIG_MOUSE_PS2_SYNAPTICS=y
1198CONFIG_MOUSE_PS2_LIFEBOOK=y
1199CONFIG_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
1206CONFIG_INPUT_JOYSTICK=y 193CONFIG_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
1228CONFIG_INPUT_TABLET=y 194CONFIG_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
1234CONFIG_INPUT_TOUCHSCREEN=y 195CONFIG_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
1250CONFIG_INPUT_MISC=y 196CONFIG_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#
1265CONFIG_SERIO=y
1266CONFIG_SERIO_I8042=y
1267CONFIG_SERIO_SERPORT=y
1268# CONFIG_SERIO_CT82C710 is not set
1269# CONFIG_SERIO_PCIPS2 is not set
1270CONFIG_SERIO_LIBPS2=y
1271# CONFIG_SERIO_RAW is not set
1272# CONFIG_GAMEPORT is not set
1273
1274#
1275# Character devices
1276#
1277CONFIG_VT=y
1278CONFIG_CONSOLE_TRANSLATIONS=y
1279CONFIG_VT_CONSOLE=y
1280CONFIG_HW_CONSOLE=y
1281CONFIG_VT_HW_CONSOLE_BINDING=y 197CONFIG_VT_HW_CONSOLE_BINDING=y
1282CONFIG_DEVKMEM=y
1283CONFIG_SERIAL_NONSTANDARD=y 198CONFIG_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#
1305CONFIG_SERIAL_8250=y 199CONFIG_SERIAL_8250=y
1306CONFIG_SERIAL_8250_CONSOLE=y 200CONFIG_SERIAL_8250_CONSOLE=y
1307CONFIG_FIX_EARLYCON_MEM=y
1308CONFIG_SERIAL_8250_PCI=y
1309CONFIG_SERIAL_8250_PNP=y
1310# CONFIG_SERIAL_8250_CS is not set
1311CONFIG_SERIAL_8250_NR_UARTS=32 201CONFIG_SERIAL_8250_NR_UARTS=32
1312CONFIG_SERIAL_8250_RUNTIME_UARTS=4
1313CONFIG_SERIAL_8250_EXTENDED=y 202CONFIG_SERIAL_8250_EXTENDED=y
1314CONFIG_SERIAL_8250_MANY_PORTS=y 203CONFIG_SERIAL_8250_MANY_PORTS=y
1315CONFIG_SERIAL_8250_SHARE_IRQ=y 204CONFIG_SERIAL_8250_SHARE_IRQ=y
1316CONFIG_SERIAL_8250_DETECT_IRQ=y 205CONFIG_SERIAL_8250_DETECT_IRQ=y
1317CONFIG_SERIAL_8250_RSA=y 206CONFIG_SERIAL_8250_RSA=y
1318
1319#
1320# Non-8250 serial port support
1321#
1322CONFIG_SERIAL_CORE=y
1323CONFIG_SERIAL_CORE_CONSOLE=y
1324# CONFIG_SERIAL_JSM is not set
1325CONFIG_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
1329CONFIG_HW_RANDOM=y 208CONFIG_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
1333CONFIG_NVRAM=y 211CONFIG_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
1347CONFIG_HPET=y 212CONFIG_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
1352CONFIG_DEVPORT=y
1353CONFIG_I2C=y
1354CONFIG_I2C_BOARDINFO=y
1355# CONFIG_I2C_CHARDEV is not set
1356CONFIG_I2C_HELPER_AUTO=y
1357CONFIG_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
1371CONFIG_I2C_I801=y 214CONFIG_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
1419CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
1420# CONFIG_GPIOLIB is not set
1421# CONFIG_W1 is not set
1422CONFIG_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
1427CONFIG_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
1501CONFIG_THERMAL=y
1502# CONFIG_THERMAL_HWMON is not set
1503CONFIG_WATCHDOG=y 215CONFIG_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
1549CONFIG_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#
1584CONFIG_DAB=y
1585# CONFIG_USB_DABUSB is not set
1586
1587#
1588# Graphics support
1589#
1590CONFIG_AGP=y 216CONFIG_AGP=y
1591CONFIG_AGP_AMD64=y 217CONFIG_AGP_AMD64=y
1592CONFIG_AGP_INTEL=y 218CONFIG_AGP_INTEL=y
1593# CONFIG_AGP_SIS is not set
1594# CONFIG_AGP_VIA is not set
1595CONFIG_DRM=y 219CONFIG_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
1601CONFIG_DRM_I915=y 220CONFIG_DRM_I915=y
1602CONFIG_DRM_I915_KMS=y 221CONFIG_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
1609CONFIG_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
1613CONFIG_FB_CFB_FILLRECT=y
1614CONFIG_FB_CFB_COPYAREA=y
1615CONFIG_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
1625CONFIG_FB_MODE_HELPERS=y 222CONFIG_FB_MODE_HELPERS=y
1626CONFIG_FB_TILEBLITTING=y 223CONFIG_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
1640CONFIG_FB_EFI=y 224CONFIG_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
1670CONFIG_BACKLIGHT_LCD_SUPPORT=y 225CONFIG_BACKLIGHT_LCD_SUPPORT=y
1671# CONFIG_LCD_CLASS_DEVICE is not set 226# CONFIG_LCD_CLASS_DEVICE is not set
1672CONFIG_BACKLIGHT_CLASS_DEVICE=y
1673CONFIG_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#
1686CONFIG_VGA_CONSOLE=y
1687CONFIG_VGACON_SOFT_SCROLLBACK=y 227CONFIG_VGACON_SOFT_SCROLLBACK=y
1688CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
1689CONFIG_DUMMY_CONSOLE=y
1690# CONFIG_FRAMEBUFFER_CONSOLE is not set
1691CONFIG_LOGO=y 228CONFIG_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
1694CONFIG_LOGO_LINUX_CLUT224=y
1695CONFIG_SOUND=y 231CONFIG_SOUND=y
1696CONFIG_SOUND_OSS_CORE=y
1697CONFIG_SND=y 232CONFIG_SND=y
1698CONFIG_SND_TIMER=y
1699CONFIG_SND_PCM=y
1700CONFIG_SND_HWDEP=y
1701CONFIG_SND_JACK=y
1702CONFIG_SND_SEQUENCER=y 233CONFIG_SND_SEQUENCER=y
1703CONFIG_SND_SEQ_DUMMY=y 234CONFIG_SND_SEQ_DUMMY=y
1704CONFIG_SND_OSSEMUL=y
1705CONFIG_SND_MIXER_OSS=y 235CONFIG_SND_MIXER_OSS=y
1706CONFIG_SND_PCM_OSS=y 236CONFIG_SND_PCM_OSS=y
1707CONFIG_SND_PCM_OSS_PLUGINS=y
1708CONFIG_SND_SEQUENCER_OSS=y 237CONFIG_SND_SEQUENCER_OSS=y
1709CONFIG_SND_HRTIMER=y 238CONFIG_SND_HRTIMER=y
1710CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
1711CONFIG_SND_DYNAMIC_MINORS=y
1712CONFIG_SND_SUPPORT_OLD_API=y
1713CONFIG_SND_VERBOSE_PROCFS=y
1714# CONFIG_SND_VERBOSE_PRINTK is not set
1715# CONFIG_SND_DEBUG is not set
1716CONFIG_SND_VMASTER=y
1717CONFIG_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
1724CONFIG_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
1764CONFIG_SND_HDA_INTEL=y 239CONFIG_SND_HDA_INTEL=y
1765CONFIG_SND_HDA_HWDEP=y 240CONFIG_SND_HDA_HWDEP=y
1766# CONFIG_SND_HDA_RECONFIG is not set
1767# CONFIG_SND_HDA_INPUT_BEEP is not set
1768CONFIG_SND_HDA_CODEC_REALTEK=y
1769CONFIG_SND_HDA_CODEC_ANALOG=y
1770CONFIG_SND_HDA_CODEC_SIGMATEL=y
1771CONFIG_SND_HDA_CODEC_VIA=y
1772CONFIG_SND_HDA_CODEC_ATIHDMI=y
1773CONFIG_SND_HDA_CODEC_NVHDMI=y
1774CONFIG_SND_HDA_CODEC_INTELHDMI=y
1775CONFIG_SND_HDA_ELD=y
1776CONFIG_SND_HDA_CODEC_CONEXANT=y
1777CONFIG_SND_HDA_CODEC_CMEDIA=y
1778CONFIG_SND_HDA_CODEC_SI3054=y
1779CONFIG_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
1804CONFIG_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
1809CONFIG_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
1814CONFIG_HID_SUPPORT=y
1815CONFIG_HID=y
1816CONFIG_HID_DEBUG=y
1817CONFIG_HIDRAW=y 241CONFIG_HIDRAW=y
1818
1819#
1820# USB Input Devices
1821#
1822CONFIG_USB_HID=y
1823CONFIG_HID_PID=y 242CONFIG_HID_PID=y
1824CONFIG_USB_HIDDEV=y 243CONFIG_USB_HIDDEV=y
1825
1826#
1827# Special HID drivers
1828#
1829CONFIG_HID_A4TECH=y
1830CONFIG_HID_APPLE=y
1831CONFIG_HID_BELKIN=y
1832CONFIG_HID_CHERRY=y
1833CONFIG_HID_CHICONY=y
1834CONFIG_HID_CYPRESS=y
1835# CONFIG_DRAGONRISE_FF is not set
1836CONFIG_HID_EZKEY=y
1837CONFIG_HID_KYE=y
1838CONFIG_HID_GYRATION=y 244CONFIG_HID_GYRATION=y
1839CONFIG_HID_KENSINGTON=y
1840CONFIG_HID_LOGITECH=y
1841CONFIG_LOGITECH_FF=y 245CONFIG_LOGITECH_FF=y
1842# CONFIG_LOGIRUMBLEPAD2_FF is not set
1843CONFIG_HID_MICROSOFT=y
1844CONFIG_HID_MONTEREY=y
1845CONFIG_HID_NTRIG=y 246CONFIG_HID_NTRIG=y
1846CONFIG_HID_PANTHERLORD=y 247CONFIG_HID_PANTHERLORD=y
1847CONFIG_PANTHERLORD_FF=y 248CONFIG_PANTHERLORD_FF=y
@@ -1849,697 +250,90 @@ CONFIG_HID_PETALYNX=y
1849CONFIG_HID_SAMSUNG=y 250CONFIG_HID_SAMSUNG=y
1850CONFIG_HID_SONY=y 251CONFIG_HID_SONY=y
1851CONFIG_HID_SUNPLUS=y 252CONFIG_HID_SUNPLUS=y
1852# CONFIG_GREENASIA_FF is not set
1853CONFIG_HID_TOPSEED=y 253CONFIG_HID_TOPSEED=y
1854CONFIG_THRUSTMASTER_FF=y
1855CONFIG_ZEROPLUS_FF=y
1856CONFIG_USB_SUPPORT=y
1857CONFIG_USB_ARCH_HAS_HCD=y
1858CONFIG_USB_ARCH_HAS_OHCI=y
1859CONFIG_USB_ARCH_HAS_EHCI=y
1860CONFIG_USB=y 254CONFIG_USB=y
1861CONFIG_USB_DEBUG=y 255CONFIG_USB_DEBUG=y
1862CONFIG_USB_ANNOUNCE_NEW_DEVICES=y 256CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
1863
1864#
1865# Miscellaneous USB options
1866#
1867CONFIG_USB_DEVICEFS=y 257CONFIG_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
1870CONFIG_USB_SUSPEND=y
1871# CONFIG_USB_OTG is not set
1872CONFIG_USB_MON=y 259CONFIG_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
1880CONFIG_USB_EHCI_HCD=y 260CONFIG_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
1886CONFIG_USB_OHCI_HCD=y 262CONFIG_USB_OHCI_HCD=y
1887# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1888# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1889CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1890CONFIG_USB_UHCI_HCD=y 263CONFIG_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
1900CONFIG_USB_PRINTER=y 264CONFIG_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#
1911CONFIG_USB_STORAGE=y 265CONFIG_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
1924CONFIG_USB_LIBUSUAL=y 266CONFIG_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
1970CONFIG_NEW_LEDS=y
1971CONFIG_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#
1986CONFIG_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
1997CONFIG_EDAC=y 267CONFIG_EDAC=y
1998
1999#
2000# Reporting subsystems
2001#
2002# CONFIG_EDAC_DEBUG is not set
2003# CONFIG_EDAC_MM_EDAC is not set
2004CONFIG_RTC_LIB=y
2005CONFIG_RTC_CLASS=y 268CONFIG_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#
2012CONFIG_RTC_INTF_SYSFS=y
2013CONFIG_RTC_INTF_PROC=y
2014CONFIG_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#
2042CONFIG_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#
2057CONFIG_DMADEVICES=y 270CONFIG_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
2066CONFIG_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
2076CONFIG_EEEPC_LAPTOP=y 271CONFIG_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
2085CONFIG_FIRMWARE_MEMMAP=y
2086CONFIG_EFI_VARS=y 272CONFIG_EFI_VARS=y
2087# CONFIG_DELL_RBU is not set
2088# CONFIG_DCDBAS is not set
2089CONFIG_DMIID=y
2090# CONFIG_ISCSI_IBFT_FIND is not set
2091
2092#
2093# File systems
2094#
2095# CONFIG_EXT2_FS is not set
2096CONFIG_EXT3_FS=y 273CONFIG_EXT3_FS=y
2097# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set 274# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
2098CONFIG_EXT3_FS_XATTR=y
2099CONFIG_EXT3_FS_POSIX_ACL=y 275CONFIG_EXT3_FS_POSIX_ACL=y
2100CONFIG_EXT3_FS_SECURITY=y 276CONFIG_EXT3_FS_SECURITY=y
2101# CONFIG_EXT4_FS is not set
2102CONFIG_JBD=y
2103# CONFIG_JBD_DEBUG is not set
2104CONFIG_FS_MBCACHE=y
2105# CONFIG_REISERFS_FS is not set
2106# CONFIG_JFS_FS is not set
2107CONFIG_FS_POSIX_ACL=y
2108CONFIG_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
2113CONFIG_DNOTIFY=y
2114CONFIG_INOTIFY=y
2115CONFIG_INOTIFY_USER=y
2116CONFIG_QUOTA=y 277CONFIG_QUOTA=y
2117CONFIG_QUOTA_NETLINK_INTERFACE=y 278CONFIG_QUOTA_NETLINK_INTERFACE=y
2118# CONFIG_PRINT_QUOTA_WARNING is not set 279# CONFIG_PRINT_QUOTA_WARNING is not set
2119CONFIG_QUOTA_TREE=y
2120# CONFIG_QFMT_V1 is not set
2121CONFIG_QFMT_V2=y 280CONFIG_QFMT_V2=y
2122CONFIG_QUOTACTL=y
2123# CONFIG_AUTOFS_FS is not set
2124CONFIG_AUTOFS4_FS=y 281CONFIG_AUTOFS4_FS=y
2125# CONFIG_FUSE_FS is not set
2126CONFIG_GENERIC_ACL=y
2127
2128#
2129# Caches
2130#
2131# CONFIG_FSCACHE is not set
2132
2133#
2134# CD-ROM/DVD Filesystems
2135#
2136CONFIG_ISO9660_FS=y 282CONFIG_ISO9660_FS=y
2137CONFIG_JOLIET=y 283CONFIG_JOLIET=y
2138CONFIG_ZISOFS=y 284CONFIG_ZISOFS=y
2139# CONFIG_UDF_FS is not set
2140
2141#
2142# DOS/FAT/NT Filesystems
2143#
2144CONFIG_FAT_FS=y
2145CONFIG_MSDOS_FS=y 285CONFIG_MSDOS_FS=y
2146CONFIG_VFAT_FS=y 286CONFIG_VFAT_FS=y
2147CONFIG_FAT_DEFAULT_CODEPAGE=437
2148CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
2149# CONFIG_NTFS_FS is not set
2150
2151#
2152# Pseudo filesystems
2153#
2154CONFIG_PROC_FS=y
2155CONFIG_PROC_KCORE=y 287CONFIG_PROC_KCORE=y
2156CONFIG_PROC_VMCORE=y
2157CONFIG_PROC_SYSCTL=y
2158CONFIG_PROC_PAGE_MONITOR=y
2159CONFIG_SYSFS=y
2160CONFIG_TMPFS=y 288CONFIG_TMPFS=y
2161CONFIG_TMPFS_POSIX_ACL=y 289CONFIG_TMPFS_POSIX_ACL=y
2162CONFIG_HUGETLBFS=y 290CONFIG_HUGETLBFS=y
2163CONFIG_HUGETLB_PAGE=y
2164# CONFIG_CONFIGFS_FS is not set
2165CONFIG_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
2185CONFIG_NETWORK_FILESYSTEMS=y
2186CONFIG_NFS_FS=y 291CONFIG_NFS_FS=y
2187CONFIG_NFS_V3=y 292CONFIG_NFS_V3=y
2188CONFIG_NFS_V3_ACL=y 293CONFIG_NFS_V3_ACL=y
2189CONFIG_NFS_V4=y 294CONFIG_NFS_V4=y
2190CONFIG_ROOT_NFS=y 295CONFIG_ROOT_NFS=y
2191# CONFIG_NFSD is not set
2192CONFIG_LOCKD=y
2193CONFIG_LOCKD_V4=y
2194CONFIG_NFS_ACL_SUPPORT=y
2195CONFIG_NFS_COMMON=y
2196CONFIG_SUNRPC=y
2197CONFIG_SUNRPC_GSS=y
2198CONFIG_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#
2209CONFIG_PARTITION_ADVANCED=y 296CONFIG_PARTITION_ADVANCED=y
2210# CONFIG_ACORN_PARTITION is not set
2211CONFIG_OSF_PARTITION=y 297CONFIG_OSF_PARTITION=y
2212CONFIG_AMIGA_PARTITION=y 298CONFIG_AMIGA_PARTITION=y
2213# CONFIG_ATARI_PARTITION is not set
2214CONFIG_MAC_PARTITION=y 299CONFIG_MAC_PARTITION=y
2215CONFIG_MSDOS_PARTITION=y
2216CONFIG_BSD_DISKLABEL=y 300CONFIG_BSD_DISKLABEL=y
2217CONFIG_MINIX_SUBPARTITION=y 301CONFIG_MINIX_SUBPARTITION=y
2218CONFIG_SOLARIS_X86_PARTITION=y 302CONFIG_SOLARIS_X86_PARTITION=y
2219CONFIG_UNIXWARE_DISKLABEL=y 303CONFIG_UNIXWARE_DISKLABEL=y
2220# CONFIG_LDM_PARTITION is not set
2221CONFIG_SGI_PARTITION=y 304CONFIG_SGI_PARTITION=y
2222# CONFIG_ULTRIX_PARTITION is not set
2223CONFIG_SUN_PARTITION=y 305CONFIG_SUN_PARTITION=y
2224CONFIG_KARMA_PARTITION=y 306CONFIG_KARMA_PARTITION=y
2225CONFIG_EFI_PARTITION=y 307CONFIG_EFI_PARTITION=y
2226# CONFIG_SYSV68_PARTITION is not set
2227CONFIG_NLS=y
2228CONFIG_NLS_DEFAULT="utf8" 308CONFIG_NLS_DEFAULT="utf8"
2229CONFIG_NLS_CODEPAGE_437=y 309CONFIG_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
2252CONFIG_NLS_ASCII=y 310CONFIG_NLS_ASCII=y
2253CONFIG_NLS_ISO8859_1=y 311CONFIG_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
2266CONFIG_NLS_UTF8=y 312CONFIG_NLS_UTF8=y
2267# CONFIG_DLM is not set
2268
2269#
2270# Kernel hacking
2271#
2272CONFIG_TRACE_IRQFLAGS_SUPPORT=y
2273CONFIG_PRINTK_TIME=y 313CONFIG_PRINTK_TIME=y
2274# CONFIG_ENABLE_WARN_DEPRECATED is not set 314# CONFIG_ENABLE_WARN_DEPRECATED is not set
2275CONFIG_ENABLE_MUST_CHECK=y
2276CONFIG_FRAME_WARN=2048
2277CONFIG_MAGIC_SYSRQ=y 315CONFIG_MAGIC_SYSRQ=y
2278# CONFIG_UNUSED_SYMBOLS is not set 316# CONFIG_UNUSED_SYMBOLS is not set
2279CONFIG_DEBUG_FS=y
2280# CONFIG_HEADERS_CHECK is not set
2281CONFIG_DEBUG_KERNEL=y 317CONFIG_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
2286CONFIG_SCHEDSTATS=y 319CONFIG_SCHEDSTATS=y
2287CONFIG_TIMER_STATS=y 320CONFIG_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
2300CONFIG_STACKTRACE=y
2301# CONFIG_DEBUG_KOBJECT is not set
2302CONFIG_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
2307CONFIG_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
2311CONFIG_ARCH_WANT_FRAME_POINTERS=y
2312CONFIG_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
2322CONFIG_SYSCTL_SYSCALL_CHECK=y 322CONFIG_SYSCTL_SYSCALL_CHECK=y
2323# CONFIG_DEBUG_PAGEALLOC is not set
2324CONFIG_USER_STACKTRACE_SUPPORT=y
2325CONFIG_NOP_TRACER=y
2326CONFIG_HAVE_FUNCTION_TRACER=y
2327CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
2328CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
2329CONFIG_HAVE_DYNAMIC_FTRACE=y
2330CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
2331CONFIG_HAVE_HW_BRANCH_TRACER=y
2332CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
2333CONFIG_RING_BUFFER=y
2334CONFIG_TRACING=y
2335CONFIG_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
2354CONFIG_BLK_DEV_IO_TRACE=y 323CONFIG_BLK_DEV_IO_TRACE=y
2355# CONFIG_FTRACE_STARTUP_TEST is not set
2356# CONFIG_MMIOTRACE is not set
2357CONFIG_PROVIDE_OHCI1394_DMA_INIT=y 324CONFIG_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
2361CONFIG_HAVE_ARCH_KGDB=y
2362# CONFIG_KGDB is not set
2363# CONFIG_STRICT_DEVMEM is not set
2364CONFIG_X86_VERBOSE_BOOTUP=y
2365CONFIG_EARLY_PRINTK=y
2366CONFIG_EARLY_PRINTK_DBGP=y 325CONFIG_EARLY_PRINTK_DBGP=y
2367CONFIG_DEBUG_STACKOVERFLOW=y 326CONFIG_DEBUG_STACKOVERFLOW=y
2368CONFIG_DEBUG_STACK_USAGE=y 327CONFIG_DEBUG_STACK_USAGE=y
2369# CONFIG_DEBUG_PER_CPU_MAPS is not set
2370# CONFIG_X86_PTDUMP is not set
2371CONFIG_DEBUG_RODATA=y
2372# CONFIG_DEBUG_RODATA_TEST is not set 328# CONFIG_DEBUG_RODATA_TEST is not set
2373CONFIG_DEBUG_NX_TEST=m 329CONFIG_DEBUG_NX_TEST=m
2374# CONFIG_IOMMU_DEBUG is not set
2375CONFIG_HAVE_MMIOTRACE_SUPPORT=y
2376CONFIG_IO_DELAY_TYPE_0X80=0
2377CONFIG_IO_DELAY_TYPE_0XED=1
2378CONFIG_IO_DELAY_TYPE_UDELAY=2
2379CONFIG_IO_DELAY_TYPE_NONE=3
2380CONFIG_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
2384CONFIG_DEFAULT_IO_DELAY_TYPE=0
2385CONFIG_DEBUG_BOOT_PARAMS=y 330CONFIG_DEBUG_BOOT_PARAMS=y
2386# CONFIG_CPA_DEBUG is not set
2387CONFIG_OPTIMIZE_INLINING=y 331CONFIG_OPTIMIZE_INLINING=y
2388
2389#
2390# Security options
2391#
2392CONFIG_KEYS=y
2393CONFIG_KEYS_DEBUG_PROC_KEYS=y 332CONFIG_KEYS_DEBUG_PROC_KEYS=y
2394CONFIG_SECURITY=y 333CONFIG_SECURITY=y
2395# CONFIG_SECURITYFS is not set
2396CONFIG_SECURITY_NETWORK=y 334CONFIG_SECURITY_NETWORK=y
2397# CONFIG_SECURITY_NETWORK_XFRM is not set
2398# CONFIG_SECURITY_PATH is not set
2399CONFIG_SECURITY_FILE_CAPABILITIES=y
2400# CONFIG_SECURITY_ROOTPLUG is not set
2401CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
2402CONFIG_SECURITY_SELINUX=y 335CONFIG_SECURITY_SELINUX=y
2403CONFIG_SECURITY_SELINUX_BOOTPARAM=y 336CONFIG_SECURITY_SELINUX_BOOTPARAM=y
2404CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
2405CONFIG_SECURITY_SELINUX_DISABLE=y 337CONFIG_SECURITY_SELINUX_DISABLE=y
2406CONFIG_SECURITY_SELINUX_DEVELOP=y
2407CONFIG_SECURITY_SELINUX_AVC_STATS=y
2408CONFIG_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
2413CONFIG_CRYPTO=y
2414
2415#
2416# Crypto core or helper
2417#
2418# CONFIG_CRYPTO_FIPS is not set
2419CONFIG_CRYPTO_ALGAPI=y
2420CONFIG_CRYPTO_ALGAPI2=y
2421CONFIG_CRYPTO_AEAD=y
2422CONFIG_CRYPTO_AEAD2=y
2423CONFIG_CRYPTO_BLKCIPHER=y
2424CONFIG_CRYPTO_BLKCIPHER2=y
2425CONFIG_CRYPTO_HASH=y
2426CONFIG_CRYPTO_HASH2=y
2427CONFIG_CRYPTO_RNG2=y
2428CONFIG_CRYPTO_PCOMP=y
2429CONFIG_CRYPTO_MANAGER=y
2430CONFIG_CRYPTO_MANAGER2=y
2431# CONFIG_CRYPTO_GF128MUL is not set
2432# CONFIG_CRYPTO_NULL is not set
2433CONFIG_CRYPTO_WORKQUEUE=y
2434# CONFIG_CRYPTO_CRYPTD is not set
2435CONFIG_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#
2448CONFIG_CRYPTO_CBC=y
2449# CONFIG_CRYPTO_CTR is not set
2450# CONFIG_CRYPTO_CTS is not set
2451CONFIG_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#
2459CONFIG_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
2468CONFIG_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
2474CONFIG_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#
2483CONFIG_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
2487CONFIG_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
2492CONFIG_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
2514CONFIG_CRYPTO_HW=y
2515# CONFIG_CRYPTO_DEV_HIFN_795X is not set
2516CONFIG_HAVE_KVM=y
2517CONFIG_HAVE_KVM_IRQCHIP=y
2518CONFIG_VIRTUALIZATION=y
2519# CONFIG_KVM is not set
2520# CONFIG_VIRTIO_PCI is not set
2521# CONFIG_VIRTIO_BALLOON is not set
2522CONFIG_BINARY_PRINTF=y
2523
2524#
2525# Library routines
2526#
2527CONFIG_BITREVERSE=y
2528CONFIG_GENERIC_FIND_FIRST_BIT=y
2529CONFIG_GENERIC_FIND_NEXT_BIT=y
2530CONFIG_GENERIC_FIND_LAST_BIT=y
2531# CONFIG_CRC_CCITT is not set
2532# CONFIG_CRC16 is not set
2533CONFIG_CRC_T10DIF=y 339CONFIG_CRC_T10DIF=y
2534# CONFIG_CRC_ITU_T is not set
2535CONFIG_CRC32=y
2536# CONFIG_CRC7 is not set
2537# CONFIG_LIBCRC32C is not set
2538CONFIG_ZLIB_INFLATE=y
2539CONFIG_DECOMPRESS_GZIP=y
2540CONFIG_DECOMPRESS_BZIP2=y
2541CONFIG_DECOMPRESS_LZMA=y
2542CONFIG_HAS_IOMEM=y
2543CONFIG_HAS_IOPORT=y
2544CONFIG_HAS_DMA=y
2545CONFIG_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 */
845ia32_syscall_end: 848ia32_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
54asmlinkage long sys32_truncate64(char __user *filename, 54asmlinkage 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
99asmlinkage long sys32_stat64(char __user *filename, 99asmlinkage 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
110asmlinkage long sys32_lstat64(char __user *filename, 110asmlinkage 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
129asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename, 129asmlinkage 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
411asmlinkage long sys32_pwrite(unsigned int fd, char __user *ubuf, u32 count, 411asmlinkage 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
452asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, 452asmlinkage 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
550asmlinkage 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
3header-y += boot.h 3header-y += boot.h
4header-y += bootparam.h 4header-y += bootparam.h
5header-y += debugreg.h 5header-y += debugreg.h
6header-y += e820.h
7header-y += hw_breakpoint.h
8header-y += hyperv.h
9header-y += ist.h
6header-y += ldt.h 10header-y += ldt.h
11header-y += mce.h
7header-y += msr-index.h 12header-y += msr-index.h
13header-y += msr.h
14header-y += mtrr.h
15header-y += posix_types_32.h
16header-y += posix_types_64.h
8header-y += prctl.h 17header-y += prctl.h
18header-y += processor-flags.h
9header-y += ptrace-abi.h 19header-y += ptrace-abi.h
10header-y += sigcontext32.h 20header-y += sigcontext32.h
11header-y += ucontext.h 21header-y += ucontext.h
12header-y += processor-flags.h 22header-y += unistd_32.h
13header-y += hw_breakpoint.h 23header-y += unistd_64.h
14header-y += hyperv.h 24header-y += vm86.h
15 25header-y += vsyscall.h
16unifdef-y += e820.h
17unifdef-y += ist.h
18unifdef-y += mce.h
19unifdef-y += msr.h
20unifdef-y += mtrr.h
21unifdef-y += posix_types_32.h
22unifdef-y += posix_types_64.h
23unifdef-y += unistd_32.h
24unifdef-y += unistd_64.h
25unifdef-y += vm86.h
26unifdef-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 @@
45struct alt_instr { 45struct 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);
55extern int arch_setup_apbt_irqs(int irq, int trigger, int mask, int cpu); 55extern int arch_setup_apbt_irqs(int irq, int trigger, int mask, int cpu);
56extern void apbt_setup_secondary_clock(void); 56extern void apbt_setup_secondary_clock(void);
57extern unsigned int boot_cpu_id; 57extern unsigned int boot_cpu_id;
58extern int disable_apbt_percpu;
59 58
60extern struct sfi_timer_table_entry *sfi_get_mtmr(int hint); 59extern struct sfi_timer_table_entry *sfi_get_mtmr(int hint);
61extern void sfi_free_mtmr(struct sfi_timer_table_entry *mtmr); 60extern 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 */
74struct 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
73struct efi_info { 81struct 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 @@
11extern void __xchg_wrong_size(void); 11extern 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
19struct __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 */
69static inline void __set_64bit(unsigned long long *ptr, 73static 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
84static 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
93static 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
110extern void __cmpxchg_wrong_size(void); 87extern 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
178static inline unsigned long long __cmpxchg64(volatile void *ptr, 164static 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
193static inline unsigned long long __cmpxchg64_local(volatile void *ptr, 177static 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
267extern 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)) 6static inline void set_64bit(volatile u64 *ptr, u64 val)
7
8static 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
15extern void __xchg_wrong_size(void); 11extern void __xchg_wrong_size(void);
16extern void __cmpxchg_wrong_size(void); 12extern 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 */
294static __always_inline __pure bool __static_cpu_has(u8 bit) 305static __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
59extern int dma_supported(struct device *hwdev, u64 mask); 58extern int dma_supported(struct device *hwdev, u64 mask);
60extern int dma_set_mask(struct device *dev, u64 mask); 59extern 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
90static 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
97static inline unsigned long dma_alloc_coherent_mask(struct device *dev, 89static 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);
61void kunmap(struct page *page); 61void kunmap(struct page *page);
62void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot); 62void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot);
63void *kmap_atomic(struct page *page, enum km_type type); 63void *kmap_atomic(struct page *page, enum km_type type);
64void kunmap_atomic(void *kvaddr, enum km_type type); 64void kunmap_atomic_notypecheck(void *kvaddr, enum km_type type);
65void *kmap_atomic_pfn(unsigned long pfn, enum km_type type); 65void *kmap_atomic_pfn(unsigned long pfn, enum km_type type);
66void *kmap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot); 66void *kmap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot);
67struct page *kmap_atomic_to_page(void *ptr); 67struct 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 */
46extern const struct hypervisor_x86 x86_hyper_vmware; 46extern const struct hypervisor_x86 x86_hyper_vmware;
47extern const struct hypervisor_x86 x86_hyper_ms_hyperv; 47extern const struct hypervisor_x86 x86_hyper_ms_hyperv;
48extern 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);
31extern int init_fpu(struct task_struct *child); 31extern int init_fpu(struct task_struct *child);
32extern asmlinkage void math_state_restore(void); 32extern asmlinkage void math_state_restore(void);
33extern void __math_state_restore(void); 33extern void __math_state_restore(void);
34extern void init_thread_xstate(void);
35extern int dump_fpu(struct pt_regs *, struct user_i387_struct *); 34extern int dump_fpu(struct pt_regs *, struct user_i387_struct *);
36 35
37extern user_regset_active_fn fpregs_active, xfpregs_active; 36extern 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
60static __always_inline __pure bool use_xsaveopt(void)
61{
62 return static_cpu_has(X86_FEATURE_XSAVEOPT);
63}
64
61static __always_inline __pure bool use_xsave(void) 65static __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
70extern void __sanitize_i387_state(struct task_struct *);
71
72static 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);
33extern void show_regs(struct pt_regs *regs); 33extern void show_regs(struct pt_regs *regs);
34extern unsigned long oops_begin(void); 34extern unsigned long oops_begin(void);
35extern void oops_end(unsigned long, struct pt_regs *, int signr); 35extern void oops_end(unsigned long, struct pt_regs *, int signr);
36#ifdef CONFIG_KEXEC
37extern 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 */
44enum regnames64 { 46enum 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
64enum 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
72static inline void arch_kgdb_breakpoint(void) 74static 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 @@
13extern int pci_mrst_init(void); 13extern int pci_mrst_init(void);
14int __init sfi_parse_mrtc(struct sfi_table_header *table); 14int __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 */
23enum mrst_cpu_type {
24 MRST_CPU_CHIP_LINCROFT = 1,
25 MRST_CPU_CHIP_PENWELL,
26};
27
28extern enum mrst_cpu_type __mrst_cpu_chip;
29static enum mrst_cpu_type mrst_identify_cpu(void)
30{
31 return __mrst_cpu_chip;
32}
33
34enum mrst_timer_options {
35 MRST_TIMER_DEFAULT,
36 MRST_TIMER_APBT_ONLY,
37 MRST_TIMER_LAPIC_APBT,
38};
39
40extern 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) \
149do { \ 149do { \
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
155static inline void wrmsr(unsigned msr, unsigned low, unsigned high) 155static 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
18extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); 18extern void die_nmi(char *str, struct pt_regs *regs, int do_panic);
19extern int check_nmi_watchdog(void); 19extern int check_nmi_watchdog(void);
20#if !defined(CONFIG_LOCKUP_DETECTOR)
20extern int nmi_watchdog_enabled; 21extern int nmi_watchdog_enabled;
22#endif
21extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); 23extern int avail_to_resrv_perfctr_nmi_bit(unsigned int);
22extern int reserve_perfctr_nmi(unsigned int); 24extern int reserve_perfctr_nmi(unsigned int);
23extern void release_perfctr_nmi(unsigned int); 25extern 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
15extern 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 */
19extern void olpc_ofw_detect(void);
20
21/* install OFW's pde permanently into the kernel's pgtable */
22extern void setup_olpc_ofw_pgd(void);
23
24#else /* !CONFIG_OLPC_OPENFIRMWARE */
25
26static inline void olpc_ofw_detect(void) { }
27static 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
34extern unsigned int pci_probe; 35extern unsigned int pci_probe;
35extern unsigned long pirq_table_addr; 36extern 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
69union cpuid10_edx { 69union 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);
140extern unsigned long perf_misc_flags(struct pt_regs *regs); 141extern 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
144static inline void init_hw_perf_events(void) { } 158static inline void init_hw_perf_events(void) { }
145static inline void perf_events_lapic_init(void) { } 159static 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 */
217enum P4_EVENTS { 215enum 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 */
566enum P4_ESCR_EMASKS { 564enum 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)
782enum 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, 783enum 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;
26struct vm_area_struct; 26struct vm_area_struct;
27 27
28extern pgd_t swapper_pg_dir[1024]; 28extern pgd_t swapper_pg_dir[1024];
29extern pgd_t trampoline_pg_dir[1024];
29 30
30static inline void pgtable_cache_init(void) { } 31static inline void pgtable_cache_init(void) { }
31static inline void check_pgt_cache(void) { } 32static 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);
762extern unsigned long boot_option_idle_override; 762extern unsigned long boot_option_idle_override;
763extern unsigned long idle_halt; 763extern unsigned long idle_halt;
764extern unsigned long idle_nomwait; 764extern unsigned long idle_nomwait;
765extern 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
1033extern const int amd_erratum_383[];
1034extern const int amd_erratum_400[];
1035extern 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)
156static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) 156static 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 */
196static inline void __up_read(struct rw_semaphore *sem) 194static 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
4extern int kstack_depth_to_print; 11extern int kstack_depth_to_print;
5 12
6struct thread_info; 13struct 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
60extern void
61show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
62 unsigned long *stack, unsigned long bp, char *log_lvl);
63
64extern void
65show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
66 unsigned long *sp, unsigned long bp, char *log_lvl);
67
68extern unsigned int code_bytes;
69
70/* The form of the top of the frame on the stack */
71struct stack_frame {
72 struct stack_frame *next_frame;
73 unsigned long return_address;
74};
75
76struct stack_frame_ia32 {
77 u32 next_frame;
78 u32 return_address;
79};
80
81static 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 */
21asmlinkage long sys32_truncate64(char __user *, unsigned long, unsigned long); 21asmlinkage long sys32_truncate64(const char __user *, unsigned long, unsigned long);
22asmlinkage long sys32_ftruncate64(unsigned int, unsigned long, unsigned long); 22asmlinkage long sys32_ftruncate64(unsigned int, unsigned long, unsigned long);
23 23
24asmlinkage long sys32_stat64(char __user *, struct stat64 __user *); 24asmlinkage long sys32_stat64(const char __user *, struct stat64 __user *);
25asmlinkage long sys32_lstat64(char __user *, struct stat64 __user *); 25asmlinkage long sys32_lstat64(const char __user *, struct stat64 __user *);
26asmlinkage long sys32_fstat64(unsigned int, struct stat64 __user *); 26asmlinkage long sys32_fstat64(unsigned int, struct stat64 __user *);
27asmlinkage long sys32_fstatat(unsigned int, char __user *, 27asmlinkage long sys32_fstatat(unsigned int, const char __user *,
28 struct stat64 __user *, int); 28 struct stat64 __user *, int);
29struct mmap_arg_struct32; 29struct mmap_arg_struct32;
30asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *); 30asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *);
@@ -49,12 +49,12 @@ asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *, compat_size_t);
49asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *); 49asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *);
50 50
51asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32); 51asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32);
52asmlinkage long sys32_pwrite(unsigned int, char __user *, u32, u32, u32); 52asmlinkage long sys32_pwrite(unsigned int, const char __user *, u32, u32, u32);
53 53
54asmlinkage long sys32_personality(unsigned long); 54asmlinkage long sys32_personality(unsigned long);
55asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32); 55asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32);
56 56
57asmlinkage long sys32_execve(char __user *, compat_uptr_t __user *, 57asmlinkage 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 *);
59asmlinkage long sys32_clone(unsigned int, unsigned int, struct pt_regs *); 59asmlinkage 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 */
82asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32); 82asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32);
83
84asmlinkage 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 */
24int sys_fork(struct pt_regs *); 24int sys_fork(struct pt_regs *);
25int sys_vfork(struct pt_regs *); 25int sys_vfork(struct pt_regs *);
26long sys_execve(char __user *, char __user * __user *, 26long 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 *);
28long sys_clone(unsigned long, unsigned long, void __user *, 29long 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
14extern unsigned long init_rsp; 14extern unsigned long init_rsp;
15extern unsigned long initial_code; 15extern unsigned long initial_code;
16extern unsigned long initial_page_table;
16extern unsigned long initial_gs; 17extern 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
20extern unsigned long setup_trampoline(void); 21extern unsigned long setup_trampoline(void);
22extern void __init setup_trampoline_page_table(void);
21extern void __init reserve_trampoline_memory(void); 23extern void __init reserve_trampoline_memory(void);
22#else 24#else
23static inline void reserve_trampoline_memory(void) {}; 25static inline void setup_trampoline_page_table(void) {}
26static 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/* 324struct msg_desc {
304 * one per-cpu; to locate the software tables 325 struct bau_payload_queue_entry *msg;
305 */ 326 int msg_slot;
306struct 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; 332struct 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 */
383struct 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
373static inline int bau_uvhub_isset(int uvhub, struct bau_target_uvhubmask *dstp) 426static 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
420static inline unsigned long __must_check
421HYPERVISOR_hvm_op(int op, void *arg)
422{
423 return _hypercall2(unsigned long, hvm_op, op, arg);
424}
425
420static inline void 426static inline void
421MULTI_fpu_taskswitch(struct multicall_entry *mcl, int set) 427MULTI_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 */
113static inline unsigned long mfn_to_local_pfn(unsigned long mfn) 113static 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
5extern int xen_swiotlb;
6extern int __init pci_xen_swiotlb_detect(void);
7extern void __init pci_xen_swiotlb_init(void);
8#else
9#define xen_swiotlb (0)
10static inline int __init pci_xen_swiotlb_detect(void) { return 0; }
11static 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
33extern unsigned int xstate_size; 34extern unsigned int xstate_size;
34extern u64 pcntxt_mask; 35extern u64 pcntxt_mask;
35extern struct xsave_struct *init_xstate_buf;
36extern u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS]; 36extern u64 xstate_fx_sw_bytes[USER_XSTATE_FX_SW_WORDS];
37 37
38extern void xsave_cntxt_init(void);
39extern void xsave_init(void); 38extern void xsave_init(void);
40extern void update_regset_xstate_info(unsigned int size, u64 xstate_mask); 39extern void update_regset_xstate_info(unsigned int size, u64 xstate_mask);
41extern int init_fpu(struct task_struct *child); 40extern int init_fpu(struct task_struct *child);
@@ -65,6 +64,16 @@ static inline int fpu_xrstor_checking(struct fpu *fpu)
65static inline int xsave_user(struct xsave_struct __user *buf) 64static 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
129static 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
120static inline void fpu_xsave(struct fpu *fpu) 139static 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
104scx200-y += scx200_32.o 104scx200-y += scx200_32.o
105 105
106obj-$(CONFIG_OLPC) += olpc.o 106obj-$(CONFIG_OLPC) += olpc.o
107obj-$(CONFIG_OLPC_OPENFIRMWARE) += olpc_ofw.o
107obj-$(CONFIG_X86_MRST) += mrst.o 108obj-$(CONFIG_X86_MRST) += mrst.o
108 109
109microcode-y := microcode_core.o 110microcode-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
1091: 1091:
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,
2572static int amd_iommu_domain_has_cap(struct iommu_domain *domain, 2572static 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
86int disable_apbt_percpu __cpuinitdata;
87
88static DEFINE_PER_CPU(struct apbt_dev, cpu_apbt_dev); 87static 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 */
201static 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
430static __init int apbt_late_init(void) 406static __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
5obj-$(CONFIG_X86_LOCAL_APIC) += apic.o apic_noop.o probe_$(BITS).o ipi.o nmi.o 5obj-$(CONFIG_X86_LOCAL_APIC) += apic.o apic_noop.o probe_$(BITS).o ipi.o
6ifneq ($(CONFIG_HARDLOCKUP_DETECTOR),y)
7obj-$(CONFIG_X86_LOCAL_APIC) += nmi.o
8endif
9obj-$(CONFIG_HARDLOCKUP_DETECTOR) += hw_nmi.o
10
6obj-$(CONFIG_X86_IO_APIC) += io_apic.o 11obj-$(CONFIG_X86_IO_APIC) += io_apic.o
7obj-$(CONFIG_SMP) += ipi.o 12obj-$(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
132static unsigned int base;
133 132
134static int __cpuinit wakeup_secondary_cpu_via_mip(int cpu, unsigned long eip) 133static 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. */
21static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly;
22
23u64 hw_nmi_get_sample_period(void)
24{
25 return (u64)(cpu_khz) * 1000 * 60;
26}
27
28#ifdef ARCH_HAS_NMI_WATCHDOG
29void 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
46static int __kprobes
47arch_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
80static __read_mostly struct notifier_block backtrace_notifier = {
81 .notifier_call = arch_trigger_all_cpu_backtrace_handler,
82 .next = NULL,
83 .priority = 1
84};
85
86static int __init register_trigger_all_cpu_backtrace(void)
87{
88 register_die_notifier(&backtrace_notifier);
89 return 0;
90}
91early_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)
96unsigned int nmi_watchdog = NMI_NONE;
97EXPORT_SYMBOL(nmi_watchdog);
98void acpi_nmi_enable(void) { return; }
99void acpi_nmi_disable(void) { return; }
100#endif
101atomic_t nmi_active = ATOMIC_INIT(0); /* oprofile uses this */
102EXPORT_SYMBOL(nmi_active);
103int unknown_nmi_panic;
104void cpu_nmi_set_wd_enabled(void) { return; }
105void stop_apic_nmi_watchdog(void *unused) { return; }
106void setup_apic_nmi_watchdog(void *unused) { return; }
107int __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
12nostackp := $(call cc-option, -fno-stack-protector) 12nostackp := $(call cc-option, -fno-stack-protector)
13CFLAGS_common.o := $(nostackp) 13CFLAGS_common.o := $(nostackp)
14 14
15obj-y := intel_cacheinfo.o addon_cpuid_features.o 15obj-y := intel_cacheinfo.o scattered.o topology.o
16obj-y += proc.o capflags.o powerflags.o common.o 16obj-y += proc.o capflags.o powerflags.o common.o
17obj-y += vmware.o hypervisor.o sched.o mshyperv.o 17obj-y += vmware.o hypervisor.o sched.o mshyperv.o
18 18
19obj-$(CONFIG_X86_32) += bugs.o cmpxchg.o 19obj-$(CONFIG_X86_32) += bugs.o
20obj-$(CONFIG_X86_64) += bugs_64.o 20obj-$(CONFIG_X86_64) += bugs_64.o
21 21
22obj-$(CONFIG_CPU_SUP_INTEL) += intel.o 22obj-$(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
611cpu_dev_register(amd_cpu_dev); 611cpu_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
631const 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));
634EXPORT_SYMBOL_GPL(amd_erratum_400);
635
636const int amd_erratum_383[] =
637 AMD_OSVW_ERRATUM(3, AMD_MODEL_RANGE(0x10, 0, 0, 0xff, 0xf));
638EXPORT_SYMBOL_GPL(amd_erratum_383);
639
640bool cpu_has_amd_erratum(const int *erratum)
641{
642 struct cpuinfo_x86 *cpu = &current_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
682EXPORT_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);
140static int __init x86_xsave_setup(char *s) 140static 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
148static 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
148static int cachesize_override __cpuinitdata = -1; 156static int cachesize_override __cpuinitdata = -1;
149static int disable_x86_serial_nr __cpuinitdata = 1; 157static 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
581static void __cpuinit identify_cpu_without_cpuid(struct cpuinfo_x86 *c) 600static 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 {
72static DEFINE_PER_CPU(struct acpi_cpufreq_data *, acfreq_data); 72static 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. */
75static struct acpi_processor_performance *acpi_perf_data; 75static struct acpi_processor_performance __percpu *acpi_perf_data;
76 76
77static struct cpufreq_driver acpi_cpufreq_driver; 77static 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
113static struct pcc_cpu *pcc_cpu_info; 113static struct pcc_cpu __percpu *pcc_cpu_info;
114 114
115static int pcc_cpufreq_verify(struct cpufreq_policy *policy) 115static 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
39const struct hypervisor_x86 *x86_hyper; 42const 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
350static void __cpuinit 350static void __cpuinit amd_check_l3_disable(struct _cpuid4_info_regs *this_leaf,
351amd_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 */
406int 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, &reg);
411
412 /* check whether this slot is activated already */
413 if (reg & (3UL << 30))
414 return reg & 0xfff;
415
416 return -1;
417}
418
399static ssize_t show_cache_disable(struct _cpuid4_info *this_leaf, char *buf, 419static 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, &reg); 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/*
455static 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 */
483int 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
516static 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 */
504static void __cpuinit 560static void __cpuinit
505amd_check_l3_disable(int index, struct _cpuid4_info_regs *this_leaf) 561amd_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 @@
51static DEFINE_MUTEX(mce_read_mutex); 51static 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);
107static int default_decode_mce(struct notifier_block *nb, unsigned long val, 107static 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
212static void print_mce(struct mce *m) 212static 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
244static void print_mce_head(void)
245{
246 pr_emerg("\nHARDWARE ERROR\n");
247}
248
249static 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
256static atomic_t mce_paniced; 246static 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 */
40struct thermal_state { 43struct _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
51struct 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
48static DEFINE_PER_CPU(struct thermal_state, thermal_state); 58static 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 \
60static ssize_t therm_throt_sysdev_show_##name( \ 72static 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
79define_therm_throt_sysdev_show_func(throttle_count); 91define_therm_throt_sysdev_show_func(core_throttle, count);
80define_therm_throt_sysdev_one_ro(throttle_count); 92define_therm_throt_sysdev_one_ro(core_throttle_count);
93
94define_therm_throt_sysdev_show_func(core_power_limit, count);
95define_therm_throt_sysdev_one_ro(core_power_limit_count);
96
97define_therm_throt_sysdev_show_func(package_throttle, count);
98define_therm_throt_sysdev_one_ro(package_throttle_count);
99
100define_therm_throt_sysdev_show_func(package_power_limit, count);
101define_therm_throt_sysdev_one_ro(package_power_limit_count);
81 102
82static struct attribute *thermal_throttle_attrs[] = { 103static struct attribute *thermal_throttle_attrs[] = {
83 &attr_throttle_count.attr, 104 &attr_core_throttle_count.attr,
84 NULL 105 NULL
85}; 106};
86 107
87static struct attribute_group thermal_throttle_attr_group = { 108static 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 */
109static int therm_throt_process(bool is_throttled) 133static 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: */
150static __cpuinit int thermal_throttle_add_dev(struct sys_device *sys_dev) 205static __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
156static __cpuinit void thermal_throttle_remove_dev(struct sys_device *sys_dev) 230static __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 */
230static void intel_thermal_interrupt(void) 315static 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
239static void unexpected_thermal_interrupt(void) 349static 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
20struct ms_hyperv_info ms_hyperv; 20struct ms_hyperv_info ms_hyperv;
21EXPORT_SYMBOL_GPL(ms_hyperv);
21 22
22static bool __init ms_hyperv_platform(void) 23static 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
147static 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 */
152static void ipi_handler(void *info) 155static 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
184static inline int types_compatible(mtrr_type type1, mtrr_type type2) 192static 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 */
297again: 298again:
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
885x86_perf_event_set_period(struct perf_event *event) 886x86_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
1612static void 1616static void
1613perf_callchain_kernel(struct pt_regs *regs, struct perf_callchain_entry *entry) 1617perf_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
1733void 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
1749unsigned long perf_instruction_pointer(struct pt_regs *regs) 1737unsigned 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 */
498static void intel_pmu_nhm_enable_all(int added) 502static 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
562static 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
24struct p4_cache_event_bind { 24struct 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
35static 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 */
44static 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
290static __initconst const u64 p4_hw_cache_event_ids 304static __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
431static 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
417static int p4_hw_config(struct perf_event *event) 458static 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
525static 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
485static inline void p4_pmu_disable_event(struct perf_event *event) 548static 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 */
578static 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
512static void p4_pmu_enable_event(struct perf_event *event) 595static 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
834static __init int p4_pmu_init(void) 921static __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
12struct cpuid_bit {
13 u16 feature;
14 u8 reg;
15 u8 bit;
16 u32 level;
17 u32 sub_leaf;
18};
19
20enum cpuid_regs {
21 CR_EAX = 0,
22 CR_ECX,
23 CR_EDX,
24 CR_EBX
25};
26
27void __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, &regs[CR_EAX],
58 &regs[CR_EBX], &regs[CR_ECX], &regs[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
12struct cpuid_bit {
13 u16 feature;
14 u8 reg;
15 u8 bit;
16 u32 level;
17};
18
19enum cpuid_regs {
20 CR_EAX = 0,
21 CR_ECX,
22 CR_EDX,
23 CR_EBX
24};
25
26void __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, &regs[CR_EAX], &regs[CR_EBX],
53 &regs[CR_ECX], &regs[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
52static unsigned long vmware_get_tsc_khz(void) 52static 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
31int 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
33static void kdump_nmi_callback(int cpu, struct die_args *args) 35static 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
62static void kdump_nmi_shootdown_cpus(void) 64static 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
23int panic_on_unrecovered_nmi; 22int panic_on_unrecovered_nmi;
24int panic_on_io_nmi; 23int 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
19extern void
20show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
21 unsigned long *stack, unsigned long bp, char *log_lvl);
22
23extern void
24show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
25 unsigned long *sp, unsigned long bp, char *log_lvl);
26
27extern unsigned int code_bytes;
28
29/* The form of the top of the frame on the stack */
30struct stack_frame {
31 struct stack_frame *next_frame;
32 unsigned long return_address;
33};
34
35struct stack_frame_ia32 {
36 u32 next_frame;
37 u32 return_address;
38};
39
40static 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
22void dump_trace(struct task_struct *task, struct pt_regs *regs, 20void 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
1167ENDPROC(xen_failsafe_callback) 1166ENDPROC(xen_failsafe_callback)
1168 1167
1168BUILD_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)
1065END(\sym) 1065END(\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
1069ENTRY(\sym) 1070ENTRY(\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
1085END(\sym) 1085END(\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
1330END(xen_failsafe_callback) 1330END(xen_failsafe_callback)
1331 1331
1332apicinterrupt 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
1321: 1321:
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
609ENTRY(initial_code) 615ENTRY(initial_code)
610 .long i386_start_kernel 616 .long i386_start_kernel
617ENTRY(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
624swapper_pg_fixmap: 632swapper_pg_fixmap:
625 .fill 1024,4,0 633 .fill 1024,4,0
634#ifdef CONFIG_X86_TRAMPOLINE
635ENTRY(trampoline_pg_dir)
636 .fill 1024,4,0
637#endif
626ENTRY(empty_zero_page) 638ENTRY(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 = {
798static int hpet_clocksource_register(void) 796static 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
63void __cpuinit init_thread_xstate(void) 63static 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
88void __cpuinit fpu_init(void) 89void __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
109void __cpuinit fpu_init(void)
110{
111 if (!smp_processor_id())
112 init_thread_xstate();
113}
114
115#endif /* CONFIG_X86_32 */
110 116
111void fpu_finit(struct fpu *fpu) 117void 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/** 52struct 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 */
60void 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; 95int 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); 110char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
111{
112 if (regno == GDB_ORIG_AX) {
113 memcpy(mem, &regs->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 */
161void 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
194static struct hw_breakpoint { 192static 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
202static unsigned long early_dr7; 200static 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 */
132static int __kprobes is_REX_prefix(kprobe_opcode_t *insn) 131static 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 */
273static int __kprobes is_IF_modifier(kprobe_opcode_t *insn) 279static 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
275void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { } 275void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { }
276 276
277static 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
277static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early) 289static 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
28static u32 sfi_mtimer_usage[SFI_MTMR_MAX_NUM]; 51static u32 sfi_mtimer_usage[SFI_MTMR_MAX_NUM];
29static struct sfi_timer_table_entry sfi_mtimer_array[SFI_MTMR_MAX_NUM]; 52static struct sfi_timer_table_entry sfi_mtimer_array[SFI_MTMR_MAX_NUM];
53enum mrst_cpu_type __mrst_cpu_chip;
54EXPORT_SYMBOL_GPL(__mrst_cpu_chip);
55
30int sfi_mtimer_num; 56int sfi_mtimer_num;
31 57
32struct sfi_rtc_table_entry sfi_mrtc_array[SFI_MRTC_MAX]; 58struct 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 */
174static 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
182static unsigned long __init mrst_calibrate_tsc(void) 196static 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
196void __init mrst_time_init(void) 210void __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/* 237void __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 */
212static 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 */
220static int mrst_i8042_detect(void) 254static 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 */
294static 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
29struct olpc_platform_t olpc_platform_info; 26struct olpc_platform_t olpc_platform_info;
30EXPORT_SYMBOL_GPL(olpc_platform_info); 27EXPORT_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}
189EXPORT_SYMBOL_GPL(olpc_ec_cmd); 184EXPORT_SYMBOL_GPL(olpc_ec_cmd);
190 185
191#ifdef CONFIG_OPEN_FIRMWARE 186#ifdef CONFIG_OLPC_OPENFIRMWARE
192static void __init platform_detect(void) 187static 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 */
11static int (*olpc_ofw_cif)(int *);
12
13/* page dir entry containing OFW's pgdir table; filled in by head_32.S */
14u32 olpc_ofw_pgd __initdata;
15
16static DEFINE_SPINLOCK(ofw_lock);
17
18#define MAXARGS 10
19
20void __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
43int __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}
75EXPORT_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
83void __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
17static int forbid_dac __read_mostly; 18static 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();
146out: 147out:
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 */
304long sys_execve(char __user *name, char __user * __user *argv, 304long 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/* 530bool c1e_detected;
530 * Check for AMD CPUs, where APIC timer interrupt does not wake up CPU from C1e. 531EXPORT_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 */
535static 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
561no_c1e_idle:
562 return 0;
563}
564 532
565static cpumask_var_t c1e_mask; 533static cpumask_var_t c1e_mask;
566static int c1e_detected;
567 534
568void c1e_remove_cpu(int cpu) 535void 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
60asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); 62asmlinkage 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
54asmlinkage extern void ret_from_fork(void); 56asmlinkage extern void ret_from_fork(void);
55 57
56DEFINE_PER_CPU(unsigned long, old_rsp); 58DEFINE_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
75u8 apicid_2_node[MAX_APICID]; 75u8 apicid_2_node[MAX_APICID];
76static 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 };
91static DEFINE_PER_CPU(struct task_struct *, idle_thread_array); 90static 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 */
98static DEFINE_MUTEX(x86_cpu_hotplug_driver_mutex);
99
100void cpu_hotplug_driver_lock()
101{
102 mutex_lock(&x86_cpu_hotplug_driver_mutex);
103}
104
105void cpu_hotplug_driver_unlock()
106{
107 mutex_unlock(&x86_cpu_hotplug_driver_mutex);
108}
109
110ssize_t arch_cpu_probe(const char *buf, size_t count) { return -1; }
111ssize_t arch_cpu_release(const char *buf, size_t count) { return -1; }
94#else 112#else
95static struct task_struct *idle_thread_array[NR_CPUS] __cpuinitdata ; 113static 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
26static void save_stack_address(void *data, unsigned long addr, int reliable) 26static 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
44static void save_stack_address(void *data, unsigned long addr, int reliable)
45{
46 return __save_stack_address(data, addr, reliable, false);
47}
48
39static void 49static void
40save_stack_address_nosched(void *data, unsigned long addr, int reliable) 50save_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
55static const struct stacktrace_ops save_stack_ops = { 55static 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
99struct stack_frame { 99struct 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
104static int copy_stack_frame(const void __user *fp, struct stack_frame *frame) 104static int
105copy_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 */
31int kernel_execve(const char *filename, char *const argv[], char *const envp[]) 31int 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
25struct msg_desc { 26/* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */
26 struct bau_payload_queue_entry *msg; 27static 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 37static int timeout_us;
33#define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD 0x000000000bUL
34
35static int uv_bau_max_concurrent __read_mostly;
36
37static int nobau; 38static int nobau;
39static int baudisabled;
40static spinlock_t disable_lock;
41static cycles_t congested_cycles;
42
43/* tunables: */
44static int max_bau_concurrent = MAX_BAU_CONCURRENT;
45static int max_bau_concurrent_constant = MAX_BAU_CONCURRENT;
46static int plugged_delay = PLUGGED_DELAY;
47static int plugsb4reset = PLUGSB4RESET;
48static int timeoutsb4reset = TIMEOUTSB4RESET;
49static int ipi_reset_limit = IPI_RESET_LIMIT;
50static int complete_threshold = COMPLETE_THRESHOLD;
51static int congested_response_us = CONGESTED_RESPONSE_US;
52static int congested_reps = CONGESTED_REPS;
53static int congested_period = CONGESTED_PERIOD;
54static struct dentry *tunables_dir;
55static struct dentry *tunables_file;
56
38static int __init setup_nobau(char *arg) 57static 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);
52static DEFINE_PER_CPU(struct bau_control, bau_control); 71static DEFINE_PER_CPU(struct bau_control, bau_control);
53static DEFINE_PER_CPU(cpumask_var_t, uv_flush_tlb_mask); 72static DEFINE_PER_CPU(cpumask_var_t, uv_flush_tlb_mask);
54 73
55struct 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 */
492static void
493destination_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
510static void
511destination_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 */
532static void
533disable_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 */
511const struct cpumask *uv_flush_send_and_wait(struct bau_desc *bau_desc, 569int 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
910static inline unsigned long long 923static inline unsigned long long
911millisec_2_cycles(unsigned long millisec) 924microsec_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 */
1001static 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 */
979static ssize_t uv_ptc_proc_write(struct file *file, const char __user *user, 1022static 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 1118static 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 */
1137static 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
1271static int tunables_open(struct inode *inode, struct file *file)
1272{
1273 return 0;
1274}
1275
1100static const struct file_operations proc_uv_ptc_operations = { 1276static 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
1284static const struct file_operations tunables_fops = {
1285 .open = tunables_open,
1286 .read = tunables_read,
1287 .write = tunables_write,
1288};
1289
1108static int __init uv_ptc_init(void) 1290static 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 */
1462static int
1463calculate_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 */
1264static void uv_init_per_cpu(int nuvhubs) 1487static 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 }
1569nextsocket:
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}
1396core_initcall(uv_bau_init); 1654core_initcall(uv_bau_init);
1397core_initcall(uv_ptc_init); 1655fs_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
42void __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
846static void __init init_tsc_clocksource(void) 845static 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
35verify_cpu: 36verify_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
76void update_vsyscall(struct timespec *wall_time, struct clocksource *clock, 76void 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 */
170time_t __vsyscall(1) vtime(time_t *t) 170time_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 */
17u64 pcntxt_mask; 17u64 pcntxt_mask;
18 18
19/*
20 * Represents init state for the supported extended state.
21 */
22static struct xsave_struct *init_xstate_buf;
23
19struct _fpx_sw_bytes fx_sw_reserved; 24struct _fpx_sw_bytes fx_sw_reserved;
20#ifdef CONFIG_IA32_EMULATION 25#ifdef CONFIG_IA32_EMULATION
21struct _fpx_sw_bytes fx_sw_reserved_ia32; 26struct _fpx_sw_bytes fx_sw_reserved_ia32;
22#endif 27#endif
23 28
29static 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 */
41void __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 */
280struct xsave_struct *init_xstate_buf;
281
282#ifdef CONFIG_X86_64 348#ifdef CONFIG_X86_64
283unsigned int sig_xstate_size = sizeof(struct _fpstate); 349unsigned 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 */
289void __cpuinit xsave_init(void) 355static 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 */
365static 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 */
306static void __init setup_xstate_init(void) 389static 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 */
315void __ref xsave_cntxt_init(void) 416static 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 */
464void __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
282static void __set_spte(u64 *sptep, u64 spte) 282static 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
291static u64 __xchg_spte(u64 *sptep, u64 new_spte) 287static 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;
240static void ept_save_pdptrs(struct kvm_vcpu *vcpu); 240static 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 */
246static const u32 vmx_msr_index[] = { 246static 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
33ifneq ($(CONFIG_X86_CMPXCHG64),y) 34ifneq ($(CONFIG_X86_CMPXCHG64),y)
34 lib-y += cmpxchg8b_emu.o atomic64_386_32.o 35 lib-y += cmpxchg8b_emu.o atomic64_386_32.o
35endif 36endif
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; \
31ENTRY(atomic64_\func\()_386) 31ENDPROC(atomic64_##op##_386); \
32 CFI_STARTPROC 32.purgem endp; \
33 LOCK $v 33.endm; \
34 34ENTRY(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
42ENDPROC(atomic64_\func\()_386)
43.purgem RETURN
44.purgem END_
45.purgem END
46.endm
47
48.macro END
49RETURN
50END_
51.endm
52.endm
53 43
54BEGIN read %ecx 44#define RET_ENDP \
55 movl ($v), %eax 45 RET; \
56 movl 4($v), %edx 46 ENDP
57END 47
58 48#define v %ecx
59BEGIN set %esi 49BEGIN(read)
60 movl %ebx, ($v) 50 movl (v), %eax
61 movl %ecx, 4($v) 51 movl 4(v), %edx
62END 52RET_ENDP
63 53#undef v
64BEGIN xchg %esi 54
65 movl ($v), %eax 55#define v %esi
66 movl 4($v), %edx 56BEGIN(set)
67 movl %ebx, ($v) 57 movl %ebx, (v)
68 movl %ecx, 4($v) 58 movl %ecx, 4(v)
69END 59RET_ENDP
70 60#undef v
71BEGIN add %ecx 61
72 addl %eax, ($v) 62#define v %esi
73 adcl %edx, 4($v) 63BEGIN(xchg)
74END 64 movl (v), %eax
75 65 movl 4(v), %edx
76BEGIN add_return %ecx 66 movl %ebx, (v)
77 addl ($v), %eax 67 movl %ecx, 4(v)
78 adcl 4($v), %edx 68RET_ENDP
79 movl %eax, ($v) 69#undef v
80 movl %edx, 4($v) 70
81END 71#define v %ecx
82 72BEGIN(add)
83BEGIN sub %ecx 73 addl %eax, (v)
84 subl %eax, ($v) 74 adcl %edx, 4(v)
85 sbbl %edx, 4($v) 75RET_ENDP
86END 76#undef v
87 77
88BEGIN sub_return %ecx 78#define v %ecx
79BEGIN(add_return)
80 addl (v), %eax
81 adcl 4(v), %edx
82 movl %eax, (v)
83 movl %edx, 4(v)
84RET_ENDP
85#undef v
86
87#define v %ecx
88BEGIN(sub)
89 subl %eax, (v)
90 sbbl %edx, 4(v)
91RET_ENDP
92#undef v
93
94#define v %ecx
95BEGIN(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)
96END 103RET_ENDP
97 104#undef v
98BEGIN inc %esi 105
99 addl $1, ($v) 106#define v %esi
100 adcl $0, 4($v) 107BEGIN(inc)
101END 108 addl $1, (v)
102 109 adcl $0, 4(v)
103BEGIN inc_return %esi 110RET_ENDP
104 movl ($v), %eax 111#undef v
105 movl 4($v), %edx 112
113#define v %esi
114BEGIN(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)
110END 121RET_ENDP
111 122#undef v
112BEGIN dec %esi 123
113 subl $1, ($v) 124#define v %esi
114 sbbl $0, 4($v) 125BEGIN(dec)
115END 126 subl $1, (v)
116 127 sbbl $0, 4(v)
117BEGIN dec_return %esi 128RET_ENDP
118 movl ($v), %eax 129#undef v
119 movl 4($v), %edx 130
131#define v %esi
132BEGIN(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)
124END 139RET_ENDP
140#undef v
125 141
126BEGIN add_unless %ecx 142#define v %ecx
143BEGIN(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
1331: 1501:
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
1372: 1542:
138RETURN 155 RET
1393: 1563:
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
144END_ 161ENDP
162#undef v
145 163
146BEGIN inc_not_zero %esi 164#define v %esi
147 movl ($v), %eax 165BEGIN(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
1511: 1701:
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
1572: 1762:
158RETURN 177 RET
1593: 1783:
160 testl %edx, %edx 179 testl %edx, %edx
161 jne 1b 180 jne 1b
162 jmp 2b 181 jmp 2b
163END_ 182ENDP
183#undef v
164 184
165BEGIN dec_if_positive %esi 185#define v %esi
166 movl ($v), %eax 186BEGIN(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)
1731: 1941:
174END 195RET_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}
53EXPORT_SYMBOL(cmpxchg_386_u32); 53EXPORT_SYMBOL(cmpxchg_386_u32);
54#endif 54#endif
55
56#ifndef CONFIG_X86_CMPXCHG64
57unsigned 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}
70EXPORT_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 */
41enum 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 */
41static struct addr_marker address_markers[] = { 63static 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
56void kunmap_atomic(void *kvaddr, enum km_type type) 56void 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)
102EXPORT_SYMBOL(kmap); 102EXPORT_SYMBOL(kmap);
103EXPORT_SYMBOL(kunmap); 103EXPORT_SYMBOL(kunmap);
104EXPORT_SYMBOL(kmap_atomic); 104EXPORT_SYMBOL(kmap_atomic);
105EXPORT_SYMBOL(kunmap_atomic); 105EXPORT_SYMBOL(kunmap_atomic_notypecheck);
106EXPORT_SYMBOL(kmap_atomic_prot); 106EXPORT_SYMBOL(kmap_atomic_prot);
107EXPORT_SYMBOL(kmap_atomic_to_page); 107EXPORT_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,
62static void __iomem *__ioremap_caller(resource_size_t phys_addr, 62static 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
50struct kmmio_delayed_release { 52struct 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
161static int pat_pagerange_is_ram(unsigned long start, unsigned long end) 161static 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[] = {
40static unsigned int reg_rop[] = { 40static unsigned int reg_rop[] = {
41 0x8A, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F 41 0x8A, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F
42}; 42};
43static unsigned int reg_wop[] = { 0x88, 0x89 }; 43static unsigned int reg_wop[] = { 0x88, 0x89, 0xAA, 0xAB };
44static unsigned int imm_wop[] = { 0xC6, 0xC7 }; 44static unsigned int imm_wop[] = { 0xC6, 0xC7 };
45/* IA32 Manual 3, 3-432*/ 45/* IA32 Manual 3, 3-432*/
46static unsigned int rw8[] = { 0x88, 0x8A, 0xC6 }; 46static unsigned int rw8[] = { 0x88, 0x8A, 0xC6, 0xAA };
47static unsigned int rw32[] = { 47static unsigned int rw32[] = {
48 0x89, 0x8B, 0xC7, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F 48 0x89, 0x8B, 0xC7, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F, 0xAB
49}; 49};
50static unsigned int mw8[] = { 0x88, 0x8A, 0xC6, 0xB60F, 0xBE0F }; 50static unsigned int mw8[] = { 0x88, 0x8A, 0xC6, 0xB60F, 0xBE0F, 0xAA };
51static unsigned int mw16[] = { 0xB70F, 0xBF0F }; 51static unsigned int mw16[] = { 0xB70F, 0xBF0F };
52static unsigned int mw32[] = { 0x89, 0x8B, 0xC7 }; 52static unsigned int mw32[] = { 0x89, 0x8B, 0xC7, 0xAB };
53static unsigned int mw64[] = {}; 53static unsigned int mw64[] = {};
54#else /* not __i386__ */ 54#else /* not __i386__ */
55static unsigned char prefix_codes[] = { 55static unsigned char prefix_codes[] = {
@@ -63,20 +63,20 @@ static unsigned char prefix_codes[] = {
63static unsigned int reg_rop[] = { 63static unsigned int reg_rop[] = {
64 0x8A, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F 64 0x8A, 0x8B, 0xB60F, 0xB70F, 0xBE0F, 0xBF0F
65}; 65};
66static unsigned int reg_wop[] = { 0x88, 0x89 }; 66static unsigned int reg_wop[] = { 0x88, 0x89, 0xAA, 0xAB };
67static unsigned int imm_wop[] = { 0xC6, 0xC7 }; 67static unsigned int imm_wop[] = { 0xC6, 0xC7 };
68static unsigned int rw8[] = { 0xC6, 0x88, 0x8A }; 68static unsigned int rw8[] = { 0xC6, 0x88, 0x8A, 0xAA };
69static unsigned int rw32[] = { 69static 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 */
73static unsigned int mw8[] = { 0xC6, 0x88, 0x8A, 0xB60F, 0xBE0F }; 73static unsigned int mw8[] = { 0xC6, 0x88, 0x8A, 0xB60F, 0xBE0F, 0xAA };
74/* 16 bit only */ 74/* 16 bit only */
75static unsigned int mw16[] = { 0xB70F, 0xBF0F }; 75static unsigned int mw16[] = { 0xB70F, 0xBF0F };
76/* 16 or 32 bit */ 76/* 16 or 32 bit */
77static unsigned int mw32[] = { 0xC7 }; 77static unsigned int mw32[] = { 0xC7 };
78/* 16, 32 or 64 bit */ 78/* 16, 32 or 64 bit */
79static unsigned int mw64[] = { 0x89, 0x8B }; 79static unsigned int mw64[] = { 0x89, 0x8B, 0xAB };
80#endif /* not __i386__ */ 80#endif /* not __i386__ */
81 81
82struct prefix_bits { 82struct prefix_bits {
@@ -410,7 +410,6 @@ static unsigned long *get_reg_w32(int no, struct pt_regs *regs)
410unsigned long get_ins_reg_val(unsigned long ins_addr, struct pt_regs *regs) 410unsigned 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
439do_work: 438do_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 */
99static 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
93static int __init init(void) 114static 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
279static void do_flush_tlb_all(void *info) 279static 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
288void flush_tlb_all(void) 286void 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)
125static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) 125static 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
39void pcibios_scan_specific_bus(int busn) 39void __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
120quiet_cmd_vdso = VDSO $@ 120quiet_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
125VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) 126VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
126GCOV_PROFILE := n 127GCOV_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
2nm="$1"
3file="$2"
4$nm "$file" | grep '^ *U' > /dev/null 2>&1
5if [ $? -eq 1 ]; then
6 exit 0
7else
8 echo "$file: undefined symbols found" >&2
9 exit 1
10fi
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); 377subsys_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); 78subsys_initcall(init_vdso_vars);
78 79
79struct linux_binprm; 80struct 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
16config XEN_PVHVM
17 def_bool y
18 depends on XEN
19 depends on X86_LOCAL_APIC
20
16config XEN_MAX_DOMAIN_MEMORY 21config 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
13obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ 13obj-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
17obj-$(CONFIG_SMP) += smp.o 17obj-$(CONFIG_SMP) += smp.o
18obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o 18obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
19obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o 19obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o
20 20
21obj-$(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
77void *xen_initial_gdt; 82void *xen_initial_gdt;
78 83
84RESERVE_BRK(shared_info_page_brk, PAGE_SIZE);
85__read_mostly int xen_have_vector_callback;
86EXPORT_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 */
98static int have_vcpu_info_placement = 1; 107static int have_vcpu_info_placement = 1;
99 108
109static 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
100static void xen_vcpu_setup(int cpu) 117static 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
735static void xen_clts(void) 756static 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
929static const struct pv_time_ops xen_time_ops __initdata = {
930 .sched_clock = xen_sched_clock,
931};
932
933static const struct pv_cpu_ops xen_cpu_ops __initdata = { 950static 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
1048static int
1049xen_panic_event(struct notifier_block *this, unsigned long event, void *ptr)
1050{
1051 xen_reboot(SHUTDOWN_crash);
1052 return NOTIFY_DONE;
1053}
1054
1055static struct notifier_block xen_panic_block = {
1056 .notifier_call= xen_panic_event,
1057};
1058
1059int xen_panic_handler_init(void)
1060{
1061 atomic_notifier_chain_register(&panic_notifier_list, &xen_panic_block);
1062 return 0;
1063}
1064
1031static const struct machine_ops __initdata xen_machine_ops = { 1065static 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
1241static 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
1260static 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
1287void 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
1319static 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
1333static struct notifier_block __cpuinitdata xen_hvm_cpu_notifier = {
1334 .notifier_call = xen_hvm_cpu_notify,
1335};
1336
1337static 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
1358static 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
1369const __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};
1374EXPORT_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 */
81DEFINE_SPINLOCK(xen_reservation_lock);
82
70#ifdef CONFIG_XEN_DEBUG_FS 83#ifdef CONFIG_XEN_DEBUG_FS
71 84
72static struct { 85static struct {
@@ -377,6 +390,28 @@ static bool xen_page_pinned(void *ptr)
377 return PagePinned(page); 390 return PagePinned(page);
378} 391}
379 392
393static bool xen_iomap_pte(pte_t pte)
394{
395 return pte_flags(pte) & _PAGE_IOMAP;
396}
397
398static 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
380static void xen_extend_mmu_update(const struct mmu_update *update) 415static 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)
453void xen_set_pte_at(struct mm_struct *mm, unsigned long addr, 488void 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
566static 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
526pteval_t xen_pte_val(pte_t pte) 580pteval_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}
530PV_CALLEE_SAVE_REGS_THUNK(xen_pte_val); 587PV_CALLEE_SAVE_REGS_THUNK(xen_pte_val);
@@ -537,7 +594,22 @@ PV_CALLEE_SAVE_REGS_THUNK(xen_pgd_val);
537 594
538pte_t xen_make_pte(pteval_t pte) 595pte_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}
543PV_CALLEE_SAVE_REGS_THUNK(xen_make_pte); 615PV_CALLEE_SAVE_REGS_THUNK(xen_make_pte);
@@ -593,6 +665,11 @@ void xen_set_pud(pud_t *ptr, pud_t val)
593 665
594void xen_set_pte(pte_t *ptep, pte_t pte) 666void 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
610void xen_set_pte_atomic(pte_t *ptep, pte_t pte) 687void 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. */
936static void __xen_pgd_pin(struct mm_struct *mm, pgd_t *pgd) 1018static 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 */
2034static unsigned long discontig_frames[1<<MAX_CONTIG_ORDER];
2035
2036#define VOID_PTE (mfn_pte(0, __pgprot(0)))
2037static 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 */
2065static 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 */
2111static 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
2148int 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}
2190EXPORT_SYMBOL_GPL(xen_create_contiguous_region);
2191
2192void 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}
2226EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region);
2227
2228#ifdef CONFIG_XEN_PVHVM
2229static 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
2240static 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
2255void __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
1946static struct dentry *d_mmu_debug; 2264static 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,
60unsigned long xen_read_cr2_direct(void); 60unsigned long xen_read_cr2_direct(void);
61 61
62extern void xen_init_mmu_ops(void); 62extern void xen_init_mmu_ops(void);
63extern 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
9int xen_swiotlb __read_mostly;
10
11static 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 */
32int __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
52void __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 */
33int xen_platform_pci_unplug;
34EXPORT_SYMBOL_GPL(xen_platform_pci_unplug);
35#ifdef CONFIG_XEN_PVHVM
36static int xen_emul_unplug;
37
38static 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
71void __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
107static 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}
136early_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);
32extern void xen_syscall_target(void); 33extern void xen_syscall_target(void);
33extern void xen_syscall32_target(void); 34extern void xen_syscall32_target(void);
34 35
36static 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
81static 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
29void 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
29void xen_post_suspend(int suspend_cancelled) 41void 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 */
163unsigned 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 */
198unsigned long xen_tsc_khz(void) 160static 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
233unsigned long xen_get_wallclock(void) 195static 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
241int xen_set_wallclock(unsigned long now) 203static 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) 438static const struct pv_time_ops xen_time_ops __initdata = {
439 .sched_clock = xen_clocksource_read,
440};
441
442static __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
481static 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);
38void xen_enable_syscall(void); 38void xen_enable_syscall(void);
39void xen_vcpu_restore(void); 39void xen_vcpu_restore(void);
40 40
41void xen_callback_vector(void);
42void xen_hvm_init_shared_info(void);
43void __init xen_unplug_emulated_devices(void);
44
41void __init xen_build_dynamic_phys_to_machine(void); 45void __init xen_build_dynamic_phys_to_machine(void);
42 46
43void xen_init_irq_ops(void); 47void xen_init_irq_ops(void);
@@ -46,11 +50,8 @@ void xen_setup_runstate_info(int cpu);
46void xen_teardown_timer(int cpu); 50void xen_teardown_timer(int cpu);
47cycle_t xen_clocksource_read(void); 51cycle_t xen_clocksource_read(void);
48void xen_setup_cpu_clockevents(void); 52void xen_setup_cpu_clockevents(void);
49unsigned long xen_tsc_khz(void); 53void __init xen_init_time_ops(void);
50void __init xen_time_init(void); 54void __init xen_hvm_init_time_ops(void);
51unsigned long xen_get_wallclock(void);
52int xen_set_wallclock(unsigned long time);
53unsigned long long xen_sched_clock(void);
54 55
55irqreturn_t xen_debug_interrupt(int irq, void *dev_id); 56irqreturn_t xen_debug_interrupt(int irq, void *dev_id);
56 57
@@ -101,4 +102,6 @@ void xen_sysret32(void);
101void xen_sysret64(void); 102void xen_sysret64(void);
102void xen_adjust_exception_frame(void); 103void xen_adjust_exception_frame(void);
103 104
105extern int xen_panic_handler_init(void);
106
104#endif /* XEN_OPS_H */ 107#endif /* XEN_OPS_H */