aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64')
-rw-r--r--arch/x86_64/Kconfig57
-rw-r--r--arch/x86_64/Makefile21
-rw-r--r--arch/x86_64/boot/Makefile36
-rw-r--r--arch/x86_64/crypto/aes.c7
-rw-r--r--arch/x86_64/defconfig34
-rw-r--r--arch/x86_64/ia32/ia32_binfmt.c2
-rw-r--r--arch/x86_64/ia32/ia32entry.S4
-rw-r--r--arch/x86_64/ia32/sys_ia32.c93
-rw-r--r--arch/x86_64/kernel/aperture.c4
-rw-r--r--arch/x86_64/kernel/apic.c20
-rw-r--r--arch/x86_64/kernel/early_printk.c116
-rw-r--r--arch/x86_64/kernel/entry.S2
-rw-r--r--arch/x86_64/kernel/functionlist1286
-rw-r--r--arch/x86_64/kernel/head.S26
-rw-r--r--arch/x86_64/kernel/io_apic.c10
-rw-r--r--arch/x86_64/kernel/irq.c21
-rw-r--r--arch/x86_64/kernel/kprobes.c69
-rw-r--r--arch/x86_64/kernel/mce.c3
-rw-r--r--arch/x86_64/kernel/mpparse.c19
-rw-r--r--arch/x86_64/kernel/nmi.c5
-rw-r--r--arch/x86_64/kernel/pci-dma.c3
-rw-r--r--arch/x86_64/kernel/pci-gart.c11
-rw-r--r--arch/x86_64/kernel/pmtimer.c3
-rw-r--r--arch/x86_64/kernel/process.c37
-rw-r--r--arch/x86_64/kernel/ptrace.c6
-rw-r--r--arch/x86_64/kernel/setup.c88
-rw-r--r--arch/x86_64/kernel/setup64.c18
-rw-r--r--arch/x86_64/kernel/signal.c4
-rw-r--r--arch/x86_64/kernel/smp.c6
-rw-r--r--arch/x86_64/kernel/smpboot.c24
-rw-r--r--arch/x86_64/kernel/time.c166
-rw-r--r--arch/x86_64/kernel/traps.c37
-rw-r--r--arch/x86_64/kernel/vmlinux.lds.S6
-rw-r--r--arch/x86_64/kernel/x8664_ksyms.c5
-rw-r--r--arch/x86_64/lib/thunk.S1
-rw-r--r--arch/x86_64/mm/fault.c79
-rw-r--r--arch/x86_64/mm/init.c44
-rw-r--r--arch/x86_64/mm/k8topology.c2
-rw-r--r--arch/x86_64/mm/numa.c39
-rw-r--r--arch/x86_64/mm/pageattr.c63
-rw-r--r--arch/x86_64/mm/srat.c8
-rw-r--r--arch/x86_64/pci/Makefile3
-rw-r--r--arch/x86_64/pci/mmconfig.c18
43 files changed, 1941 insertions, 565 deletions
diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig
index e18eb79bf855..4310b4a311a5 100644
--- a/arch/x86_64/Kconfig
+++ b/arch/x86_64/Kconfig
@@ -45,6 +45,10 @@ config RWSEM_GENERIC_SPINLOCK
45config RWSEM_XCHGADD_ALGORITHM 45config RWSEM_XCHGADD_ALGORITHM
46 bool 46 bool
47 47
48config GENERIC_HWEIGHT
49 bool
50 default y
51
48config GENERIC_CALIBRATE_DELAY 52config GENERIC_CALIBRATE_DELAY
49 bool 53 bool
50 default y 54 default y
@@ -246,6 +250,15 @@ config SCHED_SMT
246 cost of slightly increased overhead in some places. If unsure say 250 cost of slightly increased overhead in some places. If unsure say
247 N here. 251 N here.
248 252
253config SCHED_MC
254 bool "Multi-core scheduler support"
255 depends on SMP
256 default y
257 help
258 Multi-core scheduler support improves the CPU scheduler's decision
259 making when dealing with multi-core CPU chips at a cost of slightly
260 increased overhead in some places. If unsure say N here.
261
249source "kernel/Kconfig.preempt" 262source "kernel/Kconfig.preempt"
250 263
251config NUMA 264config NUMA
@@ -321,9 +334,13 @@ config HAVE_ARCH_EARLY_PFN_TO_NID
321 def_bool y 334 def_bool y
322 depends on NUMA 335 depends on NUMA
323 336
337config OUT_OF_LINE_PFN_TO_PAGE
338 def_bool y
339 depends on DISCONTIGMEM
340
324config NR_CPUS 341config NR_CPUS
325 int "Maximum number of CPUs (2-256)" 342 int "Maximum number of CPUs (2-256)"
326 range 2 256 343 range 2 255
327 depends on SMP 344 depends on SMP
328 default "8" 345 default "8"
329 help 346 help
@@ -364,13 +381,15 @@ config GART_IOMMU
364 select SWIOTLB 381 select SWIOTLB
365 depends on PCI 382 depends on PCI
366 help 383 help
367 Support the IOMMU. Needed to run systems with more than 3GB of memory 384 Support for hardware IOMMU in AMD's Opteron/Athlon64 Processors
368 properly with 32-bit PCI devices that do not support DAC (Double Address 385 and for the bounce buffering software IOMMU.
369 Cycle). The IOMMU can be turned off at runtime with the iommu=off parameter. 386 Needed to run systems with more than 3GB of memory properly with
370 Normally the kernel will take the right choice by itself. 387 32-bit PCI devices that do not support DAC (Double Address Cycle).
371 This option includes a driver for the AMD Opteron/Athlon64 northbridge IOMMU 388 The IOMMU can be turned off at runtime with the iommu=off parameter.
372 and a software emulation used on other systems. 389 Normally the kernel will take the right choice by itself.
373 If unsure, say Y. 390 This option includes a driver for the AMD Opteron/Athlon64 IOMMU
391 northbridge and a software emulation used on other systems without
392 hardware IOMMU. If unsure, say Y.
374 393
375# need this always enabled with GART_IOMMU for the VIA workaround 394# need this always enabled with GART_IOMMU for the VIA workaround
376config SWIOTLB 395config SWIOTLB
@@ -429,10 +448,10 @@ config CRASH_DUMP
429config PHYSICAL_START 448config PHYSICAL_START
430 hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP) 449 hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
431 default "0x1000000" if CRASH_DUMP 450 default "0x1000000" if CRASH_DUMP
432 default "0x100000" 451 default "0x200000"
433 help 452 help
434 This gives the physical address where the kernel is loaded. Normally 453 This gives the physical address where the kernel is loaded. Normally
435 for regular kernels this value is 0x100000 (1MB). But in the case 454 for regular kernels this value is 0x200000 (2MB). But in the case
436 of kexec on panic the fail safe kernel needs to run at a different 455 of kexec on panic the fail safe kernel needs to run at a different
437 address than the panic-ed kernel. This option is used to set the load 456 address than the panic-ed kernel. This option is used to set the load
438 address for kernels used to capture crash dump on being kexec'ed 457 address for kernels used to capture crash dump on being kexec'ed
@@ -464,6 +483,14 @@ config SECCOMP
464 483
465source kernel/Kconfig.hz 484source kernel/Kconfig.hz
466 485
486config REORDER
487 bool "Function reordering"
488 default n
489 help
490 This option enables the toolchain to reorder functions for a more
491 optimal TLB usage. If you have pretty much any version of binutils,
492 this can increase your kernel build time by roughly one minute.
493
467endmenu 494endmenu
468 495
469# 496#
@@ -512,16 +539,6 @@ config PCI_MMCONFIG
512 bool "Support mmconfig PCI config space access" 539 bool "Support mmconfig PCI config space access"
513 depends on PCI && ACPI 540 depends on PCI && ACPI
514 541
515config UNORDERED_IO
516 bool "Unordered IO mapping access"
517 depends on EXPERIMENTAL
518 help
519 Use unordered stores to access IO memory mappings in device drivers.
520 Still very experimental. When a driver works on IA64/ppc64/pa-risc it should
521 work with this option, but it makes the drivers behave differently
522 from i386. Requires that the driver writer used memory barriers
523 properly.
524
525source "drivers/pci/pcie/Kconfig" 542source "drivers/pci/pcie/Kconfig"
526 543
527source "drivers/pci/Kconfig" 544source "drivers/pci/Kconfig"
diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile
index d7fd46479c55..585fd4a559c8 100644
--- a/arch/x86_64/Makefile
+++ b/arch/x86_64/Makefile
@@ -29,12 +29,14 @@ CHECKFLAGS += -D__x86_64__ -m64
29 29
30cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8) 30cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
31cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona) 31cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
32cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
32CFLAGS += $(cflags-y) 33CFLAGS += $(cflags-y)
33 34
34CFLAGS += -m64 35CFLAGS += -m64
35CFLAGS += -mno-red-zone 36CFLAGS += -mno-red-zone
36CFLAGS += -mcmodel=kernel 37CFLAGS += -mcmodel=kernel
37CFLAGS += -pipe 38CFLAGS += -pipe
39cflags-$(CONFIG_REORDER) += -ffunction-sections
38# this makes reading assembly source easier, but produces worse code 40# this makes reading assembly source easier, but produces worse code
39# actually it makes the kernel smaller too. 41# actually it makes the kernel smaller too.
40CFLAGS += -fno-reorder-blocks 42CFLAGS += -fno-reorder-blocks
@@ -67,8 +69,8 @@ drivers-$(CONFIG_OPROFILE) += arch/x86_64/oprofile/
67 69
68boot := arch/x86_64/boot 70boot := arch/x86_64/boot
69 71
70.PHONY: bzImage bzlilo install archmrproper \ 72PHONY += bzImage bzlilo install archmrproper \
71 fdimage fdimage144 fdimage288 archclean 73 fdimage fdimage144 fdimage288 isoimage archclean
72 74
73#Default target when executing "make" 75#Default target when executing "make"
74all: bzImage 76all: bzImage
@@ -85,7 +87,7 @@ bzlilo: vmlinux
85bzdisk: vmlinux 87bzdisk: vmlinux
86 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zdisk 88 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zdisk
87 89
88fdimage fdimage144 fdimage288: vmlinux 90fdimage fdimage144 fdimage288 isoimage: vmlinux
89 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@ 91 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@
90 92
91install: 93install:
@@ -97,11 +99,16 @@ archclean:
97define archhelp 99define archhelp
98 echo '* bzImage - Compressed kernel image (arch/$(ARCH)/boot/bzImage)' 100 echo '* bzImage - Compressed kernel image (arch/$(ARCH)/boot/bzImage)'
99 echo ' install - Install kernel using' 101 echo ' install - Install kernel using'
100 echo ' (your) ~/bin/installkernel or' 102 echo ' (your) ~/bin/installkernel or'
101 echo ' (distribution) /sbin/installkernel or' 103 echo ' (distribution) /sbin/installkernel or'
102 echo ' install to $$(INSTALL_PATH) and run lilo' 104 echo ' install to $$(INSTALL_PATH) and run lilo'
105 echo ' bzdisk - Create a boot floppy in /dev/fd0'
106 echo ' fdimage - Create a boot floppy image'
107 echo ' isoimage - Create a boot CD-ROM image'
103endef 108endef
104 109
105CLEAN_FILES += arch/$(ARCH)/boot/fdimage arch/$(ARCH)/boot/mtools.conf 110CLEAN_FILES += arch/$(ARCH)/boot/fdimage \
111 arch/$(ARCH)/boot/image.iso \
112 arch/$(ARCH)/boot/mtools.conf
106 113
107 114
diff --git a/arch/x86_64/boot/Makefile b/arch/x86_64/boot/Makefile
index 29f8396ed151..43ee6c50c277 100644
--- a/arch/x86_64/boot/Makefile
+++ b/arch/x86_64/boot/Makefile
@@ -60,8 +60,12 @@ $(obj)/setup $(obj)/bootsect: %: %.o FORCE
60$(obj)/compressed/vmlinux: FORCE 60$(obj)/compressed/vmlinux: FORCE
61 $(Q)$(MAKE) $(build)=$(obj)/compressed IMAGE_OFFSET=$(IMAGE_OFFSET) $@ 61 $(Q)$(MAKE) $(build)=$(obj)/compressed IMAGE_OFFSET=$(IMAGE_OFFSET) $@
62 62
63# Set this if you want to pass append arguments to the zdisk/fdimage kernel 63# Set this if you want to pass append arguments to the zdisk/fdimage/isoimage kernel
64FDARGS = 64FDARGS =
65# Set this if you want an initrd included with the zdisk/fdimage/isoimage kernel
66FDINITRD =
67
68image_cmdline = default linux $(FDARGS) $(if $(FDINITRD),initrd=initrd.img,)
65 69
66$(obj)/mtools.conf: $(src)/mtools.conf.in 70$(obj)/mtools.conf: $(src)/mtools.conf.in
67 sed -e 's|@OBJ@|$(obj)|g' < $< > $@ 71 sed -e 's|@OBJ@|$(obj)|g' < $< > $@
@@ -70,8 +74,11 @@ $(obj)/mtools.conf: $(src)/mtools.conf.in
70zdisk: $(BOOTIMAGE) $(obj)/mtools.conf 74zdisk: $(BOOTIMAGE) $(obj)/mtools.conf
71 MTOOLSRC=$(obj)/mtools.conf mformat a: ; sync 75 MTOOLSRC=$(obj)/mtools.conf mformat a: ; sync
72 syslinux /dev/fd0 ; sync 76 syslinux /dev/fd0 ; sync
73 echo 'default linux $(FDARGS)' | \ 77 echo '$(image_cmdline)' | \
74 MTOOLSRC=$(obj)/mtools.conf mcopy - a:syslinux.cfg 78 MTOOLSRC=$(obj)/mtools.conf mcopy - a:syslinux.cfg
79 if [ -f '$(FDINITRD)' ] ; then \
80 MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' a:initrd.img ; \
81 fi
75 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) a:linux ; sync 82 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) a:linux ; sync
76 83
77# These require being root or having syslinux 2.02 or higher installed 84# These require being root or having syslinux 2.02 or higher installed
@@ -79,18 +86,39 @@ fdimage fdimage144: $(BOOTIMAGE) $(obj)/mtools.conf
79 dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=1440 86 dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=1440
80 MTOOLSRC=$(obj)/mtools.conf mformat v: ; sync 87 MTOOLSRC=$(obj)/mtools.conf mformat v: ; sync
81 syslinux $(obj)/fdimage ; sync 88 syslinux $(obj)/fdimage ; sync
82 echo 'default linux $(FDARGS)' | \ 89 echo '$(image_cmdline)' | \
83 MTOOLSRC=$(obj)/mtools.conf mcopy - v:syslinux.cfg 90 MTOOLSRC=$(obj)/mtools.conf mcopy - v:syslinux.cfg
91 if [ -f '$(FDINITRD)' ] ; then \
92 MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' v:initrd.img ; \
93 fi
84 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) v:linux ; sync 94 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) v:linux ; sync
85 95
86fdimage288: $(BOOTIMAGE) $(obj)/mtools.conf 96fdimage288: $(BOOTIMAGE) $(obj)/mtools.conf
87 dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=2880 97 dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=2880
88 MTOOLSRC=$(obj)/mtools.conf mformat w: ; sync 98 MTOOLSRC=$(obj)/mtools.conf mformat w: ; sync
89 syslinux $(obj)/fdimage ; sync 99 syslinux $(obj)/fdimage ; sync
90 echo 'default linux $(FDARGS)' | \ 100 echo '$(image_cmdline)' | \
91 MTOOLSRC=$(obj)/mtools.conf mcopy - w:syslinux.cfg 101 MTOOLSRC=$(obj)/mtools.conf mcopy - w:syslinux.cfg
102 if [ -f '$(FDINITRD)' ] ; then \
103 MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' w:initrd.img ; \
104 fi
92 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) w:linux ; sync 105 MTOOLSRC=$(obj)/mtools.conf mcopy $(BOOTIMAGE) w:linux ; sync
93 106
107isoimage: $(BOOTIMAGE)
108 -rm -rf $(obj)/isoimage
109 mkdir $(obj)/isoimage
110 cp `echo /usr/lib*/syslinux/isolinux.bin | awk '{ print $1; }'` \
111 $(obj)/isoimage
112 cp $(BOOTIMAGE) $(obj)/isoimage/linux
113 echo '$(image_cmdline)' > $(obj)/isoimage/isolinux.cfg
114 if [ -f '$(FDINITRD)' ] ; then \
115 cp '$(FDINITRD)' $(obj)/isoimage/initrd.img ; \
116 fi
117 mkisofs -J -r -o $(obj)/image.iso -b isolinux.bin -c boot.cat \
118 -no-emul-boot -boot-load-size 4 -boot-info-table \
119 $(obj)/isoimage
120 rm -rf $(obj)/isoimage
121
94zlilo: $(BOOTIMAGE) 122zlilo: $(BOOTIMAGE)
95 if [ -f $(INSTALL_PATH)/vmlinuz ]; then mv $(INSTALL_PATH)/vmlinuz $(INSTALL_PATH)/vmlinuz.old; fi 123 if [ -f $(INSTALL_PATH)/vmlinuz ]; then mv $(INSTALL_PATH)/vmlinuz $(INSTALL_PATH)/vmlinuz.old; fi
96 if [ -f $(INSTALL_PATH)/System.map ]; then mv $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi 124 if [ -f $(INSTALL_PATH)/System.map ]; then mv $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi
diff --git a/arch/x86_64/crypto/aes.c b/arch/x86_64/crypto/aes.c
index fb1b961a2e2f..6f77e7700d32 100644
--- a/arch/x86_64/crypto/aes.c
+++ b/arch/x86_64/crypto/aes.c
@@ -77,12 +77,11 @@ static inline u8 byte(const u32 x, const unsigned n)
77struct aes_ctx 77struct aes_ctx
78{ 78{
79 u32 key_length; 79 u32 key_length;
80 u32 E[60]; 80 u32 buf[120];
81 u32 D[60];
82}; 81};
83 82
84#define E_KEY ctx->E 83#define E_KEY (&ctx->buf[0])
85#define D_KEY ctx->D 84#define D_KEY (&ctx->buf[60])
86 85
87static u8 pow_tab[256] __initdata; 86static u8 pow_tab[256] __initdata;
88static u8 log_tab[256] __initdata; 87static u8 log_tab[256] __initdata;
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig
index ce4de61ed85d..566ecc97ee5a 100644
--- a/arch/x86_64/defconfig
+++ b/arch/x86_64/defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.16-rc3-git9 3# Linux kernel version: 2.6.16-git9
4# Sat Feb 18 00:27:03 2006 4# Sat Mar 25 15:18:40 2006
5# 5#
6CONFIG_X86_64=y 6CONFIG_X86_64=y
7CONFIG_64BIT=y 7CONFIG_64BIT=y
@@ -38,6 +38,7 @@ CONFIG_SYSCTL=y
38CONFIG_IKCONFIG=y 38CONFIG_IKCONFIG=y
39CONFIG_IKCONFIG_PROC=y 39CONFIG_IKCONFIG_PROC=y
40# CONFIG_CPUSETS is not set 40# CONFIG_CPUSETS is not set
41# CONFIG_RELAY is not set
41CONFIG_INITRAMFS_SOURCE="" 42CONFIG_INITRAMFS_SOURCE=""
42CONFIG_UID16=y 43CONFIG_UID16=y
43CONFIG_VM86=y 44CONFIG_VM86=y
@@ -79,6 +80,7 @@ CONFIG_STOP_MACHINE=y
79# Block layer 80# Block layer
80# 81#
81CONFIG_LBD=y 82CONFIG_LBD=y
83# CONFIG_BLK_DEV_IO_TRACE is not set
82 84
83# 85#
84# IO Schedulers 86# IO Schedulers
@@ -139,7 +141,6 @@ CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
139CONFIG_NR_CPUS=32 141CONFIG_NR_CPUS=32
140CONFIG_HOTPLUG_CPU=y 142CONFIG_HOTPLUG_CPU=y
141CONFIG_HPET_TIMER=y 143CONFIG_HPET_TIMER=y
142CONFIG_X86_PM_TIMER=y
143CONFIG_HPET_EMULATE_RTC=y 144CONFIG_HPET_EMULATE_RTC=y
144CONFIG_GART_IOMMU=y 145CONFIG_GART_IOMMU=y
145CONFIG_SWIOTLB=y 146CONFIG_SWIOTLB=y
@@ -148,12 +149,13 @@ CONFIG_X86_MCE_INTEL=y
148CONFIG_X86_MCE_AMD=y 149CONFIG_X86_MCE_AMD=y
149# CONFIG_KEXEC is not set 150# CONFIG_KEXEC is not set
150# CONFIG_CRASH_DUMP is not set 151# CONFIG_CRASH_DUMP is not set
151CONFIG_PHYSICAL_START=0x100000 152CONFIG_PHYSICAL_START=0x200000
152CONFIG_SECCOMP=y 153CONFIG_SECCOMP=y
153# CONFIG_HZ_100 is not set 154# CONFIG_HZ_100 is not set
154CONFIG_HZ_250=y 155CONFIG_HZ_250=y
155# CONFIG_HZ_1000 is not set 156# CONFIG_HZ_1000 is not set
156CONFIG_HZ=250 157CONFIG_HZ=250
158# CONFIG_REORDER is not set
157CONFIG_GENERIC_HARDIRQS=y 159CONFIG_GENERIC_HARDIRQS=y
158CONFIG_GENERIC_IRQ_PROBE=y 160CONFIG_GENERIC_IRQ_PROBE=y
159CONFIG_ISA_DMA_API=y 161CONFIG_ISA_DMA_API=y
@@ -189,12 +191,14 @@ CONFIG_ACPI_NUMA=y
189# CONFIG_ACPI_ASUS is not set 191# CONFIG_ACPI_ASUS is not set
190# CONFIG_ACPI_IBM is not set 192# CONFIG_ACPI_IBM is not set
191CONFIG_ACPI_TOSHIBA=y 193CONFIG_ACPI_TOSHIBA=y
192CONFIG_ACPI_BLACKLIST_YEAR=2001 194CONFIG_ACPI_BLACKLIST_YEAR=0
193# CONFIG_ACPI_DEBUG is not set 195# CONFIG_ACPI_DEBUG is not set
194CONFIG_ACPI_EC=y 196CONFIG_ACPI_EC=y
195CONFIG_ACPI_POWER=y 197CONFIG_ACPI_POWER=y
196CONFIG_ACPI_SYSTEM=y 198CONFIG_ACPI_SYSTEM=y
199CONFIG_X86_PM_TIMER=y
197CONFIG_ACPI_CONTAINER=y 200CONFIG_ACPI_CONTAINER=y
201CONFIG_ACPI_HOTPLUG_MEMORY=y
198 202
199# 203#
200# CPU Frequency scaling 204# CPU Frequency scaling
@@ -232,10 +236,8 @@ CONFIG_X86_ACPI_CPUFREQ_PROC_INTF=y
232CONFIG_PCI=y 236CONFIG_PCI=y
233CONFIG_PCI_DIRECT=y 237CONFIG_PCI_DIRECT=y
234CONFIG_PCI_MMCONFIG=y 238CONFIG_PCI_MMCONFIG=y
235CONFIG_UNORDERED_IO=y
236CONFIG_PCIEPORTBUS=y 239CONFIG_PCIEPORTBUS=y
237CONFIG_PCI_MSI=y 240CONFIG_PCI_MSI=y
238# CONFIG_PCI_LEGACY_PROC is not set
239# CONFIG_PCI_DEBUG is not set 241# CONFIG_PCI_DEBUG is not set
240 242
241# 243#
@@ -294,6 +296,7 @@ CONFIG_INET_TCP_DIAG=y
294CONFIG_TCP_CONG_BIC=y 296CONFIG_TCP_CONG_BIC=y
295CONFIG_IPV6=y 297CONFIG_IPV6=y
296# CONFIG_IPV6_PRIVACY is not set 298# CONFIG_IPV6_PRIVACY is not set
299# CONFIG_IPV6_ROUTER_PREF is not set
297# CONFIG_INET6_AH is not set 300# CONFIG_INET6_AH is not set
298# CONFIG_INET6_ESP is not set 301# CONFIG_INET6_ESP is not set
299# CONFIG_INET6_IPCOMP is not set 302# CONFIG_INET6_IPCOMP is not set
@@ -701,6 +704,7 @@ CONFIG_S2IO=m
701# Wireless LAN (non-hamradio) 704# Wireless LAN (non-hamradio)
702# 705#
703# CONFIG_NET_RADIO is not set 706# CONFIG_NET_RADIO is not set
707# CONFIG_NET_WIRELESS_RTNETLINK is not set
704 708
705# 709#
706# Wan interfaces 710# Wan interfaces
@@ -861,6 +865,8 @@ CONFIG_RTC=y
861CONFIG_AGP=y 865CONFIG_AGP=y
862CONFIG_AGP_AMD64=y 866CONFIG_AGP_AMD64=y
863CONFIG_AGP_INTEL=y 867CONFIG_AGP_INTEL=y
868# CONFIG_AGP_SIS is not set
869# CONFIG_AGP_VIA is not set
864# CONFIG_DRM is not set 870# CONFIG_DRM is not set
865# CONFIG_MWAVE is not set 871# CONFIG_MWAVE is not set
866CONFIG_RAW_DRIVER=y 872CONFIG_RAW_DRIVER=y
@@ -907,10 +913,6 @@ CONFIG_HWMON=y
907# CONFIG_IBM_ASM is not set 913# CONFIG_IBM_ASM is not set
908 914
909# 915#
910# Multimedia Capabilities Port drivers
911#
912
913#
914# Multimedia devices 916# Multimedia devices
915# 917#
916# CONFIG_VIDEO_DEV is not set 918# CONFIG_VIDEO_DEV is not set
@@ -974,6 +976,7 @@ CONFIG_SOUND_ICH=y
974# 976#
975CONFIG_USB_ARCH_HAS_HCD=y 977CONFIG_USB_ARCH_HAS_HCD=y
976CONFIG_USB_ARCH_HAS_OHCI=y 978CONFIG_USB_ARCH_HAS_OHCI=y
979CONFIG_USB_ARCH_HAS_EHCI=y
977CONFIG_USB=y 980CONFIG_USB=y
978# CONFIG_USB_DEBUG is not set 981# CONFIG_USB_DEBUG is not set
979 982
@@ -1002,7 +1005,6 @@ CONFIG_USB_UHCI_HCD=y
1002# 1005#
1003# USB Device Class drivers 1006# USB Device Class drivers
1004# 1007#
1005# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
1006# CONFIG_USB_ACM is not set 1008# CONFIG_USB_ACM is not set
1007CONFIG_USB_PRINTER=y 1009CONFIG_USB_PRINTER=y
1008 1010
@@ -1121,11 +1123,7 @@ CONFIG_USB_MON=y
1121# CONFIG_INFINIBAND is not set 1123# CONFIG_INFINIBAND is not set
1122 1124
1123# 1125#
1124# SN Devices 1126# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
1125#
1126
1127#
1128# EDAC - error detection and reporting (RAS)
1129# 1127#
1130# CONFIG_EDAC is not set 1128# CONFIG_EDAC is not set
1131 1129
@@ -1198,7 +1196,6 @@ CONFIG_TMPFS=y
1198CONFIG_HUGETLBFS=y 1196CONFIG_HUGETLBFS=y
1199CONFIG_HUGETLB_PAGE=y 1197CONFIG_HUGETLB_PAGE=y
1200CONFIG_RAMFS=y 1198CONFIG_RAMFS=y
1201CONFIG_RELAYFS_FS=y
1202# CONFIG_CONFIGFS_FS is not set 1199# CONFIG_CONFIGFS_FS is not set
1203 1200
1204# 1201#
@@ -1321,6 +1318,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
1321CONFIG_DEBUG_FS=y 1318CONFIG_DEBUG_FS=y
1322# CONFIG_DEBUG_VM is not set 1319# CONFIG_DEBUG_VM is not set
1323# CONFIG_FRAME_POINTER is not set 1320# CONFIG_FRAME_POINTER is not set
1321# CONFIG_UNWIND_INFO is not set
1324# CONFIG_FORCED_INLINING is not set 1322# CONFIG_FORCED_INLINING is not set
1325# CONFIG_RCU_TORTURE_TEST is not set 1323# CONFIG_RCU_TORTURE_TEST is not set
1326# CONFIG_DEBUG_RODATA is not set 1324# CONFIG_DEBUG_RODATA is not set
diff --git a/arch/x86_64/ia32/ia32_binfmt.c b/arch/x86_64/ia32/ia32_binfmt.c
index 572b3b28772d..e776139afb20 100644
--- a/arch/x86_64/ia32/ia32_binfmt.c
+++ b/arch/x86_64/ia32/ia32_binfmt.c
@@ -58,7 +58,7 @@ struct elf_phdr;
58 58
59#define USE_ELF_CORE_DUMP 1 59#define USE_ELF_CORE_DUMP 1
60 60
61/* Overwrite elfcore.h */ 61/* Override elfcore.h */
62#define _LINUX_ELFCORE_H 1 62#define _LINUX_ELFCORE_H 1
63typedef unsigned int elf_greg_t; 63typedef unsigned int elf_greg_t;
64 64
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S
index 00dee176c08e..35b2faccdc6c 100644
--- a/arch/x86_64/ia32/ia32entry.S
+++ b/arch/x86_64/ia32/ia32entry.S
@@ -501,7 +501,7 @@ ia32_sys_call_table:
501 .quad sys_setdomainname 501 .quad sys_setdomainname
502 .quad sys_uname 502 .quad sys_uname
503 .quad sys_modify_ldt 503 .quad sys_modify_ldt
504 .quad sys32_adjtimex 504 .quad compat_sys_adjtimex
505 .quad sys32_mprotect /* 125 */ 505 .quad sys32_mprotect /* 125 */
506 .quad compat_sys_sigprocmask 506 .quad compat_sys_sigprocmask
507 .quad quiet_ni_syscall /* create_module */ 507 .quad quiet_ni_syscall /* create_module */
@@ -688,6 +688,8 @@ ia32_sys_call_table:
688 .quad sys_ni_syscall /* pselect6 for now */ 688 .quad sys_ni_syscall /* pselect6 for now */
689 .quad sys_ni_syscall /* ppoll for now */ 689 .quad sys_ni_syscall /* ppoll for now */
690 .quad sys_unshare /* 310 */ 690 .quad sys_unshare /* 310 */
691 .quad compat_sys_set_robust_list
692 .quad compat_sys_get_robust_list
691ia32_syscall_end: 693ia32_syscall_end:
692 .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8 694 .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
693 .quad ni_syscall 695 .quad ni_syscall
diff --git a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c
index 2bc55af95419..f182b20858e2 100644
--- a/arch/x86_64/ia32/sys_ia32.c
+++ b/arch/x86_64/ia32/sys_ia32.c
@@ -30,7 +30,6 @@
30#include <linux/resource.h> 30#include <linux/resource.h>
31#include <linux/times.h> 31#include <linux/times.h>
32#include <linux/utsname.h> 32#include <linux/utsname.h>
33#include <linux/timex.h>
34#include <linux/smp.h> 33#include <linux/smp.h>
35#include <linux/smp_lock.h> 34#include <linux/smp_lock.h>
36#include <linux/sem.h> 35#include <linux/sem.h>
@@ -430,24 +429,12 @@ put_tv32(struct compat_timeval __user *o, struct timeval *i)
430 return err; 429 return err;
431} 430}
432 431
433extern int do_setitimer(int which, struct itimerval *, struct itimerval *); 432extern unsigned int alarm_setitimer(unsigned int seconds);
434 433
435asmlinkage long 434asmlinkage long
436sys32_alarm(unsigned int seconds) 435sys32_alarm(unsigned int seconds)
437{ 436{
438 struct itimerval it_new, it_old; 437 return alarm_setitimer(seconds);
439 unsigned int oldalarm;
440
441 it_new.it_interval.tv_sec = it_new.it_interval.tv_usec = 0;
442 it_new.it_value.tv_sec = seconds;
443 it_new.it_value.tv_usec = 0;
444 do_setitimer(ITIMER_REAL, &it_new, &it_old);
445 oldalarm = it_old.it_value.tv_sec;
446 /* ehhh.. We can't return 0 if we have an alarm pending.. */
447 /* And we'd better return too much than too little anyway */
448 if (it_old.it_value.tv_usec)
449 oldalarm++;
450 return oldalarm;
451} 438}
452 439
453/* Translations due to time_t size differences. Which affects all 440/* Translations due to time_t size differences. Which affects all
@@ -779,82 +766,6 @@ sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, s32 count)
779 return ret; 766 return ret;
780} 767}
781 768
782/* Handle adjtimex compatibility. */
783
784struct timex32 {
785 u32 modes;
786 s32 offset, freq, maxerror, esterror;
787 s32 status, constant, precision, tolerance;
788 struct compat_timeval time;
789 s32 tick;
790 s32 ppsfreq, jitter, shift, stabil;
791 s32 jitcnt, calcnt, errcnt, stbcnt;
792 s32 :32; s32 :32; s32 :32; s32 :32;
793 s32 :32; s32 :32; s32 :32; s32 :32;
794 s32 :32; s32 :32; s32 :32; s32 :32;
795};
796
797extern int do_adjtimex(struct timex *);
798
799asmlinkage long
800sys32_adjtimex(struct timex32 __user *utp)
801{
802 struct timex txc;
803 int ret;
804
805 memset(&txc, 0, sizeof(struct timex));
806
807 if (!access_ok(VERIFY_READ, utp, sizeof(struct timex32)) ||
808 __get_user(txc.modes, &utp->modes) ||
809 __get_user(txc.offset, &utp->offset) ||
810 __get_user(txc.freq, &utp->freq) ||
811 __get_user(txc.maxerror, &utp->maxerror) ||
812 __get_user(txc.esterror, &utp->esterror) ||
813 __get_user(txc.status, &utp->status) ||
814 __get_user(txc.constant, &utp->constant) ||
815 __get_user(txc.precision, &utp->precision) ||
816 __get_user(txc.tolerance, &utp->tolerance) ||
817 __get_user(txc.time.tv_sec, &utp->time.tv_sec) ||
818 __get_user(txc.time.tv_usec, &utp->time.tv_usec) ||
819 __get_user(txc.tick, &utp->tick) ||
820 __get_user(txc.ppsfreq, &utp->ppsfreq) ||
821 __get_user(txc.jitter, &utp->jitter) ||
822 __get_user(txc.shift, &utp->shift) ||
823 __get_user(txc.stabil, &utp->stabil) ||
824 __get_user(txc.jitcnt, &utp->jitcnt) ||
825 __get_user(txc.calcnt, &utp->calcnt) ||
826 __get_user(txc.errcnt, &utp->errcnt) ||
827 __get_user(txc.stbcnt, &utp->stbcnt))
828 return -EFAULT;
829
830 ret = do_adjtimex(&txc);
831
832 if (!access_ok(VERIFY_WRITE, utp, sizeof(struct timex32)) ||
833 __put_user(txc.modes, &utp->modes) ||
834 __put_user(txc.offset, &utp->offset) ||
835 __put_user(txc.freq, &utp->freq) ||
836 __put_user(txc.maxerror, &utp->maxerror) ||
837 __put_user(txc.esterror, &utp->esterror) ||
838 __put_user(txc.status, &utp->status) ||
839 __put_user(txc.constant, &utp->constant) ||
840 __put_user(txc.precision, &utp->precision) ||
841 __put_user(txc.tolerance, &utp->tolerance) ||
842 __put_user(txc.time.tv_sec, &utp->time.tv_sec) ||
843 __put_user(txc.time.tv_usec, &utp->time.tv_usec) ||
844 __put_user(txc.tick, &utp->tick) ||
845 __put_user(txc.ppsfreq, &utp->ppsfreq) ||
846 __put_user(txc.jitter, &utp->jitter) ||
847 __put_user(txc.shift, &utp->shift) ||
848 __put_user(txc.stabil, &utp->stabil) ||
849 __put_user(txc.jitcnt, &utp->jitcnt) ||
850 __put_user(txc.calcnt, &utp->calcnt) ||
851 __put_user(txc.errcnt, &utp->errcnt) ||
852 __put_user(txc.stbcnt, &utp->stbcnt))
853 ret = -EFAULT;
854
855 return ret;
856}
857
858asmlinkage long sys32_mmap2(unsigned long addr, unsigned long len, 769asmlinkage long sys32_mmap2(unsigned long addr, unsigned long len,
859 unsigned long prot, unsigned long flags, 770 unsigned long prot, unsigned long flags,
860 unsigned long fd, unsigned long pgoff) 771 unsigned long fd, unsigned long pgoff)
diff --git a/arch/x86_64/kernel/aperture.c b/arch/x86_64/kernel/aperture.c
index a0f955b9995f..fffd6b0a2fab 100644
--- a/arch/x86_64/kernel/aperture.c
+++ b/arch/x86_64/kernel/aperture.c
@@ -60,7 +60,7 @@ static u32 __init allocate_aperture(void)
60 printk("Cannot allocate aperture memory hole (%p,%uK)\n", 60 printk("Cannot allocate aperture memory hole (%p,%uK)\n",
61 p, aper_size>>10); 61 p, aper_size>>10);
62 if (p) 62 if (p)
63 free_bootmem_node(nd0, (unsigned long)p, aper_size); 63 free_bootmem_node(nd0, __pa(p), aper_size);
64 return 0; 64 return 0;
65 } 65 }
66 printk("Mapping aperture over %d KB of RAM @ %lx\n", 66 printk("Mapping aperture over %d KB of RAM @ %lx\n",
@@ -161,7 +161,7 @@ static __u32 __init search_agp_bridge(u32 *order, int *valid_agp)
161 int num, slot, func; 161 int num, slot, func;
162 162
163 /* Poor man's PCI discovery */ 163 /* Poor man's PCI discovery */
164 for (num = 0; num < 32; num++) { 164 for (num = 0; num < 256; num++) {
165 for (slot = 0; slot < 32; slot++) { 165 for (slot = 0; slot < 32; slot++) {
166 for (func = 0; func < 8; func++) { 166 for (func = 0; func < 8; func++) {
167 u32 class, cap; 167 u32 class, cap;
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c
index e5b14c57eaa0..d54620147e8e 100644
--- a/arch/x86_64/kernel/apic.c
+++ b/arch/x86_64/kernel/apic.c
@@ -342,6 +342,7 @@ void __init init_bsp_APIC(void)
342void __cpuinit setup_local_APIC (void) 342void __cpuinit setup_local_APIC (void)
343{ 343{
344 unsigned int value, maxlvt; 344 unsigned int value, maxlvt;
345 int i, j;
345 346
346 value = apic_read(APIC_LVR); 347 value = apic_read(APIC_LVR);
347 348
@@ -371,6 +372,25 @@ void __cpuinit setup_local_APIC (void)
371 apic_write(APIC_TASKPRI, value); 372 apic_write(APIC_TASKPRI, value);
372 373
373 /* 374 /*
375 * After a crash, we no longer service the interrupts and a pending
376 * interrupt from previous kernel might still have ISR bit set.
377 *
378 * Most probably by now CPU has serviced that pending interrupt and
379 * it might not have done the ack_APIC_irq() because it thought,
380 * interrupt came from i8259 as ExtInt. LAPIC did not get EOI so it
381 * does not clear the ISR bit and cpu thinks it has already serivced
382 * the interrupt. Hence a vector might get locked. It was noticed
383 * for timer irq (vector 0x31). Issue an extra EOI to clear ISR.
384 */
385 for (i = APIC_ISR_NR - 1; i >= 0; i--) {
386 value = apic_read(APIC_ISR + i*0x10);
387 for (j = 31; j >= 0; j--) {
388 if (value & (1<<j))
389 ack_APIC_irq();
390 }
391 }
392
393 /*
374 * Now that we are all set up, enable the APIC 394 * Now that we are all set up, enable the APIC
375 */ 395 */
376 value = apic_read(APIC_SPIV); 396 value = apic_read(APIC_SPIV);
diff --git a/arch/x86_64/kernel/early_printk.c b/arch/x86_64/kernel/early_printk.c
index 6dffb498ccd7..13af920b6594 100644
--- a/arch/x86_64/kernel/early_printk.c
+++ b/arch/x86_64/kernel/early_printk.c
@@ -17,11 +17,8 @@
17#define VGABASE ((void __iomem *)0xffffffff800b8000UL) 17#define VGABASE ((void __iomem *)0xffffffff800b8000UL)
18#endif 18#endif
19 19
20#define MAX_YPOS max_ypos
21#define MAX_XPOS max_xpos
22
23static int max_ypos = 25, max_xpos = 80; 20static int max_ypos = 25, max_xpos = 80;
24static int current_ypos = 1, current_xpos = 0; 21static int current_ypos = 25, current_xpos = 0;
25 22
26static void early_vga_write(struct console *con, const char *str, unsigned n) 23static void early_vga_write(struct console *con, const char *str, unsigned n)
27{ 24{
@@ -29,26 +26,26 @@ static void early_vga_write(struct console *con, const char *str, unsigned n)
29 int i, k, j; 26 int i, k, j;
30 27
31 while ((c = *str++) != '\0' && n-- > 0) { 28 while ((c = *str++) != '\0' && n-- > 0) {
32 if (current_ypos >= MAX_YPOS) { 29 if (current_ypos >= max_ypos) {
33 /* scroll 1 line up */ 30 /* scroll 1 line up */
34 for (k = 1, j = 0; k < MAX_YPOS; k++, j++) { 31 for (k = 1, j = 0; k < max_ypos; k++, j++) {
35 for (i = 0; i < MAX_XPOS; i++) { 32 for (i = 0; i < max_xpos; i++) {
36 writew(readw(VGABASE + 2*(MAX_XPOS*k + i)), 33 writew(readw(VGABASE+2*(max_xpos*k+i)),
37 VGABASE + 2*(MAX_XPOS*j + i)); 34 VGABASE + 2*(max_xpos*j + i));
38 } 35 }
39 } 36 }
40 for (i = 0; i < MAX_XPOS; i++) 37 for (i = 0; i < max_xpos; i++)
41 writew(0x720, VGABASE + 2*(MAX_XPOS*j + i)); 38 writew(0x720, VGABASE + 2*(max_xpos*j + i));
42 current_ypos = MAX_YPOS-1; 39 current_ypos = max_ypos-1;
43 } 40 }
44 if (c == '\n') { 41 if (c == '\n') {
45 current_xpos = 0; 42 current_xpos = 0;
46 current_ypos++; 43 current_ypos++;
47 } else if (c != '\r') { 44 } else if (c != '\r') {
48 writew(((0x7 << 8) | (unsigned short) c), 45 writew(((0x7 << 8) | (unsigned short) c),
49 VGABASE + 2*(MAX_XPOS*current_ypos + 46 VGABASE + 2*(max_xpos*current_ypos +
50 current_xpos++)); 47 current_xpos++));
51 if (current_xpos >= MAX_XPOS) { 48 if (current_xpos >= max_xpos) {
52 current_xpos = 0; 49 current_xpos = 0;
53 current_ypos++; 50 current_ypos++;
54 } 51 }
@@ -63,7 +60,7 @@ static struct console early_vga_console = {
63 .index = -1, 60 .index = -1,
64}; 61};
65 62
66/* Serial functions loosely based on a similar package from Klaus P. Gerlicher */ 63/* Serial functions loosely based on a similar package from Klaus P. Gerlicher */
67 64
68static int early_serial_base = 0x3f8; /* ttyS0 */ 65static int early_serial_base = 0x3f8; /* ttyS0 */
69 66
@@ -83,30 +80,30 @@ static int early_serial_base = 0x3f8; /* ttyS0 */
83#define DLL 0 /* Divisor Latch Low */ 80#define DLL 0 /* Divisor Latch Low */
84#define DLH 1 /* Divisor latch High */ 81#define DLH 1 /* Divisor latch High */
85 82
86static int early_serial_putc(unsigned char ch) 83static int early_serial_putc(unsigned char ch)
87{ 84{
88 unsigned timeout = 0xffff; 85 unsigned timeout = 0xffff;
89 while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout) 86 while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout)
90 cpu_relax(); 87 cpu_relax();
91 outb(ch, early_serial_base + TXR); 88 outb(ch, early_serial_base + TXR);
92 return timeout ? 0 : -1; 89 return timeout ? 0 : -1;
93} 90}
94 91
95static void early_serial_write(struct console *con, const char *s, unsigned n) 92static void early_serial_write(struct console *con, const char *s, unsigned n)
96{ 93{
97 while (*s && n-- > 0) { 94 while (*s && n-- > 0) {
98 early_serial_putc(*s); 95 early_serial_putc(*s);
99 if (*s == '\n') 96 if (*s == '\n')
100 early_serial_putc('\r'); 97 early_serial_putc('\r');
101 s++; 98 s++;
102 } 99 }
103} 100}
104 101
105#define DEFAULT_BAUD 9600 102#define DEFAULT_BAUD 9600
106 103
107static __init void early_serial_init(char *s) 104static __init void early_serial_init(char *s)
108{ 105{
109 unsigned char c; 106 unsigned char c;
110 unsigned divisor; 107 unsigned divisor;
111 unsigned baud = DEFAULT_BAUD; 108 unsigned baud = DEFAULT_BAUD;
112 char *e; 109 char *e;
@@ -115,7 +112,7 @@ static __init void early_serial_init(char *s)
115 ++s; 112 ++s;
116 113
117 if (*s) { 114 if (*s) {
118 unsigned port; 115 unsigned port;
119 if (!strncmp(s,"0x",2)) { 116 if (!strncmp(s,"0x",2)) {
120 early_serial_base = simple_strtoul(s, &e, 16); 117 early_serial_base = simple_strtoul(s, &e, 16);
121 } else { 118 } else {
@@ -139,16 +136,16 @@ static __init void early_serial_init(char *s)
139 outb(0x3, early_serial_base + MCR); /* DTR + RTS */ 136 outb(0x3, early_serial_base + MCR); /* DTR + RTS */
140 137
141 if (*s) { 138 if (*s) {
142 baud = simple_strtoul(s, &e, 0); 139 baud = simple_strtoul(s, &e, 0);
143 if (baud == 0 || s == e) 140 if (baud == 0 || s == e)
144 baud = DEFAULT_BAUD; 141 baud = DEFAULT_BAUD;
145 } 142 }
146 143
147 divisor = 115200 / baud; 144 divisor = 115200 / baud;
148 c = inb(early_serial_base + LCR); 145 c = inb(early_serial_base + LCR);
149 outb(c | DLAB, early_serial_base + LCR); 146 outb(c | DLAB, early_serial_base + LCR);
150 outb(divisor & 0xff, early_serial_base + DLL); 147 outb(divisor & 0xff, early_serial_base + DLL);
151 outb((divisor >> 8) & 0xff, early_serial_base + DLH); 148 outb((divisor >> 8) & 0xff, early_serial_base + DLH);
152 outb(c & ~DLAB, early_serial_base + LCR); 149 outb(c & ~DLAB, early_serial_base + LCR);
153} 150}
154 151
@@ -205,67 +202,68 @@ struct console *early_console = &early_vga_console;
205static int early_console_initialized = 0; 202static int early_console_initialized = 0;
206 203
207void early_printk(const char *fmt, ...) 204void early_printk(const char *fmt, ...)
208{ 205{
209 char buf[512]; 206 char buf[512];
210 int n; 207 int n;
211 va_list ap; 208 va_list ap;
212 209
213 va_start(ap,fmt); 210 va_start(ap,fmt);
214 n = vscnprintf(buf,512,fmt,ap); 211 n = vscnprintf(buf,512,fmt,ap);
215 early_console->write(early_console,buf,n); 212 early_console->write(early_console,buf,n);
216 va_end(ap); 213 va_end(ap);
217} 214}
218 215
219static int __initdata keep_early; 216static int __initdata keep_early;
220 217
221int __init setup_early_printk(char *opt) 218int __init setup_early_printk(char *opt)
222{ 219{
223 char *space; 220 char *space;
224 char buf[256]; 221 char buf[256];
225 222
226 if (early_console_initialized) 223 if (early_console_initialized)
227 return -1; 224 return -1;
228 225
229 strlcpy(buf,opt,sizeof(buf)); 226 strlcpy(buf,opt,sizeof(buf));
230 space = strchr(buf, ' '); 227 space = strchr(buf, ' ');
231 if (space) 228 if (space)
232 *space = 0; 229 *space = 0;
233 230
234 if (strstr(buf,"keep")) 231 if (strstr(buf,"keep"))
235 keep_early = 1; 232 keep_early = 1;
236 233
237 if (!strncmp(buf, "serial", 6)) { 234 if (!strncmp(buf, "serial", 6)) {
238 early_serial_init(buf + 6); 235 early_serial_init(buf + 6);
239 early_console = &early_serial_console; 236 early_console = &early_serial_console;
240 } else if (!strncmp(buf, "ttyS", 4)) { 237 } else if (!strncmp(buf, "ttyS", 4)) {
241 early_serial_init(buf); 238 early_serial_init(buf);
242 early_console = &early_serial_console; 239 early_console = &early_serial_console;
243 } else if (!strncmp(buf, "vga", 3) 240 } else if (!strncmp(buf, "vga", 3)
244 && SCREEN_INFO.orig_video_isVGA == 1) { 241 && SCREEN_INFO.orig_video_isVGA == 1) {
245 max_xpos = SCREEN_INFO.orig_video_cols; 242 max_xpos = SCREEN_INFO.orig_video_cols;
246 max_ypos = SCREEN_INFO.orig_video_lines; 243 max_ypos = SCREEN_INFO.orig_video_lines;
247 early_console = &early_vga_console; 244 current_ypos = SCREEN_INFO.orig_y;
245 early_console = &early_vga_console;
248 } else if (!strncmp(buf, "simnow", 6)) { 246 } else if (!strncmp(buf, "simnow", 6)) {
249 simnow_init(buf + 6); 247 simnow_init(buf + 6);
250 early_console = &simnow_console; 248 early_console = &simnow_console;
251 keep_early = 1; 249 keep_early = 1;
252 } 250 }
253 early_console_initialized = 1; 251 early_console_initialized = 1;
254 register_console(early_console); 252 register_console(early_console);
255 return 0; 253 return 0;
256} 254}
257 255
258void __init disable_early_printk(void) 256void __init disable_early_printk(void)
259{ 257{
260 if (!early_console_initialized || !early_console) 258 if (!early_console_initialized || !early_console)
261 return; 259 return;
262 if (!keep_early) { 260 if (!keep_early) {
263 printk("disabling early console\n"); 261 printk("disabling early console\n");
264 unregister_console(early_console); 262 unregister_console(early_console);
265 early_console_initialized = 0; 263 early_console_initialized = 0;
266 } else { 264 } else {
267 printk("keeping early console\n"); 265 printk("keeping early console\n");
268 } 266 }
269} 267}
270 268
271__setup("earlyprintk=", setup_early_printk); 269__setup("earlyprintk=", setup_early_printk);
diff --git a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S
index 7c10e9009d61..8538bfea30e6 100644
--- a/arch/x86_64/kernel/entry.S
+++ b/arch/x86_64/kernel/entry.S
@@ -553,7 +553,7 @@ iret_label:
553 /* force a signal here? this matches i386 behaviour */ 553 /* force a signal here? this matches i386 behaviour */
554 /* running with kernel gs */ 554 /* running with kernel gs */
555bad_iret: 555bad_iret:
556 movq $-9999,%rdi /* better code? */ 556 movq $11,%rdi /* SIGSEGV */
557 sti 557 sti
558 jmp do_exit 558 jmp do_exit
559 .previous 559 .previous
diff --git a/arch/x86_64/kernel/functionlist b/arch/x86_64/kernel/functionlist
new file mode 100644
index 000000000000..2bcebdc3eedb
--- /dev/null
+++ b/arch/x86_64/kernel/functionlist
@@ -0,0 +1,1286 @@
1*(.text.flush_thread)
2*(.text.check_poison_obj)
3*(.text.copy_page)
4*(.text.__set_personality)
5*(.text.gart_map_sg)
6*(.text.kmem_cache_free)
7*(.text.find_get_page)
8*(.text._raw_spin_lock)
9*(.text.ide_outb)
10*(.text.unmap_vmas)
11*(.text.copy_page_range)
12*(.text.kprobe_handler)
13*(.text.__handle_mm_fault)
14*(.text.__d_lookup)
15*(.text.copy_user_generic)
16*(.text.__link_path_walk)
17*(.text.get_page_from_freelist)
18*(.text.kmem_cache_alloc)
19*(.text.drive_cmd_intr)
20*(.text.ia32_setup_sigcontext)
21*(.text.huge_pte_offset)
22*(.text.do_page_fault)
23*(.text.page_remove_rmap)
24*(.text.release_pages)
25*(.text.ide_end_request)
26*(.text.__mutex_lock_slowpath)
27*(.text.__find_get_block)
28*(.text.kfree)
29*(.text.vfs_read)
30*(.text._raw_spin_unlock)
31*(.text.free_hot_cold_page)
32*(.text.fget_light)
33*(.text.schedule)
34*(.text.memcmp)
35*(.text.touch_atime)
36*(.text.__might_sleep)
37*(.text.__down_read_trylock)
38*(.text.arch_pick_mmap_layout)
39*(.text.find_vma)
40*(.text.__make_request)
41*(.text.do_generic_mapping_read)
42*(.text.mutex_lock_interruptible)
43*(.text.__generic_file_aio_read)
44*(.text._atomic_dec_and_lock)
45*(.text.__wake_up_bit)
46*(.text.add_to_page_cache)
47*(.text.cache_alloc_debugcheck_after)
48*(.text.vm_normal_page)
49*(.text.mutex_debug_check_no_locks_freed)
50*(.text.net_rx_action)
51*(.text.__find_first_zero_bit)
52*(.text.put_page)
53*(.text._raw_read_lock)
54*(.text.__delay)
55*(.text.dnotify_parent)
56*(.text.do_path_lookup)
57*(.text.do_sync_read)
58*(.text.do_lookup)
59*(.text.bit_waitqueue)
60*(.text.file_read_actor)
61*(.text.strncpy_from_user)
62*(.text.__pagevec_lru_add_active)
63*(.text.fget)
64*(.text.dput)
65*(.text.__strnlen_user)
66*(.text.inotify_inode_queue_event)
67*(.text.rw_verify_area)
68*(.text.ide_intr)
69*(.text.inotify_dentry_parent_queue_event)
70*(.text.permission)
71*(.text.memscan)
72*(.text.hpet_rtc_interrupt)
73*(.text.do_mmap_pgoff)
74*(.text.current_fs_time)
75*(.text.vfs_getattr)
76*(.text.kmem_flagcheck)
77*(.text.mark_page_accessed)
78*(.text.free_pages_and_swap_cache)
79*(.text.generic_fillattr)
80*(.text.__block_prepare_write)
81*(.text.__set_page_dirty_nobuffers)
82*(.text.link_path_walk)
83*(.text.find_get_pages_tag)
84*(.text.ide_do_request)
85*(.text.__alloc_pages)
86*(.text.generic_permission)
87*(.text.mod_page_state_offset)
88*(.text.free_pgd_range)
89*(.text.generic_file_buffered_write)
90*(.text.number)
91*(.text.ide_do_rw_disk)
92*(.text.__brelse)
93*(.text.__mod_page_state_offset)
94*(.text.rotate_reclaimable_page)
95*(.text.find_vma_prepare)
96*(.text.find_vma_prev)
97*(.text.lru_cache_add_active)
98*(.text.__kmalloc_track_caller)
99*(.text.smp_invalidate_interrupt)
100*(.text.handle_IRQ_event)
101*(.text.__find_get_block_slow)
102*(.text.do_wp_page)
103*(.text.do_select)
104*(.text.set_user_nice)
105*(.text.sys_read)
106*(.text.do_munmap)
107*(.text.csum_partial)
108*(.text.__do_softirq)
109*(.text.may_open)
110*(.text.getname)
111*(.text.get_empty_filp)
112*(.text.__fput)
113*(.text.remove_mapping)
114*(.text.filp_ctor)
115*(.text.poison_obj)
116*(.text.unmap_region)
117*(.text.test_set_page_writeback)
118*(.text.__do_page_cache_readahead)
119*(.text.sock_def_readable)
120*(.text.ide_outl)
121*(.text.shrink_zone)
122*(.text.rb_insert_color)
123*(.text.get_request)
124*(.text.sys_pread64)
125*(.text.spin_bug)
126*(.text.ide_outsl)
127*(.text.mask_and_ack_8259A)
128*(.text.filemap_nopage)
129*(.text.page_add_file_rmap)
130*(.text.find_lock_page)
131*(.text.tcp_poll)
132*(.text.__mark_inode_dirty)
133*(.text.file_ra_state_init)
134*(.text.generic_file_llseek)
135*(.text.__pagevec_lru_add)
136*(.text.page_cache_readahead)
137*(.text.n_tty_receive_buf)
138*(.text.zonelist_policy)
139*(.text.vma_adjust)
140*(.text.test_clear_page_dirty)
141*(.text.sync_buffer)
142*(.text.do_exit)
143*(.text.__bitmap_weight)
144*(.text.alloc_pages_current)
145*(.text.get_unused_fd)
146*(.text.zone_watermark_ok)
147*(.text.cpuset_update_task_memory_state)
148*(.text.__bitmap_empty)
149*(.text.sys_munmap)
150*(.text.__inode_dir_notify)
151*(.text.__generic_file_aio_write_nolock)
152*(.text.__pte_alloc)
153*(.text.sys_select)
154*(.text.vm_acct_memory)
155*(.text.vfs_write)
156*(.text.__lru_add_drain)
157*(.text.prio_tree_insert)
158*(.text.generic_file_aio_read)
159*(.text.vma_merge)
160*(.text.block_write_full_page)
161*(.text.__page_set_anon_rmap)
162*(.text.apic_timer_interrupt)
163*(.text.release_console_sem)
164*(.text.sys_write)
165*(.text.sys_brk)
166*(.text.dup_mm)
167*(.text.read_current_timer)
168*(.text.ll_rw_block)
169*(.text.blk_rq_map_sg)
170*(.text.dbg_userword)
171*(.text.__block_commit_write)
172*(.text.cache_grow)
173*(.text.copy_strings)
174*(.text.release_task)
175*(.text.do_sync_write)
176*(.text.unlock_page)
177*(.text.load_elf_binary)
178*(.text.__follow_mount)
179*(.text.__getblk)
180*(.text.do_sys_open)
181*(.text.current_kernel_time)
182*(.text.call_rcu)
183*(.text.write_chan)
184*(.text.vsnprintf)
185*(.text.dummy_inode_setsecurity)
186*(.text.submit_bh)
187*(.text.poll_freewait)
188*(.text.bio_alloc_bioset)
189*(.text.skb_clone)
190*(.text.page_waitqueue)
191*(.text.__mutex_lock_interruptible_slowpath)
192*(.text.get_index)
193*(.text.csum_partial_copy_generic)
194*(.text.bad_range)
195*(.text.remove_vma)
196*(.text.cp_new_stat)
197*(.text.alloc_arraycache)
198*(.text.test_clear_page_writeback)
199*(.text.strsep)
200*(.text.open_namei)
201*(.text._raw_read_unlock)
202*(.text.get_vma_policy)
203*(.text.__down_write_trylock)
204*(.text.find_get_pages)
205*(.text.tcp_rcv_established)
206*(.text.generic_make_request)
207*(.text.__block_write_full_page)
208*(.text.cfq_set_request)
209*(.text.sys_inotify_init)
210*(.text.split_vma)
211*(.text.__mod_timer)
212*(.text.get_options)
213*(.text.vma_link)
214*(.text.mpage_writepages)
215*(.text.truncate_complete_page)
216*(.text.tcp_recvmsg)
217*(.text.sigprocmask)
218*(.text.filemap_populate)
219*(.text.sys_close)
220*(.text.inotify_dev_queue_event)
221*(.text.do_task_stat)
222*(.text.__dentry_open)
223*(.text.unlink_file_vma)
224*(.text.__pollwait)
225*(.text.packet_rcv_spkt)
226*(.text.drop_buffers)
227*(.text.free_pgtables)
228*(.text.generic_file_direct_write)
229*(.text.copy_process)
230*(.text.netif_receive_skb)
231*(.text.dnotify_flush)
232*(.text.print_bad_pte)
233*(.text.anon_vma_unlink)
234*(.text.sys_mprotect)
235*(.text.sync_sb_inodes)
236*(.text.find_inode_fast)
237*(.text.dummy_inode_readlink)
238*(.text.putname)
239*(.text.init_smp_flush)
240*(.text.dbg_redzone2)
241*(.text.sk_run_filter)
242*(.text.may_expand_vm)
243*(.text.generic_file_aio_write)
244*(.text.find_next_zero_bit)
245*(.text.file_kill)
246*(.text.audit_getname)
247*(.text.arch_unmap_area_topdown)
248*(.text.alloc_page_vma)
249*(.text.tcp_transmit_skb)
250*(.text.rb_next)
251*(.text.dbg_redzone1)
252*(.text.generic_file_mmap)
253*(.text.vfs_fstat)
254*(.text.sys_time)
255*(.text.page_lock_anon_vma)
256*(.text.get_unmapped_area)
257*(.text.remote_llseek)
258*(.text.__up_read)
259*(.text.fd_install)
260*(.text.eventpoll_init_file)
261*(.text.dma_alloc_coherent)
262*(.text.create_empty_buffers)
263*(.text.__mutex_unlock_slowpath)
264*(.text.dup_fd)
265*(.text.d_alloc)
266*(.text.tty_ldisc_try)
267*(.text.sys_stime)
268*(.text.__rb_rotate_right)
269*(.text.d_validate)
270*(.text.rb_erase)
271*(.text.path_release)
272*(.text.memmove)
273*(.text.invalidate_complete_page)
274*(.text.clear_inode)
275*(.text.cache_estimate)
276*(.text.alloc_buffer_head)
277*(.text.smp_call_function_interrupt)
278*(.text.flush_tlb_others)
279*(.text.file_move)
280*(.text.balance_dirty_pages_ratelimited)
281*(.text.vma_prio_tree_add)
282*(.text.timespec_trunc)
283*(.text.mempool_alloc)
284*(.text.iget_locked)
285*(.text.d_alloc_root)
286*(.text.cpuset_populate_dir)
287*(.text.anon_vma_prepare)
288*(.text.sys_newstat)
289*(.text.alloc_page_interleave)
290*(.text.__path_lookup_intent_open)
291*(.text.__pagevec_free)
292*(.text.inode_init_once)
293*(.text.free_vfsmnt)
294*(.text.__user_walk_fd)
295*(.text.cfq_idle_slice_timer)
296*(.text.sys_mmap)
297*(.text.sys_llseek)
298*(.text.prio_tree_remove)
299*(.text.filp_close)
300*(.text.file_permission)
301*(.text.vma_prio_tree_remove)
302*(.text.tcp_ack)
303*(.text.nameidata_to_filp)
304*(.text.sys_lseek)
305*(.text.percpu_counter_mod)
306*(.text.igrab)
307*(.text.__bread)
308*(.text.alloc_inode)
309*(.text.filldir)
310*(.text.__rb_rotate_left)
311*(.text.irq_affinity_write_proc)
312*(.text.init_request_from_bio)
313*(.text.find_or_create_page)
314*(.text.tty_poll)
315*(.text.tcp_sendmsg)
316*(.text.ide_wait_stat)
317*(.text.free_buffer_head)
318*(.text.flush_signal_handlers)
319*(.text.tcp_v4_rcv)
320*(.text.nr_blockdev_pages)
321*(.text.locks_remove_flock)
322*(.text.__iowrite32_copy)
323*(.text.do_filp_open)
324*(.text.try_to_release_page)
325*(.text.page_add_new_anon_rmap)
326*(.text.kmem_cache_size)
327*(.text.eth_type_trans)
328*(.text.try_to_free_buffers)
329*(.text.schedule_tail)
330*(.text.proc_lookup)
331*(.text.no_llseek)
332*(.text.kfree_skbmem)
333*(.text.do_wait)
334*(.text.do_mpage_readpage)
335*(.text.vfs_stat_fd)
336*(.text.tty_write)
337*(.text.705)
338*(.text.sync_page)
339*(.text.__remove_shared_vm_struct)
340*(.text.__kfree_skb)
341*(.text.sock_poll)
342*(.text.get_request_wait)
343*(.text.do_sigaction)
344*(.text.do_brk)
345*(.text.tcp_event_data_recv)
346*(.text.read_chan)
347*(.text.pipe_writev)
348*(.text.__emul_lookup_dentry)
349*(.text.rtc_get_rtc_time)
350*(.text.print_objinfo)
351*(.text.file_update_time)
352*(.text.do_signal)
353*(.text.disable_8259A_irq)
354*(.text.blk_queue_bounce)
355*(.text.__anon_vma_link)
356*(.text.__vma_link)
357*(.text.vfs_rename)
358*(.text.sys_newlstat)
359*(.text.sys_newfstat)
360*(.text.sys_mknod)
361*(.text.__show_regs)
362*(.text.iput)
363*(.text.get_signal_to_deliver)
364*(.text.flush_tlb_page)
365*(.text.debug_mutex_wake_waiter)
366*(.text.copy_thread)
367*(.text.clear_page_dirty_for_io)
368*(.text.buffer_io_error)
369*(.text.vfs_permission)
370*(.text.truncate_inode_pages_range)
371*(.text.sys_recvfrom)
372*(.text.remove_suid)
373*(.text.mark_buffer_dirty)
374*(.text.local_bh_enable)
375*(.text.get_zeroed_page)
376*(.text.get_vmalloc_info)
377*(.text.flush_old_exec)
378*(.text.dummy_inode_permission)
379*(.text.__bio_add_page)
380*(.text.prio_tree_replace)
381*(.text.notify_change)
382*(.text.mntput_no_expire)
383*(.text.fput)
384*(.text.__end_that_request_first)
385*(.text.wake_up_bit)
386*(.text.unuse_mm)
387*(.text.skb_release_data)
388*(.text.shrink_icache_memory)
389*(.text.sched_balance_self)
390*(.text.__pmd_alloc)
391*(.text.pipe_poll)
392*(.text.normal_poll)
393*(.text.__free_pages)
394*(.text.follow_mount)
395*(.text.cdrom_start_packet_command)
396*(.text.blk_recount_segments)
397*(.text.bio_put)
398*(.text.__alloc_skb)
399*(.text.__wake_up)
400*(.text.vm_stat_account)
401*(.text.sys_fcntl)
402*(.text.sys_fadvise64)
403*(.text._raw_write_unlock)
404*(.text.__pud_alloc)
405*(.text.alloc_page_buffers)
406*(.text.vfs_llseek)
407*(.text.sockfd_lookup)
408*(.text._raw_write_lock)
409*(.text.put_compound_page)
410*(.text.prune_dcache)
411*(.text.pipe_readv)
412*(.text.mempool_free)
413*(.text.make_ahead_window)
414*(.text.lru_add_drain)
415*(.text.constant_test_bit)
416*(.text.__clear_user)
417*(.text.arch_unmap_area)
418*(.text.anon_vma_link)
419*(.text.sys_chroot)
420*(.text.setup_arg_pages)
421*(.text.radix_tree_preload)
422*(.text.init_rwsem)
423*(.text.generic_osync_inode)
424*(.text.generic_delete_inode)
425*(.text.do_sys_poll)
426*(.text.dev_queue_xmit)
427*(.text.default_llseek)
428*(.text.__writeback_single_inode)
429*(.text.vfs_ioctl)
430*(.text.__up_write)
431*(.text.unix_poll)
432*(.text.sys_rt_sigprocmask)
433*(.text.sock_recvmsg)
434*(.text.recalc_bh_state)
435*(.text.__put_unused_fd)
436*(.text.process_backlog)
437*(.text.locks_remove_posix)
438*(.text.lease_modify)
439*(.text.expand_files)
440*(.text.end_buffer_read_nobh)
441*(.text.d_splice_alias)
442*(.text.debug_mutex_init_waiter)
443*(.text.copy_from_user)
444*(.text.cap_vm_enough_memory)
445*(.text.show_vfsmnt)
446*(.text.release_sock)
447*(.text.pfifo_fast_enqueue)
448*(.text.half_md4_transform)
449*(.text.fs_may_remount_ro)
450*(.text.do_fork)
451*(.text.copy_hugetlb_page_range)
452*(.text.cache_free_debugcheck)
453*(.text.__tcp_select_window)
454*(.text.task_handoff_register)
455*(.text.sys_open)
456*(.text.strlcpy)
457*(.text.skb_copy_datagram_iovec)
458*(.text.set_up_list3s)
459*(.text.release_open_intent)
460*(.text.qdisc_restart)
461*(.text.n_tty_chars_in_buffer)
462*(.text.inode_change_ok)
463*(.text.__downgrade_write)
464*(.text.debug_mutex_unlock)
465*(.text.add_timer_randomness)
466*(.text.sock_common_recvmsg)
467*(.text.set_bh_page)
468*(.text.printk_lock)
469*(.text.path_release_on_umount)
470*(.text.ip_output)
471*(.text.ide_build_dmatable)
472*(.text.__get_user_8)
473*(.text.end_buffer_read_sync)
474*(.text.__d_path)
475*(.text.d_move)
476*(.text.del_timer)
477*(.text.constant_test_bit)
478*(.text.blockable_page_cache_readahead)
479*(.text.tty_read)
480*(.text.sys_readlink)
481*(.text.sys_faccessat)
482*(.text.read_swap_cache_async)
483*(.text.pty_write_room)
484*(.text.page_address_in_vma)
485*(.text.kthread)
486*(.text.cfq_exit_io_context)
487*(.text.__tcp_push_pending_frames)
488*(.text.sys_pipe)
489*(.text.submit_bio)
490*(.text.pid_revalidate)
491*(.text.page_referenced_file)
492*(.text.lock_sock)
493*(.text.get_page_state_node)
494*(.text.generic_block_bmap)
495*(.text.do_setitimer)
496*(.text.dev_queue_xmit_nit)
497*(.text.copy_from_read_buf)
498*(.text.__const_udelay)
499*(.text.console_conditional_schedule)
500*(.text.wake_up_new_task)
501*(.text.wait_for_completion_interruptible)
502*(.text.tcp_rcv_rtt_update)
503*(.text.sys_mlockall)
504*(.text.set_fs_altroot)
505*(.text.schedule_timeout)
506*(.text.nr_free_pagecache_pages)
507*(.text.nf_iterate)
508*(.text.mapping_tagged)
509*(.text.ip_queue_xmit)
510*(.text.ip_local_deliver)
511*(.text.follow_page)
512*(.text.elf_map)
513*(.text.dummy_file_permission)
514*(.text.dispose_list)
515*(.text.dentry_open)
516*(.text.dentry_iput)
517*(.text.bio_alloc)
518*(.text.alloc_skb_from_cache)
519*(.text.wait_on_page_bit)
520*(.text.vfs_readdir)
521*(.text.vfs_lstat)
522*(.text.seq_escape)
523*(.text.__posix_lock_file)
524*(.text.mm_release)
525*(.text.kref_put)
526*(.text.ip_rcv)
527*(.text.__iget)
528*(.text.free_pages)
529*(.text.find_mergeable_anon_vma)
530*(.text.find_extend_vma)
531*(.text.dummy_inode_listsecurity)
532*(.text.bio_add_page)
533*(.text.__vm_enough_memory)
534*(.text.vfs_stat)
535*(.text.tty_paranoia_check)
536*(.text.tcp_read_sock)
537*(.text.tcp_data_queue)
538*(.text.sys_uname)
539*(.text.sys_renameat)
540*(.text.__strncpy_from_user)
541*(.text.__mutex_init)
542*(.text.__lookup_hash)
543*(.text.kref_get)
544*(.text.ip_route_input)
545*(.text.__insert_inode_hash)
546*(.text.do_sock_write)
547*(.text.blk_done_softirq)
548*(.text.__wake_up_sync)
549*(.text.__vma_link_rb)
550*(.text.tty_ioctl)
551*(.text.tracesys)
552*(.text.sys_getdents)
553*(.text.sys_dup)
554*(.text.stub_execve)
555*(.text.sha_transform)
556*(.text.radix_tree_tag_clear)
557*(.text.put_unused_fd)
558*(.text.put_files_struct)
559*(.text.mpage_readpages)
560*(.text.may_delete)
561*(.text.kmem_cache_create)
562*(.text.ip_mc_output)
563*(.text.interleave_nodes)
564*(.text.groups_search)
565*(.text.generic_drop_inode)
566*(.text.generic_commit_write)
567*(.text.fcntl_setlk)
568*(.text.exit_mmap)
569*(.text.end_page_writeback)
570*(.text.__d_rehash)
571*(.text.debug_mutex_free_waiter)
572*(.text.csum_ipv6_magic)
573*(.text.count)
574*(.text.cleanup_rbuf)
575*(.text.check_spinlock_acquired_node)
576*(.text.can_vma_merge_after)
577*(.text.bio_endio)
578*(.text.alloc_pidmap)
579*(.text.write_ldt)
580*(.text.vmtruncate_range)
581*(.text.vfs_create)
582*(.text.__user_walk)
583*(.text.update_send_head)
584*(.text.unmap_underlying_metadata)
585*(.text.tty_ldisc_deref)
586*(.text.tcp_setsockopt)
587*(.text.tcp_send_ack)
588*(.text.sys_pause)
589*(.text.sys_gettimeofday)
590*(.text.sync_dirty_buffer)
591*(.text.strncmp)
592*(.text.release_posix_timer)
593*(.text.proc_file_read)
594*(.text.prepare_to_wait)
595*(.text.locks_mandatory_locked)
596*(.text.interruptible_sleep_on_timeout)
597*(.text.inode_sub_bytes)
598*(.text.in_group_p)
599*(.text.hrtimer_try_to_cancel)
600*(.text.filldir64)
601*(.text.fasync_helper)
602*(.text.dummy_sb_pivotroot)
603*(.text.d_lookup)
604*(.text.d_instantiate)
605*(.text.__d_find_alias)
606*(.text.cpu_idle_wait)
607*(.text.cond_resched_lock)
608*(.text.chown_common)
609*(.text.blk_congestion_wait)
610*(.text.activate_page)
611*(.text.unlock_buffer)
612*(.text.tty_wakeup)
613*(.text.tcp_v4_do_rcv)
614*(.text.tcp_current_mss)
615*(.text.sys_openat)
616*(.text.sys_fchdir)
617*(.text.strnlen_user)
618*(.text.strnlen)
619*(.text.strchr)
620*(.text.sock_common_getsockopt)
621*(.text.skb_checksum)
622*(.text.remove_wait_queue)
623*(.text.rb_replace_node)
624*(.text.radix_tree_node_ctor)
625*(.text.pty_chars_in_buffer)
626*(.text.profile_hit)
627*(.text.prio_tree_left)
628*(.text.pgd_clear_bad)
629*(.text.pfifo_fast_dequeue)
630*(.text.page_referenced)
631*(.text.open_exec)
632*(.text.mmput)
633*(.text.mm_init)
634*(.text.__ide_dma_off_quietly)
635*(.text.ide_dma_intr)
636*(.text.hrtimer_start)
637*(.text.get_io_context)
638*(.text.__get_free_pages)
639*(.text.find_first_zero_bit)
640*(.text.file_free_rcu)
641*(.text.dummy_socket_sendmsg)
642*(.text.do_unlinkat)
643*(.text.do_arch_prctl)
644*(.text.destroy_inode)
645*(.text.can_vma_merge_before)
646*(.text.block_sync_page)
647*(.text.block_prepare_write)
648*(.text.bio_init)
649*(.text.arch_ptrace)
650*(.text.wake_up_inode)
651*(.text.wait_on_retry_sync_kiocb)
652*(.text.vma_prio_tree_next)
653*(.text.tcp_rcv_space_adjust)
654*(.text.__tcp_ack_snd_check)
655*(.text.sys_utime)
656*(.text.sys_recvmsg)
657*(.text.sys_mremap)
658*(.text.sys_bdflush)
659*(.text.sleep_on)
660*(.text.set_page_dirty_lock)
661*(.text.seq_path)
662*(.text.schedule_timeout_interruptible)
663*(.text.sched_fork)
664*(.text.rt_run_flush)
665*(.text.profile_munmap)
666*(.text.prepare_binprm)
667*(.text.__pagevec_release_nonlru)
668*(.text.m_show)
669*(.text.lookup_mnt)
670*(.text.__lookup_mnt)
671*(.text.lock_timer_base)
672*(.text.is_subdir)
673*(.text.invalidate_bh_lru)
674*(.text.init_buffer_head)
675*(.text.ifind_fast)
676*(.text.ide_dma_start)
677*(.text.__get_page_state)
678*(.text.flock_to_posix_lock)
679*(.text.__find_symbol)
680*(.text.do_futex)
681*(.text.do_execve)
682*(.text.dirty_writeback_centisecs_handler)
683*(.text.dev_watchdog)
684*(.text.can_share_swap_page)
685*(.text.blkdev_put)
686*(.text.bio_get_nr_vecs)
687*(.text.xfrm_compile_policy)
688*(.text.vma_prio_tree_insert)
689*(.text.vfs_lstat_fd)
690*(.text.__user_path_lookup_open)
691*(.text.thread_return)
692*(.text.tcp_send_delayed_ack)
693*(.text.sock_def_error_report)
694*(.text.shrink_slab)
695*(.text.serial_out)
696*(.text.seq_read)
697*(.text.secure_ip_id)
698*(.text.search_binary_handler)
699*(.text.proc_pid_unhash)
700*(.text.pagevec_lookup)
701*(.text.new_inode)
702*(.text.memcpy_toiovec)
703*(.text.locks_free_lock)
704*(.text.__lock_page)
705*(.text.__lock_buffer)
706*(.text.load_module)
707*(.text.is_bad_inode)
708*(.text.invalidate_inode_buffers)
709*(.text.insert_vm_struct)
710*(.text.inode_setattr)
711*(.text.inode_add_bytes)
712*(.text.ide_read_24)
713*(.text.ide_get_error_location)
714*(.text.ide_do_drive_cmd)
715*(.text.get_locked_pte)
716*(.text.get_filesystem_list)
717*(.text.generic_file_open)
718*(.text.follow_down)
719*(.text.find_next_bit)
720*(.text.__find_first_bit)
721*(.text.exit_mm)
722*(.text.exec_keys)
723*(.text.end_buffer_write_sync)
724*(.text.end_bio_bh_io_sync)
725*(.text.dummy_socket_shutdown)
726*(.text.d_rehash)
727*(.text.d_path)
728*(.text.do_ioctl)
729*(.text.dget_locked)
730*(.text.copy_thread_group_keys)
731*(.text.cdrom_end_request)
732*(.text.cap_bprm_apply_creds)
733*(.text.blk_rq_bio_prep)
734*(.text.__bitmap_intersects)
735*(.text.bio_phys_segments)
736*(.text.bio_free)
737*(.text.arch_get_unmapped_area_topdown)
738*(.text.writeback_in_progress)
739*(.text.vfs_follow_link)
740*(.text.tcp_rcv_state_process)
741*(.text.tcp_check_space)
742*(.text.sys_stat)
743*(.text.sys_rt_sigreturn)
744*(.text.sys_rt_sigaction)
745*(.text.sys_remap_file_pages)
746*(.text.sys_pwrite64)
747*(.text.sys_fchownat)
748*(.text.sys_fchmodat)
749*(.text.strncat)
750*(.text.strlcat)
751*(.text.strcmp)
752*(.text.steal_locks)
753*(.text.sock_create)
754*(.text.sk_stream_rfree)
755*(.text.sk_stream_mem_schedule)
756*(.text.skip_atoi)
757*(.text.sk_alloc)
758*(.text.show_stat)
759*(.text.set_fs_pwd)
760*(.text.set_binfmt)
761*(.text.pty_unthrottle)
762*(.text.proc_symlink)
763*(.text.pipe_release)
764*(.text.pageout)
765*(.text.n_tty_write_wakeup)
766*(.text.n_tty_ioctl)
767*(.text.nr_free_zone_pages)
768*(.text.migration_thread)
769*(.text.mempool_free_slab)
770*(.text.meminfo_read_proc)
771*(.text.max_sane_readahead)
772*(.text.lru_cache_add)
773*(.text.kill_fasync)
774*(.text.kernel_read)
775*(.text.invalidate_mapping_pages)
776*(.text.inode_has_buffers)
777*(.text.init_once)
778*(.text.inet_sendmsg)
779*(.text.idedisk_issue_flush)
780*(.text.generic_file_write)
781*(.text.free_more_memory)
782*(.text.__free_fdtable)
783*(.text.filp_dtor)
784*(.text.exit_sem)
785*(.text.exit_itimers)
786*(.text.error_interrupt)
787*(.text.end_buffer_async_write)
788*(.text.eligible_child)
789*(.text.elf_map)
790*(.text.dump_task_regs)
791*(.text.dummy_task_setscheduler)
792*(.text.dummy_socket_accept)
793*(.text.dummy_file_free_security)
794*(.text.__down_read)
795*(.text.do_sock_read)
796*(.text.do_sigaltstack)
797*(.text.do_mremap)
798*(.text.current_io_context)
799*(.text.cpu_swap_callback)
800*(.text.copy_vma)
801*(.text.cap_bprm_set_security)
802*(.text.blk_insert_request)
803*(.text.bio_map_kern_endio)
804*(.text.bio_hw_segments)
805*(.text.bictcp_cong_avoid)
806*(.text.add_interrupt_randomness)
807*(.text.wait_for_completion)
808*(.text.version_read_proc)
809*(.text.unix_write_space)
810*(.text.tty_ldisc_ref_wait)
811*(.text.tty_ldisc_put)
812*(.text.try_to_wake_up)
813*(.text.tcp_v4_tw_remember_stamp)
814*(.text.tcp_try_undo_dsack)
815*(.text.tcp_may_send_now)
816*(.text.sys_waitid)
817*(.text.sys_sched_getparam)
818*(.text.sys_getppid)
819*(.text.sys_getcwd)
820*(.text.sys_dup2)
821*(.text.sys_chmod)
822*(.text.sys_chdir)
823*(.text.sprintf)
824*(.text.sock_wfree)
825*(.text.sock_aio_write)
826*(.text.skb_drop_fraglist)
827*(.text.skb_dequeue)
828*(.text.set_close_on_exec)
829*(.text.set_brk)
830*(.text.seq_puts)
831*(.text.SELECT_DRIVE)
832*(.text.sched_exec)
833*(.text.return_EIO)
834*(.text.remove_from_page_cache)
835*(.text.rcu_start_batch)
836*(.text.__put_task_struct)
837*(.text.proc_pid_readdir)
838*(.text.proc_get_inode)
839*(.text.prepare_to_wait_exclusive)
840*(.text.pipe_wait)
841*(.text.pipe_new)
842*(.text.pdflush_operation)
843*(.text.__pagevec_release)
844*(.text.pagevec_lookup_tag)
845*(.text.packet_rcv)
846*(.text.n_tty_set_room)
847*(.text.nr_free_pages)
848*(.text.__net_timestamp)
849*(.text.mpage_end_io_read)
850*(.text.mod_timer)
851*(.text.__memcpy)
852*(.text.mb_cache_shrink_fn)
853*(.text.lock_rename)
854*(.text.kstrdup)
855*(.text.is_ignored)
856*(.text.int_very_careful)
857*(.text.inotify_inode_is_dead)
858*(.text.inotify_get_cookie)
859*(.text.inode_get_bytes)
860*(.text.init_timer)
861*(.text.init_dev)
862*(.text.inet_getname)
863*(.text.ide_map_sg)
864*(.text.__ide_dma_end)
865*(.text.hrtimer_get_remaining)
866*(.text.get_task_mm)
867*(.text.get_random_int)
868*(.text.free_pipe_info)
869*(.text.filemap_write_and_wait_range)
870*(.text.exit_thread)
871*(.text.enter_idle)
872*(.text.end_that_request_first)
873*(.text.end_8259A_irq)
874*(.text.dummy_file_alloc_security)
875*(.text.do_group_exit)
876*(.text.debug_mutex_init)
877*(.text.cpuset_exit)
878*(.text.cpu_idle)
879*(.text.copy_semundo)
880*(.text.copy_files)
881*(.text.chrdev_open)
882*(.text.cdrom_transfer_packet_command)
883*(.text.cdrom_mode_sense)
884*(.text.blk_phys_contig_segment)
885*(.text.blk_get_queue)
886*(.text.bio_split)
887*(.text.audit_alloc)
888*(.text.anon_pipe_buf_release)
889*(.text.add_wait_queue_exclusive)
890*(.text.add_wait_queue)
891*(.text.acct_process)
892*(.text.account)
893*(.text.zeromap_page_range)
894*(.text.yield)
895*(.text.writeback_acquire)
896*(.text.worker_thread)
897*(.text.wait_on_page_writeback_range)
898*(.text.__wait_on_buffer)
899*(.text.vscnprintf)
900*(.text.vmalloc_to_pfn)
901*(.text.vgacon_save_screen)
902*(.text.vfs_unlink)
903*(.text.vfs_rmdir)
904*(.text.unregister_md_personality)
905*(.text.unlock_new_inode)
906*(.text.unix_stream_sendmsg)
907*(.text.unix_stream_recvmsg)
908*(.text.unhash_process)
909*(.text.udp_v4_lookup_longway)
910*(.text.tty_ldisc_flush)
911*(.text.tty_ldisc_enable)
912*(.text.tty_hung_up_p)
913*(.text.tty_buffer_free_all)
914*(.text.tso_fragment)
915*(.text.try_to_del_timer_sync)
916*(.text.tcp_v4_err)
917*(.text.tcp_unhash)
918*(.text.tcp_seq_next)
919*(.text.tcp_select_initial_window)
920*(.text.tcp_sacktag_write_queue)
921*(.text.tcp_cwnd_validate)
922*(.text.sys_vhangup)
923*(.text.sys_uselib)
924*(.text.sys_symlink)
925*(.text.sys_signal)
926*(.text.sys_poll)
927*(.text.sys_mount)
928*(.text.sys_kill)
929*(.text.sys_ioctl)
930*(.text.sys_inotify_add_watch)
931*(.text.sys_getuid)
932*(.text.sys_getrlimit)
933*(.text.sys_getitimer)
934*(.text.sys_getgroups)
935*(.text.sys_ftruncate)
936*(.text.sysfs_lookup)
937*(.text.sys_exit_group)
938*(.text.stub_fork)
939*(.text.sscanf)
940*(.text.sock_map_fd)
941*(.text.sock_get_timestamp)
942*(.text.__sock_create)
943*(.text.smp_call_function_single)
944*(.text.sk_stop_timer)
945*(.text.skb_copy_and_csum_datagram)
946*(.text.__skb_checksum_complete)
947*(.text.single_next)
948*(.text.sigqueue_alloc)
949*(.text.shrink_dcache_parent)
950*(.text.select_idle_routine)
951*(.text.run_workqueue)
952*(.text.run_local_timers)
953*(.text.remove_inode_hash)
954*(.text.remove_dquot_ref)
955*(.text.register_binfmt)
956*(.text.read_cache_pages)
957*(.text.rb_last)
958*(.text.pty_open)
959*(.text.proc_root_readdir)
960*(.text.proc_pid_flush)
961*(.text.proc_pident_lookup)
962*(.text.proc_fill_super)
963*(.text.proc_exe_link)
964*(.text.posix_locks_deadlock)
965*(.text.pipe_iov_copy_from_user)
966*(.text.opost)
967*(.text.nf_register_hook)
968*(.text.netif_rx_ni)
969*(.text.m_start)
970*(.text.mpage_writepage)
971*(.text.mm_alloc)
972*(.text.memory_open)
973*(.text.mark_buffer_async_write)
974*(.text.lru_add_drain_all)
975*(.text.locks_init_lock)
976*(.text.locks_delete_lock)
977*(.text.lock_hrtimer_base)
978*(.text.load_script)
979*(.text.__kill_fasync)
980*(.text.ip_mc_sf_allow)
981*(.text.__ioremap)
982*(.text.int_with_check)
983*(.text.int_sqrt)
984*(.text.install_thread_keyring)
985*(.text.init_page_buffers)
986*(.text.inet_sock_destruct)
987*(.text.idle_notifier_register)
988*(.text.ide_execute_command)
989*(.text.ide_end_drive_cmd)
990*(.text.__ide_dma_host_on)
991*(.text.hrtimer_run_queues)
992*(.text.hpet_mask_rtc_irq_bit)
993*(.text.__get_zone_counts)
994*(.text.get_zone_counts)
995*(.text.get_write_access)
996*(.text.get_fs_struct)
997*(.text.get_dirty_limits)
998*(.text.generic_readlink)
999*(.text.free_hot_page)
1000*(.text.finish_wait)
1001*(.text.find_inode)
1002*(.text.find_first_bit)
1003*(.text.__filemap_fdatawrite_range)
1004*(.text.__filemap_copy_from_user_iovec)
1005*(.text.exit_aio)
1006*(.text.elv_set_request)
1007*(.text.elv_former_request)
1008*(.text.dup_namespace)
1009*(.text.dupfd)
1010*(.text.dummy_socket_getsockopt)
1011*(.text.dummy_sb_post_mountroot)
1012*(.text.dummy_quotactl)
1013*(.text.dummy_inode_rename)
1014*(.text.__do_SAK)
1015*(.text.do_pipe)
1016*(.text.do_fsync)
1017*(.text.d_instantiate_unique)
1018*(.text.d_find_alias)
1019*(.text.deny_write_access)
1020*(.text.dentry_unhash)
1021*(.text.d_delete)
1022*(.text.datagram_poll)
1023*(.text.cpuset_fork)
1024*(.text.cpuid_read)
1025*(.text.copy_namespace)
1026*(.text.cond_resched)
1027*(.text.check_version)
1028*(.text.__change_page_attr)
1029*(.text.cfq_slab_kill)
1030*(.text.cfq_completed_request)
1031*(.text.cdrom_pc_intr)
1032*(.text.cdrom_decode_status)
1033*(.text.cap_capset_check)
1034*(.text.blk_put_request)
1035*(.text.bio_fs_destructor)
1036*(.text.bictcp_min_cwnd)
1037*(.text.alloc_chrdev_region)
1038*(.text.add_element)
1039*(.text.acct_update_integrals)
1040*(.text.write_boundary_block)
1041*(.text.writeback_release)
1042*(.text.writeback_inodes)
1043*(.text.wake_up_state)
1044*(.text.__wake_up_locked)
1045*(.text.wake_futex)
1046*(.text.wait_task_inactive)
1047*(.text.__wait_on_freeing_inode)
1048*(.text.wait_noreap_copyout)
1049*(.text.vmstat_start)
1050*(.text.vgacon_do_font_op)
1051*(.text.vfs_readv)
1052*(.text.vfs_quota_sync)
1053*(.text.update_queue)
1054*(.text.unshare_files)
1055*(.text.unmap_vm_area)
1056*(.text.unix_socketpair)
1057*(.text.unix_release_sock)
1058*(.text.unix_detach_fds)
1059*(.text.unix_create1)
1060*(.text.unix_bind)
1061*(.text.udp_sendmsg)
1062*(.text.udp_rcv)
1063*(.text.udp_queue_rcv_skb)
1064*(.text.uart_write)
1065*(.text.uart_startup)
1066*(.text.uart_open)
1067*(.text.tty_vhangup)
1068*(.text.tty_termios_baud_rate)
1069*(.text.tty_release)
1070*(.text.tty_ldisc_ref)
1071*(.text.throttle_vm_writeout)
1072*(.text.058)
1073*(.text.tcp_xmit_probe_skb)
1074*(.text.tcp_v4_send_check)
1075*(.text.tcp_v4_destroy_sock)
1076*(.text.tcp_sync_mss)
1077*(.text.tcp_snd_test)
1078*(.text.tcp_slow_start)
1079*(.text.tcp_send_fin)
1080*(.text.tcp_rtt_estimator)
1081*(.text.tcp_parse_options)
1082*(.text.tcp_ioctl)
1083*(.text.tcp_init_tso_segs)
1084*(.text.tcp_init_cwnd)
1085*(.text.tcp_getsockopt)
1086*(.text.tcp_fin)
1087*(.text.tcp_connect)
1088*(.text.tcp_cong_avoid)
1089*(.text.__tcp_checksum_complete_user)
1090*(.text.task_dumpable)
1091*(.text.sys_wait4)
1092*(.text.sys_utimes)
1093*(.text.sys_symlinkat)
1094*(.text.sys_socketpair)
1095*(.text.sys_rmdir)
1096*(.text.sys_readahead)
1097*(.text.sys_nanosleep)
1098*(.text.sys_linkat)
1099*(.text.sys_fstat)
1100*(.text.sysfs_readdir)
1101*(.text.sys_execve)
1102*(.text.sysenter_tracesys)
1103*(.text.sys_chown)
1104*(.text.stub_clone)
1105*(.text.strrchr)
1106*(.text.strncpy)
1107*(.text.stopmachine_set_state)
1108*(.text.sock_sendmsg)
1109*(.text.sock_release)
1110*(.text.sock_fasync)
1111*(.text.sock_close)
1112*(.text.sk_stream_write_space)
1113*(.text.sk_reset_timer)
1114*(.text.skb_split)
1115*(.text.skb_recv_datagram)
1116*(.text.skb_queue_tail)
1117*(.text.sk_attach_filter)
1118*(.text.si_swapinfo)
1119*(.text.simple_strtoll)
1120*(.text.set_termios)
1121*(.text.set_task_comm)
1122*(.text.set_shrinker)
1123*(.text.set_normalized_timespec)
1124*(.text.set_brk)
1125*(.text.serial_in)
1126*(.text.seq_printf)
1127*(.text.secure_dccp_sequence_number)
1128*(.text.rwlock_bug)
1129*(.text.rt_hash_code)
1130*(.text.__rta_fill)
1131*(.text.__request_resource)
1132*(.text.relocate_new_kernel)
1133*(.text.release_thread)
1134*(.text.release_mem)
1135*(.text.rb_prev)
1136*(.text.rb_first)
1137*(.text.random_poll)
1138*(.text.__put_super_and_need_restart)
1139*(.text.pty_write)
1140*(.text.ptrace_stop)
1141*(.text.proc_self_readlink)
1142*(.text.proc_root_lookup)
1143*(.text.proc_root_link)
1144*(.text.proc_pid_make_inode)
1145*(.text.proc_pid_attr_write)
1146*(.text.proc_lookupfd)
1147*(.text.proc_delete_inode)
1148*(.text.posix_same_owner)
1149*(.text.posix_block_lock)
1150*(.text.poll_initwait)
1151*(.text.pipe_write)
1152*(.text.pipe_read_fasync)
1153*(.text.pipe_ioctl)
1154*(.text.pdflush)
1155*(.text.pci_user_read_config_dword)
1156*(.text.page_readlink)
1157*(.text.null_lseek)
1158*(.text.nf_hook_slow)
1159*(.text.netlink_sock_destruct)
1160*(.text.netlink_broadcast)
1161*(.text.neigh_resolve_output)
1162*(.text.name_to_int)
1163*(.text.mwait_idle)
1164*(.text.mutex_trylock)
1165*(.text.mutex_debug_check_no_locks_held)
1166*(.text.m_stop)
1167*(.text.mpage_end_io_write)
1168*(.text.mpage_alloc)
1169*(.text.move_page_tables)
1170*(.text.mounts_open)
1171*(.text.__memset)
1172*(.text.memcpy_fromiovec)
1173*(.text.make_8259A_irq)
1174*(.text.lookup_user_key_possessed)
1175*(.text.lookup_create)
1176*(.text.locks_insert_lock)
1177*(.text.locks_alloc_lock)
1178*(.text.kthread_should_stop)
1179*(.text.kswapd)
1180*(.text.kobject_uevent)
1181*(.text.kobject_get_path)
1182*(.text.kobject_get)
1183*(.text.klist_children_put)
1184*(.text.__ip_route_output_key)
1185*(.text.ip_flush_pending_frames)
1186*(.text.ip_compute_csum)
1187*(.text.ip_append_data)
1188*(.text.ioc_set_batching)
1189*(.text.invalidate_inode_pages)
1190*(.text.__invalidate_device)
1191*(.text.install_arg_page)
1192*(.text.in_sched_functions)
1193*(.text.inotify_unmount_inodes)
1194*(.text.init_once)
1195*(.text.init_cdrom_command)
1196*(.text.inet_stream_connect)
1197*(.text.inet_sk_rebuild_header)
1198*(.text.inet_csk_addr2sockaddr)
1199*(.text.inet_create)
1200*(.text.ifind)
1201*(.text.ide_setup_dma)
1202*(.text.ide_outsw)
1203*(.text.ide_fixstring)
1204*(.text.ide_dma_setup)
1205*(.text.ide_cdrom_packet)
1206*(.text.ide_cd_put)
1207*(.text.ide_build_sglist)
1208*(.text.i8259A_shutdown)
1209*(.text.hung_up_tty_ioctl)
1210*(.text.hrtimer_nanosleep)
1211*(.text.hrtimer_init)
1212*(.text.hrtimer_cancel)
1213*(.text.hash_futex)
1214*(.text.group_send_sig_info)
1215*(.text.grab_cache_page_nowait)
1216*(.text.get_wchan)
1217*(.text.get_stack)
1218*(.text.get_page_state)
1219*(.text.getnstimeofday)
1220*(.text.get_node)
1221*(.text.get_kprobe)
1222*(.text.generic_unplug_device)
1223*(.text.free_task)
1224*(.text.frag_show)
1225*(.text.find_next_zero_string)
1226*(.text.filp_open)
1227*(.text.fillonedir)
1228*(.text.exit_io_context)
1229*(.text.exit_idle)
1230*(.text.exact_lock)
1231*(.text.eth_header)
1232*(.text.dummy_unregister_security)
1233*(.text.dummy_socket_post_create)
1234*(.text.dummy_socket_listen)
1235*(.text.dummy_quota_on)
1236*(.text.dummy_inode_follow_link)
1237*(.text.dummy_file_receive)
1238*(.text.dummy_file_mprotect)
1239*(.text.dummy_file_lock)
1240*(.text.dummy_file_ioctl)
1241*(.text.dummy_bprm_post_apply_creds)
1242*(.text.do_writepages)
1243*(.text.__down_interruptible)
1244*(.text.do_notify_resume)
1245*(.text.do_acct_process)
1246*(.text.del_timer_sync)
1247*(.text.default_rebuild_header)
1248*(.text.d_callback)
1249*(.text.dcache_readdir)
1250*(.text.ctrl_dumpfamily)
1251*(.text.cpuset_rmdir)
1252*(.text.copy_strings_kernel)
1253*(.text.con_write_room)
1254*(.text.complete_all)
1255*(.text.collect_sigign_sigcatch)
1256*(.text.clear_user)
1257*(.text.check_unthrottle)
1258*(.text.cdrom_release)
1259*(.text.cdrom_newpc_intr)
1260*(.text.cdrom_ioctl)
1261*(.text.cdrom_check_status)
1262*(.text.cdev_put)
1263*(.text.cdev_add)
1264*(.text.cap_ptrace)
1265*(.text.cap_bprm_secureexec)
1266*(.text.cache_alloc_refill)
1267*(.text.bmap)
1268*(.text.blk_run_queue)
1269*(.text.blk_queue_dma_alignment)
1270*(.text.blk_ordered_req_seq)
1271*(.text.blk_backing_dev_unplug)
1272*(.text.__bitmap_subset)
1273*(.text.__bitmap_and)
1274*(.text.bio_unmap_user)
1275*(.text.__bforget)
1276*(.text.bd_forget)
1277*(.text.bad_pipe_w)
1278*(.text.bad_get_user)
1279*(.text.audit_free)
1280*(.text.anon_vma_ctor)
1281*(.text.anon_pipe_buf_map)
1282*(.text.alloc_sock_iocb)
1283*(.text.alloc_fdset)
1284*(.text.aio_kick_handler)
1285*(.text.__add_entropy_words)
1286*(.text.add_disk_randomness)
diff --git a/arch/x86_64/kernel/head.S b/arch/x86_64/kernel/head.S
index 02fc7fa0ea28..6df05e6034fa 100644
--- a/arch/x86_64/kernel/head.S
+++ b/arch/x86_64/kernel/head.S
@@ -26,6 +26,7 @@
26 */ 26 */
27 27
28 .text 28 .text
29 .section .bootstrap.text
29 .code32 30 .code32
30 .globl startup_32 31 .globl startup_32
31/* %bx: 1 if coming from smp trampoline on secondary cpu */ 32/* %bx: 1 if coming from smp trampoline on secondary cpu */
@@ -192,7 +193,8 @@ startup_64:
192 movq initial_code(%rip),%rax 193 movq initial_code(%rip),%rax
193 jmp *%rax 194 jmp *%rax
194 195
195 /* SMP bootup changes these two */ 196 /* SMP bootup changes these two */
197 .align 8
196 .globl initial_code 198 .globl initial_code
197initial_code: 199initial_code:
198 .quad x86_64_start_kernel 200 .quad x86_64_start_kernel
@@ -237,7 +239,7 @@ ENTRY(no_long_mode)
237.org 0xf00 239.org 0xf00
238 .globl pGDT32 240 .globl pGDT32
239pGDT32: 241pGDT32:
240 .word gdt_end-cpu_gdt_table 242 .word gdt_end-cpu_gdt_table-1
241 .long cpu_gdt_table-__START_KERNEL_map 243 .long cpu_gdt_table-__START_KERNEL_map
242 244
243.org 0xf10 245.org 0xf10
@@ -293,8 +295,6 @@ NEXT_PAGE(level2_kernel_pgt)
293 /* Module mapping starts here */ 295 /* Module mapping starts here */
294 .fill 492,8,0 296 .fill 492,8,0
295 297
296NEXT_PAGE(empty_zero_page)
297
298NEXT_PAGE(level3_physmem_pgt) 298NEXT_PAGE(level3_physmem_pgt)
299 .quad phys_level2_kernel_pgt | 0x007 /* so that __va works even before pagetable_init */ 299 .quad phys_level2_kernel_pgt | 0x007 /* so that __va works even before pagetable_init */
300 .fill 511,8,0 300 .fill 511,8,0
@@ -337,7 +337,7 @@ ENTRY(boot_level4_pgt)
337 .align 16 337 .align 16
338 .globl cpu_gdt_descr 338 .globl cpu_gdt_descr
339cpu_gdt_descr: 339cpu_gdt_descr:
340 .word gdt_end-cpu_gdt_table 340 .word gdt_end-cpu_gdt_table-1
341gdt: 341gdt:
342 .quad cpu_gdt_table 342 .quad cpu_gdt_table
343#ifdef CONFIG_SMP 343#ifdef CONFIG_SMP
@@ -352,7 +352,8 @@ gdt:
352 * Also sysret mandates a special GDT layout 352 * Also sysret mandates a special GDT layout
353 */ 353 */
354 354
355.align PAGE_SIZE 355 .section .data.page_aligned, "aw"
356 .align PAGE_SIZE
356 357
357/* The TLS descriptors are currently at a different place compared to i386. 358/* The TLS descriptors are currently at a different place compared to i386.
358 Hopefully nobody expects them at a fixed place (Wine?) */ 359 Hopefully nobody expects them at a fixed place (Wine?) */
@@ -378,9 +379,12 @@ gdt_end:
378 /* zero the remaining page */ 379 /* zero the remaining page */
379 .fill PAGE_SIZE / 8 - GDT_ENTRIES,8,0 380 .fill PAGE_SIZE / 8 - GDT_ENTRIES,8,0
380 381
381ENTRY(idt_table) 382 .section .bss, "aw", @nobits
382 .rept 256 383 .align L1_CACHE_BYTES
383 .quad 0 384ENTRY(idt_table)
384 .quad 0 385 .skip 256 * 16
385 .endr
386 386
387 .section .bss.page_aligned, "aw", @nobits
388 .align PAGE_SIZE
389ENTRY(empty_zero_page)
390 .skip PAGE_SIZE
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
index ffed464e6b12..77b4c608cca0 100644
--- a/arch/x86_64/kernel/io_apic.c
+++ b/arch/x86_64/kernel/io_apic.c
@@ -50,7 +50,7 @@ static int no_timer_check;
50 50
51int disable_timer_pin_1 __initdata; 51int disable_timer_pin_1 __initdata;
52 52
53int timer_over_8254 __initdata = 1; 53int timer_over_8254 __initdata = 0;
54 54
55/* Where if anywhere is the i8259 connect in external int mode */ 55/* Where if anywhere is the i8259 connect in external int mode */
56static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; 56static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
@@ -310,7 +310,7 @@ void __init check_ioapic(void)
310 force_iommu) && 310 force_iommu) &&
311 !iommu_aperture_allowed) { 311 !iommu_aperture_allowed) {
312 printk(KERN_INFO 312 printk(KERN_INFO
313 "Looks like a VIA chipset. Disabling IOMMU. Overwrite with \"iommu=allowed\"\n"); 313 "Looks like a VIA chipset. Disabling IOMMU. Override with \"iommu=allowed\"\n");
314 iommu_aperture_disabled = 1; 314 iommu_aperture_disabled = 1;
315 } 315 }
316#endif 316#endif
@@ -1848,7 +1848,7 @@ static inline void check_timer(void)
1848 */ 1848 */
1849 setup_ExtINT_IRQ0_pin(apic2, pin2, vector); 1849 setup_ExtINT_IRQ0_pin(apic2, pin2, vector);
1850 if (timer_irq_works()) { 1850 if (timer_irq_works()) {
1851 printk("works.\n"); 1851 apic_printk(APIC_VERBOSE," works.\n");
1852 nmi_watchdog_default(); 1852 nmi_watchdog_default();
1853 if (nmi_watchdog == NMI_IO_APIC) { 1853 if (nmi_watchdog == NMI_IO_APIC) {
1854 setup_nmi(); 1854 setup_nmi();
@@ -1860,7 +1860,7 @@ static inline void check_timer(void)
1860 */ 1860 */
1861 clear_IO_APIC_pin(apic2, pin2); 1861 clear_IO_APIC_pin(apic2, pin2);
1862 } 1862 }
1863 printk(" failed.\n"); 1863 apic_printk(APIC_VERBOSE," failed.\n");
1864 1864
1865 if (nmi_watchdog == NMI_IO_APIC) { 1865 if (nmi_watchdog == NMI_IO_APIC) {
1866 printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); 1866 printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n");
@@ -1875,7 +1875,7 @@ static inline void check_timer(void)
1875 enable_8259A_irq(0); 1875 enable_8259A_irq(0);
1876 1876
1877 if (timer_irq_works()) { 1877 if (timer_irq_works()) {
1878 apic_printk(APIC_QUIET, " works.\n"); 1878 apic_printk(APIC_VERBOSE," works.\n");
1879 return; 1879 return;
1880 } 1880 }
1881 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector); 1881 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector);
diff --git a/arch/x86_64/kernel/irq.c b/arch/x86_64/kernel/irq.c
index 30d2a1e545fe..d8bd0b345b1e 100644
--- a/arch/x86_64/kernel/irq.c
+++ b/arch/x86_64/kernel/irq.c
@@ -38,9 +38,8 @@ int show_interrupts(struct seq_file *p, void *v)
38 38
39 if (i == 0) { 39 if (i == 0) {
40 seq_printf(p, " "); 40 seq_printf(p, " ");
41 for (j=0; j<NR_CPUS; j++) 41 for_each_online_cpu(j)
42 if (cpu_online(j)) 42 seq_printf(p, "CPU%d ",j);
43 seq_printf(p, "CPU%d ",j);
44 seq_putc(p, '\n'); 43 seq_putc(p, '\n');
45 } 44 }
46 45
@@ -53,10 +52,8 @@ int show_interrupts(struct seq_file *p, void *v)
53#ifndef CONFIG_SMP 52#ifndef CONFIG_SMP
54 seq_printf(p, "%10u ", kstat_irqs(i)); 53 seq_printf(p, "%10u ", kstat_irqs(i));
55#else 54#else
56 for (j=0; j<NR_CPUS; j++) 55 for_each_online_cpu(j)
57 if (cpu_online(j)) 56 seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
58 seq_printf(p, "%10u ",
59 kstat_cpu(j).irqs[i]);
60#endif 57#endif
61 seq_printf(p, " %14s", irq_desc[i].handler->typename); 58 seq_printf(p, " %14s", irq_desc[i].handler->typename);
62 59
@@ -68,15 +65,13 @@ skip:
68 spin_unlock_irqrestore(&irq_desc[i].lock, flags); 65 spin_unlock_irqrestore(&irq_desc[i].lock, flags);
69 } else if (i == NR_IRQS) { 66 } else if (i == NR_IRQS) {
70 seq_printf(p, "NMI: "); 67 seq_printf(p, "NMI: ");
71 for (j = 0; j < NR_CPUS; j++) 68 for_each_online_cpu(j)
72 if (cpu_online(j)) 69 seq_printf(p, "%10u ", cpu_pda(j)->__nmi_count);
73 seq_printf(p, "%10u ", cpu_pda(j)->__nmi_count);
74 seq_putc(p, '\n'); 70 seq_putc(p, '\n');
75#ifdef CONFIG_X86_LOCAL_APIC 71#ifdef CONFIG_X86_LOCAL_APIC
76 seq_printf(p, "LOC: "); 72 seq_printf(p, "LOC: ");
77 for (j = 0; j < NR_CPUS; j++) 73 for_each_online_cpu(j)
78 if (cpu_online(j)) 74 seq_printf(p, "%10u ", cpu_pda(j)->apic_timer_irqs);
79 seq_printf(p, "%10u ", cpu_pda(j)->apic_timer_irqs);
80 seq_putc(p, '\n'); 75 seq_putc(p, '\n');
81#endif 76#endif
82 seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); 77 seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
diff --git a/arch/x86_64/kernel/kprobes.c b/arch/x86_64/kernel/kprobes.c
index 8b866a8572cf..accbff3fec49 100644
--- a/arch/x86_64/kernel/kprobes.c
+++ b/arch/x86_64/kernel/kprobes.c
@@ -37,10 +37,12 @@
37#include <linux/string.h> 37#include <linux/string.h>
38#include <linux/slab.h> 38#include <linux/slab.h>
39#include <linux/preempt.h> 39#include <linux/preempt.h>
40#include <linux/module.h>
40 41
41#include <asm/cacheflush.h> 42#include <asm/cacheflush.h>
42#include <asm/pgtable.h> 43#include <asm/pgtable.h>
43#include <asm/kdebug.h> 44#include <asm/kdebug.h>
45#include <asm/uaccess.h>
44 46
45void jprobe_return_end(void); 47void jprobe_return_end(void);
46static void __kprobes arch_copy_kprobe(struct kprobe *p); 48static void __kprobes arch_copy_kprobe(struct kprobe *p);
@@ -222,9 +224,9 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
222 224
223void __kprobes arch_remove_kprobe(struct kprobe *p) 225void __kprobes arch_remove_kprobe(struct kprobe *p)
224{ 226{
225 down(&kprobe_mutex); 227 mutex_lock(&kprobe_mutex);
226 free_insn_slot(p->ainsn.insn); 228 free_insn_slot(p->ainsn.insn);
227 up(&kprobe_mutex); 229 mutex_unlock(&kprobe_mutex);
228} 230}
229 231
230static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb) 232static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
@@ -578,16 +580,62 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
578{ 580{
579 struct kprobe *cur = kprobe_running(); 581 struct kprobe *cur = kprobe_running();
580 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 582 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
583 const struct exception_table_entry *fixup;
581 584
582 if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr)) 585 switch(kcb->kprobe_status) {
583 return 1; 586 case KPROBE_HIT_SS:
584 587 case KPROBE_REENTER:
585 if (kcb->kprobe_status & KPROBE_HIT_SS) { 588 /*
586 resume_execution(cur, regs, kcb); 589 * We are here because the instruction being single
590 * stepped caused a page fault. We reset the current
591 * kprobe and the rip points back to the probe address
592 * and allow the page fault handler to continue as a
593 * normal page fault.
594 */
595 regs->rip = (unsigned long)cur->addr;
587 regs->eflags |= kcb->kprobe_old_rflags; 596 regs->eflags |= kcb->kprobe_old_rflags;
588 597 if (kcb->kprobe_status == KPROBE_REENTER)
589 reset_current_kprobe(); 598 restore_previous_kprobe(kcb);
599 else
600 reset_current_kprobe();
590 preempt_enable_no_resched(); 601 preempt_enable_no_resched();
602 break;
603 case KPROBE_HIT_ACTIVE:
604 case KPROBE_HIT_SSDONE:
605 /*
606 * We increment the nmissed count for accounting,
607 * we can also use npre/npostfault count for accouting
608 * these specific fault cases.
609 */
610 kprobes_inc_nmissed_count(cur);
611
612 /*
613 * We come here because instructions in the pre/post
614 * handler caused the page_fault, this could happen
615 * if handler tries to access user space by
616 * copy_from_user(), get_user() etc. Let the
617 * user-specified handler try to fix it first.
618 */
619 if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr))
620 return 1;
621
622 /*
623 * In case the user-specified fault handler returned
624 * zero, try to fix up.
625 */
626 fixup = search_exception_tables(regs->rip);
627 if (fixup) {
628 regs->rip = fixup->fixup;
629 return 1;
630 }
631
632 /*
633 * fixup() could not handle it,
634 * Let do_page_fault() fix it.
635 */
636 break;
637 default:
638 break;
591 } 639 }
592 return 0; 640 return 0;
593} 641}
@@ -601,6 +649,9 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
601 struct die_args *args = (struct die_args *)data; 649 struct die_args *args = (struct die_args *)data;
602 int ret = NOTIFY_DONE; 650 int ret = NOTIFY_DONE;
603 651
652 if (args->regs && user_mode(args->regs))
653 return ret;
654
604 switch (val) { 655 switch (val) {
605 case DIE_INT3: 656 case DIE_INT3:
606 if (kprobe_handler(args->regs)) 657 if (kprobe_handler(args->regs))
diff --git a/arch/x86_64/kernel/mce.c b/arch/x86_64/kernel/mce.c
index b8b9529fa89e..04282ef9fbd4 100644
--- a/arch/x86_64/kernel/mce.c
+++ b/arch/x86_64/kernel/mce.c
@@ -139,8 +139,7 @@ static void mce_panic(char *msg, struct mce *backup, unsigned long start)
139 139
140static int mce_available(struct cpuinfo_x86 *c) 140static int mce_available(struct cpuinfo_x86 *c)
141{ 141{
142 return test_bit(X86_FEATURE_MCE, &c->x86_capability) && 142 return cpu_has(c, X86_FEATURE_MCE) && cpu_has(c, X86_FEATURE_MCA);
143 test_bit(X86_FEATURE_MCA, &c->x86_capability);
144} 143}
145 144
146static inline void mce_get_rip(struct mce *m, struct pt_regs *regs) 145static inline void mce_get_rip(struct mce *m, struct pt_regs *regs)
diff --git a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c
index 9013a90b5c2e..b17cf3eba359 100644
--- a/arch/x86_64/kernel/mpparse.c
+++ b/arch/x86_64/kernel/mpparse.c
@@ -106,11 +106,11 @@ static int __init mpf_checksum(unsigned char *mp, int len)
106 return sum & 0xFF; 106 return sum & 0xFF;
107} 107}
108 108
109static void __init MP_processor_info (struct mpc_config_processor *m) 109static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
110{ 110{
111 int cpu; 111 int cpu;
112 unsigned char ver; 112 unsigned char ver;
113 static int found_bsp=0; 113 cpumask_t tmp_map;
114 114
115 if (!(m->mpc_cpuflag & CPU_ENABLED)) { 115 if (!(m->mpc_cpuflag & CPU_ENABLED)) {
116 disabled_cpus++; 116 disabled_cpus++;
@@ -133,8 +133,10 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
133 return; 133 return;
134 } 134 }
135 135
136 cpu = num_processors++; 136 num_processors++;
137 137 cpus_complement(tmp_map, cpu_present_map);
138 cpu = first_cpu(tmp_map);
139
138#if MAX_APICS < 255 140#if MAX_APICS < 255
139 if ((int)m->mpc_apicid > MAX_APICS) { 141 if ((int)m->mpc_apicid > MAX_APICS) {
140 printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n", 142 printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n",
@@ -160,12 +162,7 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
160 * entry is BSP, and so on. 162 * entry is BSP, and so on.
161 */ 163 */
162 cpu = 0; 164 cpu = 0;
163 165 }
164 bios_cpu_apicid[0] = m->mpc_apicid;
165 x86_cpu_to_apicid[0] = m->mpc_apicid;
166 found_bsp = 1;
167 } else
168 cpu = num_processors - found_bsp;
169 bios_cpu_apicid[cpu] = m->mpc_apicid; 166 bios_cpu_apicid[cpu] = m->mpc_apicid;
170 x86_cpu_to_apicid[cpu] = m->mpc_apicid; 167 x86_cpu_to_apicid[cpu] = m->mpc_apicid;
171 168
@@ -691,7 +688,7 @@ void __init mp_register_lapic_address (
691} 688}
692 689
693 690
694void __init mp_register_lapic ( 691void __cpuinit mp_register_lapic (
695 u8 id, 692 u8 id,
696 u8 enabled) 693 u8 enabled)
697{ 694{
diff --git a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c
index 5bf17e41cd2d..d9e4067faf05 100644
--- a/arch/x86_64/kernel/nmi.c
+++ b/arch/x86_64/kernel/nmi.c
@@ -162,9 +162,7 @@ int __init check_nmi_watchdog (void)
162 local_irq_enable(); 162 local_irq_enable();
163 mdelay((10*1000)/nmi_hz); // wait 10 ticks 163 mdelay((10*1000)/nmi_hz); // wait 10 ticks
164 164
165 for (cpu = 0; cpu < NR_CPUS; cpu++) { 165 for_each_online_cpu(cpu) {
166 if (!cpu_online(cpu))
167 continue;
168 if (cpu_pda(cpu)->__nmi_count - counts[cpu] <= 5) { 166 if (cpu_pda(cpu)->__nmi_count - counts[cpu] <= 5) {
169 endflag = 1; 167 endflag = 1;
170 printk("CPU#%d: NMI appears to be stuck (%d->%d)!\n", 168 printk("CPU#%d: NMI appears to be stuck (%d->%d)!\n",
@@ -536,6 +534,7 @@ asmlinkage __kprobes void do_nmi(struct pt_regs * regs, long error_code)
536 534
537void set_nmi_callback(nmi_callback_t callback) 535void set_nmi_callback(nmi_callback_t callback)
538{ 536{
537 vmalloc_sync_all();
539 rcu_assign_pointer(nmi_callback, callback); 538 rcu_assign_pointer(nmi_callback, callback);
540} 539}
541 540
diff --git a/arch/x86_64/kernel/pci-dma.c b/arch/x86_64/kernel/pci-dma.c
index 4ed391edd47a..03c9eeedb0f3 100644
--- a/arch/x86_64/kernel/pci-dma.c
+++ b/arch/x86_64/kernel/pci-dma.c
@@ -73,6 +73,9 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
73 if (dma_mask == 0) 73 if (dma_mask == 0)
74 dma_mask = 0xffffffff; 74 dma_mask = 0xffffffff;
75 75
76 /* Don't invoke OOM killer */
77 gfp |= __GFP_NORETRY;
78
76 /* Kludge to make it bug-to-bug compatible with i386. i386 79 /* Kludge to make it bug-to-bug compatible with i386. i386
77 uses the normal dma_mask for alloc_coherent. */ 80 uses the normal dma_mask for alloc_coherent. */
78 dma_mask &= *dev->dma_mask; 81 dma_mask &= *dev->dma_mask;
diff --git a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c
index 0c3f052ba6ce..a6c01e121266 100644
--- a/arch/x86_64/kernel/pci-gart.c
+++ b/arch/x86_64/kernel/pci-gart.c
@@ -65,9 +65,7 @@ static u32 gart_unmapped_entry;
65 65
66#define for_all_nb(dev) \ 66#define for_all_nb(dev) \
67 dev = NULL; \ 67 dev = NULL; \
68 while ((dev = pci_get_device(PCI_VENDOR_ID_AMD, 0x1103, dev))!=NULL)\ 68 while ((dev = pci_get_device(PCI_VENDOR_ID_AMD, 0x1103, dev))!=NULL)
69 if (dev->bus->number == 0 && \
70 (PCI_SLOT(dev->devfn) >= 24) && (PCI_SLOT(dev->devfn) <= 31))
71 69
72static struct pci_dev *northbridges[MAX_NB]; 70static struct pci_dev *northbridges[MAX_NB];
73static u32 northbridge_flush_word[MAX_NB]; 71static u32 northbridge_flush_word[MAX_NB];
@@ -148,9 +146,12 @@ static void flush_gart(struct device *dev)
148 if (!northbridges[i]) 146 if (!northbridges[i])
149 continue; 147 continue;
150 /* Make sure the hardware actually executed the flush. */ 148 /* Make sure the hardware actually executed the flush. */
151 do { 149 for (;;) {
152 pci_read_config_dword(northbridges[i], 0x9c, &w); 150 pci_read_config_dword(northbridges[i], 0x9c, &w);
153 } while (w & 1); 151 if (!(w & 1))
152 break;
153 cpu_relax();
154 }
154 } 155 }
155 if (!flushed) 156 if (!flushed)
156 printk("nothing to flush?\n"); 157 printk("nothing to flush?\n");
diff --git a/arch/x86_64/kernel/pmtimer.c b/arch/x86_64/kernel/pmtimer.c
index 5c51d10408a6..ee5ee4891f3d 100644
--- a/arch/x86_64/kernel/pmtimer.c
+++ b/arch/x86_64/kernel/pmtimer.c
@@ -86,7 +86,7 @@ static unsigned pmtimer_wait_tick(void)
86 for (a = b = inl(pmtmr_ioport) & ACPI_PM_MASK; 86 for (a = b = inl(pmtmr_ioport) & ACPI_PM_MASK;
87 a == b; 87 a == b;
88 b = inl(pmtmr_ioport) & ACPI_PM_MASK) 88 b = inl(pmtmr_ioport) & ACPI_PM_MASK)
89 ; 89 cpu_relax();
90 return b; 90 return b;
91} 91}
92 92
@@ -97,6 +97,7 @@ void pmtimer_wait(unsigned us)
97 a = pmtimer_wait_tick(); 97 a = pmtimer_wait_tick();
98 do { 98 do {
99 b = inl(pmtmr_ioport); 99 b = inl(pmtmr_ioport);
100 cpu_relax();
100 } while (cyc2us(b - a) < us); 101 } while (cyc2us(b - a) < us);
101} 102}
102 103
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c
index 22a05dec81a2..70dd8e5c6889 100644
--- a/arch/x86_64/kernel/process.c
+++ b/arch/x86_64/kernel/process.c
@@ -35,8 +35,8 @@
35#include <linux/ptrace.h> 35#include <linux/ptrace.h>
36#include <linux/utsname.h> 36#include <linux/utsname.h>
37#include <linux/random.h> 37#include <linux/random.h>
38#include <linux/kprobes.h>
39#include <linux/notifier.h> 38#include <linux/notifier.h>
39#include <linux/kprobes.h>
40 40
41#include <asm/uaccess.h> 41#include <asm/uaccess.h>
42#include <asm/pgtable.h> 42#include <asm/pgtable.h>
@@ -66,24 +66,17 @@ EXPORT_SYMBOL(boot_option_idle_override);
66void (*pm_idle)(void); 66void (*pm_idle)(void);
67static DEFINE_PER_CPU(unsigned int, cpu_idle_state); 67static DEFINE_PER_CPU(unsigned int, cpu_idle_state);
68 68
69static struct notifier_block *idle_notifier; 69static ATOMIC_NOTIFIER_HEAD(idle_notifier);
70static DEFINE_SPINLOCK(idle_notifier_lock);
71 70
72void idle_notifier_register(struct notifier_block *n) 71void idle_notifier_register(struct notifier_block *n)
73{ 72{
74 unsigned long flags; 73 atomic_notifier_chain_register(&idle_notifier, n);
75 spin_lock_irqsave(&idle_notifier_lock, flags);
76 notifier_chain_register(&idle_notifier, n);
77 spin_unlock_irqrestore(&idle_notifier_lock, flags);
78} 74}
79EXPORT_SYMBOL_GPL(idle_notifier_register); 75EXPORT_SYMBOL_GPL(idle_notifier_register);
80 76
81void idle_notifier_unregister(struct notifier_block *n) 77void idle_notifier_unregister(struct notifier_block *n)
82{ 78{
83 unsigned long flags; 79 atomic_notifier_chain_unregister(&idle_notifier, n);
84 spin_lock_irqsave(&idle_notifier_lock, flags);
85 notifier_chain_unregister(&idle_notifier, n);
86 spin_unlock_irqrestore(&idle_notifier_lock, flags);
87} 80}
88EXPORT_SYMBOL(idle_notifier_unregister); 81EXPORT_SYMBOL(idle_notifier_unregister);
89 82
@@ -93,13 +86,13 @@ static DEFINE_PER_CPU(enum idle_state, idle_state) = CPU_NOT_IDLE;
93void enter_idle(void) 86void enter_idle(void)
94{ 87{
95 __get_cpu_var(idle_state) = CPU_IDLE; 88 __get_cpu_var(idle_state) = CPU_IDLE;
96 notifier_call_chain(&idle_notifier, IDLE_START, NULL); 89 atomic_notifier_call_chain(&idle_notifier, IDLE_START, NULL);
97} 90}
98 91
99static void __exit_idle(void) 92static void __exit_idle(void)
100{ 93{
101 __get_cpu_var(idle_state) = CPU_NOT_IDLE; 94 __get_cpu_var(idle_state) = CPU_NOT_IDLE;
102 notifier_call_chain(&idle_notifier, IDLE_END, NULL); 95 atomic_notifier_call_chain(&idle_notifier, IDLE_END, NULL);
103} 96}
104 97
105/* Called from interrupts to signify idle end */ 98/* Called from interrupts to signify idle end */
@@ -114,7 +107,7 @@ void exit_idle(void)
114 * We use this if we don't have any better 107 * We use this if we don't have any better
115 * idle routine.. 108 * idle routine..
116 */ 109 */
117void default_idle(void) 110static void default_idle(void)
118{ 111{
119 local_irq_enable(); 112 local_irq_enable();
120 113
@@ -353,13 +346,6 @@ void exit_thread(void)
353 struct task_struct *me = current; 346 struct task_struct *me = current;
354 struct thread_struct *t = &me->thread; 347 struct thread_struct *t = &me->thread;
355 348
356 /*
357 * Remove function-return probe instances associated with this task
358 * and put them back on the free list. Do not insert an exit probe for
359 * this function, it will be disabled by kprobe_flush_task if you do.
360 */
361 kprobe_flush_task(me);
362
363 if (me->thread.io_bitmap_ptr) { 349 if (me->thread.io_bitmap_ptr) {
364 struct tss_struct *tss = &per_cpu(init_tss, get_cpu()); 350 struct tss_struct *tss = &per_cpu(init_tss, get_cpu());
365 351
@@ -508,7 +494,7 @@ out:
508/* 494/*
509 * This special macro can be used to load a debugging register 495 * This special macro can be used to load a debugging register
510 */ 496 */
511#define loaddebug(thread,r) set_debug(thread->debugreg ## r, r) 497#define loaddebug(thread,r) set_debugreg(thread->debugreg ## r, r)
512 498
513/* 499/*
514 * switch_to(x,y) should switch tasks from x to y. 500 * switch_to(x,y) should switch tasks from x to y.
@@ -527,8 +513,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
527 int cpu = smp_processor_id(); 513 int cpu = smp_processor_id();
528 struct tss_struct *tss = &per_cpu(init_tss, cpu); 514 struct tss_struct *tss = &per_cpu(init_tss, cpu);
529 515
530 unlazy_fpu(prev_p);
531
532 /* 516 /*
533 * Reload esp0, LDT and the page table pointer: 517 * Reload esp0, LDT and the page table pointer:
534 */ 518 */
@@ -586,11 +570,14 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
586 } 570 }
587 571
588 /* 572 /*
589 * Switch the PDA context. 573 * Switch the PDA and FPU contexts.
590 */ 574 */
591 prev->userrsp = read_pda(oldrsp); 575 prev->userrsp = read_pda(oldrsp);
592 write_pda(oldrsp, next->userrsp); 576 write_pda(oldrsp, next->userrsp);
593 write_pda(pcurrent, next_p); 577 write_pda(pcurrent, next_p);
578 /* This must be here to ensure both math_state_restore() and
579 kernel_fpu_begin() work consistently. */
580 unlazy_fpu(prev_p);
594 write_pda(kernelstack, 581 write_pda(kernelstack,
595 task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET); 582 task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET);
596 583
diff --git a/arch/x86_64/kernel/ptrace.c b/arch/x86_64/kernel/ptrace.c
index 53205622351c..d44b2c1e63a6 100644
--- a/arch/x86_64/kernel/ptrace.c
+++ b/arch/x86_64/kernel/ptrace.c
@@ -420,9 +420,9 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
420 case offsetof(struct user, u_debugreg[7]): 420 case offsetof(struct user, u_debugreg[7]):
421 /* See arch/i386/kernel/ptrace.c for an explanation of 421 /* See arch/i386/kernel/ptrace.c for an explanation of
422 * this awkward check.*/ 422 * this awkward check.*/
423 data &= ~DR_CONTROL_RESERVED; 423 data &= ~DR_CONTROL_RESERVED;
424 for(i=0; i<4; i++) 424 for(i=0; i<4; i++)
425 if ((0x5454 >> ((data >> (16 + 4*i)) & 0xf)) & 1) 425 if ((0x5554 >> ((data >> (16 + 4*i)) & 0xf)) & 1)
426 break; 426 break;
427 if (i == 4) { 427 if (i == 4) {
428 child->thread.debugreg7 = data; 428 child->thread.debugreg7 = data;
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c
index aa55e3cec665..d1f3e9272c05 100644
--- a/arch/x86_64/kernel/setup.c
+++ b/arch/x86_64/kernel/setup.c
@@ -46,6 +46,7 @@
46#include <linux/cpufreq.h> 46#include <linux/cpufreq.h>
47#include <linux/dmi.h> 47#include <linux/dmi.h>
48#include <linux/dma-mapping.h> 48#include <linux/dma-mapping.h>
49#include <linux/ctype.h>
49 50
50#include <asm/mtrr.h> 51#include <asm/mtrr.h>
51#include <asm/uaccess.h> 52#include <asm/uaccess.h>
@@ -67,6 +68,7 @@
67#include <asm/swiotlb.h> 68#include <asm/swiotlb.h>
68#include <asm/sections.h> 69#include <asm/sections.h>
69#include <asm/gart-mapping.h> 70#include <asm/gart-mapping.h>
71#include <asm/dmi.h>
70 72
71/* 73/*
72 * Machine setup.. 74 * Machine setup..
@@ -91,6 +93,12 @@ int bootloader_type;
91 93
92unsigned long saved_video_mode; 94unsigned long saved_video_mode;
93 95
96/*
97 * Early DMI memory
98 */
99int dmi_alloc_index;
100char dmi_alloc_data[DMI_MAX_DATA];
101
94/* 102/*
95 * Setup options 103 * Setup options
96 */ 104 */
@@ -270,6 +278,13 @@ static void __init probe_roms(void)
270 } 278 }
271} 279}
272 280
281/* Check for full argument with no trailing characters */
282static int fullarg(char *p, char *arg)
283{
284 int l = strlen(arg);
285 return !memcmp(p, arg, l) && (p[l] == 0 || isspace(p[l]));
286}
287
273static __init void parse_cmdline_early (char ** cmdline_p) 288static __init void parse_cmdline_early (char ** cmdline_p)
274{ 289{
275 char c = ' ', *to = command_line, *from = COMMAND_LINE; 290 char c = ' ', *to = command_line, *from = COMMAND_LINE;
@@ -293,10 +308,10 @@ static __init void parse_cmdline_early (char ** cmdline_p)
293#endif 308#endif
294#ifdef CONFIG_ACPI 309#ifdef CONFIG_ACPI
295 /* "acpi=off" disables both ACPI table parsing and interpreter init */ 310 /* "acpi=off" disables both ACPI table parsing and interpreter init */
296 if (!memcmp(from, "acpi=off", 8)) 311 if (fullarg(from,"acpi=off"))
297 disable_acpi(); 312 disable_acpi();
298 313
299 if (!memcmp(from, "acpi=force", 10)) { 314 if (fullarg(from, "acpi=force")) {
300 /* add later when we do DMI horrors: */ 315 /* add later when we do DMI horrors: */
301 acpi_force = 1; 316 acpi_force = 1;
302 acpi_disabled = 0; 317 acpi_disabled = 0;
@@ -304,52 +319,47 @@ static __init void parse_cmdline_early (char ** cmdline_p)
304 319
305 /* acpi=ht just means: do ACPI MADT parsing 320 /* acpi=ht just means: do ACPI MADT parsing
306 at bootup, but don't enable the full ACPI interpreter */ 321 at bootup, but don't enable the full ACPI interpreter */
307 if (!memcmp(from, "acpi=ht", 7)) { 322 if (fullarg(from, "acpi=ht")) {
308 if (!acpi_force) 323 if (!acpi_force)
309 disable_acpi(); 324 disable_acpi();
310 acpi_ht = 1; 325 acpi_ht = 1;
311 } 326 }
312 else if (!memcmp(from, "pci=noacpi", 10)) 327 else if (fullarg(from, "pci=noacpi"))
313 acpi_disable_pci(); 328 acpi_disable_pci();
314 else if (!memcmp(from, "acpi=noirq", 10)) 329 else if (fullarg(from, "acpi=noirq"))
315 acpi_noirq_set(); 330 acpi_noirq_set();
316 331
317 else if (!memcmp(from, "acpi_sci=edge", 13)) 332 else if (fullarg(from, "acpi_sci=edge"))
318 acpi_sci_flags.trigger = 1; 333 acpi_sci_flags.trigger = 1;
319 else if (!memcmp(from, "acpi_sci=level", 14)) 334 else if (fullarg(from, "acpi_sci=level"))
320 acpi_sci_flags.trigger = 3; 335 acpi_sci_flags.trigger = 3;
321 else if (!memcmp(from, "acpi_sci=high", 13)) 336 else if (fullarg(from, "acpi_sci=high"))
322 acpi_sci_flags.polarity = 1; 337 acpi_sci_flags.polarity = 1;
323 else if (!memcmp(from, "acpi_sci=low", 12)) 338 else if (fullarg(from, "acpi_sci=low"))
324 acpi_sci_flags.polarity = 3; 339 acpi_sci_flags.polarity = 3;
325 340
326 /* acpi=strict disables out-of-spec workarounds */ 341 /* acpi=strict disables out-of-spec workarounds */
327 else if (!memcmp(from, "acpi=strict", 11)) { 342 else if (fullarg(from, "acpi=strict")) {
328 acpi_strict = 1; 343 acpi_strict = 1;
329 } 344 }
330#ifdef CONFIG_X86_IO_APIC 345#ifdef CONFIG_X86_IO_APIC
331 else if (!memcmp(from, "acpi_skip_timer_override", 24)) 346 else if (fullarg(from, "acpi_skip_timer_override"))
332 acpi_skip_timer_override = 1; 347 acpi_skip_timer_override = 1;
333#endif 348#endif
334#endif 349#endif
335 350
336 if (!memcmp(from, "disable_timer_pin_1", 19)) 351 if (fullarg(from, "disable_timer_pin_1"))
337 disable_timer_pin_1 = 1; 352 disable_timer_pin_1 = 1;
338 if (!memcmp(from, "enable_timer_pin_1", 18)) 353 if (fullarg(from, "enable_timer_pin_1"))
339 disable_timer_pin_1 = -1; 354 disable_timer_pin_1 = -1;
340 355
341 if (!memcmp(from, "nolapic", 7) || 356 if (fullarg(from, "nolapic") || fullarg(from, "disableapic"))
342 !memcmp(from, "disableapic", 11))
343 disable_apic = 1; 357 disable_apic = 1;
344 358
345 /* Don't confuse with noapictimer */ 359 if (fullarg(from, "noapic"))
346 if (!memcmp(from, "noapic", 6) &&
347 (from[6] == ' ' || from[6] == 0))
348 skip_ioapic_setup = 1; 360 skip_ioapic_setup = 1;
349 361
350 /* Make sure to not confuse with apic= */ 362 if (fullarg(from,"apic")) {
351 if (!memcmp(from, "apic", 4) &&
352 (from[4] == ' ' || from[4] == 0)) {
353 skip_ioapic_setup = 0; 363 skip_ioapic_setup = 0;
354 ioapic_force = 1; 364 ioapic_force = 1;
355 } 365 }
@@ -388,7 +398,7 @@ static __init void parse_cmdline_early (char ** cmdline_p)
388 iommu_setup(from+6); 398 iommu_setup(from+6);
389 } 399 }
390 400
391 if (!memcmp(from,"oops=panic", 10)) 401 if (fullarg(from,"oops=panic"))
392 panic_on_oops = 1; 402 panic_on_oops = 1;
393 403
394 if (!memcmp(from, "noexec=", 7)) 404 if (!memcmp(from, "noexec=", 7))
@@ -611,11 +621,14 @@ void __init setup_arch(char **cmdline_p)
611 * we are rounding upwards: 621 * we are rounding upwards:
612 */ 622 */
613 end_pfn = e820_end_of_ram(); 623 end_pfn = e820_end_of_ram();
624 num_physpages = end_pfn; /* for pfn_valid */
614 625
615 check_efer(); 626 check_efer();
616 627
617 init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT)); 628 init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT));
618 629
630 dmi_scan_machine();
631
619 zap_low_mappings(0); 632 zap_low_mappings(0);
620 633
621#ifdef CONFIG_ACPI 634#ifdef CONFIG_ACPI
@@ -708,6 +721,12 @@ void __init setup_arch(char **cmdline_p)
708 721
709 check_ioapic(); 722 check_ioapic();
710 723
724 /*
725 * set this early, so we dont allocate cpu0
726 * if MADT list doesnt list BSP first
727 * mpparse.c/MP_processor_info() allocates logical cpu numbers.
728 */
729 cpu_set(0, cpu_present_map);
711#ifdef CONFIG_ACPI 730#ifdef CONFIG_ACPI
712 /* 731 /*
713 * Read APIC and some other early information from ACPI tables. 732 * Read APIC and some other early information from ACPI tables.
@@ -836,7 +855,7 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
836 unsigned bits; 855 unsigned bits;
837#ifdef CONFIG_NUMA 856#ifdef CONFIG_NUMA
838 int node = 0; 857 int node = 0;
839 unsigned apicid = phys_proc_id[cpu]; 858 unsigned apicid = hard_smp_processor_id();
840#endif 859#endif
841 860
842 bits = 0; 861 bits = 0;
@@ -846,7 +865,7 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
846 /* Low order bits define the core id (index of core in socket) */ 865 /* Low order bits define the core id (index of core in socket) */
847 cpu_core_id[cpu] = phys_proc_id[cpu] & ((1 << bits)-1); 866 cpu_core_id[cpu] = phys_proc_id[cpu] & ((1 << bits)-1);
848 /* Convert the APIC ID into the socket ID */ 867 /* Convert the APIC ID into the socket ID */
849 phys_proc_id[cpu] >>= bits; 868 phys_proc_id[cpu] = phys_pkg_id(bits);
850 869
851#ifdef CONFIG_NUMA 870#ifdef CONFIG_NUMA
852 node = phys_proc_id[cpu]; 871 node = phys_proc_id[cpu];
@@ -872,8 +891,8 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c)
872 } 891 }
873 numa_set_node(cpu, node); 892 numa_set_node(cpu, node);
874 893
875 printk(KERN_INFO "CPU %d(%d) -> Node %d -> Core %d\n", 894 printk(KERN_INFO "CPU %d/%x(%d) -> Node %d -> Core %d\n",
876 cpu, c->x86_max_cores, node, cpu_core_id[cpu]); 895 cpu, apicid, c->x86_max_cores, node, cpu_core_id[cpu]);
877#endif 896#endif
878#endif 897#endif
879} 898}
@@ -927,8 +946,6 @@ static int __init init_amd(struct cpuinfo_x86 *c)
927 946
928 if (c->extended_cpuid_level >= 0x80000008) { 947 if (c->extended_cpuid_level >= 0x80000008) {
929 c->x86_max_cores = (cpuid_ecx(0x80000008) & 0xff) + 1; 948 c->x86_max_cores = (cpuid_ecx(0x80000008) & 0xff) + 1;
930 if (c->x86_max_cores & (c->x86_max_cores - 1))
931 c->x86_max_cores = 1;
932 949
933 amd_detect_cmp(c); 950 amd_detect_cmp(c);
934 } 951 }
@@ -945,7 +962,6 @@ static void __cpuinit detect_ht(struct cpuinfo_x86 *c)
945 962
946 cpuid(1, &eax, &ebx, &ecx, &edx); 963 cpuid(1, &eax, &ebx, &ecx, &edx);
947 964
948 c->apicid = phys_pkg_id(0);
949 965
950 if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY)) 966 if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY))
951 return; 967 return;
@@ -1154,6 +1170,8 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
1154 c->x86_capability[2] = cpuid_edx(0x80860001); 1170 c->x86_capability[2] = cpuid_edx(0x80860001);
1155 } 1171 }
1156 1172
1173 c->apicid = phys_pkg_id(0);
1174
1157 /* 1175 /*
1158 * Vendor-specific initialization. In this section we 1176 * Vendor-specific initialization. In this section we
1159 * canonicalize the feature flags, meaning if there are 1177 * canonicalize the feature flags, meaning if there are
@@ -1261,7 +1279,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
1261 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1279 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1262 1280
1263 /* Intel-defined (#2) */ 1281 /* Intel-defined (#2) */
1264 "pni", NULL, NULL, "monitor", "ds_cpl", "vmx", NULL, "est", 1282 "pni", NULL, NULL, "monitor", "ds_cpl", "vmx", "smx", "est",
1265 "tm2", NULL, "cid", NULL, NULL, "cx16", "xtpr", NULL, 1283 "tm2", NULL, "cid", NULL, NULL, "cx16", "xtpr", NULL,
1266 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1284 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
1267 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1285 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -1344,8 +1362,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
1344 { 1362 {
1345 int i; 1363 int i;
1346 for ( i = 0 ; i < 32*NCAPINTS ; i++ ) 1364 for ( i = 0 ; i < 32*NCAPINTS ; i++ )
1347 if ( test_bit(i, &c->x86_capability) && 1365 if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
1348 x86_cap_flags[i] != NULL )
1349 seq_printf(m, " %s", x86_cap_flags[i]); 1366 seq_printf(m, " %s", x86_cap_flags[i]);
1350 } 1367 }
1351 1368
@@ -1403,10 +1420,3 @@ struct seq_operations cpuinfo_op = {
1403 .show = show_cpuinfo, 1420 .show = show_cpuinfo,
1404}; 1421};
1405 1422
1406static int __init run_dmi_scan(void)
1407{
1408 dmi_scan_machine();
1409 return 0;
1410}
1411core_initcall(run_dmi_scan);
1412
diff --git a/arch/x86_64/kernel/setup64.c b/arch/x86_64/kernel/setup64.c
index 70f1bb808a20..eabdb63fec31 100644
--- a/arch/x86_64/kernel/setup64.c
+++ b/arch/x86_64/kernel/setup64.c
@@ -33,7 +33,7 @@ cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE;
33struct x8664_pda *_cpu_pda[NR_CPUS] __read_mostly; 33struct x8664_pda *_cpu_pda[NR_CPUS] __read_mostly;
34struct x8664_pda boot_cpu_pda[NR_CPUS] __cacheline_aligned; 34struct x8664_pda boot_cpu_pda[NR_CPUS] __cacheline_aligned;
35 35
36struct desc_ptr idt_descr = { 256 * 16, (unsigned long) idt_table }; 36struct desc_ptr idt_descr = { 256 * 16 - 1, (unsigned long) idt_table };
37 37
38char boot_cpu_stack[IRQSTACKSIZE] __attribute__((section(".bss.page_aligned"))); 38char boot_cpu_stack[IRQSTACKSIZE] __attribute__((section(".bss.page_aligned")));
39 39
@@ -59,7 +59,7 @@ int __init nonx_setup(char *str)
59} 59}
60__setup("noexec=", nonx_setup); /* parsed early actually */ 60__setup("noexec=", nonx_setup); /* parsed early actually */
61 61
62int force_personality32 = READ_IMPLIES_EXEC; 62int force_personality32 = 0;
63 63
64/* noexec32=on|off 64/* noexec32=on|off
65Control non executable heap for 32bit processes. 65Control non executable heap for 32bit processes.
@@ -248,7 +248,7 @@ void __cpuinit cpu_init (void)
248 switch (v + 1) { 248 switch (v + 1) {
249#if DEBUG_STKSZ > EXCEPTION_STKSZ 249#if DEBUG_STKSZ > EXCEPTION_STKSZ
250 case DEBUG_STACK: 250 case DEBUG_STACK:
251 cpu_pda[cpu].debugstack = (unsigned long)estacks; 251 cpu_pda(cpu)->debugstack = (unsigned long)estacks;
252 estacks += DEBUG_STKSZ; 252 estacks += DEBUG_STKSZ;
253 break; 253 break;
254#endif 254#endif
@@ -281,12 +281,12 @@ void __cpuinit cpu_init (void)
281 * Clear all 6 debug registers: 281 * Clear all 6 debug registers:
282 */ 282 */
283 283
284 set_debug(0UL, 0); 284 set_debugreg(0UL, 0);
285 set_debug(0UL, 1); 285 set_debugreg(0UL, 1);
286 set_debug(0UL, 2); 286 set_debugreg(0UL, 2);
287 set_debug(0UL, 3); 287 set_debugreg(0UL, 3);
288 set_debug(0UL, 6); 288 set_debugreg(0UL, 6);
289 set_debug(0UL, 7); 289 set_debugreg(0UL, 7);
290 290
291 fpu_init(); 291 fpu_init();
292} 292}
diff --git a/arch/x86_64/kernel/signal.c b/arch/x86_64/kernel/signal.c
index 5876df116c92..e5f5ce7909a3 100644
--- a/arch/x86_64/kernel/signal.c
+++ b/arch/x86_64/kernel/signal.c
@@ -443,9 +443,6 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
443 if (!user_mode(regs)) 443 if (!user_mode(regs))
444 return 1; 444 return 1;
445 445
446 if (try_to_freeze())
447 goto no_signal;
448
449 if (!oldset) 446 if (!oldset)
450 oldset = &current->blocked; 447 oldset = &current->blocked;
451 448
@@ -463,7 +460,6 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
463 return handle_signal(signr, &info, &ka, oldset, regs); 460 return handle_signal(signr, &info, &ka, oldset, regs);
464 } 461 }
465 462
466 no_signal:
467 /* Did we come from a system call? */ 463 /* Did we come from a system call? */
468 if ((long)regs->orig_rax >= 0) { 464 if ((long)regs->orig_rax >= 0) {
469 /* Restart the system call - no handlers present */ 465 /* Restart the system call - no handlers present */
diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c
index 19ef012b1f17..4a6628b14d99 100644
--- a/arch/x86_64/kernel/smp.c
+++ b/arch/x86_64/kernel/smp.c
@@ -75,7 +75,7 @@ static inline void leave_mm(int cpu)
75{ 75{
76 if (read_pda(mmu_state) == TLBSTATE_OK) 76 if (read_pda(mmu_state) == TLBSTATE_OK)
77 BUG(); 77 BUG();
78 clear_bit(cpu, &read_pda(active_mm)->cpu_vm_mask); 78 cpu_clear(cpu, read_pda(active_mm)->cpu_vm_mask);
79 load_cr3(swapper_pg_dir); 79 load_cr3(swapper_pg_dir);
80} 80}
81 81
@@ -85,7 +85,7 @@ static inline void leave_mm(int cpu)
85 * [cpu0: the cpu that switches] 85 * [cpu0: the cpu that switches]
86 * 1) switch_mm() either 1a) or 1b) 86 * 1) switch_mm() either 1a) or 1b)
87 * 1a) thread switch to a different mm 87 * 1a) thread switch to a different mm
88 * 1a1) clear_bit(cpu, &old_mm->cpu_vm_mask); 88 * 1a1) cpu_clear(cpu, old_mm->cpu_vm_mask);
89 * Stop ipi delivery for the old mm. This is not synchronized with 89 * Stop ipi delivery for the old mm. This is not synchronized with
90 * the other cpus, but smp_invalidate_interrupt ignore flush ipis 90 * the other cpus, but smp_invalidate_interrupt ignore flush ipis
91 * for the wrong mm, and in the worst case we perform a superfluous 91 * for the wrong mm, and in the worst case we perform a superfluous
@@ -95,7 +95,7 @@ static inline void leave_mm(int cpu)
95 * was in lazy tlb mode. 95 * was in lazy tlb mode.
96 * 1a3) update cpu active_mm 96 * 1a3) update cpu active_mm
97 * Now cpu0 accepts tlb flushes for the new mm. 97 * Now cpu0 accepts tlb flushes for the new mm.
98 * 1a4) set_bit(cpu, &new_mm->cpu_vm_mask); 98 * 1a4) cpu_set(cpu, new_mm->cpu_vm_mask);
99 * Now the other cpus will send tlb flush ipis. 99 * Now the other cpus will send tlb flush ipis.
100 * 1a4) change cr3. 100 * 1a4) change cr3.
101 * 1b) thread switch without mm change 101 * 1b) thread switch without mm change
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c
index 66e98659d077..ea48fa638070 100644
--- a/arch/x86_64/kernel/smpboot.c
+++ b/arch/x86_64/kernel/smpboot.c
@@ -68,6 +68,9 @@ u8 phys_proc_id[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID };
68/* core ID of each logical CPU */ 68/* core ID of each logical CPU */
69u8 cpu_core_id[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID }; 69u8 cpu_core_id[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID };
70 70
71/* Last level cache ID of each logical CPU */
72u8 cpu_llc_id[NR_CPUS] __cpuinitdata = {[0 ... NR_CPUS-1] = BAD_APICID};
73
71/* Bitmask of currently online CPUs */ 74/* Bitmask of currently online CPUs */
72cpumask_t cpu_online_map __read_mostly; 75cpumask_t cpu_online_map __read_mostly;
73 76
@@ -445,6 +448,18 @@ void __cpuinit smp_callin(void)
445 cpu_set(cpuid, cpu_callin_map); 448 cpu_set(cpuid, cpu_callin_map);
446} 449}
447 450
451/* maps the cpu to the sched domain representing multi-core */
452cpumask_t cpu_coregroup_map(int cpu)
453{
454 struct cpuinfo_x86 *c = cpu_data + cpu;
455 /*
456 * For perf, we return last level cache shared map.
457 * TBD: when power saving sched policy is added, we will return
458 * cpu_core_map when power saving policy is enabled
459 */
460 return c->llc_shared_map;
461}
462
448/* representing cpus for which sibling maps can be computed */ 463/* representing cpus for which sibling maps can be computed */
449static cpumask_t cpu_sibling_setup_map; 464static cpumask_t cpu_sibling_setup_map;
450 465
@@ -463,12 +478,16 @@ static inline void set_cpu_sibling_map(int cpu)
463 cpu_set(cpu, cpu_sibling_map[i]); 478 cpu_set(cpu, cpu_sibling_map[i]);
464 cpu_set(i, cpu_core_map[cpu]); 479 cpu_set(i, cpu_core_map[cpu]);
465 cpu_set(cpu, cpu_core_map[i]); 480 cpu_set(cpu, cpu_core_map[i]);
481 cpu_set(i, c[cpu].llc_shared_map);
482 cpu_set(cpu, c[i].llc_shared_map);
466 } 483 }
467 } 484 }
468 } else { 485 } else {
469 cpu_set(cpu, cpu_sibling_map[cpu]); 486 cpu_set(cpu, cpu_sibling_map[cpu]);
470 } 487 }
471 488
489 cpu_set(cpu, c[cpu].llc_shared_map);
490
472 if (current_cpu_data.x86_max_cores == 1) { 491 if (current_cpu_data.x86_max_cores == 1) {
473 cpu_core_map[cpu] = cpu_sibling_map[cpu]; 492 cpu_core_map[cpu] = cpu_sibling_map[cpu];
474 c[cpu].booted_cores = 1; 493 c[cpu].booted_cores = 1;
@@ -476,6 +495,11 @@ static inline void set_cpu_sibling_map(int cpu)
476 } 495 }
477 496
478 for_each_cpu_mask(i, cpu_sibling_setup_map) { 497 for_each_cpu_mask(i, cpu_sibling_setup_map) {
498 if (cpu_llc_id[cpu] != BAD_APICID &&
499 cpu_llc_id[cpu] == cpu_llc_id[i]) {
500 cpu_set(i, c[cpu].llc_shared_map);
501 cpu_set(cpu, c[i].llc_shared_map);
502 }
479 if (phys_proc_id[cpu] == phys_proc_id[i]) { 503 if (phys_proc_id[cpu] == phys_proc_id[i]) {
480 cpu_set(i, cpu_core_map[cpu]); 504 cpu_set(i, cpu_core_map[cpu]);
481 cpu_set(cpu, cpu_core_map[i]); 505 cpu_set(cpu, cpu_core_map[i]);
diff --git a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c
index 3080f84bf7b7..473b514b66e4 100644
--- a/arch/x86_64/kernel/time.c
+++ b/arch/x86_64/kernel/time.c
@@ -88,7 +88,8 @@ static inline unsigned int do_gettimeoffset_tsc(void)
88 unsigned long t; 88 unsigned long t;
89 unsigned long x; 89 unsigned long x;
90 t = get_cycles_sync(); 90 t = get_cycles_sync();
91 if (t < vxtime.last_tsc) t = vxtime.last_tsc; /* hack */ 91 if (t < vxtime.last_tsc)
92 t = vxtime.last_tsc; /* hack */
92 x = ((t - vxtime.last_tsc) * vxtime.tsc_quot) >> 32; 93 x = ((t - vxtime.last_tsc) * vxtime.tsc_quot) >> 32;
93 return x; 94 return x;
94} 95}
@@ -178,8 +179,9 @@ unsigned long profile_pc(struct pt_regs *regs)
178{ 179{
179 unsigned long pc = instruction_pointer(regs); 180 unsigned long pc = instruction_pointer(regs);
180 181
181 /* Assume the lock function has either no stack frame or only a single word. 182 /* Assume the lock function has either no stack frame or only a single
182 This checks if the address on the stack looks like a kernel text address. 183 word. This checks if the address on the stack looks like a kernel
184 text address.
183 There is a small window for false hits, but in that case the tick 185 There is a small window for false hits, but in that case the tick
184 is just accounted to the spinlock function. 186 is just accounted to the spinlock function.
185 Better would be to write these functions in assembler again 187 Better would be to write these functions in assembler again
@@ -242,17 +244,10 @@ static void set_rtc_mmss(unsigned long nowtime)
242 real_minutes += 30; /* correct for half hour time zone */ 244 real_minutes += 30; /* correct for half hour time zone */
243 real_minutes %= 60; 245 real_minutes %= 60;
244 246
245#if 0
246 /* AMD 8111 is a really bad time keeper and hits this regularly.
247 It probably was an attempt to avoid screwing up DST, but ignore
248 that for now. */
249 if (abs(real_minutes - cmos_minutes) >= 30) { 247 if (abs(real_minutes - cmos_minutes) >= 30) {
250 printk(KERN_WARNING "time.c: can't update CMOS clock " 248 printk(KERN_WARNING "time.c: can't update CMOS clock "
251 "from %d to %d\n", cmos_minutes, real_minutes); 249 "from %d to %d\n", cmos_minutes, real_minutes);
252 } else 250 } else {
253#endif
254
255 {
256 BIN_TO_BCD(real_seconds); 251 BIN_TO_BCD(real_seconds);
257 BIN_TO_BCD(real_minutes); 252 BIN_TO_BCD(real_minutes);
258 CMOS_WRITE(real_seconds, RTC_SECONDS); 253 CMOS_WRITE(real_seconds, RTC_SECONDS);
@@ -293,8 +288,7 @@ unsigned long long monotonic_clock(void)
293 this_offset = hpet_readl(HPET_COUNTER); 288 this_offset = hpet_readl(HPET_COUNTER);
294 } while (read_seqretry(&xtime_lock, seq)); 289 } while (read_seqretry(&xtime_lock, seq));
295 offset = (this_offset - last_offset); 290 offset = (this_offset - last_offset);
296 offset *=(NSEC_PER_SEC/HZ)/hpet_tick; 291 offset *= (NSEC_PER_SEC/HZ) / hpet_tick;
297 return base + offset;
298 } else { 292 } else {
299 do { 293 do {
300 seq = read_seqbegin(&xtime_lock); 294 seq = read_seqbegin(&xtime_lock);
@@ -303,50 +297,46 @@ unsigned long long monotonic_clock(void)
303 base = monotonic_base; 297 base = monotonic_base;
304 } while (read_seqretry(&xtime_lock, seq)); 298 } while (read_seqretry(&xtime_lock, seq));
305 this_offset = get_cycles_sync(); 299 this_offset = get_cycles_sync();
306 offset = (this_offset - last_offset)*1000/cpu_khz; 300 offset = (this_offset - last_offset)*1000 / cpu_khz;
307 return base + offset;
308 } 301 }
302 return base + offset;
309} 303}
310EXPORT_SYMBOL(monotonic_clock); 304EXPORT_SYMBOL(monotonic_clock);
311 305
312static noinline void handle_lost_ticks(int lost, struct pt_regs *regs) 306static noinline void handle_lost_ticks(int lost, struct pt_regs *regs)
313{ 307{
314 static long lost_count; 308 static long lost_count;
315 static int warned; 309 static int warned;
316 310 if (report_lost_ticks) {
317 if (report_lost_ticks) { 311 printk(KERN_WARNING "time.c: Lost %d timer tick(s)! ", lost);
318 printk(KERN_WARNING "time.c: Lost %d timer " 312 print_symbol("rip %s)\n", regs->rip);
319 "tick(s)! ", lost); 313 }
320 print_symbol("rip %s)\n", regs->rip); 314
321 } 315 if (lost_count == 1000 && !warned) {
322 316 printk(KERN_WARNING "warning: many lost ticks.\n"
323 if (lost_count == 1000 && !warned) { 317 KERN_WARNING "Your time source seems to be instable or "
324 printk(KERN_WARNING
325 "warning: many lost ticks.\n"
326 KERN_WARNING "Your time source seems to be instable or "
327 "some driver is hogging interupts\n"); 318 "some driver is hogging interupts\n");
328 print_symbol("rip %s\n", regs->rip); 319 print_symbol("rip %s\n", regs->rip);
329 if (vxtime.mode == VXTIME_TSC && vxtime.hpet_address) { 320 if (vxtime.mode == VXTIME_TSC && vxtime.hpet_address) {
330 printk(KERN_WARNING "Falling back to HPET\n"); 321 printk(KERN_WARNING "Falling back to HPET\n");
331 if (hpet_use_timer) 322 if (hpet_use_timer)
332 vxtime.last = hpet_readl(HPET_T0_CMP) - hpet_tick; 323 vxtime.last = hpet_readl(HPET_T0_CMP) -
333 else 324 hpet_tick;
334 vxtime.last = hpet_readl(HPET_COUNTER); 325 else
335 vxtime.mode = VXTIME_HPET; 326 vxtime.last = hpet_readl(HPET_COUNTER);
336 do_gettimeoffset = do_gettimeoffset_hpet; 327 vxtime.mode = VXTIME_HPET;
337 } 328 do_gettimeoffset = do_gettimeoffset_hpet;
338 /* else should fall back to PIT, but code missing. */ 329 }
339 warned = 1; 330 /* else should fall back to PIT, but code missing. */
340 } else 331 warned = 1;
341 lost_count++; 332 } else
333 lost_count++;
342 334
343#ifdef CONFIG_CPU_FREQ 335#ifdef CONFIG_CPU_FREQ
344 /* In some cases the CPU can change frequency without us noticing 336 /* In some cases the CPU can change frequency without us noticing
345 (like going into thermal throttle) 337 Give cpufreq a change to catch up. */
346 Give cpufreq a change to catch up. */ 338 if ((lost_count+1) % 25 == 0)
347 if ((lost_count+1) % 25 == 0) { 339 cpufreq_delayed_get();
348 cpufreq_delayed_get();
349 }
350#endif 340#endif
351} 341}
352 342
@@ -354,7 +344,7 @@ void main_timer_handler(struct pt_regs *regs)
354{ 344{
355 static unsigned long rtc_update = 0; 345 static unsigned long rtc_update = 0;
356 unsigned long tsc; 346 unsigned long tsc;
357 int delay, offset = 0, lost = 0; 347 int delay = 0, offset = 0, lost = 0;
358 348
359/* 349/*
360 * Here we are in the timer irq handler. We have irqs locally disabled (so we 350 * Here we are in the timer irq handler. We have irqs locally disabled (so we
@@ -375,7 +365,7 @@ void main_timer_handler(struct pt_regs *regs)
375 */ 365 */
376 offset = hpet_readl(HPET_T0_CMP) - hpet_tick; 366 offset = hpet_readl(HPET_T0_CMP) - hpet_tick;
377 delay = hpet_readl(HPET_COUNTER) - offset; 367 delay = hpet_readl(HPET_COUNTER) - offset;
378 } else { 368 } else if (!pmtmr_ioport) {
379 spin_lock(&i8253_lock); 369 spin_lock(&i8253_lock);
380 outb_p(0x00, 0x43); 370 outb_p(0x00, 0x43);
381 delay = inb_p(0x40); 371 delay = inb_p(0x40);
@@ -477,7 +467,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
477 return IRQ_HANDLED; 467 return IRQ_HANDLED;
478} 468}
479 469
480static unsigned int cyc2ns_scale; 470static unsigned int cyc2ns_scale __read_mostly;
481#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */ 471#define CYC2NS_SCALE_FACTOR 10 /* 2^10, carefully chosen */
482 472
483static inline void set_cyc2ns_scale(unsigned long cpu_khz) 473static inline void set_cyc2ns_scale(unsigned long cpu_khz)
@@ -514,43 +504,32 @@ unsigned long long sched_clock(void)
514 504
515static unsigned long get_cmos_time(void) 505static unsigned long get_cmos_time(void)
516{ 506{
517 unsigned int timeout = 1000000, year, mon, day, hour, min, sec; 507 unsigned int year, mon, day, hour, min, sec;
518 unsigned char uip = 0, this = 0;
519 unsigned long flags; 508 unsigned long flags;
520 509 unsigned extyear = 0;
521/*
522 * The Linux interpretation of the CMOS clock register contents: When the
523 * Update-In-Progress (UIP) flag goes from 1 to 0, the RTC registers show the
524 * second which has precisely just started. Waiting for this can take up to 1
525 * second, we timeout approximately after 2.4 seconds on a machine with
526 * standard 8.3 MHz ISA bus.
527 */
528 510
529 spin_lock_irqsave(&rtc_lock, flags); 511 spin_lock_irqsave(&rtc_lock, flags);
530 512
531 while (timeout && (!uip || this)) { 513 do {
532 uip |= this; 514 sec = CMOS_READ(RTC_SECONDS);
533 this = CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP; 515 min = CMOS_READ(RTC_MINUTES);
534 timeout--; 516 hour = CMOS_READ(RTC_HOURS);
535 } 517 day = CMOS_READ(RTC_DAY_OF_MONTH);
536 518 mon = CMOS_READ(RTC_MONTH);
537 /* 519 year = CMOS_READ(RTC_YEAR);
538 * Here we are safe to assume the registers won't change for a whole 520#ifdef CONFIG_ACPI
539 * second, so we just go ahead and read them. 521 if (acpi_fadt.revision >= FADT2_REVISION_ID &&
540 */ 522 acpi_fadt.century)
541 sec = CMOS_READ(RTC_SECONDS); 523 extyear = CMOS_READ(acpi_fadt.century);
542 min = CMOS_READ(RTC_MINUTES); 524#endif
543 hour = CMOS_READ(RTC_HOURS); 525 } while (sec != CMOS_READ(RTC_SECONDS));
544 day = CMOS_READ(RTC_DAY_OF_MONTH);
545 mon = CMOS_READ(RTC_MONTH);
546 year = CMOS_READ(RTC_YEAR);
547 526
548 spin_unlock_irqrestore(&rtc_lock, flags); 527 spin_unlock_irqrestore(&rtc_lock, flags);
549 528
550 /* 529 /*
551 * We know that x86-64 always uses BCD format, no need to check the 530 * We know that x86-64 always uses BCD format, no need to check the
552 * config register. 531 * config register.
553 */ 532 */
554 533
555 BCD_TO_BIN(sec); 534 BCD_TO_BIN(sec);
556 BCD_TO_BIN(min); 535 BCD_TO_BIN(min);
@@ -559,11 +538,17 @@ static unsigned long get_cmos_time(void)
559 BCD_TO_BIN(mon); 538 BCD_TO_BIN(mon);
560 BCD_TO_BIN(year); 539 BCD_TO_BIN(year);
561 540
562 /* 541 if (extyear) {
563 * x86-64 systems only exists since 2002. 542 BCD_TO_BIN(extyear);
564 * This will work up to Dec 31, 2100 543 year += extyear;
565 */ 544 printk(KERN_INFO "Extended CMOS year: %d\n", extyear);
566 year += 2000; 545 } else {
546 /*
547 * x86-64 systems only exists since 2002.
548 * This will work up to Dec 31, 2100
549 */
550 year += 2000;
551 }
567 552
568 return mktime(year, mon, day, hour, min, sec); 553 return mktime(year, mon, day, hour, min, sec);
569} 554}
@@ -606,7 +591,8 @@ static void cpufreq_delayed_get(void)
606 cpufreq_delayed_issched = 1; 591 cpufreq_delayed_issched = 1;
607 if (!warned) { 592 if (!warned) {
608 warned = 1; 593 warned = 1;
609 printk(KERN_DEBUG "Losing some ticks... checking if CPU frequency changed.\n"); 594 printk(KERN_DEBUG
595 "Losing some ticks... checking if CPU frequency changed.\n");
610 } 596 }
611 schedule_work(&cpufreq_delayed_get_work); 597 schedule_work(&cpufreq_delayed_get_work);
612 } 598 }
@@ -629,9 +615,9 @@ static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
629 lpj = &dummy; 615 lpj = &dummy;
630 if (!(freq->flags & CPUFREQ_CONST_LOOPS)) 616 if (!(freq->flags & CPUFREQ_CONST_LOOPS))
631#ifdef CONFIG_SMP 617#ifdef CONFIG_SMP
632 lpj = &cpu_data[freq->cpu].loops_per_jiffy; 618 lpj = &cpu_data[freq->cpu].loops_per_jiffy;
633#else 619#else
634 lpj = &boot_cpu_data.loops_per_jiffy; 620 lpj = &boot_cpu_data.loops_per_jiffy;
635#endif 621#endif
636 622
637 if (!ref_freq) { 623 if (!ref_freq) {
@@ -768,9 +754,8 @@ static __init int late_hpet_init(void)
768 int i; 754 int i;
769 755
770 hpet = (struct hpet *) fix_to_virt(FIX_HPET_BASE); 756 hpet = (struct hpet *) fix_to_virt(FIX_HPET_BASE);
771 757 timer = &hpet->hpet_timers[2];
772 for (i = 2, timer = &hpet->hpet_timers[2]; i < ntimer; 758 for (i = 2; i < ntimer; timer++, i++)
773 timer++, i++)
774 hd.hd_irq[i] = (timer->hpet_config & 759 hd.hd_irq[i] = (timer->hpet_config &
775 Tn_INT_ROUTE_CNF_MASK) >> 760 Tn_INT_ROUTE_CNF_MASK) >>
776 Tn_INT_ROUTE_CNF_SHIFT; 761 Tn_INT_ROUTE_CNF_SHIFT;
@@ -927,8 +912,7 @@ void __init time_init(void)
927 -xtime.tv_sec, -xtime.tv_nsec); 912 -xtime.tv_sec, -xtime.tv_nsec);
928 913
929 if (!hpet_init()) 914 if (!hpet_init())
930 vxtime_hz = (1000000000000000L + hpet_period / 2) / 915 vxtime_hz = (1000000000000000L + hpet_period / 2) / hpet_period;
931 hpet_period;
932 else 916 else
933 vxtime.hpet_address = 0; 917 vxtime.hpet_address = 0;
934 918
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c
index 28d50dc540e8..edaa9fe654dc 100644
--- a/arch/x86_64/kernel/traps.c
+++ b/arch/x86_64/kernel/traps.c
@@ -47,8 +47,6 @@
47#include <asm/proto.h> 47#include <asm/proto.h>
48#include <asm/nmi.h> 48#include <asm/nmi.h>
49 49
50extern struct gate_struct idt_table[256];
51
52asmlinkage void divide_error(void); 50asmlinkage void divide_error(void);
53asmlinkage void debug(void); 51asmlinkage void debug(void);
54asmlinkage void nmi(void); 52asmlinkage void nmi(void);
@@ -71,18 +69,20 @@ asmlinkage void alignment_check(void);
71asmlinkage void machine_check(void); 69asmlinkage void machine_check(void);
72asmlinkage void spurious_interrupt_bug(void); 70asmlinkage void spurious_interrupt_bug(void);
73 71
74struct notifier_block *die_chain; 72ATOMIC_NOTIFIER_HEAD(die_chain);
75static DEFINE_SPINLOCK(die_notifier_lock);
76 73
77int register_die_notifier(struct notifier_block *nb) 74int register_die_notifier(struct notifier_block *nb)
78{ 75{
79 int err = 0; 76 vmalloc_sync_all();
80 unsigned long flags; 77 return atomic_notifier_chain_register(&die_chain, nb);
81 spin_lock_irqsave(&die_notifier_lock, flags); 78}
82 err = notifier_chain_register(&die_chain, nb); 79EXPORT_SYMBOL(register_die_notifier);
83 spin_unlock_irqrestore(&die_notifier_lock, flags); 80
84 return err; 81int unregister_die_notifier(struct notifier_block *nb)
82{
83 return atomic_notifier_chain_unregister(&die_chain, nb);
85} 84}
85EXPORT_SYMBOL(unregister_die_notifier);
86 86
87static inline void conditional_sti(struct pt_regs *regs) 87static inline void conditional_sti(struct pt_regs *regs)
88{ 88{
@@ -122,7 +122,7 @@ int printk_address(unsigned long address)
122 if (!modname) 122 if (!modname)
123 modname = delim = ""; 123 modname = delim = "";
124 return printk("<%016lx>{%s%s%s%s%+ld}", 124 return printk("<%016lx>{%s%s%s%s%+ld}",
125 address,delim,modname,delim,symname,offset); 125 address, delim, modname, delim, symname, offset);
126} 126}
127#else 127#else
128int printk_address(unsigned long address) 128int printk_address(unsigned long address)
@@ -334,13 +334,12 @@ void show_registers(struct pt_regs *regs)
334 show_stack(NULL, (unsigned long*)rsp); 334 show_stack(NULL, (unsigned long*)rsp);
335 335
336 printk("\nCode: "); 336 printk("\nCode: ");
337 if(regs->rip < PAGE_OFFSET) 337 if (regs->rip < PAGE_OFFSET)
338 goto bad; 338 goto bad;
339 339
340 for(i=0;i<20;i++) 340 for (i=0; i<20; i++) {
341 {
342 unsigned char c; 341 unsigned char c;
343 if(__get_user(c, &((unsigned char*)regs->rip)[i])) { 342 if (__get_user(c, &((unsigned char*)regs->rip)[i])) {
344bad: 343bad:
345 printk(" Bad RIP value."); 344 printk(" Bad RIP value.");
346 break; 345 break;
@@ -479,7 +478,7 @@ static void __kprobes do_trap(int trapnr, int signr, char *str,
479 printk(KERN_INFO 478 printk(KERN_INFO
480 "%s[%d] trap %s rip:%lx rsp:%lx error:%lx\n", 479 "%s[%d] trap %s rip:%lx rsp:%lx error:%lx\n",
481 tsk->comm, tsk->pid, str, 480 tsk->comm, tsk->pid, str,
482 regs->rip,regs->rsp,error_code); 481 regs->rip, regs->rsp, error_code);
483 482
484 if (info) 483 if (info)
485 force_sig_info(signr, info, tsk); 484 force_sig_info(signr, info, tsk);
@@ -493,9 +492,9 @@ static void __kprobes do_trap(int trapnr, int signr, char *str,
493 { 492 {
494 const struct exception_table_entry *fixup; 493 const struct exception_table_entry *fixup;
495 fixup = search_exception_tables(regs->rip); 494 fixup = search_exception_tables(regs->rip);
496 if (fixup) { 495 if (fixup)
497 regs->rip = fixup->fixup; 496 regs->rip = fixup->fixup;
498 } else 497 else
499 die(str, regs, error_code); 498 die(str, regs, error_code);
500 return; 499 return;
501 } 500 }
@@ -568,7 +567,7 @@ asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
568 printk(KERN_INFO 567 printk(KERN_INFO
569 "%s[%d] general protection rip:%lx rsp:%lx error:%lx\n", 568 "%s[%d] general protection rip:%lx rsp:%lx error:%lx\n",
570 tsk->comm, tsk->pid, 569 tsk->comm, tsk->pid,
571 regs->rip,regs->rsp,error_code); 570 regs->rip, regs->rsp, error_code);
572 571
573 force_sig(SIGSEGV, tsk); 572 force_sig(SIGSEGV, tsk);
574 return; 573 return;
diff --git a/arch/x86_64/kernel/vmlinux.lds.S b/arch/x86_64/kernel/vmlinux.lds.S
index 74db0062d4a2..39ff0708f803 100644
--- a/arch/x86_64/kernel/vmlinux.lds.S
+++ b/arch/x86_64/kernel/vmlinux.lds.S
@@ -20,6 +20,12 @@ SECTIONS
20 phys_startup_64 = startup_64 - LOAD_OFFSET; 20 phys_startup_64 = startup_64 - LOAD_OFFSET;
21 _text = .; /* Text and read-only data */ 21 _text = .; /* Text and read-only data */
22 .text : AT(ADDR(.text) - LOAD_OFFSET) { 22 .text : AT(ADDR(.text) - LOAD_OFFSET) {
23 /* First the code that has to be first for bootstrapping */
24 *(.bootstrap.text)
25 /* Then all the functions that are "hot" in profiles, to group them
26 onto the same hugetlb entry */
27 #include "functionlist"
28 /* Then the rest */
23 *(.text) 29 *(.text)
24 SCHED_TEXT 30 SCHED_TEXT
25 LOCK_TEXT 31 LOCK_TEXT
diff --git a/arch/x86_64/kernel/x8664_ksyms.c b/arch/x86_64/kernel/x8664_ksyms.c
index 3496abc8d372..d96a9348e5a2 100644
--- a/arch/x86_64/kernel/x8664_ksyms.c
+++ b/arch/x86_64/kernel/x8664_ksyms.c
@@ -124,6 +124,7 @@ extern void * __memcpy(void *,const void *,__kernel_size_t);
124 124
125EXPORT_SYMBOL(memset); 125EXPORT_SYMBOL(memset);
126EXPORT_SYMBOL(strlen); 126EXPORT_SYMBOL(strlen);
127EXPORT_SYMBOL(strpbrk);
127EXPORT_SYMBOL(memmove); 128EXPORT_SYMBOL(memmove);
128EXPORT_SYMBOL(memcpy); 129EXPORT_SYMBOL(memcpy);
129EXPORT_SYMBOL(__memcpy); 130EXPORT_SYMBOL(__memcpy);
@@ -143,16 +144,12 @@ EXPORT_SYMBOL(rwsem_down_write_failed_thunk);
143EXPORT_SYMBOL(empty_zero_page); 144EXPORT_SYMBOL(empty_zero_page);
144 145
145EXPORT_SYMBOL(die_chain); 146EXPORT_SYMBOL(die_chain);
146EXPORT_SYMBOL(register_die_notifier);
147 147
148#ifdef CONFIG_SMP 148#ifdef CONFIG_SMP
149EXPORT_SYMBOL(cpu_sibling_map); 149EXPORT_SYMBOL(cpu_sibling_map);
150EXPORT_SYMBOL(smp_num_siblings); 150EXPORT_SYMBOL(smp_num_siblings);
151#endif 151#endif
152 152
153extern void do_softirq_thunk(void);
154EXPORT_SYMBOL(do_softirq_thunk);
155
156#ifdef CONFIG_BUG 153#ifdef CONFIG_BUG
157EXPORT_SYMBOL(out_of_line_bug); 154EXPORT_SYMBOL(out_of_line_bug);
158#endif 155#endif
diff --git a/arch/x86_64/lib/thunk.S b/arch/x86_64/lib/thunk.S
index acc1e2ca7ed7..e49af0032e94 100644
--- a/arch/x86_64/lib/thunk.S
+++ b/arch/x86_64/lib/thunk.S
@@ -42,7 +42,6 @@
42 thunk rwsem_wake_thunk,rwsem_wake 42 thunk rwsem_wake_thunk,rwsem_wake
43 thunk rwsem_downgrade_thunk,rwsem_downgrade_wake 43 thunk rwsem_downgrade_thunk,rwsem_downgrade_wake
44#endif 44#endif
45 thunk do_softirq_thunk,do_softirq
46 45
47 thunk __down_failed,__down 46 thunk __down_failed,__down
48 thunk_retrax __down_failed_interruptible,__down_interruptible 47 thunk_retrax __down_failed_interruptible,__down_interruptible
diff --git a/arch/x86_64/mm/fault.c b/arch/x86_64/mm/fault.c
index 2e7c3c8ffe03..316c53de47bd 100644
--- a/arch/x86_64/mm/fault.c
+++ b/arch/x86_64/mm/fault.c
@@ -264,6 +264,8 @@ static int vmalloc_fault(unsigned long address)
264 return -1; 264 return -1;
265 if (pgd_none(*pgd)) 265 if (pgd_none(*pgd))
266 set_pgd(pgd, *pgd_ref); 266 set_pgd(pgd, *pgd_ref);
267 else
268 BUG_ON(pgd_page(*pgd) != pgd_page(*pgd_ref));
267 269
268 /* Below here mismatches are bugs because these lower tables 270 /* Below here mismatches are bugs because these lower tables
269 are shared */ 271 are shared */
@@ -312,21 +314,13 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
312 unsigned long flags; 314 unsigned long flags;
313 siginfo_t info; 315 siginfo_t info;
314 316
317 tsk = current;
318 mm = tsk->mm;
319 prefetchw(&mm->mmap_sem);
320
315 /* get the address */ 321 /* get the address */
316 __asm__("movq %%cr2,%0":"=r" (address)); 322 __asm__("movq %%cr2,%0":"=r" (address));
317 if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
318 SIGSEGV) == NOTIFY_STOP)
319 return;
320
321 if (likely(regs->eflags & X86_EFLAGS_IF))
322 local_irq_enable();
323 323
324 if (unlikely(page_fault_trace))
325 printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx error %lx\n",
326 regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code);
327
328 tsk = current;
329 mm = tsk->mm;
330 info.si_code = SEGV_MAPERR; 324 info.si_code = SEGV_MAPERR;
331 325
332 326
@@ -351,10 +345,12 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
351 */ 345 */
352 if (!(error_code & (PF_RSVD|PF_USER|PF_PROT)) && 346 if (!(error_code & (PF_RSVD|PF_USER|PF_PROT)) &&
353 ((address >= VMALLOC_START && address < VMALLOC_END))) { 347 ((address >= VMALLOC_START && address < VMALLOC_END))) {
354 if (vmalloc_fault(address) < 0) 348 if (vmalloc_fault(address) >= 0)
355 goto bad_area_nosemaphore; 349 return;
356 return;
357 } 350 }
351 if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
352 SIGSEGV) == NOTIFY_STOP)
353 return;
358 /* 354 /*
359 * Don't take the mm semaphore here. If we fixup a prefetch 355 * Don't take the mm semaphore here. If we fixup a prefetch
360 * fault we could otherwise deadlock. 356 * fault we could otherwise deadlock.
@@ -362,6 +358,17 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
362 goto bad_area_nosemaphore; 358 goto bad_area_nosemaphore;
363 } 359 }
364 360
361 if (notify_die(DIE_PAGE_FAULT, "page fault", regs, error_code, 14,
362 SIGSEGV) == NOTIFY_STOP)
363 return;
364
365 if (likely(regs->eflags & X86_EFLAGS_IF))
366 local_irq_enable();
367
368 if (unlikely(page_fault_trace))
369 printk("pagefault rip:%lx rsp:%lx cs:%lu ss:%lu address %lx error %lx\n",
370 regs->rip,regs->rsp,regs->cs,regs->ss,address,error_code);
371
365 if (unlikely(error_code & PF_RSVD)) 372 if (unlikely(error_code & PF_RSVD))
366 pgtable_bad(address, regs, error_code); 373 pgtable_bad(address, regs, error_code);
367 374
@@ -571,6 +578,48 @@ do_sigbus:
571 return; 578 return;
572} 579}
573 580
581DEFINE_SPINLOCK(pgd_lock);
582struct page *pgd_list;
583
584void vmalloc_sync_all(void)
585{
586 /* Note that races in the updates of insync and start aren't
587 problematic:
588 insync can only get set bits added, and updates to start are only
589 improving performance (without affecting correctness if undone). */
590 static DECLARE_BITMAP(insync, PTRS_PER_PGD);
591 static unsigned long start = VMALLOC_START & PGDIR_MASK;
592 unsigned long address;
593
594 for (address = start; address <= VMALLOC_END; address += PGDIR_SIZE) {
595 if (!test_bit(pgd_index(address), insync)) {
596 const pgd_t *pgd_ref = pgd_offset_k(address);
597 struct page *page;
598
599 if (pgd_none(*pgd_ref))
600 continue;
601 spin_lock(&pgd_lock);
602 for (page = pgd_list; page;
603 page = (struct page *)page->index) {
604 pgd_t *pgd;
605 pgd = (pgd_t *)page_address(page) + pgd_index(address);
606 if (pgd_none(*pgd))
607 set_pgd(pgd, *pgd_ref);
608 else
609 BUG_ON(pgd_page(*pgd) != pgd_page(*pgd_ref));
610 }
611 spin_unlock(&pgd_lock);
612 set_bit(pgd_index(address), insync);
613 }
614 if (address == start)
615 start = address + PGDIR_SIZE;
616 }
617 /* Check that there is no need to do the same for the modules area. */
618 BUILD_BUG_ON(!(MODULES_VADDR > __START_KERNEL));
619 BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) ==
620 (__START_KERNEL & PGDIR_MASK)));
621}
622
574static int __init enable_pagefaulttrace(char *str) 623static int __init enable_pagefaulttrace(char *str)
575{ 624{
576 page_fault_trace = 1; 625 page_fault_trace = 1;
diff --git a/arch/x86_64/mm/init.c b/arch/x86_64/mm/init.c
index 7af1742aa958..e5f7f1c34462 100644
--- a/arch/x86_64/mm/init.c
+++ b/arch/x86_64/mm/init.c
@@ -72,7 +72,7 @@ void show_mem(void)
72 show_free_areas(); 72 show_free_areas();
73 printk(KERN_INFO "Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); 73 printk(KERN_INFO "Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
74 74
75 for_each_pgdat(pgdat) { 75 for_each_online_pgdat(pgdat) {
76 for (i = 0; i < pgdat->node_spanned_pages; ++i) { 76 for (i = 0; i < pgdat->node_spanned_pages; ++i) {
77 page = pfn_to_page(pgdat->node_start_pfn + i); 77 page = pfn_to_page(pgdat->node_start_pfn + i);
78 total++; 78 total++;
@@ -94,7 +94,7 @@ void show_mem(void)
94 94
95int after_bootmem; 95int after_bootmem;
96 96
97static void *spp_getpage(void) 97static __init void *spp_getpage(void)
98{ 98{
99 void *ptr; 99 void *ptr;
100 if (after_bootmem) 100 if (after_bootmem)
@@ -108,7 +108,7 @@ static void *spp_getpage(void)
108 return ptr; 108 return ptr;
109} 109}
110 110
111static void set_pte_phys(unsigned long vaddr, 111static __init void set_pte_phys(unsigned long vaddr,
112 unsigned long phys, pgprot_t prot) 112 unsigned long phys, pgprot_t prot)
113{ 113{
114 pgd_t *pgd; 114 pgd_t *pgd;
@@ -157,7 +157,8 @@ static void set_pte_phys(unsigned long vaddr,
157} 157}
158 158
159/* NOTE: this is meant to be run only at boot */ 159/* NOTE: this is meant to be run only at boot */
160void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t prot) 160void __init
161__set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t prot)
161{ 162{
162 unsigned long address = __fix_to_virt(idx); 163 unsigned long address = __fix_to_virt(idx);
163 164
@@ -225,6 +226,33 @@ static __meminit void unmap_low_page(int i)
225 ti->allocated = 0; 226 ti->allocated = 0;
226} 227}
227 228
229/* Must run before zap_low_mappings */
230__init void *early_ioremap(unsigned long addr, unsigned long size)
231{
232 unsigned long map = round_down(addr, LARGE_PAGE_SIZE);
233
234 /* actually usually some more */
235 if (size >= LARGE_PAGE_SIZE) {
236 printk("SMBIOS area too long %lu\n", size);
237 return NULL;
238 }
239 set_pmd(temp_mappings[0].pmd, __pmd(map | _KERNPG_TABLE | _PAGE_PSE));
240 map += LARGE_PAGE_SIZE;
241 set_pmd(temp_mappings[1].pmd, __pmd(map | _KERNPG_TABLE | _PAGE_PSE));
242 __flush_tlb();
243 return temp_mappings[0].address + (addr & (LARGE_PAGE_SIZE-1));
244}
245
246/* To avoid virtual aliases later */
247__init void early_iounmap(void *addr, unsigned long size)
248{
249 if ((void *)round_down((unsigned long)addr, LARGE_PAGE_SIZE) != temp_mappings[0].address)
250 printk("early_iounmap: bad address %p\n", addr);
251 set_pmd(temp_mappings[0].pmd, __pmd(0));
252 set_pmd(temp_mappings[1].pmd, __pmd(0));
253 __flush_tlb();
254}
255
228static void __meminit 256static void __meminit
229phys_pmd_init(pmd_t *pmd, unsigned long address, unsigned long end) 257phys_pmd_init(pmd_t *pmd, unsigned long address, unsigned long end)
230{ 258{
@@ -344,7 +372,7 @@ void __meminit init_memory_mapping(unsigned long start, unsigned long end)
344 pud_t *pud; 372 pud_t *pud;
345 373
346 if (after_bootmem) 374 if (after_bootmem)
347 pud = pud_offset_k(pgd, __PAGE_OFFSET); 375 pud = pud_offset_k(pgd, start & PGDIR_MASK);
348 else 376 else
349 pud = alloc_low_page(&map, &pud_phys); 377 pud = alloc_low_page(&map, &pud_phys);
350 378
@@ -486,7 +514,7 @@ void __init clear_kernel_mapping(unsigned long address, unsigned long size)
486void online_page(struct page *page) 514void online_page(struct page *page)
487{ 515{
488 ClearPageReserved(page); 516 ClearPageReserved(page);
489 set_page_count(page, 1); 517 init_page_count(page);
490 __free_page(page); 518 __free_page(page);
491 totalram_pages++; 519 totalram_pages++;
492 num_physpages++; 520 num_physpages++;
@@ -592,7 +620,7 @@ void free_initmem(void)
592 addr = (unsigned long)(&__init_begin); 620 addr = (unsigned long)(&__init_begin);
593 for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) { 621 for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
594 ClearPageReserved(virt_to_page(addr)); 622 ClearPageReserved(virt_to_page(addr));
595 set_page_count(virt_to_page(addr), 1); 623 init_page_count(virt_to_page(addr));
596 memset((void *)(addr & ~(PAGE_SIZE-1)), 0xcc, PAGE_SIZE); 624 memset((void *)(addr & ~(PAGE_SIZE-1)), 0xcc, PAGE_SIZE);
597 free_page(addr); 625 free_page(addr);
598 totalram_pages++; 626 totalram_pages++;
@@ -632,7 +660,7 @@ void free_initrd_mem(unsigned long start, unsigned long end)
632 printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10); 660 printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
633 for (; start < end; start += PAGE_SIZE) { 661 for (; start < end; start += PAGE_SIZE) {
634 ClearPageReserved(virt_to_page(start)); 662 ClearPageReserved(virt_to_page(start));
635 set_page_count(virt_to_page(start), 1); 663 init_page_count(virt_to_page(start));
636 free_page(start); 664 free_page(start);
637 totalram_pages++; 665 totalram_pages++;
638 } 666 }
diff --git a/arch/x86_64/mm/k8topology.c b/arch/x86_64/mm/k8topology.c
index dd60e71fdba6..7c45c2d2b8b2 100644
--- a/arch/x86_64/mm/k8topology.c
+++ b/arch/x86_64/mm/k8topology.c
@@ -43,7 +43,7 @@ static __init int find_northbridge(void)
43int __init k8_scan_nodes(unsigned long start, unsigned long end) 43int __init k8_scan_nodes(unsigned long start, unsigned long end)
44{ 44{
45 unsigned long prevbase; 45 unsigned long prevbase;
46 struct node nodes[8]; 46 struct bootnode nodes[8];
47 int nodeid, i, nb; 47 int nodeid, i, nb;
48 unsigned char nodeids[8]; 48 unsigned char nodeids[8];
49 int found = 0; 49 int found = 0;
diff --git a/arch/x86_64/mm/numa.c b/arch/x86_64/mm/numa.c
index 22e51beee8d3..4be82d6e2b48 100644
--- a/arch/x86_64/mm/numa.c
+++ b/arch/x86_64/mm/numa.c
@@ -25,8 +25,7 @@
25struct pglist_data *node_data[MAX_NUMNODES] __read_mostly; 25struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
26bootmem_data_t plat_node_bdata[MAX_NUMNODES]; 26bootmem_data_t plat_node_bdata[MAX_NUMNODES];
27 27
28int memnode_shift; 28struct memnode memnode;
29u8 memnodemap[NODEMAPSIZE];
30 29
31unsigned char cpu_to_node[NR_CPUS] __read_mostly = { 30unsigned char cpu_to_node[NR_CPUS] __read_mostly = {
32 [0 ... NR_CPUS-1] = NUMA_NO_NODE 31 [0 ... NR_CPUS-1] = NUMA_NO_NODE
@@ -47,7 +46,7 @@ int numa_off __initdata;
47 * -1 if node overlap or lost ram (shift too big) 46 * -1 if node overlap or lost ram (shift too big)
48 */ 47 */
49static int __init 48static int __init
50populate_memnodemap(const struct node *nodes, int numnodes, int shift) 49populate_memnodemap(const struct bootnode *nodes, int numnodes, int shift)
51{ 50{
52 int i; 51 int i;
53 int res = -1; 52 int res = -1;
@@ -74,7 +73,7 @@ populate_memnodemap(const struct node *nodes, int numnodes, int shift)
74 return res; 73 return res;
75} 74}
76 75
77int __init compute_hash_shift(struct node *nodes, int numnodes) 76int __init compute_hash_shift(struct bootnode *nodes, int numnodes)
78{ 77{
79 int shift = 20; 78 int shift = 20;
80 79
@@ -149,7 +148,7 @@ void __init setup_node_bootmem(int nodeid, unsigned long start, unsigned long en
149/* Initialize final allocator for a zone */ 148/* Initialize final allocator for a zone */
150void __init setup_node_zones(int nodeid) 149void __init setup_node_zones(int nodeid)
151{ 150{
152 unsigned long start_pfn, end_pfn; 151 unsigned long start_pfn, end_pfn, memmapsize, limit;
153 unsigned long zones[MAX_NR_ZONES]; 152 unsigned long zones[MAX_NR_ZONES];
154 unsigned long holes[MAX_NR_ZONES]; 153 unsigned long holes[MAX_NR_ZONES];
155 154
@@ -159,6 +158,16 @@ void __init setup_node_zones(int nodeid)
159 Dprintk(KERN_INFO "Setting up node %d %lx-%lx\n", 158 Dprintk(KERN_INFO "Setting up node %d %lx-%lx\n",
160 nodeid, start_pfn, end_pfn); 159 nodeid, start_pfn, end_pfn);
161 160
161 /* Try to allocate mem_map at end to not fill up precious <4GB
162 memory. */
163 memmapsize = sizeof(struct page) * (end_pfn-start_pfn);
164 limit = end_pfn << PAGE_SHIFT;
165 NODE_DATA(nodeid)->node_mem_map =
166 __alloc_bootmem_core(NODE_DATA(nodeid)->bdata,
167 memmapsize, SMP_CACHE_BYTES,
168 round_down(limit - memmapsize, PAGE_SIZE),
169 limit);
170
162 size_zones(zones, holes, start_pfn, end_pfn); 171 size_zones(zones, holes, start_pfn, end_pfn);
163 free_area_init_node(nodeid, NODE_DATA(nodeid), zones, 172 free_area_init_node(nodeid, NODE_DATA(nodeid), zones,
164 start_pfn, holes); 173 start_pfn, holes);
@@ -191,7 +200,7 @@ int numa_fake __initdata = 0;
191static int numa_emulation(unsigned long start_pfn, unsigned long end_pfn) 200static int numa_emulation(unsigned long start_pfn, unsigned long end_pfn)
192{ 201{
193 int i; 202 int i;
194 struct node nodes[MAX_NUMNODES]; 203 struct bootnode nodes[MAX_NUMNODES];
195 unsigned long sz = ((end_pfn - start_pfn)<<PAGE_SHIFT) / numa_fake; 204 unsigned long sz = ((end_pfn - start_pfn)<<PAGE_SHIFT) / numa_fake;
196 205
197 /* Kludge needed for the hash function */ 206 /* Kludge needed for the hash function */
@@ -357,8 +366,7 @@ void __init init_cpu_to_node(void)
357 366
358EXPORT_SYMBOL(cpu_to_node); 367EXPORT_SYMBOL(cpu_to_node);
359EXPORT_SYMBOL(node_to_cpumask); 368EXPORT_SYMBOL(node_to_cpumask);
360EXPORT_SYMBOL(memnode_shift); 369EXPORT_SYMBOL(memnode);
361EXPORT_SYMBOL(memnodemap);
362EXPORT_SYMBOL(node_data); 370EXPORT_SYMBOL(node_data);
363 371
364#ifdef CONFIG_DISCONTIGMEM 372#ifdef CONFIG_DISCONTIGMEM
@@ -369,21 +377,6 @@ EXPORT_SYMBOL(node_data);
369 * Should do that. 377 * Should do that.
370 */ 378 */
371 379
372/* Requires pfn_valid(pfn) to be true */
373struct page *pfn_to_page(unsigned long pfn)
374{
375 int nid = phys_to_nid(((unsigned long)(pfn)) << PAGE_SHIFT);
376 return (pfn - node_start_pfn(nid)) + NODE_DATA(nid)->node_mem_map;
377}
378EXPORT_SYMBOL(pfn_to_page);
379
380unsigned long page_to_pfn(struct page *page)
381{
382 return (long)(((page) - page_zone(page)->zone_mem_map) +
383 page_zone(page)->zone_start_pfn);
384}
385EXPORT_SYMBOL(page_to_pfn);
386
387int pfn_valid(unsigned long pfn) 380int pfn_valid(unsigned long pfn)
388{ 381{
389 unsigned nid; 382 unsigned nid;
diff --git a/arch/x86_64/mm/pageattr.c b/arch/x86_64/mm/pageattr.c
index 35f1f1aab063..531ad21447b1 100644
--- a/arch/x86_64/mm/pageattr.c
+++ b/arch/x86_64/mm/pageattr.c
@@ -45,6 +45,13 @@ static struct page *split_large_page(unsigned long address, pgprot_t prot,
45 pte_t *pbase; 45 pte_t *pbase;
46 if (!base) 46 if (!base)
47 return NULL; 47 return NULL;
48 /*
49 * page_private is used to track the number of entries in
50 * the page table page have non standard attributes.
51 */
52 SetPagePrivate(base);
53 page_private(base) = 0;
54
48 address = __pa(address); 55 address = __pa(address);
49 addr = address & LARGE_PAGE_MASK; 56 addr = address & LARGE_PAGE_MASK;
50 pbase = (pte_t *)page_address(base); 57 pbase = (pte_t *)page_address(base);
@@ -77,26 +84,12 @@ static inline void flush_map(unsigned long address)
77 on_each_cpu(flush_kernel_map, (void *)address, 1, 1); 84 on_each_cpu(flush_kernel_map, (void *)address, 1, 1);
78} 85}
79 86
80struct deferred_page { 87static struct page *deferred_pages; /* protected by init_mm.mmap_sem */
81 struct deferred_page *next;
82 struct page *fpage;
83 unsigned long address;
84};
85static struct deferred_page *df_list; /* protected by init_mm.mmap_sem */
86 88
87static inline void save_page(unsigned long address, struct page *fpage) 89static inline void save_page(struct page *fpage)
88{ 90{
89 struct deferred_page *df; 91 fpage->lru.next = (struct list_head *)deferred_pages;
90 df = kmalloc(sizeof(struct deferred_page), GFP_KERNEL); 92 deferred_pages = fpage;
91 if (!df) {
92 flush_map(address);
93 __free_page(fpage);
94 } else {
95 df->next = df_list;
96 df->fpage = fpage;
97 df->address = address;
98 df_list = df;
99 }
100} 93}
101 94
102/* 95/*
@@ -138,8 +131,8 @@ __change_page_attr(unsigned long address, unsigned long pfn, pgprot_t prot,
138 set_pte(kpte, pfn_pte(pfn, prot)); 131 set_pte(kpte, pfn_pte(pfn, prot));
139 } else { 132 } else {
140 /* 133 /*
141 * split_large_page will take the reference for this change_page_attr 134 * split_large_page will take the reference for this
142 * on the split page. 135 * change_page_attr on the split page.
143 */ 136 */
144 137
145 struct page *split; 138 struct page *split;
@@ -151,23 +144,20 @@ __change_page_attr(unsigned long address, unsigned long pfn, pgprot_t prot,
151 set_pte(kpte,mk_pte(split, ref_prot2)); 144 set_pte(kpte,mk_pte(split, ref_prot2));
152 kpte_page = split; 145 kpte_page = split;
153 } 146 }
154 get_page(kpte_page); 147 page_private(kpte_page)++;
155 } else if ((kpte_flags & _PAGE_PSE) == 0) { 148 } else if ((kpte_flags & _PAGE_PSE) == 0) {
156 set_pte(kpte, pfn_pte(pfn, ref_prot)); 149 set_pte(kpte, pfn_pte(pfn, ref_prot));
157 __put_page(kpte_page); 150 BUG_ON(page_private(kpte_page) == 0);
151 page_private(kpte_page)--;
158 } else 152 } else
159 BUG(); 153 BUG();
160 154
161 /* on x86-64 the direct mapping set at boot is not using 4k pages */ 155 /* on x86-64 the direct mapping set at boot is not using 4k pages */
162 BUG_ON(PageReserved(kpte_page)); 156 BUG_ON(PageReserved(kpte_page));
163 157
164 switch (page_count(kpte_page)) { 158 if (page_private(kpte_page) == 0) {
165 case 1: 159 save_page(kpte_page);
166 save_page(address, kpte_page);
167 revert_page(address, ref_prot); 160 revert_page(address, ref_prot);
168 break;
169 case 0:
170 BUG(); /* memleak and failed 2M page regeneration */
171 } 161 }
172 return 0; 162 return 0;
173} 163}
@@ -220,17 +210,18 @@ int change_page_attr(struct page *page, int numpages, pgprot_t prot)
220 210
221void global_flush_tlb(void) 211void global_flush_tlb(void)
222{ 212{
223 struct deferred_page *df, *next_df; 213 struct page *dpage;
224 214
225 down_read(&init_mm.mmap_sem); 215 down_read(&init_mm.mmap_sem);
226 df = xchg(&df_list, NULL); 216 dpage = xchg(&deferred_pages, NULL);
227 up_read(&init_mm.mmap_sem); 217 up_read(&init_mm.mmap_sem);
228 flush_map((df && !df->next) ? df->address : 0); 218
229 for (; df; df = next_df) { 219 flush_map((dpage && !dpage->lru.next) ? (unsigned long)page_address(dpage) : 0);
230 next_df = df->next; 220 while (dpage) {
231 if (df->fpage) 221 struct page *tmp = dpage;
232 __free_page(df->fpage); 222 dpage = (struct page *)dpage->lru.next;
233 kfree(df); 223 ClearPagePrivate(tmp);
224 __free_page(tmp);
234 } 225 }
235} 226}
236 227
diff --git a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c
index 482c25767369..2eb879590dc4 100644
--- a/arch/x86_64/mm/srat.c
+++ b/arch/x86_64/mm/srat.c
@@ -23,7 +23,7 @@ static struct acpi_table_slit *acpi_slit;
23 23
24static nodemask_t nodes_parsed __initdata; 24static nodemask_t nodes_parsed __initdata;
25static nodemask_t nodes_found __initdata; 25static nodemask_t nodes_found __initdata;
26static struct node nodes[MAX_NUMNODES] __initdata; 26static struct bootnode nodes[MAX_NUMNODES] __initdata;
27static u8 pxm2node[256] = { [0 ... 255] = 0xff }; 27static u8 pxm2node[256] = { [0 ... 255] = 0xff };
28 28
29/* Too small nodes confuse the VM badly. Usually they result 29/* Too small nodes confuse the VM badly. Usually they result
@@ -57,7 +57,7 @@ static __init int conflicting_nodes(unsigned long start, unsigned long end)
57{ 57{
58 int i; 58 int i;
59 for_each_node_mask(i, nodes_parsed) { 59 for_each_node_mask(i, nodes_parsed) {
60 struct node *nd = &nodes[i]; 60 struct bootnode *nd = &nodes[i];
61 if (nd->start == nd->end) 61 if (nd->start == nd->end)
62 continue; 62 continue;
63 if (nd->end > start && nd->start < end) 63 if (nd->end > start && nd->start < end)
@@ -70,7 +70,7 @@ static __init int conflicting_nodes(unsigned long start, unsigned long end)
70 70
71static __init void cutoff_node(int i, unsigned long start, unsigned long end) 71static __init void cutoff_node(int i, unsigned long start, unsigned long end)
72{ 72{
73 struct node *nd = &nodes[i]; 73 struct bootnode *nd = &nodes[i];
74 if (nd->start < start) { 74 if (nd->start < start) {
75 nd->start = start; 75 nd->start = start;
76 if (nd->end < nd->start) 76 if (nd->end < nd->start)
@@ -159,7 +159,7 @@ acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa)
159void __init 159void __init
160acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma) 160acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
161{ 161{
162 struct node *nd; 162 struct bootnode *nd;
163 unsigned long start, end; 163 unsigned long start, end;
164 int node, pxm; 164 int node, pxm;
165 int i; 165 int i;
diff --git a/arch/x86_64/pci/Makefile b/arch/x86_64/pci/Makefile
index a8f75a2a0f6f..a3f6ad570179 100644
--- a/arch/x86_64/pci/Makefile
+++ b/arch/x86_64/pci/Makefile
@@ -7,7 +7,7 @@ CFLAGS += -Iarch/i386/pci
7 7
8obj-y := i386.o 8obj-y := i386.o
9obj-$(CONFIG_PCI_DIRECT)+= direct.o 9obj-$(CONFIG_PCI_DIRECT)+= direct.o
10obj-y += fixup.o 10obj-y += fixup.o init.o
11obj-$(CONFIG_ACPI) += acpi.o 11obj-$(CONFIG_ACPI) += acpi.o
12obj-y += legacy.o irq.o common.o 12obj-y += legacy.o irq.o common.o
13# mmconfig has a 64bit special 13# mmconfig has a 64bit special
@@ -22,3 +22,4 @@ irq-y += ../../i386/pci/irq.o
22common-y += ../../i386/pci/common.o 22common-y += ../../i386/pci/common.o
23fixup-y += ../../i386/pci/fixup.o 23fixup-y += ../../i386/pci/fixup.o
24i386-y += ../../i386/pci/i386.o 24i386-y += ../../i386/pci/i386.o
25init-y += ../../i386/pci/init.o
diff --git a/arch/x86_64/pci/mmconfig.c b/arch/x86_64/pci/mmconfig.c
index 18f371fe37f8..e616500207e4 100644
--- a/arch/x86_64/pci/mmconfig.c
+++ b/arch/x86_64/pci/mmconfig.c
@@ -55,7 +55,7 @@ static char __iomem *get_virt(unsigned int seg, unsigned bus)
55static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn) 55static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn)
56{ 56{
57 char __iomem *addr; 57 char __iomem *addr;
58 if (seg == 0 && bus == 0 && test_bit(PCI_SLOT(devfn), &fallback_slots)) 58 if (seg == 0 && bus == 0 && test_bit(PCI_SLOT(devfn), fallback_slots))
59 return NULL; 59 return NULL;
60 addr = get_virt(seg, bus); 60 addr = get_virt(seg, bus);
61 if (!addr) 61 if (!addr)
@@ -143,29 +143,29 @@ static __init void unreachable_devices(void)
143 continue; 143 continue;
144 addr = pci_dev_base(0, 0, PCI_DEVFN(i, 0)); 144 addr = pci_dev_base(0, 0, PCI_DEVFN(i, 0));
145 if (addr == NULL|| readl(addr) != val1) { 145 if (addr == NULL|| readl(addr) != val1) {
146 set_bit(i, &fallback_slots); 146 set_bit(i, fallback_slots);
147 } 147 }
148 } 148 }
149} 149}
150 150
151static int __init pci_mmcfg_init(void) 151void __init pci_mmcfg_init(void)
152{ 152{
153 int i; 153 int i;
154 154
155 if ((pci_probe & PCI_PROBE_MMCONF) == 0) 155 if ((pci_probe & PCI_PROBE_MMCONF) == 0)
156 return 0; 156 return;
157 157
158 acpi_table_parse(ACPI_MCFG, acpi_parse_mcfg); 158 acpi_table_parse(ACPI_MCFG, acpi_parse_mcfg);
159 if ((pci_mmcfg_config_num == 0) || 159 if ((pci_mmcfg_config_num == 0) ||
160 (pci_mmcfg_config == NULL) || 160 (pci_mmcfg_config == NULL) ||
161 (pci_mmcfg_config[0].base_address == 0)) 161 (pci_mmcfg_config[0].base_address == 0))
162 return 0; 162 return;
163 163
164 /* RED-PEN i386 doesn't do _nocache right now */ 164 /* RED-PEN i386 doesn't do _nocache right now */
165 pci_mmcfg_virt = kmalloc(sizeof(*pci_mmcfg_virt) * pci_mmcfg_config_num, GFP_KERNEL); 165 pci_mmcfg_virt = kmalloc(sizeof(*pci_mmcfg_virt) * pci_mmcfg_config_num, GFP_KERNEL);
166 if (pci_mmcfg_virt == NULL) { 166 if (pci_mmcfg_virt == NULL) {
167 printk("PCI: Can not allocate memory for mmconfig structures\n"); 167 printk("PCI: Can not allocate memory for mmconfig structures\n");
168 return 0; 168 return;
169 } 169 }
170 for (i = 0; i < pci_mmcfg_config_num; ++i) { 170 for (i = 0; i < pci_mmcfg_config_num; ++i) {
171 pci_mmcfg_virt[i].cfg = &pci_mmcfg_config[i]; 171 pci_mmcfg_virt[i].cfg = &pci_mmcfg_config[i];
@@ -173,7 +173,7 @@ static int __init pci_mmcfg_init(void)
173 if (!pci_mmcfg_virt[i].virt) { 173 if (!pci_mmcfg_virt[i].virt) {
174 printk("PCI: Cannot map mmconfig aperture for segment %d\n", 174 printk("PCI: Cannot map mmconfig aperture for segment %d\n",
175 pci_mmcfg_config[i].pci_segment_group_number); 175 pci_mmcfg_config[i].pci_segment_group_number);
176 return 0; 176 return;
177 } 177 }
178 printk(KERN_INFO "PCI: Using MMCONFIG at %x\n", pci_mmcfg_config[i].base_address); 178 printk(KERN_INFO "PCI: Using MMCONFIG at %x\n", pci_mmcfg_config[i].base_address);
179 } 179 }
@@ -182,8 +182,4 @@ static int __init pci_mmcfg_init(void)
182 182
183 raw_pci_ops = &pci_mmcfg; 183 raw_pci_ops = &pci_mmcfg;
184 pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; 184 pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF;
185
186 return 0;
187} 185}
188
189arch_initcall(pci_mmcfg_init);