Commit 50c61669 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds

[PATCH] x86-64 merge for 2.5.73-bk9

- Update defconfig
- Merge with i386
- Make oprofile compile again
- Warning fixes
- Minor changes for 32bit SYSCALL path (still disabled)
- Remove obsolete FS/GS symbols in ptrace.h
parent d524ab44
...@@ -7,6 +7,7 @@ CONFIG_MMU=y ...@@ -7,6 +7,7 @@ CONFIG_MMU=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_X86_CMPXCHG=y CONFIG_X86_CMPXCHG=y
CONFIG_EARLY_PRINTK=y CONFIG_EARLY_PRINTK=y
CONFIG_HPET_TIMER=y
CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_ISA_DMA=y
# #
...@@ -64,7 +65,8 @@ CONFIG_X86_MCE=y ...@@ -64,7 +65,8 @@ CONFIG_X86_MCE=y
# #
# Power management options # Power management options
# #
# CONFIG_PM is not set CONFIG_PM=y
CONFIG_SOFTWARE_SUSPEND=y
# #
# ACPI Support # ACPI Support
...@@ -72,12 +74,15 @@ CONFIG_X86_MCE=y ...@@ -72,12 +74,15 @@ CONFIG_X86_MCE=y
CONFIG_ACPI=y CONFIG_ACPI=y
# CONFIG_ACPI_HT_ONLY is not set # CONFIG_ACPI_HT_ONLY is not set
CONFIG_ACPI_BOOT=y CONFIG_ACPI_BOOT=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
CONFIG_ACPI_AC=y CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set
CONFIG_ACPI_TOSHIBA=y CONFIG_ACPI_TOSHIBA=y
CONFIG_ACPI_DEBUG=y CONFIG_ACPI_DEBUG=y
CONFIG_ACPI_BUS=y CONFIG_ACPI_BUS=y
...@@ -106,6 +111,11 @@ CONFIG_IA32_EMULATION=y ...@@ -106,6 +111,11 @@ CONFIG_IA32_EMULATION=y
CONFIG_COMPAT=y CONFIG_COMPAT=y
CONFIG_UID16=y CONFIG_UID16=y
#
# Generic Driver Options
#
# CONFIG_FW_LOADER is not set
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
# #
...@@ -151,6 +161,7 @@ CONFIG_IDEDISK_MULTI_MODE=y ...@@ -151,6 +161,7 @@ CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_IDEDISK_STROKE is not set # CONFIG_IDEDISK_STROKE is not set
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set # CONFIG_IDE_TASK_IOCTL is not set
# #
...@@ -198,7 +209,58 @@ CONFIG_BLK_DEV_IDE_MODES=y ...@@ -198,7 +209,58 @@ CONFIG_BLK_DEV_IDE_MODES=y
# #
# SCSI device support # SCSI device support
# #
# CONFIG_SCSI is not set CONFIG_SCSI=y
#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
# CONFIG_CHR_DEV_SG is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_REPORT_LUNS is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
#
# SCSI low-level drivers
#
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
# #
# Multi-device support (RAID and LVM) # Multi-device support (RAID and LVM)
...@@ -213,6 +275,11 @@ CONFIG_BLK_DEV_IDE_MODES=y ...@@ -213,6 +275,11 @@ CONFIG_BLK_DEV_IDE_MODES=y
# #
# Fusion MPT device support # Fusion MPT device support
# #
CONFIG_FUSION=y
CONFIG_FUSION_BOOT=y
CONFIG_FUSION_MAX_SGE=40
# CONFIG_FUSION_ISENSE is not set
# CONFIG_FUSION_CTL is not set
# #
# IEEE 1394 (FireWire) support (EXPERIMENTAL) # IEEE 1394 (FireWire) support (EXPERIMENTAL)
...@@ -246,7 +313,12 @@ CONFIG_IP_MULTICAST=y ...@@ -246,7 +313,12 @@ CONFIG_IP_MULTICAST=y
# CONFIG_INET_AH is not set # CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set # CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set # CONFIG_INET_IPCOMP is not set
# CONFIG_IPV6 is not set CONFIG_IPV6=y
CONFIG_IPV6_PRIVACY=y
# CONFIG_INET6_AH is not set
# CONFIG_INET6_ESP is not set
# CONFIG_INET6_IPCOMP is not set
# CONFIG_IPV6_TUNNEL is not set
# CONFIG_XFRM_USER is not set # CONFIG_XFRM_USER is not set
# #
...@@ -307,6 +379,7 @@ CONFIG_NET_PCI=y ...@@ -307,6 +379,7 @@ CONFIG_NET_PCI=y
CONFIG_AMD8111_ETH=y CONFIG_AMD8111_ETH=y
# CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_B44 is not set # CONFIG_B44 is not set
# CONFIG_TC35815 is not set
# CONFIG_DGRS is not set # CONFIG_DGRS is not set
# CONFIG_EEPRO100 is not set # CONFIG_EEPRO100 is not set
# CONFIG_E100 is not set # CONFIG_E100 is not set
...@@ -356,6 +429,7 @@ CONFIG_TIGON3=y ...@@ -356,6 +429,7 @@ CONFIG_TIGON3=y
# #
# Token Ring devices (depends on LLC=y) # Token Ring devices (depends on LLC=y)
# #
# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set # CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set # CONFIG_SHAPER is not set
...@@ -405,6 +479,7 @@ CONFIG_SERIO=y ...@@ -405,6 +479,7 @@ CONFIG_SERIO=y
CONFIG_SERIO_I8042=y CONFIG_SERIO_I8042=y
# CONFIG_SERIO_SERPORT is not set # CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set # CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
# #
# Input Device Drivers # Input Device Drivers
...@@ -434,6 +509,7 @@ CONFIG_HW_CONSOLE=y ...@@ -434,6 +509,7 @@ CONFIG_HW_CONSOLE=y
# #
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_ACPI is not set
# CONFIG_SERIAL_8250_EXTENDED is not set # CONFIG_SERIAL_8250_EXTENDED is not set
# #
...@@ -467,7 +543,11 @@ CONFIG_UNIX98_PTY_COUNT=256 ...@@ -467,7 +543,11 @@ CONFIG_UNIX98_PTY_COUNT=256
# #
# IPMI # IPMI
# #
# CONFIG_IPMI_HANDLER is not set CONFIG_IPMI_HANDLER=y
CONFIG_IPMI_PANIC_EVENT=y
CONFIG_IPMI_DEVICE_INTERFACE=y
CONFIG_IPMI_KCS=y
CONFIG_IPMI_WATCHDOG=y
# #
# Watchdog Cards # Watchdog Cards
...@@ -487,10 +567,15 @@ CONFIG_RTC=y ...@@ -487,10 +567,15 @@ CONFIG_RTC=y
# CONFIG_FTAPE is not set # CONFIG_FTAPE is not set
CONFIG_AGP=y CONFIG_AGP=y
CONFIG_AGP_AMD_8151=y CONFIG_AGP_AMD_8151=y
# CONFIG_DRM is not set CONFIG_DRM=y
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_GAMMA is not set
# CONFIG_DRM_R128 is not set
CONFIG_DRM_RADEON=y
# CONFIG_DRM_MGA is not set
# CONFIG_MWAVE is not set # CONFIG_MWAVE is not set
CONFIG_RAW_DRIVER=y CONFIG_RAW_DRIVER=y
# CONFIG_HANGCHECK_TIMER is not set CONFIG_HANGCHECK_TIMER=y
# #
# Misc devices # Misc devices
...@@ -613,7 +698,35 @@ CONFIG_DUMMY_CONSOLE=y ...@@ -613,7 +698,35 @@ CONFIG_DUMMY_CONSOLE=y
# #
# Sound # Sound
# #
# CONFIG_SOUND is not set CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
# CONFIG_SND is not set
#
# Open Sound System
#
CONFIG_SOUND_PRIME=y
# CONFIG_SOUND_BT878 is not set
# CONFIG_SOUND_CMPCI is not set
# CONFIG_SOUND_EMU10K1 is not set
# CONFIG_SOUND_FUSION is not set
# CONFIG_SOUND_CS4281 is not set
# CONFIG_SOUND_ES1370 is not set
# CONFIG_SOUND_ES1371 is not set
# CONFIG_SOUND_ESSSOLO1 is not set
# CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_MAESTRO3 is not set
CONFIG_SOUND_ICH=y
# CONFIG_SOUND_RME96XX is not set
# CONFIG_SOUND_SONICVIBES is not set
# CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_VIA82CXXX is not set
# CONFIG_SOUND_OSS is not set
# #
# USB support # USB support
...@@ -629,7 +742,8 @@ CONFIG_DUMMY_CONSOLE=y ...@@ -629,7 +742,8 @@ CONFIG_DUMMY_CONSOLE=y
# #
# Profiling support # Profiling support
# #
# CONFIG_PROFILING is not set CONFIG_PROFILING=y
CONFIG_OPROFILE=y
# #
# Kernel hacking # Kernel hacking
...@@ -653,7 +767,21 @@ CONFIG_MCE_DEBUG=y ...@@ -653,7 +767,21 @@ CONFIG_MCE_DEBUG=y
# #
# Cryptographic options # Cryptographic options
# #
# CONFIG_CRYPTO is not set CONFIG_CRYPTO=y
# CONFIG_CRYPTO_HMAC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_SHA1 is not set
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_DES is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_AES is not set
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_TEST is not set
# #
# Library routines # Library routines
......
...@@ -10,7 +10,7 @@ $(obj)/syscall32.o: $(src)/syscall32.c $(obj)/vsyscall.so ...@@ -10,7 +10,7 @@ $(obj)/syscall32.o: $(src)/syscall32.c $(obj)/vsyscall.so
# The DSO images are built using a special linker script. # The DSO images are built using a special linker script.
$(obj)/vsyscall.so: $(src)/vsyscall.lds $(obj)/vsyscall.o $(obj)/vsyscall.so: $(src)/vsyscall.lds $(obj)/vsyscall.o
$(CC) -m32 -nostdlib -shared -s -Wl,-soname=linux-vsyscall.so.1 \ $(CC) -m32 -nostdlib -shared -s -Wl,-soname=linux-gate.so.1 \
-o $@ -Wl,-T,$^ -o $@ -Wl,-T,$^
clean-files += vsyscall.so clean-files += vsyscall.so
......
...@@ -47,7 +47,6 @@ ...@@ -47,7 +47,6 @@
ENTRY(ia32_cstar_target) ENTRY(ia32_cstar_target)
swapgs swapgs
movl %esp,%r8d movl %esp,%r8d
movq %r8,%gs:pda_oldrsp
movq %gs:pda_kernelstack,%rsp movq %gs:pda_kernelstack,%rsp
sti sti
SAVE_ARGS 8,1 SAVE_ARGS 8,1
...@@ -67,7 +66,6 @@ ENTRY(ia32_cstar_target) ...@@ -67,7 +66,6 @@ ENTRY(ia32_cstar_target)
.section __ex_table,"a" .section __ex_table,"a"
.quad 1b,cstar_badarg .quad 1b,cstar_badarg
.previous .previous
movq %r9,R9-ARGOFFSET(%rsp)
GET_THREAD_INFO(%r10) GET_THREAD_INFO(%r10)
bt $TIF_SYSCALL_TRACE,threadinfo_flags(%r10) bt $TIF_SYSCALL_TRACE,threadinfo_flags(%r10)
jc ia32_tracesys jc ia32_tracesys
......
...@@ -209,7 +209,7 @@ wakeup_long64: ...@@ -209,7 +209,7 @@ wakeup_long64:
movw $0x0e00 + '!', %ds:(0xb801a) movw $0x0e00 + '!', %ds:(0xb801a)
movq saved_eip, %rax movq saved_eip, %rax
jmp %rax jmp *%rax
.code32 .code32
......
...@@ -712,9 +712,9 @@ void __init UNEXPECTED_IO_APIC(void) ...@@ -712,9 +712,9 @@ void __init UNEXPECTED_IO_APIC(void)
void __init print_IO_APIC(void) void __init print_IO_APIC(void)
{ {
int apic, i; int apic, i;
struct IO_APIC_reg_00 reg_00; union IO_APIC_reg_00 reg_00;
struct IO_APIC_reg_01 reg_01; union IO_APIC_reg_01 reg_01;
struct IO_APIC_reg_02 reg_02; union IO_APIC_reg_02 reg_02;
unsigned long flags; unsigned long flags;
printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries); printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries);
...@@ -731,49 +731,49 @@ void __init print_IO_APIC(void) ...@@ -731,49 +731,49 @@ void __init print_IO_APIC(void)
for (apic = 0; apic < nr_ioapics; apic++) { for (apic = 0; apic < nr_ioapics; apic++) {
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
*(int *)&reg_00 = io_apic_read(apic, 0); reg_00.raw = io_apic_read(apic, 0);
*(int *)&reg_01 = io_apic_read(apic, 1); reg_01.raw = io_apic_read(apic, 1);
if (reg_01.version >= 0x10) if (reg_01.bits.version >= 0x10)
*(int *)&reg_02 = io_apic_read(apic, 2); reg_02.raw = io_apic_read(apic, 2);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
printk("\n"); printk("\n");
printk(KERN_DEBUG "IO APIC #%d......\n", mp_ioapics[apic].mpc_apicid); printk(KERN_DEBUG "IO APIC #%d......\n", mp_ioapics[apic].mpc_apicid);
printk(KERN_DEBUG ".... register #00: %08X\n", *(int *)&reg_00); printk(KERN_DEBUG ".... register #00: %08X\n", reg_00.raw);
printk(KERN_DEBUG "....... : physical APIC id: %02X\n", reg_00.ID); printk(KERN_DEBUG "....... : physical APIC id: %02X\n", reg_00.bits.ID);
if (reg_00.__reserved_1 || reg_00.__reserved_2) if (reg_00.bits.__reserved_1 || reg_00.bits.__reserved_2)
UNEXPECTED_IO_APIC(); UNEXPECTED_IO_APIC();
printk(KERN_DEBUG ".... register #01: %08X\n", *(int *)&reg_01); printk(KERN_DEBUG ".... register #01: %08X\n", *(int *)&reg_01);
printk(KERN_DEBUG "....... : max redirection entries: %04X\n", reg_01.entries); printk(KERN_DEBUG "....... : max redirection entries: %04X\n", reg_01.bits.entries);
if ( (reg_01.entries != 0x0f) && /* older (Neptune) boards */ if ( (reg_01.bits.entries != 0x0f) && /* older (Neptune) boards */
(reg_01.entries != 0x17) && /* typical ISA+PCI boards */ (reg_01.bits.entries != 0x17) && /* typical ISA+PCI boards */
(reg_01.entries != 0x1b) && /* Compaq Proliant boards */ (reg_01.bits.entries != 0x1b) && /* Compaq Proliant boards */
(reg_01.entries != 0x1f) && /* dual Xeon boards */ (reg_01.bits.entries != 0x1f) && /* dual Xeon boards */
(reg_01.entries != 0x22) && /* bigger Xeon boards */ (reg_01.bits.entries != 0x22) && /* bigger Xeon boards */
(reg_01.entries != 0x2E) && (reg_01.bits.entries != 0x2E) &&
(reg_01.entries != 0x3F) && (reg_01.bits.entries != 0x3F) &&
(reg_01.entries != 0x03) (reg_01.bits.entries != 0x03)
) )
UNEXPECTED_IO_APIC(); UNEXPECTED_IO_APIC();
printk(KERN_DEBUG "....... : PRQ implemented: %X\n", reg_01.PRQ); printk(KERN_DEBUG "....... : PRQ implemented: %X\n", reg_01.bits.PRQ);
printk(KERN_DEBUG "....... : IO APIC version: %04X\n", reg_01.version); printk(KERN_DEBUG "....... : IO APIC version: %04X\n", reg_01.bits.version);
if ( (reg_01.version != 0x01) && /* 82489DX IO-APICs */ if ( (reg_01.bits.version != 0x01) && /* 82489DX IO-APICs */
(reg_01.version != 0x02) && /* 82801BA IO-APICs (ICH2) */ (reg_01.bits.version != 0x02) && /* 82801BA IO-APICs (ICH2) */
(reg_01.version != 0x10) && /* oldest IO-APICs */ (reg_01.bits.version != 0x10) && /* oldest IO-APICs */
(reg_01.version != 0x11) && /* Pentium/Pro IO-APICs */ (reg_01.bits.version != 0x11) && /* Pentium/Pro IO-APICs */
(reg_01.version != 0x13) && /* Xeon IO-APICs */ (reg_01.bits.version != 0x13) && /* Xeon IO-APICs */
(reg_01.version != 0x20) /* Intel P64H (82806 AA) */ (reg_01.bits.version != 0x20) /* Intel P64H (82806 AA) */
) )
UNEXPECTED_IO_APIC(); UNEXPECTED_IO_APIC();
if (reg_01.__reserved_1 || reg_01.__reserved_2) if (reg_01.bits.__reserved_1 || reg_01.bits.__reserved_2)
UNEXPECTED_IO_APIC(); UNEXPECTED_IO_APIC();
if (reg_01.version >= 0x10) { if (reg_01.bits.version >= 0x10) {
printk(KERN_DEBUG ".... register #02: %08X\n", *(int *)&reg_02); printk(KERN_DEBUG ".... register #02: %08X\n", reg_02.raw);
printk(KERN_DEBUG "....... : arbitration: %02X\n", reg_02.arbitration); printk(KERN_DEBUG "....... : arbitration: %02X\n", reg_02.bits.arbitration);
if (reg_02.__reserved_1 || reg_02.__reserved_2) if (reg_02.bits.__reserved_1 || reg_02.bits.__reserved_2)
UNEXPECTED_IO_APIC(); UNEXPECTED_IO_APIC();
} }
...@@ -782,7 +782,7 @@ void __init print_IO_APIC(void) ...@@ -782,7 +782,7 @@ void __init print_IO_APIC(void)
printk(KERN_DEBUG " NR Log Phy Mask Trig IRR Pol" printk(KERN_DEBUG " NR Log Phy Mask Trig IRR Pol"
" Stat Dest Deli Vect: \n"); " Stat Dest Deli Vect: \n");
for (i = 0; i <= reg_01.entries; i++) { for (i = 0; i <= reg_01.bits.entries; i++) {
struct IO_APIC_route_entry entry; struct IO_APIC_route_entry entry;
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
...@@ -963,7 +963,7 @@ void /*__init*/ print_PIC(void) ...@@ -963,7 +963,7 @@ void /*__init*/ print_PIC(void)
static void __init enable_IO_APIC(void) static void __init enable_IO_APIC(void)
{ {
struct IO_APIC_reg_01 reg_01; union IO_APIC_reg_01 reg_01;
int i; int i;
unsigned long flags; unsigned long flags;
...@@ -980,9 +980,9 @@ static void __init enable_IO_APIC(void) ...@@ -980,9 +980,9 @@ static void __init enable_IO_APIC(void)
*/ */
for (i = 0; i < nr_ioapics; i++) { for (i = 0; i < nr_ioapics; i++) {
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
*(int *)&reg_01 = io_apic_read(i, 1); reg_01.raw = io_apic_read(i, 1);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
nr_ioapic_registers[i] = reg_01.entries+1; nr_ioapic_registers[i] = reg_01.bits.entries+1;
} }
/* /*
...@@ -1013,7 +1013,7 @@ void disable_IO_APIC(void) ...@@ -1013,7 +1013,7 @@ void disable_IO_APIC(void)
static void __init setup_ioapic_ids_from_mpc (void) static void __init setup_ioapic_ids_from_mpc (void)
{ {
struct IO_APIC_reg_00 reg_00; union IO_APIC_reg_00 reg_00;
unsigned long phys_id_present_map = phys_cpu_present_map; unsigned long phys_id_present_map = phys_cpu_present_map;
int apic; int apic;
int i; int i;
...@@ -1029,7 +1029,7 @@ static void __init setup_ioapic_ids_from_mpc (void) ...@@ -1029,7 +1029,7 @@ static void __init setup_ioapic_ids_from_mpc (void)
/* Read the register 0 value */ /* Read the register 0 value */
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
*(int *)&reg_00 = io_apic_read(apic, 0); reg_00.raw = io_apic_read(apic, 0);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
old_id = mp_ioapics[apic].mpc_apicid; old_id = mp_ioapics[apic].mpc_apicid;
...@@ -1038,8 +1038,8 @@ static void __init setup_ioapic_ids_from_mpc (void) ...@@ -1038,8 +1038,8 @@ static void __init setup_ioapic_ids_from_mpc (void)
printk(KERN_ERR "BIOS bug, IO-APIC#%d ID is %d in the MPC table!...\n", printk(KERN_ERR "BIOS bug, IO-APIC#%d ID is %d in the MPC table!...\n",
apic, mp_ioapics[apic].mpc_apicid); apic, mp_ioapics[apic].mpc_apicid);
printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n", printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
reg_00.ID); reg_00.bits.ID);
mp_ioapics[apic].mpc_apicid = reg_00.ID; mp_ioapics[apic].mpc_apicid = reg_00.bits.ID;
} }
/* /*
...@@ -1083,18 +1083,18 @@ static void __init setup_ioapic_ids_from_mpc (void) ...@@ -1083,18 +1083,18 @@ static void __init setup_ioapic_ids_from_mpc (void)
printk(KERN_INFO "...changing IO-APIC physical APIC ID to %d ...", printk(KERN_INFO "...changing IO-APIC physical APIC ID to %d ...",
mp_ioapics[apic].mpc_apicid); mp_ioapics[apic].mpc_apicid);
reg_00.ID = mp_ioapics[apic].mpc_apicid; reg_00.bits.ID = mp_ioapics[apic].mpc_apicid;
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
io_apic_write(apic, 0, *(int *)&reg_00); io_apic_write(apic, 0, reg_00.raw);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
/* /*
* Sanity check * Sanity check
*/ */
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
*(int *)&reg_00 = io_apic_read(apic, 0); reg_00.raw = io_apic_read(apic, 0);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
if (reg_00.ID != mp_ioapics[apic].mpc_apicid) if (reg_00.bits.ID != mp_ioapics[apic].mpc_apicid)
panic("could not set ID!\n"); panic("could not set ID!\n");
else else
printk(" ok.\n"); printk(" ok.\n");
...@@ -1637,7 +1637,7 @@ void __init mp_config_ioapic_for_sci(int irq) ...@@ -1637,7 +1637,7 @@ void __init mp_config_ioapic_for_sci(int irq)
int __init io_apic_get_unique_id (int ioapic, int apic_id) int __init io_apic_get_unique_id (int ioapic, int apic_id)
{ {
struct IO_APIC_reg_00 reg_00; union IO_APIC_reg_00 reg_00;
static unsigned long apic_id_map = 0; static unsigned long apic_id_map = 0;
unsigned long flags; unsigned long flags;
int i = 0; int i = 0;
...@@ -1655,13 +1655,13 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id) ...@@ -1655,13 +1655,13 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
apic_id_map = phys_cpu_present_map; apic_id_map = phys_cpu_present_map;
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
*(int *)&reg_00 = io_apic_read(ioapic, 0); reg_00.raw = io_apic_read(ioapic, 0);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
if (apic_id >= IO_APIC_MAX_ID) { if (apic_id >= IO_APIC_MAX_ID) {
printk(KERN_WARNING "IOAPIC[%d]: Invalid apic_id %d, trying " printk(KERN_WARNING "IOAPIC[%d]: Invalid apic_id %d, trying "
"%d\n", ioapic, apic_id, reg_00.ID); "%d\n", ioapic, apic_id, reg_00.bits.ID);
apic_id = reg_00.ID; apic_id = reg_00.bits.ID;
} }
/* /*
...@@ -1686,16 +1686,16 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id) ...@@ -1686,16 +1686,16 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
apic_id_map |= (1 << apic_id); apic_id_map |= (1 << apic_id);
if (reg_00.ID != apic_id) { if (reg_00.bits.ID != apic_id) {
reg_00.ID = apic_id; reg_00.bits.ID = apic_id;
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
io_apic_write(ioapic, 0, *(int *)&reg_00); io_apic_write(ioapic, 0, reg_00.raw);
*(int *)&reg_00 = io_apic_read(ioapic, 0); reg_00.raw = io_apic_read(ioapic, 0);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
/* Sanity check */ /* Sanity check */
if (reg_00.ID != apic_id) if (reg_00.bits.ID != apic_id)
panic("IOAPIC[%d]: Unable change apic_id!\n", ioapic); panic("IOAPIC[%d]: Unable change apic_id!\n", ioapic);
} }
...@@ -1707,27 +1707,27 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id) ...@@ -1707,27 +1707,27 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
int __init io_apic_get_version (int ioapic) int __init io_apic_get_version (int ioapic)
{ {
struct IO_APIC_reg_01 reg_01; union IO_APIC_reg_01 reg_01;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
*(int *)&reg_01 = io_apic_read(ioapic, 1); reg_01.raw = io_apic_read(ioapic, 1);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
return reg_01.version; return reg_01.bits.version;
} }
int __init io_apic_get_redir_entries (int ioapic) int __init io_apic_get_redir_entries (int ioapic)
{ {
struct IO_APIC_reg_01 reg_01; union IO_APIC_reg_01 reg_01;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
*(int *)&reg_01 = io_apic_read(ioapic, 1); reg_01.raw = io_apic_read(ioapic, 1);
spin_unlock_irqrestore(&ioapic_lock, flags); spin_unlock_irqrestore(&ioapic_lock, flags);
return reg_01.entries; return reg_01.bits.entries;
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <linux/kernel_stat.h> #include <linux/kernel_stat.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sysdev.h> #include <linux/sysdev.h>
#include <linux/nmi.h>
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/mtrr.h> #include <asm/mtrr.h>
...@@ -32,7 +33,13 @@ ...@@ -32,7 +33,13 @@
#include <asm/proto.h> #include <asm/proto.h>
#include <asm/kdebug.h> #include <asm/kdebug.h>
extern void default_do_nmi(struct pt_regs *); /* nmi_active:
* +1: the lapic NMI watchdog is active, but can be disabled
* 0: the lapic NMI watchdog has not been set up, and cannot
* be enabled
* -1: the lapic NMI watchdog is disabled, but can be enabled
*/
static int nmi_active;
unsigned int nmi_watchdog = NMI_IO_APIC; unsigned int nmi_watchdog = NMI_IO_APIC;
static unsigned int nmi_hz = HZ; static unsigned int nmi_hz = HZ;
...@@ -90,6 +97,7 @@ int __init check_nmi_watchdog (void) ...@@ -90,6 +97,7 @@ int __init check_nmi_watchdog (void)
printk("CPU#%d: NMI appears to be stuck (%d)!\n", printk("CPU#%d: NMI appears to be stuck (%d)!\n",
cpu, cpu,
cpu_pda[cpu].__nmi_count); cpu_pda[cpu].__nmi_count);
nmi_active = 0;
return -1; return -1;
} }
} }
...@@ -117,14 +125,6 @@ static int __init setup_nmi_watchdog(char *str) ...@@ -117,14 +125,6 @@ static int __init setup_nmi_watchdog(char *str)
__setup("nmi_watchdog=", setup_nmi_watchdog); __setup("nmi_watchdog=", setup_nmi_watchdog);
/* nmi_active:
* +1: the lapic NMI watchdog is active, but can be disabled
* 0: the lapic NMI watchdog has not been set up, and cannot
* be enabled
* -1: the lapic NMI watchdog is disabled, but can be enabled
*/
static int nmi_active;
void disable_lapic_nmi_watchdog(void) void disable_lapic_nmi_watchdog(void)
{ {
if (nmi_active <= 0) if (nmi_active <= 0)
...@@ -149,6 +149,28 @@ void enable_lapic_nmi_watchdog(void) ...@@ -149,6 +149,28 @@ void enable_lapic_nmi_watchdog(void)
} }
} }
void disable_timer_nmi_watchdog(void)
{
if ((nmi_watchdog != NMI_IO_APIC) || (nmi_active <= 0))
return;
disable_irq(0);
unset_nmi_callback();
nmi_active = -1;
nmi_watchdog = NMI_NONE;
}
void enable_timer_nmi_watchdog(void)
{
if (nmi_active < 0) {
nmi_watchdog = NMI_IO_APIC;
touch_nmi_watchdog();
nmi_active = 1;
enable_irq(0);
}
}
#ifdef CONFIG_PM #ifdef CONFIG_PM
#include <linux/device.h> #include <linux/device.h>
...@@ -352,3 +374,5 @@ void unset_nmi_callback(void) ...@@ -352,3 +374,5 @@ void unset_nmi_callback(void)
EXPORT_SYMBOL(nmi_watchdog); EXPORT_SYMBOL(nmi_watchdog);
EXPORT_SYMBOL(disable_lapic_nmi_watchdog); EXPORT_SYMBOL(disable_lapic_nmi_watchdog);
EXPORT_SYMBOL(enable_lapic_nmi_watchdog); EXPORT_SYMBOL(enable_lapic_nmi_watchdog);
EXPORT_SYMBOL(disable_timer_nmi_watchdog);
EXPORT_SYMBOL(enable_timer_nmi_watchdog);
...@@ -93,11 +93,11 @@ char saved_command_line[COMMAND_LINE_SIZE]; ...@@ -93,11 +93,11 @@ char saved_command_line[COMMAND_LINE_SIZE];
struct resource standard_io_resources[] = { struct resource standard_io_resources[] = {
{ "dma1", 0x00, 0x1f, IORESOURCE_BUSY }, { "dma1", 0x00, 0x1f, IORESOURCE_BUSY },
{ "pic1", 0x20, 0x3f, IORESOURCE_BUSY }, { "pic1", 0x20, 0x21, IORESOURCE_BUSY },
{ "timer", 0x40, 0x5f, IORESOURCE_BUSY }, { "timer", 0x40, 0x5f, IORESOURCE_BUSY },
{ "keyboard", 0x60, 0x6f, IORESOURCE_BUSY }, { "keyboard", 0x60, 0x6f, IORESOURCE_BUSY },
{ "dma page reg", 0x80, 0x8f, IORESOURCE_BUSY }, { "dma page reg", 0x80, 0x8f, IORESOURCE_BUSY },
{ "pic2", 0xa0, 0xbf, IORESOURCE_BUSY }, { "pic2", 0xa0, 0xa1, IORESOURCE_BUSY },
{ "dma2", 0xc0, 0xdf, IORESOURCE_BUSY }, { "dma2", 0xc0, 0xdf, IORESOURCE_BUSY },
{ "fpu", 0xf0, 0xff, IORESOURCE_BUSY } { "fpu", 0xf0, 0xff, IORESOURCE_BUSY }
}; };
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <asm/kdebug.h> #include <asm/kdebug.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/delay.h> #include <asm/delay.h>
#include <asm/tlbflush.h>
extern spinlock_t rtc_lock; extern spinlock_t rtc_lock;
...@@ -212,3 +213,6 @@ EXPORT_SYMBOL(fake_node); ...@@ -212,3 +213,6 @@ EXPORT_SYMBOL(fake_node);
#endif #endif
EXPORT_SYMBOL(clear_page); EXPORT_SYMBOL(clear_page);
EXPORT_SYMBOL(flush_tlb_page);
EXPORT_SYMBOL_GPL(flush_tlb_all);
...@@ -15,7 +15,7 @@ DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \ ...@@ -15,7 +15,7 @@ DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \
oprofile-objs := $(DRIVER_OBJS) init.o oprofile-objs := $(DRIVER_OBJS) init.o
oprofile-$(CONFIG_X86_LOCAL_APIC) += nmi_int.o op_model_athlon.o oprofile-$(CONFIG_X86_LOCAL_APIC) += nmi_int.o op_model_athlon.o
oprofile-$(CONFIG_X86_IO_APIC) += nmi_timer_int.o
INCL := $(obj)/op_counter.h $(obj)/op_x86_model.h INCL := $(obj)/op_counter.h $(obj)/op_x86_model.h
$(obj)/nmi_int.c: ${INCL} $(obj)/nmi_int.c: ${INCL}
...@@ -24,9 +24,11 @@ $(obj)/op_model_athlon.c: ${INCL} ...@@ -24,9 +24,11 @@ $(obj)/op_model_athlon.c: ${INCL}
@ln -sf ../../i386/oprofile/op_model_athlon.c $(obj)/op_model_athlon.c @ln -sf ../../i386/oprofile/op_model_athlon.c $(obj)/op_model_athlon.c
$(obj)/init.c: ${INCL} $(obj)/init.c: ${INCL}
@ln -sf ../../i386/oprofile/init.c $(obj)/init.c @ln -sf ../../i386/oprofile/init.c $(obj)/init.c
$(obj)/nmi_timer_int.c: ${INCL}
@ln -sf ../../i386/oprofile/nmi_timer_int.c $(obj)/nmi_timer_int.c
$(obj)/op_counter.h: $(obj)/op_counter.h:
@ln -sf ../../i386/oprofile/op_counter.h $(obj)/op_counter.h @ln -sf ../../i386/oprofile/op_counter.h $(obj)/op_counter.h
$(obj)/op_x86_model.h: $(obj)/op_x86_model.h:
@ln -sf ../../i386/oprofile/op_x86_model.h $(obj)/op_x86_model.h @ln -sf ../../i386/oprofile/op_x86_model.h $(obj)/op_x86_model.h
clean-files += op_x86_model.h op_counter.h init.c \ clean-files += op_x86_model.h op_counter.h init.c \
op_model_athlon.c nmi_int.c op_model_athlon.c nmi_int.c nmi_timer_int.c
...@@ -77,6 +77,8 @@ extern void setup_secondary_APIC_clock (void); ...@@ -77,6 +77,8 @@ extern void setup_secondary_APIC_clock (void);
extern void setup_apic_nmi_watchdog (void); extern void setup_apic_nmi_watchdog (void);
extern void disable_lapic_nmi_watchdog(void); extern void disable_lapic_nmi_watchdog(void);
extern void enable_lapic_nmi_watchdog(void); extern void enable_lapic_nmi_watchdog(void);
extern void disable_timer_nmi_watchdog(void);
extern void enable_timer_nmi_watchdog(void);
extern inline void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason); extern inline void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason);
extern int APIC_init_uniprocessor (void); extern int APIC_init_uniprocessor (void);
extern void disable_APIC_timer(void); extern void disable_APIC_timer(void);
......
...@@ -22,25 +22,44 @@ ...@@ -22,25 +22,44 @@
/* /*
* The structure of the IO-APIC: * The structure of the IO-APIC:
*/ */
struct IO_APIC_reg_00 { union IO_APIC_reg_00 {
__u32 __reserved_2 : 24, u32 raw;
ID : 4, struct {
__reserved_1 : 4; u32 __reserved_2 : 14,
} __attribute__ ((packed)); LTS : 1,
delivery_type : 1,
__reserved_1 : 8,
ID : 8;
} __attribute__ ((packed)) bits;
};
struct IO_APIC_reg_01 { union IO_APIC_reg_01 {
__u32 version : 8, u32 raw;
struct {
u32 version : 8,
__reserved_2 : 7, __reserved_2 : 7,
PRQ : 1, PRQ : 1,
entries : 8, entries : 8,
__reserved_1 : 8; __reserved_1 : 8;
} __attribute__ ((packed)); } __attribute__ ((packed)) bits;
};
struct IO_APIC_reg_02 { union IO_APIC_reg_02 {
__u32 __reserved_2 : 24, u32 raw;
struct {
u32 __reserved_2 : 24,
arbitration : 4, arbitration : 4,
__reserved_1 : 4; __reserved_1 : 4;
} __attribute__ ((packed)); } __attribute__ ((packed)) bits;
};
union IO_APIC_reg_03 {
u32 raw;
struct {
u32 boot_DT : 1,
__reserved_1 : 31;
} __attribute__ ((packed)) bits;
};
/* /*
* # of IO-APICs and # of IRQ routing registers * # of IO-APICs and # of IRQ routing registers
......
...@@ -46,4 +46,6 @@ static inline void unset_nmi_pm_callback(struct pm_dev * dev) ...@@ -46,4 +46,6 @@ static inline void unset_nmi_pm_callback(struct pm_dev * dev)
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
extern void default_do_nmi(struct pt_regs *);
#endif /* ASM_NMI_H */ #endif /* ASM_NMI_H */
...@@ -261,14 +261,6 @@ pci_dac_dma_sync_single(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, ...@@ -261,14 +261,6 @@ pci_dac_dma_sync_single(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len,
flush_write_buffers(); flush_write_buffers();
} }
/* These macros should be used after a pci_map_sg call has been done
* to get bus addresses of each of the SG entries and their lengths.
* You should only work with the number of sg entries pci_map_sg
* returns.
*/
#define sg_dma_address(sg) ((sg)->dma_address)
#define sg_dma_len(sg) ((sg)->length)
#define HAVE_PCI_MMAP #define HAVE_PCI_MMAP
extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state, int write_combine); enum pci_mmap_state mmap_state, int write_combine);
......
...@@ -34,10 +34,6 @@ ...@@ -34,10 +34,6 @@
#define PTRACE_OLDSETOPTIONS 21 #define PTRACE_OLDSETOPTIONS 21
/* Dummy values for ptrace */
#define FS 1000
#define GS 1008
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
struct pt_regs { struct pt_regs {
......
...@@ -10,4 +10,12 @@ struct scatterlist { ...@@ -10,4 +10,12 @@ struct scatterlist {
#define ISA_DMA_THRESHOLD (0x00ffffff) #define ISA_DMA_THRESHOLD (0x00ffffff)
/* These macros should be used after a pci_map_sg call has been done
* to get bus addresses of each of the SG entries and their lengths.
* You should only work with the number of sg entries pci_map_sg
* returns.
*/
#define sg_dma_address(sg) ((sg)->dma_address)
#define sg_dma_len(sg) ((sg)->length)
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment