diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-04-26 04:31:28 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2007-04-26 04:31:28 -0400 |
commit | ef2e58ea6b9931c3a4816c66593da49bb20e3b24 (patch) | |
tree | ce7432add3becbe78de4ea06425cd2d9e91f4ada /arch/x86_64 | |
parent | 06d63cc51d47f572009138a7f3ac34d95773405d (diff) | |
parent | de46c33745f5e2ad594c72f2cf5f490861b16ce1 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'arch/x86_64')
-rw-r--r-- | arch/x86_64/boot/video.S | 14 | ||||
-rw-r--r-- | arch/x86_64/defconfig | 53 | ||||
-rw-r--r-- | arch/x86_64/ia32/ia32entry.S | 2 | ||||
-rw-r--r-- | arch/x86_64/kernel/acpi/sleep.c | 4 | ||||
-rw-r--r-- | arch/x86_64/kernel/apic.c | 19 | ||||
-rw-r--r-- | arch/x86_64/kernel/cpufreq/Kconfig | 1 | ||||
-rw-r--r-- | arch/x86_64/kernel/e820.c | 2 | ||||
-rw-r--r-- | arch/x86_64/kernel/early-quirks.c | 8 | ||||
-rw-r--r-- | arch/x86_64/kernel/functionlist | 1 | ||||
-rw-r--r-- | arch/x86_64/kernel/hpet.c | 9 | ||||
-rw-r--r-- | arch/x86_64/kernel/i8259.c | 6 | ||||
-rw-r--r-- | arch/x86_64/kernel/k8.c | 4 | ||||
-rw-r--r-- | arch/x86_64/kernel/mpparse.c | 4 | ||||
-rw-r--r-- | arch/x86_64/kernel/nmi.c | 135 | ||||
-rw-r--r-- | arch/x86_64/kernel/pci-gart.c | 8 | ||||
-rw-r--r-- | arch/x86_64/kernel/process.c | 13 | ||||
-rw-r--r-- | arch/x86_64/kernel/vmlinux.lds.S | 2 | ||||
-rw-r--r-- | arch/x86_64/kernel/vsyscall.c | 2 | ||||
-rw-r--r-- | arch/x86_64/kernel/x8664_ksyms.c | 1 | ||||
-rw-r--r-- | arch/x86_64/mm/pageattr.c | 2 |
20 files changed, 210 insertions, 80 deletions
diff --git a/arch/x86_64/boot/video.S b/arch/x86_64/boot/video.S index d6ff88f35135..6090516c9c7f 100644 --- a/arch/x86_64/boot/video.S +++ b/arch/x86_64/boot/video.S | |||
@@ -571,6 +571,16 @@ setr1: lodsw | |||
571 | jmp _m_s | 571 | jmp _m_s |
572 | 572 | ||
573 | check_vesa: | 573 | check_vesa: |
574 | #ifdef CONFIG_FIRMWARE_EDID | ||
575 | leaw modelist+1024, %di | ||
576 | movw $0x4f00, %ax | ||
577 | int $0x10 | ||
578 | cmpw $0x004f, %ax | ||
579 | jnz setbad | ||
580 | |||
581 | movw 4(%di), %ax | ||
582 | movw %ax, vbe_version | ||
583 | #endif | ||
574 | leaw modelist+1024, %di | 584 | leaw modelist+1024, %di |
575 | subb $VIDEO_FIRST_VESA>>8, %bh | 585 | subb $VIDEO_FIRST_VESA>>8, %bh |
576 | movw %bx, %cx # Get mode information structure | 586 | movw %bx, %cx # Get mode information structure |
@@ -1945,6 +1955,9 @@ store_edid: | |||
1945 | rep | 1955 | rep |
1946 | stosl | 1956 | stosl |
1947 | 1957 | ||
1958 | cmpw $0x0200, vbe_version # only do EDID on >= VBE2.0 | ||
1959 | jl no_edid | ||
1960 | |||
1948 | pushw %es # save ES | 1961 | pushw %es # save ES |
1949 | xorw %di, %di # Report Capability | 1962 | xorw %di, %di # Report Capability |
1950 | pushw %di | 1963 | pushw %di |
@@ -1987,6 +2000,7 @@ do_restore: .byte 0 # Screen contents altered during mode change | |||
1987 | svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes | 2000 | svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes |
1988 | graphic_mode: .byte 0 # Graphic mode with a linear frame buffer | 2001 | graphic_mode: .byte 0 # Graphic mode with a linear frame buffer |
1989 | dac_size: .byte 6 # DAC bit depth | 2002 | dac_size: .byte 6 # DAC bit depth |
2003 | vbe_version: .word 0 # VBE bios version | ||
1990 | 2004 | ||
1991 | # Status messages | 2005 | # Status messages |
1992 | keymsg: .ascii "Press <RETURN> to see video modes available, " | 2006 | keymsg: .ascii "Press <RETURN> to see video modes available, " |
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig index 293a4a4c609e..7a1e251e333d 100644 --- a/arch/x86_64/defconfig +++ b/arch/x86_64/defconfig | |||
@@ -1,11 +1,13 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.20-git8 | 3 | # Linux kernel version: 2.6.21-rc3 |
4 | # Tue Feb 13 11:25:16 2007 | 4 | # Wed Mar 7 15:29:47 2007 |
5 | # | 5 | # |
6 | CONFIG_X86_64=y | 6 | CONFIG_X86_64=y |
7 | CONFIG_64BIT=y | 7 | CONFIG_64BIT=y |
8 | CONFIG_X86=y | 8 | CONFIG_X86=y |
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
9 | CONFIG_ZONE_DMA32=y | 11 | CONFIG_ZONE_DMA32=y |
10 | CONFIG_LOCKDEP_SUPPORT=y | 12 | CONFIG_LOCKDEP_SUPPORT=y |
11 | CONFIG_STACKTRACE_SUPPORT=y | 13 | CONFIG_STACKTRACE_SUPPORT=y |
@@ -43,6 +45,7 @@ CONFIG_LOCALVERSION_AUTO=y | |||
43 | CONFIG_SWAP=y | 45 | CONFIG_SWAP=y |
44 | CONFIG_SYSVIPC=y | 46 | CONFIG_SYSVIPC=y |
45 | # CONFIG_IPC_NS is not set | 47 | # CONFIG_IPC_NS is not set |
48 | CONFIG_SYSVIPC_SYSCTL=y | ||
46 | CONFIG_POSIX_MQUEUE=y | 49 | CONFIG_POSIX_MQUEUE=y |
47 | # CONFIG_BSD_PROCESS_ACCT is not set | 50 | # CONFIG_BSD_PROCESS_ACCT is not set |
48 | # CONFIG_TASKSTATS is not set | 51 | # CONFIG_TASKSTATS is not set |
@@ -53,6 +56,7 @@ CONFIG_IKCONFIG_PROC=y | |||
53 | # CONFIG_CPUSETS is not set | 56 | # CONFIG_CPUSETS is not set |
54 | CONFIG_SYSFS_DEPRECATED=y | 57 | CONFIG_SYSFS_DEPRECATED=y |
55 | # CONFIG_RELAY is not set | 58 | # CONFIG_RELAY is not set |
59 | CONFIG_BLK_DEV_INITRD=y | ||
56 | CONFIG_INITRAMFS_SOURCE="" | 60 | CONFIG_INITRAMFS_SOURCE="" |
57 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 61 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
58 | CONFIG_SYSCTL=y | 62 | CONFIG_SYSCTL=y |
@@ -114,11 +118,11 @@ CONFIG_X86_PC=y | |||
114 | # CONFIG_X86_VSMP is not set | 118 | # CONFIG_X86_VSMP is not set |
115 | # CONFIG_MK8 is not set | 119 | # CONFIG_MK8 is not set |
116 | # CONFIG_MPSC is not set | 120 | # CONFIG_MPSC is not set |
117 | CONFIG_MCORE2=y | 121 | # CONFIG_MCORE2 is not set |
118 | # CONFIG_GENERIC_CPU is not set | 122 | CONFIG_GENERIC_CPU=y |
119 | CONFIG_X86_L1_CACHE_BYTES=64 | 123 | CONFIG_X86_L1_CACHE_BYTES=128 |
120 | CONFIG_X86_L1_CACHE_SHIFT=6 | 124 | CONFIG_X86_L1_CACHE_SHIFT=7 |
121 | CONFIG_X86_INTERNODE_CACHE_BYTES=64 | 125 | CONFIG_X86_INTERNODE_CACHE_BYTES=128 |
122 | CONFIG_X86_TSC=y | 126 | CONFIG_X86_TSC=y |
123 | CONFIG_X86_GOOD_APIC=y | 127 | CONFIG_X86_GOOD_APIC=y |
124 | # CONFIG_MICROCODE is not set | 128 | # CONFIG_MICROCODE is not set |
@@ -207,10 +211,8 @@ CONFIG_ACPI_PROCFS=y | |||
207 | CONFIG_ACPI_AC=y | 211 | CONFIG_ACPI_AC=y |
208 | CONFIG_ACPI_BATTERY=y | 212 | CONFIG_ACPI_BATTERY=y |
209 | CONFIG_ACPI_BUTTON=y | 213 | CONFIG_ACPI_BUTTON=y |
210 | # CONFIG_ACPI_HOTKEY is not set | ||
211 | CONFIG_ACPI_FAN=y | 214 | CONFIG_ACPI_FAN=y |
212 | # CONFIG_ACPI_DOCK is not set | 215 | # CONFIG_ACPI_DOCK is not set |
213 | # CONFIG_ACPI_BAY is not set | ||
214 | CONFIG_ACPI_PROCESSOR=y | 216 | CONFIG_ACPI_PROCESSOR=y |
215 | CONFIG_ACPI_HOTPLUG_CPU=y | 217 | CONFIG_ACPI_HOTPLUG_CPU=y |
216 | CONFIG_ACPI_THERMAL=y | 218 | CONFIG_ACPI_THERMAL=y |
@@ -319,7 +321,7 @@ CONFIG_IP_PNP_DHCP=y | |||
319 | # CONFIG_INET_ESP is not set | 321 | # CONFIG_INET_ESP is not set |
320 | # CONFIG_INET_IPCOMP is not set | 322 | # CONFIG_INET_IPCOMP is not set |
321 | # CONFIG_INET_XFRM_TUNNEL is not set | 323 | # CONFIG_INET_XFRM_TUNNEL is not set |
322 | # CONFIG_INET_TUNNEL is not set | 324 | CONFIG_INET_TUNNEL=y |
323 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | 325 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
324 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | 326 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
325 | # CONFIG_INET_XFRM_MODE_BEET is not set | 327 | # CONFIG_INET_XFRM_MODE_BEET is not set |
@@ -421,7 +423,13 @@ CONFIG_FW_LOADER=y | |||
421 | # | 423 | # |
422 | # Plug and Play support | 424 | # Plug and Play support |
423 | # | 425 | # |
424 | # CONFIG_PNP is not set | 426 | CONFIG_PNP=y |
427 | # CONFIG_PNP_DEBUG is not set | ||
428 | |||
429 | # | ||
430 | # Protocols | ||
431 | # | ||
432 | CONFIG_PNPACPI=y | ||
425 | 433 | ||
426 | # | 434 | # |
427 | # Block devices | 435 | # Block devices |
@@ -441,7 +449,6 @@ CONFIG_BLK_DEV_RAM=y | |||
441 | CONFIG_BLK_DEV_RAM_COUNT=16 | 449 | CONFIG_BLK_DEV_RAM_COUNT=16 |
442 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 450 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
443 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 451 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 |
444 | CONFIG_BLK_DEV_INITRD=y | ||
445 | # CONFIG_CDROM_PKTCDVD is not set | 452 | # CONFIG_CDROM_PKTCDVD is not set |
446 | # CONFIG_ATA_OVER_ETH is not set | 453 | # CONFIG_ATA_OVER_ETH is not set |
447 | 454 | ||
@@ -451,6 +458,7 @@ CONFIG_BLK_DEV_INITRD=y | |||
451 | # CONFIG_IBM_ASM is not set | 458 | # CONFIG_IBM_ASM is not set |
452 | # CONFIG_SGI_IOC4 is not set | 459 | # CONFIG_SGI_IOC4 is not set |
453 | # CONFIG_TIFM_CORE is not set | 460 | # CONFIG_TIFM_CORE is not set |
461 | # CONFIG_SONY_LAPTOP is not set | ||
454 | 462 | ||
455 | # | 463 | # |
456 | # ATA/ATAPI/MFM/RLL support | 464 | # ATA/ATAPI/MFM/RLL support |
@@ -477,6 +485,7 @@ CONFIG_BLK_DEV_IDEACPI=y | |||
477 | # | 485 | # |
478 | CONFIG_IDE_GENERIC=y | 486 | CONFIG_IDE_GENERIC=y |
479 | # CONFIG_BLK_DEV_CMD640 is not set | 487 | # CONFIG_BLK_DEV_CMD640 is not set |
488 | # CONFIG_BLK_DEV_IDEPNP is not set | ||
480 | CONFIG_BLK_DEV_IDEPCI=y | 489 | CONFIG_BLK_DEV_IDEPCI=y |
481 | # CONFIG_IDEPCI_SHARE_IRQ is not set | 490 | # CONFIG_IDEPCI_SHARE_IRQ is not set |
482 | # CONFIG_BLK_DEV_OFFBOARD is not set | 491 | # CONFIG_BLK_DEV_OFFBOARD is not set |
@@ -623,6 +632,7 @@ CONFIG_SATA_VIA=y | |||
623 | # CONFIG_SATA_VITESSE is not set | 632 | # CONFIG_SATA_VITESSE is not set |
624 | # CONFIG_SATA_INIC162X is not set | 633 | # CONFIG_SATA_INIC162X is not set |
625 | CONFIG_SATA_INTEL_COMBINED=y | 634 | CONFIG_SATA_INTEL_COMBINED=y |
635 | CONFIG_SATA_ACPI=y | ||
626 | # CONFIG_PATA_ALI is not set | 636 | # CONFIG_PATA_ALI is not set |
627 | # CONFIG_PATA_AMD is not set | 637 | # CONFIG_PATA_AMD is not set |
628 | # CONFIG_PATA_ARTOP is not set | 638 | # CONFIG_PATA_ARTOP is not set |
@@ -726,6 +736,7 @@ CONFIG_NETDEVICES=y | |||
726 | # CONFIG_BONDING is not set | 736 | # CONFIG_BONDING is not set |
727 | # CONFIG_EQUALIZER is not set | 737 | # CONFIG_EQUALIZER is not set |
728 | CONFIG_TUN=y | 738 | CONFIG_TUN=y |
739 | # CONFIG_NET_SB1000 is not set | ||
729 | 740 | ||
730 | # | 741 | # |
731 | # ARCnet devices | 742 | # ARCnet devices |
@@ -920,6 +931,7 @@ CONFIG_HW_CONSOLE=y | |||
920 | CONFIG_SERIAL_8250=y | 931 | CONFIG_SERIAL_8250=y |
921 | CONFIG_SERIAL_8250_CONSOLE=y | 932 | CONFIG_SERIAL_8250_CONSOLE=y |
922 | CONFIG_SERIAL_8250_PCI=y | 933 | CONFIG_SERIAL_8250_PCI=y |
934 | CONFIG_SERIAL_8250_PNP=y | ||
923 | CONFIG_SERIAL_8250_NR_UARTS=4 | 935 | CONFIG_SERIAL_8250_NR_UARTS=4 |
924 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | 936 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 |
925 | # CONFIG_SERIAL_8250_EXTENDED is not set | 937 | # CONFIG_SERIAL_8250_EXTENDED is not set |
@@ -1001,6 +1013,7 @@ CONFIG_I2C_ISA=m | |||
1001 | # CONFIG_I2C_NFORCE2 is not set | 1013 | # CONFIG_I2C_NFORCE2 is not set |
1002 | # CONFIG_I2C_OCORES is not set | 1014 | # CONFIG_I2C_OCORES is not set |
1003 | # CONFIG_I2C_PARPORT_LIGHT is not set | 1015 | # CONFIG_I2C_PARPORT_LIGHT is not set |
1016 | # CONFIG_I2C_PASEMI is not set | ||
1004 | # CONFIG_I2C_PROSAVAGE is not set | 1017 | # CONFIG_I2C_PROSAVAGE is not set |
1005 | # CONFIG_I2C_SAVAGE4 is not set | 1018 | # CONFIG_I2C_SAVAGE4 is not set |
1006 | # CONFIG_I2C_SIS5595 is not set | 1019 | # CONFIG_I2C_SIS5595 is not set |
@@ -1047,6 +1060,7 @@ CONFIG_HWMON=y | |||
1047 | # CONFIG_SENSORS_ADM1021 is not set | 1060 | # CONFIG_SENSORS_ADM1021 is not set |
1048 | # CONFIG_SENSORS_ADM1025 is not set | 1061 | # CONFIG_SENSORS_ADM1025 is not set |
1049 | # CONFIG_SENSORS_ADM1026 is not set | 1062 | # CONFIG_SENSORS_ADM1026 is not set |
1063 | # CONFIG_SENSORS_ADM1029 is not set | ||
1050 | # CONFIG_SENSORS_ADM1031 is not set | 1064 | # CONFIG_SENSORS_ADM1031 is not set |
1051 | # CONFIG_SENSORS_ADM9240 is not set | 1065 | # CONFIG_SENSORS_ADM9240 is not set |
1052 | # CONFIG_SENSORS_K8TEMP is not set | 1066 | # CONFIG_SENSORS_K8TEMP is not set |
@@ -1090,6 +1104,11 @@ CONFIG_SENSORS_SMSC47B397=m | |||
1090 | # CONFIG_HWMON_DEBUG_CHIP is not set | 1104 | # CONFIG_HWMON_DEBUG_CHIP is not set |
1091 | 1105 | ||
1092 | # | 1106 | # |
1107 | # Multifunction device drivers | ||
1108 | # | ||
1109 | # CONFIG_MFD_SM501 is not set | ||
1110 | |||
1111 | # | ||
1093 | # Multimedia devices | 1112 | # Multimedia devices |
1094 | # | 1113 | # |
1095 | # CONFIG_VIDEO_DEV is not set | 1114 | # CONFIG_VIDEO_DEV is not set |
@@ -1103,7 +1122,7 @@ CONFIG_SENSORS_SMSC47B397=m | |||
1103 | # | 1122 | # |
1104 | # Graphics support | 1123 | # Graphics support |
1105 | # | 1124 | # |
1106 | # CONFIG_FIRMWARE_EDID is not set | 1125 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
1107 | # CONFIG_FB is not set | 1126 | # CONFIG_FB is not set |
1108 | 1127 | ||
1109 | # | 1128 | # |
@@ -1114,7 +1133,6 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y | |||
1114 | CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256 | 1133 | CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256 |
1115 | CONFIG_VIDEO_SELECT=y | 1134 | CONFIG_VIDEO_SELECT=y |
1116 | CONFIG_DUMMY_CONSOLE=y | 1135 | CONFIG_DUMMY_CONSOLE=y |
1117 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
1118 | 1136 | ||
1119 | # | 1137 | # |
1120 | # Sound | 1138 | # Sound |
@@ -1130,9 +1148,8 @@ CONFIG_SOUND=y | |||
1130 | # Open Sound System | 1148 | # Open Sound System |
1131 | # | 1149 | # |
1132 | CONFIG_SOUND_PRIME=y | 1150 | CONFIG_SOUND_PRIME=y |
1133 | CONFIG_OBSOLETE_OSS=y | 1151 | # CONFIG_OBSOLETE_OSS is not set |
1134 | # CONFIG_SOUND_BT878 is not set | 1152 | # CONFIG_SOUND_BT878 is not set |
1135 | # CONFIG_SOUND_ES1371 is not set | ||
1136 | CONFIG_SOUND_ICH=y | 1153 | CONFIG_SOUND_ICH=y |
1137 | # CONFIG_SOUND_TRIDENT is not set | 1154 | # CONFIG_SOUND_TRIDENT is not set |
1138 | # CONFIG_SOUND_MSNDCLAS is not set | 1155 | # CONFIG_SOUND_MSNDCLAS is not set |
@@ -1263,6 +1280,7 @@ CONFIG_USB_MON=y | |||
1263 | # CONFIG_USB_RIO500 is not set | 1280 | # CONFIG_USB_RIO500 is not set |
1264 | # CONFIG_USB_LEGOTOWER is not set | 1281 | # CONFIG_USB_LEGOTOWER is not set |
1265 | # CONFIG_USB_LCD is not set | 1282 | # CONFIG_USB_LCD is not set |
1283 | # CONFIG_USB_BERRY_CHARGE is not set | ||
1266 | # CONFIG_USB_LED is not set | 1284 | # CONFIG_USB_LED is not set |
1267 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 1285 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
1268 | # CONFIG_USB_CYTHERM is not set | 1286 | # CONFIG_USB_CYTHERM is not set |
@@ -1273,6 +1291,7 @@ CONFIG_USB_MON=y | |||
1273 | # CONFIG_USB_SISUSBVGA is not set | 1291 | # CONFIG_USB_SISUSBVGA is not set |
1274 | # CONFIG_USB_LD is not set | 1292 | # CONFIG_USB_LD is not set |
1275 | # CONFIG_USB_TRANCEVIBRATOR is not set | 1293 | # CONFIG_USB_TRANCEVIBRATOR is not set |
1294 | # CONFIG_USB_IOWARRIOR is not set | ||
1276 | # CONFIG_USB_TEST is not set | 1295 | # CONFIG_USB_TEST is not set |
1277 | 1296 | ||
1278 | # | 1297 | # |
@@ -1538,6 +1557,7 @@ CONFIG_DEBUG_KERNEL=y | |||
1538 | CONFIG_LOG_BUF_SHIFT=18 | 1557 | CONFIG_LOG_BUF_SHIFT=18 |
1539 | CONFIG_DETECT_SOFTLOCKUP=y | 1558 | CONFIG_DETECT_SOFTLOCKUP=y |
1540 | # CONFIG_SCHEDSTATS is not set | 1559 | # CONFIG_SCHEDSTATS is not set |
1560 | # CONFIG_TIMER_STATS is not set | ||
1541 | # CONFIG_DEBUG_SLAB is not set | 1561 | # CONFIG_DEBUG_SLAB is not set |
1542 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1562 | # CONFIG_DEBUG_RT_MUTEXES is not set |
1543 | # CONFIG_RT_MUTEX_TESTER is not set | 1563 | # CONFIG_RT_MUTEX_TESTER is not set |
@@ -1556,6 +1576,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
1556 | # CONFIG_FORCED_INLINING is not set | 1576 | # CONFIG_FORCED_INLINING is not set |
1557 | # CONFIG_RCU_TORTURE_TEST is not set | 1577 | # CONFIG_RCU_TORTURE_TEST is not set |
1558 | # CONFIG_LKDTM is not set | 1578 | # CONFIG_LKDTM is not set |
1579 | # CONFIG_FAULT_INJECTION is not set | ||
1559 | # CONFIG_DEBUG_RODATA is not set | 1580 | # CONFIG_DEBUG_RODATA is not set |
1560 | # CONFIG_IOMMU_DEBUG is not set | 1581 | # CONFIG_IOMMU_DEBUG is not set |
1561 | CONFIG_DEBUG_STACKOVERFLOW=y | 1582 | CONFIG_DEBUG_STACKOVERFLOW=y |
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S index eda7a0d4dc15..796df6992f62 100644 --- a/arch/x86_64/ia32/ia32entry.S +++ b/arch/x86_64/ia32/ia32entry.S | |||
@@ -560,7 +560,7 @@ ia32_sys_call_table: | |||
560 | .quad sys_sched_yield | 560 | .quad sys_sched_yield |
561 | .quad sys_sched_get_priority_max | 561 | .quad sys_sched_get_priority_max |
562 | .quad sys_sched_get_priority_min /* 160 */ | 562 | .quad sys_sched_get_priority_min /* 160 */ |
563 | .quad sys_sched_rr_get_interval | 563 | .quad sys32_sched_rr_get_interval |
564 | .quad compat_sys_nanosleep | 564 | .quad compat_sys_nanosleep |
565 | .quad sys_mremap | 565 | .quad sys_mremap |
566 | .quad sys_setresuid16 | 566 | .quad sys_setresuid16 |
diff --git a/arch/x86_64/kernel/acpi/sleep.c b/arch/x86_64/kernel/acpi/sleep.c index 23178ce6c783..e1548fbe95ae 100644 --- a/arch/x86_64/kernel/acpi/sleep.c +++ b/arch/x86_64/kernel/acpi/sleep.c | |||
@@ -66,8 +66,10 @@ static void init_low_mapping(void) | |||
66 | { | 66 | { |
67 | pgd_t *slot0 = pgd_offset(current->mm, 0UL); | 67 | pgd_t *slot0 = pgd_offset(current->mm, 0UL); |
68 | low_ptr = *slot0; | 68 | low_ptr = *slot0; |
69 | /* FIXME: We're playing with the current task's page tables here, which | ||
70 | * is potentially dangerous on SMP systems. | ||
71 | */ | ||
69 | set_pgd(slot0, *pgd_offset(current->mm, PAGE_OFFSET)); | 72 | set_pgd(slot0, *pgd_offset(current->mm, PAGE_OFFSET)); |
70 | WARN_ON(num_online_cpus() != 1); | ||
71 | local_flush_tlb(); | 73 | local_flush_tlb(); |
72 | } | 74 | } |
73 | 75 | ||
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c index 723417d924c0..bd3e45d47c37 100644 --- a/arch/x86_64/kernel/apic.c +++ b/arch/x86_64/kernel/apic.c | |||
@@ -47,6 +47,10 @@ int apic_calibrate_pmtmr __initdata; | |||
47 | 47 | ||
48 | int disable_apic_timer __initdata; | 48 | int disable_apic_timer __initdata; |
49 | 49 | ||
50 | /* Local APIC timer works in C2? */ | ||
51 | int local_apic_timer_c2_ok; | ||
52 | EXPORT_SYMBOL_GPL(local_apic_timer_c2_ok); | ||
53 | |||
50 | static struct resource *ioapic_resources; | 54 | static struct resource *ioapic_resources; |
51 | static struct resource lapic_resource = { | 55 | static struct resource lapic_resource = { |
52 | .name = "Local APIC", | 56 | .name = "Local APIC", |
@@ -930,9 +934,17 @@ EXPORT_SYMBOL(switch_APIC_timer_to_ipi); | |||
930 | 934 | ||
931 | void smp_send_timer_broadcast_ipi(void) | 935 | void smp_send_timer_broadcast_ipi(void) |
932 | { | 936 | { |
937 | int cpu = smp_processor_id(); | ||
933 | cpumask_t mask; | 938 | cpumask_t mask; |
934 | 939 | ||
935 | cpus_and(mask, cpu_online_map, timer_interrupt_broadcast_ipi_mask); | 940 | cpus_and(mask, cpu_online_map, timer_interrupt_broadcast_ipi_mask); |
941 | |||
942 | if (cpu_isset(cpu, mask)) { | ||
943 | cpu_clear(cpu, mask); | ||
944 | add_pda(apic_timer_irqs, 1); | ||
945 | smp_local_timer_interrupt(); | ||
946 | } | ||
947 | |||
936 | if (!cpus_empty(mask)) { | 948 | if (!cpus_empty(mask)) { |
937 | send_IPI_mask(mask, LOCAL_TIMER_VECTOR); | 949 | send_IPI_mask(mask, LOCAL_TIMER_VECTOR); |
938 | } | 950 | } |
@@ -1192,6 +1204,13 @@ static __init int setup_nolapic(char *str) | |||
1192 | } | 1204 | } |
1193 | early_param("nolapic", setup_nolapic); | 1205 | early_param("nolapic", setup_nolapic); |
1194 | 1206 | ||
1207 | static int __init parse_lapic_timer_c2_ok(char *arg) | ||
1208 | { | ||
1209 | local_apic_timer_c2_ok = 1; | ||
1210 | return 0; | ||
1211 | } | ||
1212 | early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok); | ||
1213 | |||
1195 | static __init int setup_noapictimer(char *str) | 1214 | static __init int setup_noapictimer(char *str) |
1196 | { | 1215 | { |
1197 | if (str[0] != ' ' && str[0] != 0) | 1216 | if (str[0] != ' ' && str[0] != 0) |
diff --git a/arch/x86_64/kernel/cpufreq/Kconfig b/arch/x86_64/kernel/cpufreq/Kconfig index ced15d06f0f3..40acb67fb882 100644 --- a/arch/x86_64/kernel/cpufreq/Kconfig +++ b/arch/x86_64/kernel/cpufreq/Kconfig | |||
@@ -75,6 +75,7 @@ config X86_ACPI_CPUFREQ_PROC_INTF | |||
75 | config X86_P4_CLOCKMOD | 75 | config X86_P4_CLOCKMOD |
76 | tristate "Intel Pentium 4 clock modulation" | 76 | tristate "Intel Pentium 4 clock modulation" |
77 | depends on EMBEDDED | 77 | depends on EMBEDDED |
78 | select CPU_FREQ_TABLE | ||
78 | help | 79 | help |
79 | This adds the clock modulation driver for Intel Pentium 4 / XEON | 80 | This adds the clock modulation driver for Intel Pentium 4 / XEON |
80 | processors. When enabled it will lower CPU temperature by skipping | 81 | processors. When enabled it will lower CPU temperature by skipping |
diff --git a/arch/x86_64/kernel/e820.c b/arch/x86_64/kernel/e820.c index 4651fd22b213..a490fabfcf47 100644 --- a/arch/x86_64/kernel/e820.c +++ b/arch/x86_64/kernel/e820.c | |||
@@ -662,7 +662,7 @@ static int __init parse_memmap_opt(char *p) | |||
662 | } | 662 | } |
663 | early_param("memmap", parse_memmap_opt); | 663 | early_param("memmap", parse_memmap_opt); |
664 | 664 | ||
665 | void finish_e820_parsing(void) | 665 | void __init finish_e820_parsing(void) |
666 | { | 666 | { |
667 | if (userdef) { | 667 | if (userdef) { |
668 | printk(KERN_INFO "user-defined physical RAM map:\n"); | 668 | printk(KERN_INFO "user-defined physical RAM map:\n"); |
diff --git a/arch/x86_64/kernel/early-quirks.c b/arch/x86_64/kernel/early-quirks.c index dec587b293bf..fede55a53995 100644 --- a/arch/x86_64/kernel/early-quirks.c +++ b/arch/x86_64/kernel/early-quirks.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <asm/proto.h> | 16 | #include <asm/proto.h> |
17 | #include <asm/dma.h> | 17 | #include <asm/dma.h> |
18 | 18 | ||
19 | static void via_bugs(void) | 19 | static void __init via_bugs(void) |
20 | { | 20 | { |
21 | #ifdef CONFIG_IOMMU | 21 | #ifdef CONFIG_IOMMU |
22 | if ((end_pfn > MAX_DMA32_PFN || force_iommu) && | 22 | if ((end_pfn > MAX_DMA32_PFN || force_iommu) && |
@@ -36,7 +36,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header) | |||
36 | } | 36 | } |
37 | #endif | 37 | #endif |
38 | 38 | ||
39 | static void nvidia_bugs(void) | 39 | static void __init nvidia_bugs(void) |
40 | { | 40 | { |
41 | #ifdef CONFIG_ACPI | 41 | #ifdef CONFIG_ACPI |
42 | /* | 42 | /* |
@@ -62,7 +62,7 @@ static void nvidia_bugs(void) | |||
62 | 62 | ||
63 | } | 63 | } |
64 | 64 | ||
65 | static void ati_bugs(void) | 65 | static void __init ati_bugs(void) |
66 | { | 66 | { |
67 | if (timer_over_8254 == 1) { | 67 | if (timer_over_8254 == 1) { |
68 | timer_over_8254 = 0; | 68 | timer_over_8254 = 0; |
@@ -88,7 +88,7 @@ struct chipset { | |||
88 | void (*f)(void); | 88 | void (*f)(void); |
89 | }; | 89 | }; |
90 | 90 | ||
91 | static struct chipset early_qrk[] = { | 91 | static struct chipset early_qrk[] __initdata = { |
92 | { PCI_VENDOR_ID_NVIDIA, nvidia_bugs }, | 92 | { PCI_VENDOR_ID_NVIDIA, nvidia_bugs }, |
93 | { PCI_VENDOR_ID_VIA, via_bugs }, | 93 | { PCI_VENDOR_ID_VIA, via_bugs }, |
94 | { PCI_VENDOR_ID_ATI, ati_bugs }, | 94 | { PCI_VENDOR_ID_ATI, ati_bugs }, |
diff --git a/arch/x86_64/kernel/functionlist b/arch/x86_64/kernel/functionlist index 01fa23580c85..7ae18ec12454 100644 --- a/arch/x86_64/kernel/functionlist +++ b/arch/x86_64/kernel/functionlist | |||
@@ -514,7 +514,6 @@ | |||
514 | *(.text.dentry_open) | 514 | *(.text.dentry_open) |
515 | *(.text.dentry_iput) | 515 | *(.text.dentry_iput) |
516 | *(.text.bio_alloc) | 516 | *(.text.bio_alloc) |
517 | *(.text.alloc_skb_from_cache) | ||
518 | *(.text.wait_on_page_bit) | 517 | *(.text.wait_on_page_bit) |
519 | *(.text.vfs_readdir) | 518 | *(.text.vfs_readdir) |
520 | *(.text.vfs_lstat) | 519 | *(.text.vfs_lstat) |
diff --git a/arch/x86_64/kernel/hpet.c b/arch/x86_64/kernel/hpet.c index 8cf0b8a13778..b8286968662d 100644 --- a/arch/x86_64/kernel/hpet.c +++ b/arch/x86_64/kernel/hpet.c | |||
@@ -191,6 +191,7 @@ int hpet_reenable(void) | |||
191 | 191 | ||
192 | #define TICK_COUNT 100000000 | 192 | #define TICK_COUNT 100000000 |
193 | #define TICK_MIN 5000 | 193 | #define TICK_MIN 5000 |
194 | #define MAX_TRIES 5 | ||
194 | 195 | ||
195 | /* | 196 | /* |
196 | * Some platforms take periodic SMI interrupts with 5ms duration. Make sure none | 197 | * Some platforms take periodic SMI interrupts with 5ms duration. Make sure none |
@@ -198,13 +199,15 @@ int hpet_reenable(void) | |||
198 | */ | 199 | */ |
199 | static void __init read_hpet_tsc(int *hpet, int *tsc) | 200 | static void __init read_hpet_tsc(int *hpet, int *tsc) |
200 | { | 201 | { |
201 | int tsc1, tsc2, hpet1; | 202 | int tsc1, tsc2, hpet1, i; |
202 | 203 | ||
203 | do { | 204 | for (i = 0; i < MAX_TRIES; i++) { |
204 | tsc1 = get_cycles_sync(); | 205 | tsc1 = get_cycles_sync(); |
205 | hpet1 = hpet_readl(HPET_COUNTER); | 206 | hpet1 = hpet_readl(HPET_COUNTER); |
206 | tsc2 = get_cycles_sync(); | 207 | tsc2 = get_cycles_sync(); |
207 | } while (tsc2 - tsc1 > TICK_MIN); | 208 | if (tsc2 - tsc1 > TICK_MIN) |
209 | break; | ||
210 | } | ||
208 | *hpet = hpet1; | 211 | *hpet = hpet1; |
209 | *tsc = tsc2; | 212 | *tsc = tsc2; |
210 | } | 213 | } |
diff --git a/arch/x86_64/kernel/i8259.c b/arch/x86_64/kernel/i8259.c index 21d95b747437..489426682772 100644 --- a/arch/x86_64/kernel/i8259.c +++ b/arch/x86_64/kernel/i8259.c | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | /* | 46 | /* |
47 | * ISA PIC or low IO-APIC triggered (INTA-cycle or APIC) interrupts: | 47 | * ISA PIC or low IO-APIC triggered (INTA-cycle or APIC) interrupts: |
48 | * (these are usually mapped to vectors 0x20-0x2f) | 48 | * (these are usually mapped to vectors 0x30-0x3f) |
49 | */ | 49 | */ |
50 | 50 | ||
51 | /* | 51 | /* |
@@ -299,7 +299,7 @@ void init_8259A(int auto_eoi) | |||
299 | * outb_p - this has to work on a wide range of PC hardware. | 299 | * outb_p - this has to work on a wide range of PC hardware. |
300 | */ | 300 | */ |
301 | outb_p(0x11, 0x20); /* ICW1: select 8259A-1 init */ | 301 | outb_p(0x11, 0x20); /* ICW1: select 8259A-1 init */ |
302 | outb_p(IRQ0_VECTOR, 0x21); /* ICW2: 8259A-1 IR0-7 mapped to 0x20-0x27 */ | 302 | outb_p(IRQ0_VECTOR, 0x21); /* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 */ |
303 | outb_p(0x04, 0x21); /* 8259A-1 (the master) has a slave on IR2 */ | 303 | outb_p(0x04, 0x21); /* 8259A-1 (the master) has a slave on IR2 */ |
304 | if (auto_eoi) | 304 | if (auto_eoi) |
305 | outb_p(0x03, 0x21); /* master does Auto EOI */ | 305 | outb_p(0x03, 0x21); /* master does Auto EOI */ |
@@ -307,7 +307,7 @@ void init_8259A(int auto_eoi) | |||
307 | outb_p(0x01, 0x21); /* master expects normal EOI */ | 307 | outb_p(0x01, 0x21); /* master expects normal EOI */ |
308 | 308 | ||
309 | outb_p(0x11, 0xA0); /* ICW1: select 8259A-2 init */ | 309 | outb_p(0x11, 0xA0); /* ICW1: select 8259A-2 init */ |
310 | outb_p(IRQ8_VECTOR, 0xA1); /* ICW2: 8259A-2 IR0-7 mapped to 0x28-0x2f */ | 310 | outb_p(IRQ8_VECTOR, 0xA1); /* ICW2: 8259A-2 IR0-7 mapped to 0x38-0x3f */ |
311 | outb_p(0x02, 0xA1); /* 8259A-2 is a slave on master's IR2 */ | 311 | outb_p(0x02, 0xA1); /* 8259A-2 is a slave on master's IR2 */ |
312 | outb_p(0x01, 0xA1); /* (slave's support for AEOI in flat mode | 312 | outb_p(0x01, 0xA1); /* (slave's support for AEOI in flat mode |
313 | is to be investigated) */ | 313 | is to be investigated) */ |
diff --git a/arch/x86_64/kernel/k8.c b/arch/x86_64/kernel/k8.c index 6416682d33d0..bc11b32e8b4d 100644 --- a/arch/x86_64/kernel/k8.c +++ b/arch/x86_64/kernel/k8.c | |||
@@ -61,8 +61,8 @@ int cache_k8_northbridges(void) | |||
61 | dev = NULL; | 61 | dev = NULL; |
62 | i = 0; | 62 | i = 0; |
63 | while ((dev = next_k8_northbridge(dev)) != NULL) { | 63 | while ((dev = next_k8_northbridge(dev)) != NULL) { |
64 | k8_northbridges[i++] = dev; | 64 | k8_northbridges[i] = dev; |
65 | pci_read_config_dword(dev, 0x9c, &flush_words[i]); | 65 | pci_read_config_dword(dev, 0x9c, &flush_words[i++]); |
66 | } | 66 | } |
67 | k8_northbridges[i] = NULL; | 67 | k8_northbridges[i] = NULL; |
68 | return 0; | 68 | return 0; |
diff --git a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c index 50dd8bef850e..455aa0b932f0 100644 --- a/arch/x86_64/kernel/mpparse.c +++ b/arch/x86_64/kernel/mpparse.c | |||
@@ -60,9 +60,9 @@ unsigned long mp_lapic_addr = 0; | |||
60 | /* Processor that is doing the boot up */ | 60 | /* Processor that is doing the boot up */ |
61 | unsigned int boot_cpu_id = -1U; | 61 | unsigned int boot_cpu_id = -1U; |
62 | /* Internal processor count */ | 62 | /* Internal processor count */ |
63 | unsigned int num_processors __initdata = 0; | 63 | unsigned int num_processors __cpuinitdata = 0; |
64 | 64 | ||
65 | unsigned disabled_cpus __initdata; | 65 | unsigned disabled_cpus __cpuinitdata; |
66 | 66 | ||
67 | /* Bitmask of physically existing CPUs */ | 67 | /* Bitmask of physically existing CPUs */ |
68 | physid_mask_t phys_cpu_present_map = PHYSID_MASK_NONE; | 68 | physid_mask_t phys_cpu_present_map = PHYSID_MASK_NONE; |
diff --git a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c index 486f4c61a948..dfab9f167366 100644 --- a/arch/x86_64/kernel/nmi.c +++ b/arch/x86_64/kernel/nmi.c | |||
@@ -39,15 +39,17 @@ int panic_on_unrecovered_nmi; | |||
39 | * different subsystems this reservation system just tries to coordinate | 39 | * different subsystems this reservation system just tries to coordinate |
40 | * things a little | 40 | * things a little |
41 | */ | 41 | */ |
42 | static DEFINE_PER_CPU(unsigned, perfctr_nmi_owner); | ||
43 | static DEFINE_PER_CPU(unsigned, evntsel_nmi_owner[2]); | ||
44 | |||
45 | static cpumask_t backtrace_mask = CPU_MASK_NONE; | ||
46 | 42 | ||
47 | /* this number is calculated from Intel's MSR_P4_CRU_ESCR5 register and it's | 43 | /* this number is calculated from Intel's MSR_P4_CRU_ESCR5 register and it's |
48 | * offset from MSR_P4_BSU_ESCR0. It will be the max for all platforms (for now) | 44 | * offset from MSR_P4_BSU_ESCR0. It will be the max for all platforms (for now) |
49 | */ | 45 | */ |
50 | #define NMI_MAX_COUNTER_BITS 66 | 46 | #define NMI_MAX_COUNTER_BITS 66 |
47 | #define NMI_MAX_COUNTER_LONGS BITS_TO_LONGS(NMI_MAX_COUNTER_BITS) | ||
48 | |||
49 | static DEFINE_PER_CPU(unsigned, perfctr_nmi_owner[NMI_MAX_COUNTER_LONGS]); | ||
50 | static DEFINE_PER_CPU(unsigned, evntsel_nmi_owner[NMI_MAX_COUNTER_LONGS]); | ||
51 | |||
52 | static cpumask_t backtrace_mask = CPU_MASK_NONE; | ||
51 | 53 | ||
52 | /* nmi_active: | 54 | /* nmi_active: |
53 | * >0: the lapic NMI watchdog is active, but can be disabled | 55 | * >0: the lapic NMI watchdog is active, but can be disabled |
@@ -108,64 +110,128 @@ static inline unsigned int nmi_evntsel_msr_to_bit(unsigned int msr) | |||
108 | /* checks for a bit availability (hack for oprofile) */ | 110 | /* checks for a bit availability (hack for oprofile) */ |
109 | int avail_to_resrv_perfctr_nmi_bit(unsigned int counter) | 111 | int avail_to_resrv_perfctr_nmi_bit(unsigned int counter) |
110 | { | 112 | { |
113 | int cpu; | ||
111 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); | 114 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); |
112 | 115 | for_each_possible_cpu (cpu) { | |
113 | return (!test_bit(counter, &__get_cpu_var(perfctr_nmi_owner))); | 116 | if (test_bit(counter, &per_cpu(perfctr_nmi_owner, cpu))) |
117 | return 0; | ||
118 | } | ||
119 | return 1; | ||
114 | } | 120 | } |
115 | 121 | ||
116 | /* checks the an msr for availability */ | 122 | /* checks the an msr for availability */ |
117 | int avail_to_resrv_perfctr_nmi(unsigned int msr) | 123 | int avail_to_resrv_perfctr_nmi(unsigned int msr) |
118 | { | 124 | { |
119 | unsigned int counter; | 125 | unsigned int counter; |
126 | int cpu; | ||
120 | 127 | ||
121 | counter = nmi_perfctr_msr_to_bit(msr); | 128 | counter = nmi_perfctr_msr_to_bit(msr); |
122 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); | 129 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); |
123 | 130 | ||
124 | return (!test_bit(counter, &__get_cpu_var(perfctr_nmi_owner))); | 131 | for_each_possible_cpu (cpu) { |
132 | if (test_bit(counter, &per_cpu(perfctr_nmi_owner, cpu))) | ||
133 | return 0; | ||
134 | } | ||
135 | return 1; | ||
125 | } | 136 | } |
126 | 137 | ||
127 | int reserve_perfctr_nmi(unsigned int msr) | 138 | static int __reserve_perfctr_nmi(int cpu, unsigned int msr) |
128 | { | 139 | { |
129 | unsigned int counter; | 140 | unsigned int counter; |
141 | if (cpu < 0) | ||
142 | cpu = smp_processor_id(); | ||
130 | 143 | ||
131 | counter = nmi_perfctr_msr_to_bit(msr); | 144 | counter = nmi_perfctr_msr_to_bit(msr); |
132 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); | 145 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); |
133 | 146 | ||
134 | if (!test_and_set_bit(counter, &__get_cpu_var(perfctr_nmi_owner))) | 147 | if (!test_and_set_bit(counter, &per_cpu(perfctr_nmi_owner, cpu))) |
135 | return 1; | 148 | return 1; |
136 | return 0; | 149 | return 0; |
137 | } | 150 | } |
138 | 151 | ||
139 | void release_perfctr_nmi(unsigned int msr) | 152 | static void __release_perfctr_nmi(int cpu, unsigned int msr) |
140 | { | 153 | { |
141 | unsigned int counter; | 154 | unsigned int counter; |
155 | if (cpu < 0) | ||
156 | cpu = smp_processor_id(); | ||
142 | 157 | ||
143 | counter = nmi_perfctr_msr_to_bit(msr); | 158 | counter = nmi_perfctr_msr_to_bit(msr); |
144 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); | 159 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); |
145 | 160 | ||
146 | clear_bit(counter, &__get_cpu_var(perfctr_nmi_owner)); | 161 | clear_bit(counter, &per_cpu(perfctr_nmi_owner, cpu)); |
147 | } | 162 | } |
148 | 163 | ||
149 | int reserve_evntsel_nmi(unsigned int msr) | 164 | int reserve_perfctr_nmi(unsigned int msr) |
165 | { | ||
166 | int cpu, i; | ||
167 | for_each_possible_cpu (cpu) { | ||
168 | if (!__reserve_perfctr_nmi(cpu, msr)) { | ||
169 | for_each_possible_cpu (i) { | ||
170 | if (i >= cpu) | ||
171 | break; | ||
172 | __release_perfctr_nmi(i, msr); | ||
173 | } | ||
174 | return 0; | ||
175 | } | ||
176 | } | ||
177 | return 1; | ||
178 | } | ||
179 | |||
180 | void release_perfctr_nmi(unsigned int msr) | ||
181 | { | ||
182 | int cpu; | ||
183 | for_each_possible_cpu (cpu) | ||
184 | __release_perfctr_nmi(cpu, msr); | ||
185 | } | ||
186 | |||
187 | int __reserve_evntsel_nmi(int cpu, unsigned int msr) | ||
150 | { | 188 | { |
151 | unsigned int counter; | 189 | unsigned int counter; |
190 | if (cpu < 0) | ||
191 | cpu = smp_processor_id(); | ||
152 | 192 | ||
153 | counter = nmi_evntsel_msr_to_bit(msr); | 193 | counter = nmi_evntsel_msr_to_bit(msr); |
154 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); | 194 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); |
155 | 195 | ||
156 | if (!test_and_set_bit(counter, &__get_cpu_var(evntsel_nmi_owner))) | 196 | if (!test_and_set_bit(counter, &per_cpu(evntsel_nmi_owner, cpu)[0])) |
157 | return 1; | 197 | return 1; |
158 | return 0; | 198 | return 0; |
159 | } | 199 | } |
160 | 200 | ||
161 | void release_evntsel_nmi(unsigned int msr) | 201 | static void __release_evntsel_nmi(int cpu, unsigned int msr) |
162 | { | 202 | { |
163 | unsigned int counter; | 203 | unsigned int counter; |
204 | if (cpu < 0) | ||
205 | cpu = smp_processor_id(); | ||
164 | 206 | ||
165 | counter = nmi_evntsel_msr_to_bit(msr); | 207 | counter = nmi_evntsel_msr_to_bit(msr); |
166 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); | 208 | BUG_ON(counter > NMI_MAX_COUNTER_BITS); |
167 | 209 | ||
168 | clear_bit(counter, &__get_cpu_var(evntsel_nmi_owner)); | 210 | clear_bit(counter, &per_cpu(evntsel_nmi_owner, cpu)[0]); |
211 | } | ||
212 | |||
213 | int reserve_evntsel_nmi(unsigned int msr) | ||
214 | { | ||
215 | int cpu, i; | ||
216 | for_each_possible_cpu (cpu) { | ||
217 | if (!__reserve_evntsel_nmi(cpu, msr)) { | ||
218 | for_each_possible_cpu (i) { | ||
219 | if (i >= cpu) | ||
220 | break; | ||
221 | __release_evntsel_nmi(i, msr); | ||
222 | } | ||
223 | return 0; | ||
224 | } | ||
225 | } | ||
226 | return 1; | ||
227 | } | ||
228 | |||
229 | void release_evntsel_nmi(unsigned int msr) | ||
230 | { | ||
231 | int cpu; | ||
232 | for_each_possible_cpu (cpu) { | ||
233 | __release_evntsel_nmi(cpu, msr); | ||
234 | } | ||
169 | } | 235 | } |
170 | 236 | ||
171 | static __cpuinit inline int nmi_known_cpu(void) | 237 | static __cpuinit inline int nmi_known_cpu(void) |
@@ -187,10 +253,7 @@ void nmi_watchdog_default(void) | |||
187 | { | 253 | { |
188 | if (nmi_watchdog != NMI_DEFAULT) | 254 | if (nmi_watchdog != NMI_DEFAULT) |
189 | return; | 255 | return; |
190 | if (nmi_known_cpu()) | 256 | nmi_watchdog = NMI_NONE; |
191 | nmi_watchdog = NMI_LOCAL_APIC; | ||
192 | else | ||
193 | nmi_watchdog = NMI_IO_APIC; | ||
194 | } | 257 | } |
195 | 258 | ||
196 | static int endflag __initdata = 0; | 259 | static int endflag __initdata = 0; |
@@ -256,7 +319,7 @@ int __init check_nmi_watchdog (void) | |||
256 | for (cpu = 0; cpu < NR_CPUS; cpu++) | 319 | for (cpu = 0; cpu < NR_CPUS; cpu++) |
257 | counts[cpu] = cpu_pda(cpu)->__nmi_count; | 320 | counts[cpu] = cpu_pda(cpu)->__nmi_count; |
258 | local_irq_enable(); | 321 | local_irq_enable(); |
259 | mdelay((10*1000)/nmi_hz); // wait 10 ticks | 322 | mdelay((20*1000)/nmi_hz); // wait 20 ticks |
260 | 323 | ||
261 | for_each_online_cpu(cpu) { | 324 | for_each_online_cpu(cpu) { |
262 | if (!per_cpu(nmi_watchdog_ctlblk, cpu).enabled) | 325 | if (!per_cpu(nmi_watchdog_ctlblk, cpu).enabled) |
@@ -475,10 +538,10 @@ static int setup_k7_watchdog(void) | |||
475 | 538 | ||
476 | perfctr_msr = MSR_K7_PERFCTR0; | 539 | perfctr_msr = MSR_K7_PERFCTR0; |
477 | evntsel_msr = MSR_K7_EVNTSEL0; | 540 | evntsel_msr = MSR_K7_EVNTSEL0; |
478 | if (!reserve_perfctr_nmi(perfctr_msr)) | 541 | if (!__reserve_perfctr_nmi(-1, perfctr_msr)) |
479 | goto fail; | 542 | goto fail; |
480 | 543 | ||
481 | if (!reserve_evntsel_nmi(evntsel_msr)) | 544 | if (!__reserve_evntsel_nmi(-1, evntsel_msr)) |
482 | goto fail1; | 545 | goto fail1; |
483 | 546 | ||
484 | /* Simulator may not support it */ | 547 | /* Simulator may not support it */ |
@@ -504,9 +567,9 @@ static int setup_k7_watchdog(void) | |||
504 | wd->check_bit = 1ULL<<63; | 567 | wd->check_bit = 1ULL<<63; |
505 | return 1; | 568 | return 1; |
506 | fail2: | 569 | fail2: |
507 | release_evntsel_nmi(evntsel_msr); | 570 | __release_evntsel_nmi(-1, evntsel_msr); |
508 | fail1: | 571 | fail1: |
509 | release_perfctr_nmi(perfctr_msr); | 572 | __release_perfctr_nmi(-1, perfctr_msr); |
510 | fail: | 573 | fail: |
511 | return 0; | 574 | return 0; |
512 | } | 575 | } |
@@ -517,8 +580,8 @@ static void stop_k7_watchdog(void) | |||
517 | 580 | ||
518 | wrmsr(wd->evntsel_msr, 0, 0); | 581 | wrmsr(wd->evntsel_msr, 0, 0); |
519 | 582 | ||
520 | release_evntsel_nmi(wd->evntsel_msr); | 583 | __release_evntsel_nmi(-1, wd->evntsel_msr); |
521 | release_perfctr_nmi(wd->perfctr_msr); | 584 | __release_perfctr_nmi(-1, wd->perfctr_msr); |
522 | } | 585 | } |
523 | 586 | ||
524 | /* Note that these events don't tick when the CPU idles. This means | 587 | /* Note that these events don't tick when the CPU idles. This means |
@@ -584,10 +647,10 @@ static int setup_p4_watchdog(void) | |||
584 | cccr_val = P4_CCCR_OVF_PMI1 | P4_CCCR_ESCR_SELECT(4); | 647 | cccr_val = P4_CCCR_OVF_PMI1 | P4_CCCR_ESCR_SELECT(4); |
585 | } | 648 | } |
586 | 649 | ||
587 | if (!reserve_perfctr_nmi(perfctr_msr)) | 650 | if (!__reserve_perfctr_nmi(-1, perfctr_msr)) |
588 | goto fail; | 651 | goto fail; |
589 | 652 | ||
590 | if (!reserve_evntsel_nmi(evntsel_msr)) | 653 | if (!__reserve_evntsel_nmi(-1, evntsel_msr)) |
591 | goto fail1; | 654 | goto fail1; |
592 | 655 | ||
593 | evntsel = P4_ESCR_EVENT_SELECT(0x3F) | 656 | evntsel = P4_ESCR_EVENT_SELECT(0x3F) |
@@ -612,7 +675,7 @@ static int setup_p4_watchdog(void) | |||
612 | wd->check_bit = 1ULL<<39; | 675 | wd->check_bit = 1ULL<<39; |
613 | return 1; | 676 | return 1; |
614 | fail1: | 677 | fail1: |
615 | release_perfctr_nmi(perfctr_msr); | 678 | __release_perfctr_nmi(-1, perfctr_msr); |
616 | fail: | 679 | fail: |
617 | return 0; | 680 | return 0; |
618 | } | 681 | } |
@@ -624,8 +687,8 @@ static void stop_p4_watchdog(void) | |||
624 | wrmsr(wd->cccr_msr, 0, 0); | 687 | wrmsr(wd->cccr_msr, 0, 0); |
625 | wrmsr(wd->evntsel_msr, 0, 0); | 688 | wrmsr(wd->evntsel_msr, 0, 0); |
626 | 689 | ||
627 | release_evntsel_nmi(wd->evntsel_msr); | 690 | __release_evntsel_nmi(-1, wd->evntsel_msr); |
628 | release_perfctr_nmi(wd->perfctr_msr); | 691 | __release_perfctr_nmi(-1, wd->perfctr_msr); |
629 | } | 692 | } |
630 | 693 | ||
631 | #define ARCH_PERFMON_NMI_EVENT_SEL ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL | 694 | #define ARCH_PERFMON_NMI_EVENT_SEL ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL |
@@ -653,10 +716,10 @@ static int setup_intel_arch_watchdog(void) | |||
653 | perfctr_msr = MSR_ARCH_PERFMON_PERFCTR0; | 716 | perfctr_msr = MSR_ARCH_PERFMON_PERFCTR0; |
654 | evntsel_msr = MSR_ARCH_PERFMON_EVENTSEL0; | 717 | evntsel_msr = MSR_ARCH_PERFMON_EVENTSEL0; |
655 | 718 | ||
656 | if (!reserve_perfctr_nmi(perfctr_msr)) | 719 | if (!__reserve_perfctr_nmi(-1, perfctr_msr)) |
657 | goto fail; | 720 | goto fail; |
658 | 721 | ||
659 | if (!reserve_evntsel_nmi(evntsel_msr)) | 722 | if (!__reserve_evntsel_nmi(-1, evntsel_msr)) |
660 | goto fail1; | 723 | goto fail1; |
661 | 724 | ||
662 | wrmsrl(perfctr_msr, 0UL); | 725 | wrmsrl(perfctr_msr, 0UL); |
@@ -683,7 +746,7 @@ static int setup_intel_arch_watchdog(void) | |||
683 | wd->check_bit = 1ULL << (eax.split.bit_width - 1); | 746 | wd->check_bit = 1ULL << (eax.split.bit_width - 1); |
684 | return 1; | 747 | return 1; |
685 | fail1: | 748 | fail1: |
686 | release_perfctr_nmi(perfctr_msr); | 749 | __release_perfctr_nmi(-1, perfctr_msr); |
687 | fail: | 750 | fail: |
688 | return 0; | 751 | return 0; |
689 | } | 752 | } |
@@ -707,8 +770,8 @@ static void stop_intel_arch_watchdog(void) | |||
707 | 770 | ||
708 | wrmsr(wd->evntsel_msr, 0, 0); | 771 | wrmsr(wd->evntsel_msr, 0, 0); |
709 | 772 | ||
710 | release_evntsel_nmi(wd->evntsel_msr); | 773 | __release_evntsel_nmi(-1, wd->evntsel_msr); |
711 | release_perfctr_nmi(wd->perfctr_msr); | 774 | __release_perfctr_nmi(-1, wd->perfctr_msr); |
712 | } | 775 | } |
713 | 776 | ||
714 | void setup_apic_nmi_watchdog(void *unused) | 777 | void setup_apic_nmi_watchdog(void *unused) |
diff --git a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c index 030eb3753358..0bae862e9a55 100644 --- a/arch/x86_64/kernel/pci-gart.c +++ b/arch/x86_64/kernel/pci-gart.c | |||
@@ -519,7 +519,11 @@ static __init int init_k8_gatt(struct agp_kern_info *info) | |||
519 | gatt_size = (aper_size >> PAGE_SHIFT) * sizeof(u32); | 519 | gatt_size = (aper_size >> PAGE_SHIFT) * sizeof(u32); |
520 | gatt = (void *)__get_free_pages(GFP_KERNEL, get_order(gatt_size)); | 520 | gatt = (void *)__get_free_pages(GFP_KERNEL, get_order(gatt_size)); |
521 | if (!gatt) | 521 | if (!gatt) |
522 | panic("Cannot allocate GATT table"); | 522 | panic("Cannot allocate GATT table"); |
523 | if (change_page_attr_addr((unsigned long)gatt, gatt_size >> PAGE_SHIFT, PAGE_KERNEL_NOCACHE)) | ||
524 | panic("Could not set GART PTEs to uncacheable pages"); | ||
525 | global_flush_tlb(); | ||
526 | |||
523 | memset(gatt, 0, gatt_size); | 527 | memset(gatt, 0, gatt_size); |
524 | agp_gatt_table = gatt; | 528 | agp_gatt_table = gatt; |
525 | 529 | ||
@@ -675,7 +679,7 @@ void __init gart_iommu_init(void) | |||
675 | dma_ops = &gart_dma_ops; | 679 | dma_ops = &gart_dma_ops; |
676 | } | 680 | } |
677 | 681 | ||
678 | void gart_parse_options(char *p) | 682 | void __init gart_parse_options(char *p) |
679 | { | 683 | { |
680 | int arg; | 684 | int arg; |
681 | 685 | ||
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c index cbbc6adc1a92..d8d5ccc245c8 100644 --- a/arch/x86_64/kernel/process.c +++ b/arch/x86_64/kernel/process.c | |||
@@ -382,14 +382,17 @@ void exit_thread(void) | |||
382 | void flush_thread(void) | 382 | void flush_thread(void) |
383 | { | 383 | { |
384 | struct task_struct *tsk = current; | 384 | struct task_struct *tsk = current; |
385 | struct thread_info *t = current_thread_info(); | ||
386 | 385 | ||
387 | if (t->flags & _TIF_ABI_PENDING) { | 386 | if (test_tsk_thread_flag(tsk, TIF_ABI_PENDING)) { |
388 | t->flags ^= (_TIF_ABI_PENDING | _TIF_IA32); | 387 | clear_tsk_thread_flag(tsk, TIF_ABI_PENDING); |
389 | if (t->flags & _TIF_IA32) | 388 | if (test_tsk_thread_flag(tsk, TIF_IA32)) { |
389 | clear_tsk_thread_flag(tsk, TIF_IA32); | ||
390 | } else { | ||
391 | set_tsk_thread_flag(tsk, TIF_IA32); | ||
390 | current_thread_info()->status |= TS_COMPAT; | 392 | current_thread_info()->status |= TS_COMPAT; |
393 | } | ||
391 | } | 394 | } |
392 | t->flags &= ~_TIF_DEBUG; | 395 | clear_tsk_thread_flag(tsk, TIF_DEBUG); |
393 | 396 | ||
394 | tsk->thread.debugreg0 = 0; | 397 | tsk->thread.debugreg0 = 0; |
395 | tsk->thread.debugreg1 = 0; | 398 | tsk->thread.debugreg1 = 0; |
diff --git a/arch/x86_64/kernel/vmlinux.lds.S b/arch/x86_64/kernel/vmlinux.lds.S index b73212c0a550..5176ecf006ee 100644 --- a/arch/x86_64/kernel/vmlinux.lds.S +++ b/arch/x86_64/kernel/vmlinux.lds.S | |||
@@ -13,7 +13,7 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") | |||
13 | OUTPUT_ARCH(i386:x86-64) | 13 | OUTPUT_ARCH(i386:x86-64) |
14 | ENTRY(phys_startup_64) | 14 | ENTRY(phys_startup_64) |
15 | jiffies_64 = jiffies; | 15 | jiffies_64 = jiffies; |
16 | _proxy_pda = 0; | 16 | _proxy_pda = 1; |
17 | PHDRS { | 17 | PHDRS { |
18 | text PT_LOAD FLAGS(5); /* R_E */ | 18 | text PT_LOAD FLAGS(5); /* R_E */ |
19 | data PT_LOAD FLAGS(7); /* RWE */ | 19 | data PT_LOAD FLAGS(7); /* RWE */ |
diff --git a/arch/x86_64/kernel/vsyscall.c b/arch/x86_64/kernel/vsyscall.c index 180ff919eaf9..b43c698cf7d3 100644 --- a/arch/x86_64/kernel/vsyscall.c +++ b/arch/x86_64/kernel/vsyscall.c | |||
@@ -112,7 +112,7 @@ static __always_inline void do_vgettimeofday(struct timeval * tv) | |||
112 | 112 | ||
113 | vread = __vsyscall_gtod_data.clock.vread; | 113 | vread = __vsyscall_gtod_data.clock.vread; |
114 | if (unlikely(!__vsyscall_gtod_data.sysctl_enabled || !vread)) { | 114 | if (unlikely(!__vsyscall_gtod_data.sysctl_enabled || !vread)) { |
115 | gettimeofday(tv,0); | 115 | gettimeofday(tv,NULL); |
116 | return; | 116 | return; |
117 | } | 117 | } |
118 | now = vread(); | 118 | now = vread(); |
diff --git a/arch/x86_64/kernel/x8664_ksyms.c b/arch/x86_64/kernel/x8664_ksyms.c index 0dffae69f4ad..77c25b307635 100644 --- a/arch/x86_64/kernel/x8664_ksyms.c +++ b/arch/x86_64/kernel/x8664_ksyms.c | |||
@@ -59,3 +59,4 @@ EXPORT_SYMBOL(empty_zero_page); | |||
59 | EXPORT_SYMBOL(init_level4_pgt); | 59 | EXPORT_SYMBOL(init_level4_pgt); |
60 | EXPORT_SYMBOL(load_gs_index); | 60 | EXPORT_SYMBOL(load_gs_index); |
61 | 61 | ||
62 | EXPORT_SYMBOL(_proxy_pda); | ||
diff --git a/arch/x86_64/mm/pageattr.c b/arch/x86_64/mm/pageattr.c index 65c5eaa59905..081409aa3452 100644 --- a/arch/x86_64/mm/pageattr.c +++ b/arch/x86_64/mm/pageattr.c | |||
@@ -81,8 +81,8 @@ static void flush_kernel_map(void *arg) | |||
81 | void *adr = page_address(pg); | 81 | void *adr = page_address(pg); |
82 | if (cpu_has_clflush) | 82 | if (cpu_has_clflush) |
83 | cache_flush_page(adr); | 83 | cache_flush_page(adr); |
84 | __flush_tlb_one(adr); | ||
85 | } | 84 | } |
85 | __flush_tlb_all(); | ||
86 | } | 86 | } |
87 | 87 | ||
88 | static inline void flush_map(struct list_head *l) | 88 | static inline void flush_map(struct list_head *l) |