aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386
diff options
context:
space:
mode:
Diffstat (limited to 'arch/i386')
-rw-r--r--arch/i386/defconfig41
-rw-r--r--arch/i386/kernel/apic.c18
-rw-r--r--arch/i386/kernel/i8259.c4
-rw-r--r--arch/i386/kernel/io_apic.c12
-rw-r--r--arch/i386/kernel/irq.c12
-rw-r--r--arch/i386/kernel/process.c6
-rw-r--r--arch/i386/kernel/smp.c6
-rw-r--r--arch/i386/kernel/time.c10
-rw-r--r--arch/i386/kernel/time_hpet.c4
-rw-r--r--arch/i386/kernel/vm86.c2
-rw-r--r--arch/i386/lib/semaphore.S3
-rw-r--r--arch/i386/mach-visws/visws_apic.c4
-rw-r--r--arch/i386/mach-voyager/voyager_basic.c2
-rw-r--r--arch/i386/mach-voyager/voyager_smp.c28
-rw-r--r--arch/i386/pci/direct.c2
-rw-r--r--arch/i386/pci/init.c4
-rw-r--r--arch/i386/pci/irq.c4
17 files changed, 107 insertions, 55 deletions
diff --git a/arch/i386/defconfig b/arch/i386/defconfig
index ee2d79bd8af7..60c0c02574f0 100644
--- a/arch/i386/defconfig
+++ b/arch/i386/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.18-git7 3# Linux kernel version: 2.6.19-rc1
4# Wed Sep 27 21:53:10 2006 4# Thu Oct 5 13:04:53 2006
5# 5#
6CONFIG_X86_32=y 6CONFIG_X86_32=y
7CONFIG_GENERIC_TIME=y 7CONFIG_GENERIC_TIME=y
@@ -31,9 +31,11 @@ CONFIG_LOCALVERSION=""
31CONFIG_LOCALVERSION_AUTO=y 31CONFIG_LOCALVERSION_AUTO=y
32CONFIG_SWAP=y 32CONFIG_SWAP=y
33CONFIG_SYSVIPC=y 33CONFIG_SYSVIPC=y
34# CONFIG_IPC_NS is not set
34CONFIG_POSIX_MQUEUE=y 35CONFIG_POSIX_MQUEUE=y
35# CONFIG_BSD_PROCESS_ACCT is not set 36# CONFIG_BSD_PROCESS_ACCT is not set
36# CONFIG_TASKSTATS is not set 37# CONFIG_TASKSTATS is not set
38# CONFIG_UTS_NS is not set
37# CONFIG_AUDIT is not set 39# CONFIG_AUDIT is not set
38CONFIG_IKCONFIG=y 40CONFIG_IKCONFIG=y
39CONFIG_IKCONFIG_PROC=y 41CONFIG_IKCONFIG_PROC=y
@@ -41,9 +43,10 @@ CONFIG_IKCONFIG_PROC=y
41# CONFIG_RELAY is not set 43# CONFIG_RELAY is not set
42CONFIG_INITRAMFS_SOURCE="" 44CONFIG_INITRAMFS_SOURCE=""
43CONFIG_CC_OPTIMIZE_FOR_SIZE=y 45CONFIG_CC_OPTIMIZE_FOR_SIZE=y
46CONFIG_SYSCTL=y
44# CONFIG_EMBEDDED is not set 47# CONFIG_EMBEDDED is not set
45CONFIG_UID16=y 48CONFIG_UID16=y
46CONFIG_SYSCTL=y 49# CONFIG_SYSCTL_SYSCALL is not set
47CONFIG_KALLSYMS=y 50CONFIG_KALLSYMS=y
48CONFIG_KALLSYMS_ALL=y 51CONFIG_KALLSYMS_ALL=y
49# CONFIG_KALLSYMS_EXTRA_PASS is not set 52# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -76,6 +79,7 @@ CONFIG_STOP_MACHINE=y
76# 79#
77# Block layer 80# Block layer
78# 81#
82CONFIG_BLOCK=y
79CONFIG_LBD=y 83CONFIG_LBD=y
80# CONFIG_BLK_DEV_IO_TRACE is not set 84# CONFIG_BLK_DEV_IO_TRACE is not set
81# CONFIG_LSF is not set 85# CONFIG_LSF is not set
@@ -163,6 +167,7 @@ CONFIG_VM86=y
163# CONFIG_I8K is not set 167# CONFIG_I8K is not set
164# CONFIG_X86_REBOOTFIXUPS is not set 168# CONFIG_X86_REBOOTFIXUPS is not set
165CONFIG_MICROCODE=y 169CONFIG_MICROCODE=y
170CONFIG_MICROCODE_OLD_INTERFACE=y
166CONFIG_X86_MSR=y 171CONFIG_X86_MSR=y
167CONFIG_X86_CPUID=y 172CONFIG_X86_CPUID=y
168 173
@@ -177,6 +182,7 @@ CONFIG_HIGHMEM4G=y
177# CONFIG_HIGHMEM64G is not set 182# CONFIG_HIGHMEM64G is not set
178CONFIG_PAGE_OFFSET=0xC0000000 183CONFIG_PAGE_OFFSET=0xC0000000
179CONFIG_HIGHMEM=y 184CONFIG_HIGHMEM=y
185CONFIG_ARCH_POPULATES_NODE_MAP=y
180CONFIG_SELECT_MEMORY_MODEL=y 186CONFIG_SELECT_MEMORY_MODEL=y
181CONFIG_FLATMEM_MANUAL=y 187CONFIG_FLATMEM_MANUAL=y
182# CONFIG_DISCONTIGMEM_MANUAL is not set 188# CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -295,6 +301,7 @@ CONFIG_PCI_MMCONFIG=y
295CONFIG_PCI_MSI=y 301CONFIG_PCI_MSI=y
296# CONFIG_PCI_MULTITHREAD_PROBE is not set 302# CONFIG_PCI_MULTITHREAD_PROBE is not set
297# CONFIG_PCI_DEBUG is not set 303# CONFIG_PCI_DEBUG is not set
304# CONFIG_HT_IRQ is not set
298CONFIG_ISA_DMA_API=y 305CONFIG_ISA_DMA_API=y
299# CONFIG_ISA is not set 306# CONFIG_ISA is not set
300# CONFIG_MCA is not set 307# CONFIG_MCA is not set
@@ -354,6 +361,7 @@ CONFIG_IP_PNP_DHCP=y
354# CONFIG_INET_TUNNEL is not set 361# CONFIG_INET_TUNNEL is not set
355CONFIG_INET_XFRM_MODE_TRANSPORT=y 362CONFIG_INET_XFRM_MODE_TRANSPORT=y
356CONFIG_INET_XFRM_MODE_TUNNEL=y 363CONFIG_INET_XFRM_MODE_TUNNEL=y
364# CONFIG_INET_XFRM_MODE_BEET is not set
357CONFIG_INET_DIAG=y 365CONFIG_INET_DIAG=y
358CONFIG_INET_TCP_DIAG=y 366CONFIG_INET_TCP_DIAG=y
359# CONFIG_TCP_CONG_ADVANCED is not set 367# CONFIG_TCP_CONG_ADVANCED is not set
@@ -370,6 +378,7 @@ CONFIG_IPV6=y
370# CONFIG_INET6_TUNNEL is not set 378# CONFIG_INET6_TUNNEL is not set
371CONFIG_INET6_XFRM_MODE_TRANSPORT=y 379CONFIG_INET6_XFRM_MODE_TRANSPORT=y
372CONFIG_INET6_XFRM_MODE_TUNNEL=y 380CONFIG_INET6_XFRM_MODE_TUNNEL=y
381# CONFIG_INET6_XFRM_MODE_BEET is not set
373# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set 382# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
374# CONFIG_IPV6_TUNNEL is not set 383# CONFIG_IPV6_TUNNEL is not set
375# CONFIG_IPV6_SUBTREES is not set 384# CONFIG_IPV6_SUBTREES is not set
@@ -519,6 +528,7 @@ CONFIG_BLK_DEV_AMD74XX=y
519# CONFIG_BLK_DEV_CS5535 is not set 528# CONFIG_BLK_DEV_CS5535 is not set
520# CONFIG_BLK_DEV_HPT34X is not set 529# CONFIG_BLK_DEV_HPT34X is not set
521# CONFIG_BLK_DEV_HPT366 is not set 530# CONFIG_BLK_DEV_HPT366 is not set
531# CONFIG_BLK_DEV_JMICRON is not set
522# CONFIG_BLK_DEV_SC1200 is not set 532# CONFIG_BLK_DEV_SC1200 is not set
523CONFIG_BLK_DEV_PIIX=y 533CONFIG_BLK_DEV_PIIX=y
524# CONFIG_BLK_DEV_IT821X is not set 534# CONFIG_BLK_DEV_IT821X is not set
@@ -615,6 +625,7 @@ CONFIG_AIC79XX_DEBUG_MASK=0
615# CONFIG_SCSI_IPR is not set 625# CONFIG_SCSI_IPR is not set
616# CONFIG_SCSI_QLOGIC_1280 is not set 626# CONFIG_SCSI_QLOGIC_1280 is not set
617# CONFIG_SCSI_QLA_FC is not set 627# CONFIG_SCSI_QLA_FC is not set
628# CONFIG_SCSI_QLA_ISCSI is not set
618# CONFIG_SCSI_LPFC is not set 629# CONFIG_SCSI_LPFC is not set
619# CONFIG_SCSI_DC395x is not set 630# CONFIG_SCSI_DC395x is not set
620# CONFIG_SCSI_DC390T is not set 631# CONFIG_SCSI_DC390T is not set
@@ -658,7 +669,6 @@ CONFIG_SATA_INTEL_COMBINED=y
658# CONFIG_PATA_HPT3X3 is not set 669# CONFIG_PATA_HPT3X3 is not set
659# CONFIG_PATA_IT821X is not set 670# CONFIG_PATA_IT821X is not set
660# CONFIG_PATA_JMICRON is not set 671# CONFIG_PATA_JMICRON is not set
661# CONFIG_PATA_LEGACY is not set
662# CONFIG_PATA_TRIFLEX is not set 672# CONFIG_PATA_TRIFLEX is not set
663# CONFIG_PATA_MPIIX is not set 673# CONFIG_PATA_MPIIX is not set
664# CONFIG_PATA_OLDPIIX is not set 674# CONFIG_PATA_OLDPIIX is not set
@@ -667,7 +677,6 @@ CONFIG_SATA_INTEL_COMBINED=y
667# CONFIG_PATA_OPTI is not set 677# CONFIG_PATA_OPTI is not set
668# CONFIG_PATA_OPTIDMA is not set 678# CONFIG_PATA_OPTIDMA is not set
669# CONFIG_PATA_PDC_OLD is not set 679# CONFIG_PATA_PDC_OLD is not set
670# CONFIG_PATA_QDI is not set
671# CONFIG_PATA_RADISYS is not set 680# CONFIG_PATA_RADISYS is not set
672# CONFIG_PATA_RZ1000 is not set 681# CONFIG_PATA_RZ1000 is not set
673# CONFIG_PATA_SC1200 is not set 682# CONFIG_PATA_SC1200 is not set
@@ -684,6 +693,7 @@ CONFIG_SATA_INTEL_COMBINED=y
684CONFIG_MD=y 693CONFIG_MD=y
685# CONFIG_BLK_DEV_MD is not set 694# CONFIG_BLK_DEV_MD is not set
686CONFIG_BLK_DEV_DM=y 695CONFIG_BLK_DEV_DM=y
696# CONFIG_DM_DEBUG is not set
687# CONFIG_DM_CRYPT is not set 697# CONFIG_DM_CRYPT is not set
688# CONFIG_DM_SNAPSHOT is not set 698# CONFIG_DM_SNAPSHOT is not set
689# CONFIG_DM_MIRROR is not set 699# CONFIG_DM_MIRROR is not set
@@ -874,6 +884,7 @@ CONFIG_NET_POLL_CONTROLLER=y
874# Input device support 884# Input device support
875# 885#
876CONFIG_INPUT=y 886CONFIG_INPUT=y
887# CONFIG_INPUT_FF_MEMLESS is not set
877 888
878# 889#
879# Userland interfaces 890# Userland interfaces
@@ -896,6 +907,7 @@ CONFIG_KEYBOARD_ATKBD=y
896# CONFIG_KEYBOARD_LKKBD is not set 907# CONFIG_KEYBOARD_LKKBD is not set
897# CONFIG_KEYBOARD_XTKBD is not set 908# CONFIG_KEYBOARD_XTKBD is not set
898# CONFIG_KEYBOARD_NEWTON is not set 909# CONFIG_KEYBOARD_NEWTON is not set
910# CONFIG_KEYBOARD_STOWAWAY is not set
899CONFIG_INPUT_MOUSE=y 911CONFIG_INPUT_MOUSE=y
900CONFIG_MOUSE_PS2=y 912CONFIG_MOUSE_PS2=y
901# CONFIG_MOUSE_SERIAL is not set 913# CONFIG_MOUSE_SERIAL is not set
@@ -1023,12 +1035,12 @@ CONFIG_HANGCHECK_TIMER=y
1023# Misc devices 1035# Misc devices
1024# 1036#
1025# CONFIG_IBM_ASM is not set 1037# CONFIG_IBM_ASM is not set
1038# CONFIG_TIFM_CORE is not set
1026 1039
1027# 1040#
1028# Multimedia devices 1041# Multimedia devices
1029# 1042#
1030# CONFIG_VIDEO_DEV is not set 1043# CONFIG_VIDEO_DEV is not set
1031CONFIG_VIDEO_V4L2=y
1032 1044
1033# 1045#
1034# Digital Video Broadcasting Devices 1046# Digital Video Broadcasting Devices
@@ -1134,6 +1146,7 @@ CONFIG_USB_STORAGE=y
1134# CONFIG_USB_STORAGE_SDDR55 is not set 1146# CONFIG_USB_STORAGE_SDDR55 is not set
1135# CONFIG_USB_STORAGE_JUMPSHOT is not set 1147# CONFIG_USB_STORAGE_JUMPSHOT is not set
1136# CONFIG_USB_STORAGE_ALAUDA is not set 1148# CONFIG_USB_STORAGE_ALAUDA is not set
1149# CONFIG_USB_STORAGE_KARMA is not set
1137# CONFIG_USB_LIBUSUAL is not set 1150# CONFIG_USB_LIBUSUAL is not set
1138 1151
1139# 1152#
@@ -1156,6 +1169,7 @@ CONFIG_USB_HIDINPUT=y
1156# CONFIG_USB_ATI_REMOTE2 is not set 1169# CONFIG_USB_ATI_REMOTE2 is not set
1157# CONFIG_USB_KEYSPAN_REMOTE is not set 1170# CONFIG_USB_KEYSPAN_REMOTE is not set
1158# CONFIG_USB_APPLETOUCH is not set 1171# CONFIG_USB_APPLETOUCH is not set
1172# CONFIG_USB_TRANCEVIBRATOR is not set
1159 1173
1160# 1174#
1161# USB Imaging devices 1175# USB Imaging devices
@@ -1187,6 +1201,7 @@ CONFIG_USB_MON=y
1187# 1201#
1188# CONFIG_USB_EMI62 is not set 1202# CONFIG_USB_EMI62 is not set
1189# CONFIG_USB_EMI26 is not set 1203# CONFIG_USB_EMI26 is not set
1204# CONFIG_USB_ADUTUX is not set
1190# CONFIG_USB_AUERSWALD is not set 1205# CONFIG_USB_AUERSWALD is not set
1191# CONFIG_USB_RIO500 is not set 1206# CONFIG_USB_RIO500 is not set
1192# CONFIG_USB_LEGOTOWER is not set 1207# CONFIG_USB_LEGOTOWER is not set
@@ -1194,9 +1209,9 @@ CONFIG_USB_MON=y
1194# CONFIG_USB_LED is not set 1209# CONFIG_USB_LED is not set
1195# CONFIG_USB_CYPRESS_CY7C63 is not set 1210# CONFIG_USB_CYPRESS_CY7C63 is not set
1196# CONFIG_USB_CYTHERM is not set 1211# CONFIG_USB_CYTHERM is not set
1197# CONFIG_USB_PHIDGETKIT is not set 1212# CONFIG_USB_PHIDGET is not set
1198# CONFIG_USB_PHIDGETSERVO is not set
1199# CONFIG_USB_IDMOUSE is not set 1213# CONFIG_USB_IDMOUSE is not set
1214# CONFIG_USB_FTDI_ELAN is not set
1200# CONFIG_USB_APPLEDISPLAY is not set 1215# CONFIG_USB_APPLEDISPLAY is not set
1201# CONFIG_USB_SISUSBVGA is not set 1216# CONFIG_USB_SISUSBVGA is not set
1202# CONFIG_USB_LD is not set 1217# CONFIG_USB_LD is not set
@@ -1281,6 +1296,7 @@ CONFIG_REISERFS_FS_POSIX_ACL=y
1281# CONFIG_JFS_FS is not set 1296# CONFIG_JFS_FS is not set
1282CONFIG_FS_POSIX_ACL=y 1297CONFIG_FS_POSIX_ACL=y
1283# CONFIG_XFS_FS is not set 1298# CONFIG_XFS_FS is not set
1299# CONFIG_GFS2_FS is not set
1284# CONFIG_OCFS2_FS is not set 1300# CONFIG_OCFS2_FS is not set
1285# CONFIG_MINIX_FS is not set 1301# CONFIG_MINIX_FS is not set
1286# CONFIG_ROMFS_FS is not set 1302# CONFIG_ROMFS_FS is not set
@@ -1315,8 +1331,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1315# 1331#
1316CONFIG_PROC_FS=y 1332CONFIG_PROC_FS=y
1317CONFIG_PROC_KCORE=y 1333CONFIG_PROC_KCORE=y
1334CONFIG_PROC_SYSCTL=y
1318CONFIG_SYSFS=y 1335CONFIG_SYSFS=y
1319CONFIG_TMPFS=y 1336CONFIG_TMPFS=y
1337CONFIG_TMPFS_POSIX_ACL=y
1320CONFIG_HUGETLBFS=y 1338CONFIG_HUGETLBFS=y
1321CONFIG_HUGETLB_PAGE=y 1339CONFIG_HUGETLB_PAGE=y
1322CONFIG_RAMFS=y 1340CONFIG_RAMFS=y
@@ -1366,6 +1384,7 @@ CONFIG_SUNRPC=y
1366# CONFIG_CODA_FS is not set 1384# CONFIG_CODA_FS is not set
1367# CONFIG_AFS_FS is not set 1385# CONFIG_AFS_FS is not set
1368# CONFIG_9P_FS is not set 1386# CONFIG_9P_FS is not set
1387CONFIG_GENERIC_ACL=y
1369 1388
1370# 1389#
1371# Partition Types 1390# Partition Types
@@ -1418,6 +1437,10 @@ CONFIG_NLS_ISO8859_15=y
1418CONFIG_NLS_UTF8=y 1437CONFIG_NLS_UTF8=y
1419 1438
1420# 1439#
1440# Distributed Lock Manager
1441#
1442
1443#
1421# Instrumentation Support 1444# Instrumentation Support
1422# 1445#
1423CONFIG_PROFILING=y 1446CONFIG_PROFILING=y
@@ -1452,11 +1475,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
1452# CONFIG_DEBUG_INFO is not set 1475# CONFIG_DEBUG_INFO is not set
1453# CONFIG_DEBUG_FS is not set 1476# CONFIG_DEBUG_FS is not set
1454# CONFIG_DEBUG_VM is not set 1477# CONFIG_DEBUG_VM is not set
1478# CONFIG_DEBUG_LIST is not set
1455# CONFIG_FRAME_POINTER is not set 1479# CONFIG_FRAME_POINTER is not set
1456CONFIG_UNWIND_INFO=y 1480CONFIG_UNWIND_INFO=y
1457CONFIG_STACK_UNWIND=y 1481CONFIG_STACK_UNWIND=y
1458# CONFIG_FORCED_INLINING is not set 1482# CONFIG_FORCED_INLINING is not set
1459# CONFIG_RCU_TORTURE_TEST is not set 1483# CONFIG_RCU_TORTURE_TEST is not set
1484# CONFIG_LKDTM is not set
1460CONFIG_EARLY_PRINTK=y 1485CONFIG_EARLY_PRINTK=y
1461CONFIG_DEBUG_STACKOVERFLOW=y 1486CONFIG_DEBUG_STACKOVERFLOW=y
1462# CONFIG_DEBUG_STACK_USAGE is not set 1487# CONFIG_DEBUG_STACK_USAGE is not set
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c
index 90faae5c5d30..2fd4b7d927c2 100644
--- a/arch/i386/kernel/apic.c
+++ b/arch/i386/kernel/apic.c
@@ -1193,11 +1193,11 @@ EXPORT_SYMBOL(switch_ipi_to_APIC_timer);
1193 * value into /proc/profile. 1193 * value into /proc/profile.
1194 */ 1194 */
1195 1195
1196inline void smp_local_timer_interrupt(struct pt_regs * regs) 1196inline void smp_local_timer_interrupt(void)
1197{ 1197{
1198 profile_tick(CPU_PROFILING, regs); 1198 profile_tick(CPU_PROFILING);
1199#ifdef CONFIG_SMP 1199#ifdef CONFIG_SMP
1200 update_process_times(user_mode_vm(regs)); 1200 update_process_times(user_mode_vm(get_irq_regs()));
1201#endif 1201#endif
1202 1202
1203 /* 1203 /*
@@ -1223,6 +1223,7 @@ inline void smp_local_timer_interrupt(struct pt_regs * regs)
1223 1223
1224fastcall void smp_apic_timer_interrupt(struct pt_regs *regs) 1224fastcall void smp_apic_timer_interrupt(struct pt_regs *regs)
1225{ 1225{
1226 struct pt_regs *old_regs = set_irq_regs(regs);
1226 int cpu = smp_processor_id(); 1227 int cpu = smp_processor_id();
1227 1228
1228 /* 1229 /*
@@ -1241,12 +1242,13 @@ fastcall void smp_apic_timer_interrupt(struct pt_regs *regs)
1241 * interrupt lock, which is the WrongThing (tm) to do. 1242 * interrupt lock, which is the WrongThing (tm) to do.
1242 */ 1243 */
1243 irq_enter(); 1244 irq_enter();
1244 smp_local_timer_interrupt(regs); 1245 smp_local_timer_interrupt();
1245 irq_exit(); 1246 irq_exit();
1247 set_irq_regs(old_regs);
1246} 1248}
1247 1249
1248#ifndef CONFIG_SMP 1250#ifndef CONFIG_SMP
1249static void up_apic_timer_interrupt_call(struct pt_regs *regs) 1251static void up_apic_timer_interrupt_call(void)
1250{ 1252{
1251 int cpu = smp_processor_id(); 1253 int cpu = smp_processor_id();
1252 1254
@@ -1255,11 +1257,11 @@ static void up_apic_timer_interrupt_call(struct pt_regs *regs)
1255 */ 1257 */
1256 per_cpu(irq_stat, cpu).apic_timer_irqs++; 1258 per_cpu(irq_stat, cpu).apic_timer_irqs++;
1257 1259
1258 smp_local_timer_interrupt(regs); 1260 smp_local_timer_interrupt();
1259} 1261}
1260#endif 1262#endif
1261 1263
1262void smp_send_timer_broadcast_ipi(struct pt_regs *regs) 1264void smp_send_timer_broadcast_ipi(void)
1263{ 1265{
1264 cpumask_t mask; 1266 cpumask_t mask;
1265 1267
@@ -1272,7 +1274,7 @@ void smp_send_timer_broadcast_ipi(struct pt_regs *regs)
1272 * We can directly call the apic timer interrupt handler 1274 * We can directly call the apic timer interrupt handler
1273 * in UP case. Minus all irq related functions 1275 * in UP case. Minus all irq related functions
1274 */ 1276 */
1275 up_apic_timer_interrupt_call(regs); 1277 up_apic_timer_interrupt_call();
1276#endif 1278#endif
1277 } 1279 }
1278} 1280}
diff --git a/arch/i386/kernel/i8259.c b/arch/i386/kernel/i8259.c
index d07ed31f11e3..d53eafb6daa7 100644
--- a/arch/i386/kernel/i8259.c
+++ b/arch/i386/kernel/i8259.c
@@ -335,13 +335,13 @@ void init_8259A(int auto_eoi)
335 */ 335 */
336 336
337 337
338static irqreturn_t math_error_irq(int cpl, void *dev_id, struct pt_regs *regs) 338static irqreturn_t math_error_irq(int cpl, void *dev_id)
339{ 339{
340 extern void math_error(void __user *); 340 extern void math_error(void __user *);
341 outb(0,0xF0); 341 outb(0,0xF0);
342 if (ignore_fpu_irq || !boot_cpu_data.hard_math) 342 if (ignore_fpu_irq || !boot_cpu_data.hard_math)
343 return IRQ_NONE; 343 return IRQ_NONE;
344 math_error((void __user *)regs->eip); 344 math_error((void __user *)get_irq_regs()->eip);
345 return IRQ_HANDLED; 345 return IRQ_HANDLED;
346} 346}
347 347
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
index b7287fb499f3..cd082c36ca03 100644
--- a/arch/i386/kernel/io_apic.c
+++ b/arch/i386/kernel/io_apic.c
@@ -1184,8 +1184,8 @@ static int __assign_irq_vector(int irq)
1184 1184
1185 BUG_ON((unsigned)irq >= NR_IRQ_VECTORS); 1185 BUG_ON((unsigned)irq >= NR_IRQ_VECTORS);
1186 1186
1187 if (IO_APIC_VECTOR(irq) > 0) 1187 if (irq_vector[irq] > 0)
1188 return IO_APIC_VECTOR(irq); 1188 return irq_vector[irq];
1189 1189
1190 current_vector += 8; 1190 current_vector += 8;
1191 if (current_vector == SYSCALL_VECTOR) 1191 if (current_vector == SYSCALL_VECTOR)
@@ -1199,7 +1199,7 @@ static int __assign_irq_vector(int irq)
1199 } 1199 }
1200 1200
1201 vector = current_vector; 1201 vector = current_vector;
1202 IO_APIC_VECTOR(irq) = vector; 1202 irq_vector[irq] = vector;
1203 1203
1204 return vector; 1204 return vector;
1205} 1205}
@@ -1967,7 +1967,7 @@ static void ack_ioapic_quirk_irq(unsigned int irq)
1967 * operation to prevent an edge-triggered interrupt escaping meanwhile. 1967 * operation to prevent an edge-triggered interrupt escaping meanwhile.
1968 * The idea is from Manfred Spraul. --macro 1968 * The idea is from Manfred Spraul. --macro
1969 */ 1969 */
1970 i = IO_APIC_VECTOR(irq); 1970 i = irq_vector[irq];
1971 1971
1972 v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1)); 1972 v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1));
1973 1973
@@ -1984,7 +1984,7 @@ static void ack_ioapic_quirk_irq(unsigned int irq)
1984 1984
1985static int ioapic_retrigger_irq(unsigned int irq) 1985static int ioapic_retrigger_irq(unsigned int irq)
1986{ 1986{
1987 send_IPI_self(IO_APIC_VECTOR(irq)); 1987 send_IPI_self(irq_vector[irq]);
1988 1988
1989 return 1; 1989 return 1;
1990} 1990}
@@ -2020,7 +2020,7 @@ static inline void init_IO_APIC_traps(void)
2020 */ 2020 */
2021 for (irq = 0; irq < NR_IRQS ; irq++) { 2021 for (irq = 0; irq < NR_IRQS ; irq++) {
2022 int tmp = irq; 2022 int tmp = irq;
2023 if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) { 2023 if (IO_APIC_IRQ(tmp) && !irq_vector[tmp]) {
2024 /* 2024 /*
2025 * Hmm.. We don't have an entry for this, 2025 * Hmm.. We don't have an entry for this,
2026 * so default to an old-fashioned 8259 2026 * so default to an old-fashioned 8259
diff --git a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c
index 3dd2e180151b..8cfc7dbec7b9 100644
--- a/arch/i386/kernel/irq.c
+++ b/arch/i386/kernel/irq.c
@@ -53,6 +53,7 @@ static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly;
53 */ 53 */
54fastcall unsigned int do_IRQ(struct pt_regs *regs) 54fastcall unsigned int do_IRQ(struct pt_regs *regs)
55{ 55{
56 struct pt_regs *old_regs;
56 /* high bit used in ret_from_ code */ 57 /* high bit used in ret_from_ code */
57 int irq = ~regs->orig_eax; 58 int irq = ~regs->orig_eax;
58 struct irq_desc *desc = irq_desc + irq; 59 struct irq_desc *desc = irq_desc + irq;
@@ -67,6 +68,7 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
67 BUG(); 68 BUG();
68 } 69 }
69 70
71 old_regs = set_irq_regs(regs);
70 irq_enter(); 72 irq_enter();
71#ifdef CONFIG_DEBUG_STACKOVERFLOW 73#ifdef CONFIG_DEBUG_STACKOVERFLOW
72 /* Debugging check for stack overflow: is there less than 1KB free? */ 74 /* Debugging check for stack overflow: is there less than 1KB free? */
@@ -95,7 +97,7 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
95 * current stack (which is the irq stack already after all) 97 * current stack (which is the irq stack already after all)
96 */ 98 */
97 if (curctx != irqctx) { 99 if (curctx != irqctx) {
98 int arg1, arg2, arg3, ebx; 100 int arg1, arg2, ebx;
99 101
100 /* build the stack frame on the IRQ stack */ 102 /* build the stack frame on the IRQ stack */
101 isp = (u32*) ((char*)irqctx + sizeof(*irqctx)); 103 isp = (u32*) ((char*)irqctx + sizeof(*irqctx));
@@ -114,17 +116,17 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
114 " xchgl %%ebx,%%esp \n" 116 " xchgl %%ebx,%%esp \n"
115 " call *%%edi \n" 117 " call *%%edi \n"
116 " movl %%ebx,%%esp \n" 118 " movl %%ebx,%%esp \n"
117 : "=a" (arg1), "=d" (arg2), "=c" (arg3), "=b" (ebx) 119 : "=a" (arg1), "=d" (arg2), "=b" (ebx)
118 : "0" (irq), "1" (desc), "2" (regs), "3" (isp), 120 : "0" (irq), "1" (desc), "2" (isp),
119 "D" (desc->handle_irq) 121 "D" (desc->handle_irq)
120 : "memory", "cc" 122 : "memory", "cc"
121 ); 123 );
122 } else 124 } else
123#endif 125#endif
124 desc->handle_irq(irq, desc, regs); 126 desc->handle_irq(irq, desc);
125 127
126 irq_exit(); 128 irq_exit();
127 129 set_irq_regs(old_regs);
128 return 1; 130 return 1;
129} 131}
130 132
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
index dad02a960e03..b0a07801d9df 100644
--- a/arch/i386/kernel/process.c
+++ b/arch/i386/kernel/process.c
@@ -328,6 +328,7 @@ extern void kernel_thread_helper(void);
328int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) 328int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
329{ 329{
330 struct pt_regs regs; 330 struct pt_regs regs;
331 int err;
331 332
332 memset(&regs, 0, sizeof(regs)); 333 memset(&regs, 0, sizeof(regs));
333 334
@@ -342,7 +343,10 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
342 regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2; 343 regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2;
343 344
344 /* Ok, create the new process.. */ 345 /* Ok, create the new process.. */
345 return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, &regs, 0, NULL, NULL); 346 err = do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
347 if (err == 0) /* terminate kernel stack */
348 task_pt_regs(current)->eip = 0;
349 return err;
346} 350}
347EXPORT_SYMBOL(kernel_thread); 351EXPORT_SYMBOL(kernel_thread);
348 352
diff --git a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c
index 1b080ab8a49f..31e5c6573aae 100644
--- a/arch/i386/kernel/smp.c
+++ b/arch/i386/kernel/smp.c
@@ -321,6 +321,7 @@ static inline void leave_mm (unsigned long cpu)
321 321
322fastcall void smp_invalidate_interrupt(struct pt_regs *regs) 322fastcall void smp_invalidate_interrupt(struct pt_regs *regs)
323{ 323{
324 struct pt_regs *old_regs = set_irq_regs(regs);
324 unsigned long cpu; 325 unsigned long cpu;
325 326
326 cpu = get_cpu(); 327 cpu = get_cpu();
@@ -351,6 +352,7 @@ fastcall void smp_invalidate_interrupt(struct pt_regs *regs)
351 smp_mb__after_clear_bit(); 352 smp_mb__after_clear_bit();
352out: 353out:
353 put_cpu_no_resched(); 354 put_cpu_no_resched();
355 set_irq_regs(old_regs);
354} 356}
355 357
356static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm, 358static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
@@ -605,11 +607,14 @@ void smp_send_stop(void)
605 */ 607 */
606fastcall void smp_reschedule_interrupt(struct pt_regs *regs) 608fastcall void smp_reschedule_interrupt(struct pt_regs *regs)
607{ 609{
610 struct pt_regs *old_regs = set_irq_regs(regs);
608 ack_APIC_irq(); 611 ack_APIC_irq();
612 set_irq_regs(old_regs);
609} 613}
610 614
611fastcall void smp_call_function_interrupt(struct pt_regs *regs) 615fastcall void smp_call_function_interrupt(struct pt_regs *regs)
612{ 616{
617 struct pt_regs *old_regs = set_irq_regs(regs);
613 void (*func) (void *info) = call_data->func; 618 void (*func) (void *info) = call_data->func;
614 void *info = call_data->info; 619 void *info = call_data->info;
615 int wait = call_data->wait; 620 int wait = call_data->wait;
@@ -632,6 +637,7 @@ fastcall void smp_call_function_interrupt(struct pt_regs *regs)
632 mb(); 637 mb();
633 atomic_inc(&call_data->finished); 638 atomic_inc(&call_data->finished);
634 } 639 }
640 set_irq_regs(old_regs);
635} 641}
636 642
637/* 643/*
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c
index 58a2d5582419..78af572fd17c 100644
--- a/arch/i386/kernel/time.c
+++ b/arch/i386/kernel/time.c
@@ -161,7 +161,7 @@ EXPORT_SYMBOL(profile_pc);
161 * Time Stamp Counter value at the time of the timer interrupt, so that 161 * Time Stamp Counter value at the time of the timer interrupt, so that
162 * we later on can estimate the time of day more exactly. 162 * we later on can estimate the time of day more exactly.
163 */ 163 */
164irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 164irqreturn_t timer_interrupt(int irq, void *dev_id)
165{ 165{
166 /* 166 /*
167 * Here we are in the timer irq handler. We just have irqs locally 167 * Here we are in the timer irq handler. We just have irqs locally
@@ -188,7 +188,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
188 } 188 }
189#endif 189#endif
190 190
191 do_timer_interrupt_hook(regs); 191 do_timer_interrupt_hook();
192 192
193 193
194 if (MCA_bus) { 194 if (MCA_bus) {
@@ -201,15 +201,15 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
201 high bit of the PPI port B (0x61). Note that some PS/2s, 201 high bit of the PPI port B (0x61). Note that some PS/2s,
202 notably the 55SX, work fine if this is removed. */ 202 notably the 55SX, work fine if this is removed. */
203 203
204 irq = inb_p( 0x61 ); /* read the current state */ 204 u8 irq_v = inb_p( 0x61 ); /* read the current state */
205 outb_p( irq|0x80, 0x61 ); /* reset the IRQ */ 205 outb_p( irq_v|0x80, 0x61 ); /* reset the IRQ */
206 } 206 }
207 207
208 write_sequnlock(&xtime_lock); 208 write_sequnlock(&xtime_lock);
209 209
210#ifdef CONFIG_X86_LOCAL_APIC 210#ifdef CONFIG_X86_LOCAL_APIC
211 if (using_apic_timer) 211 if (using_apic_timer)
212 smp_send_timer_broadcast_ipi(regs); 212 smp_send_timer_broadcast_ipi();
213#endif 213#endif
214 214
215 return IRQ_HANDLED; 215 return IRQ_HANDLED;
diff --git a/arch/i386/kernel/time_hpet.c b/arch/i386/kernel/time_hpet.c
index 6bf14a4e995e..1a2a979cf6a3 100644
--- a/arch/i386/kernel/time_hpet.c
+++ b/arch/i386/kernel/time_hpet.c
@@ -441,7 +441,7 @@ int hpet_rtc_dropped_irq(void)
441 return 1; 441 return 1;
442} 442}
443 443
444irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) 444irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id)
445{ 445{
446 struct rtc_time curr_time; 446 struct rtc_time curr_time;
447 unsigned long rtc_int_flag = 0; 447 unsigned long rtc_int_flag = 0;
@@ -480,7 +480,7 @@ irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
480 } 480 }
481 if (call_rtc_interrupt) { 481 if (call_rtc_interrupt) {
482 rtc_int_flag |= (RTC_IRQF | (RTC_NUM_INTS << 8)); 482 rtc_int_flag |= (RTC_IRQF | (RTC_NUM_INTS << 8));
483 rtc_interrupt(rtc_int_flag, dev_id, regs); 483 rtc_interrupt(rtc_int_flag, dev_id);
484 } 484 }
485 return IRQ_HANDLED; 485 return IRQ_HANDLED;
486} 486}
diff --git a/arch/i386/kernel/vm86.c b/arch/i386/kernel/vm86.c
index 8355d8d87d18..cbcd61d6120b 100644
--- a/arch/i386/kernel/vm86.c
+++ b/arch/i386/kernel/vm86.c
@@ -714,7 +714,7 @@ static int irqbits;
714 | (1 << SIGUSR1) | (1 << SIGUSR2) | (1 << SIGIO) | (1 << SIGURG) \ 714 | (1 << SIGUSR1) | (1 << SIGUSR2) | (1 << SIGIO) | (1 << SIGURG) \
715 | (1 << SIGUNUSED) ) 715 | (1 << SIGUNUSED) )
716 716
717static irqreturn_t irq_handler(int intno, void *dev_id, struct pt_regs * regs) 717static irqreturn_t irq_handler(int intno, void *dev_id)
718{ 718{
719 int irq_bit; 719 int irq_bit;
720 unsigned long flags; 720 unsigned long flags;
diff --git a/arch/i386/lib/semaphore.S b/arch/i386/lib/semaphore.S
index ef6ad9e1a609..c01eb39c0b43 100644
--- a/arch/i386/lib/semaphore.S
+++ b/arch/i386/lib/semaphore.S
@@ -152,6 +152,8 @@ ENTRY(__read_lock_failed)
152 152
153#endif 153#endif
154 154
155#ifdef CONFIG_RWSEM_XCHGADD_ALGORITHM
156
155/* Fix up special calling conventions */ 157/* Fix up special calling conventions */
156ENTRY(call_rwsem_down_read_failed) 158ENTRY(call_rwsem_down_read_failed)
157 CFI_STARTPROC 159 CFI_STARTPROC
@@ -214,3 +216,4 @@ ENTRY(call_rwsem_downgrade_wake)
214 CFI_ENDPROC 216 CFI_ENDPROC
215 END(call_rwsem_downgrade_wake) 217 END(call_rwsem_downgrade_wake)
216 218
219#endif
diff --git a/arch/i386/mach-visws/visws_apic.c b/arch/i386/mach-visws/visws_apic.c
index 5929f884d79b..07097ed48890 100644
--- a/arch/i386/mach-visws/visws_apic.c
+++ b/arch/i386/mach-visws/visws_apic.c
@@ -191,7 +191,7 @@ static struct hw_interrupt_type piix4_virtual_irq_type = {
191 * enable_irq gets the right irq. This 'master' irq is never directly 191 * enable_irq gets the right irq. This 'master' irq is never directly
192 * manipulated by any driver. 192 * manipulated by any driver.
193 */ 193 */
194static irqreturn_t piix4_master_intr(int irq, void *dev_id, struct pt_regs * regs) 194static irqreturn_t piix4_master_intr(int irq, void *dev_id)
195{ 195{
196 int realirq; 196 int realirq;
197 irq_desc_t *desc; 197 irq_desc_t *desc;
@@ -244,7 +244,7 @@ static irqreturn_t piix4_master_intr(int irq, void *dev_id, struct pt_regs * reg
244 kstat_cpu(smp_processor_id()).irqs[realirq]++; 244 kstat_cpu(smp_processor_id()).irqs[realirq]++;
245 245
246 if (likely(desc->action != NULL)) 246 if (likely(desc->action != NULL))
247 handle_IRQ_event(realirq, regs, desc->action); 247 handle_IRQ_event(realirq, desc->action);
248 248
249 if (!(desc->status & IRQ_DISABLED)) 249 if (!(desc->status & IRQ_DISABLED))
250 enable_8259A_irq(realirq); 250 enable_8259A_irq(realirq);
diff --git a/arch/i386/mach-voyager/voyager_basic.c b/arch/i386/mach-voyager/voyager_basic.c
index 80b7f2fc4f46..c639d30d8bdc 100644
--- a/arch/i386/mach-voyager/voyager_basic.c
+++ b/arch/i386/mach-voyager/voyager_basic.c
@@ -87,7 +87,7 @@ voyager_detect(struct voyager_bios_info *bios)
87} 87}
88 88
89void 89void
90voyager_system_interrupt(int cpl, void *dev_id, struct pt_regs *regs) 90voyager_system_interrupt(int cpl, void *dev_id)
91{ 91{
92 printk("Voyager: detected system interrupt\n"); 92 printk("Voyager: detected system interrupt\n");
93} 93}
diff --git a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c
index 856c73fcb7e7..d42422fc4af3 100644
--- a/arch/i386/mach-voyager/voyager_smp.c
+++ b/arch/i386/mach-voyager/voyager_smp.c
@@ -126,10 +126,10 @@ send_QIC_CPI(__u32 cpuset, __u8 cpi)
126} 126}
127 127
128static inline void 128static inline void
129wrapper_smp_local_timer_interrupt(struct pt_regs *regs) 129wrapper_smp_local_timer_interrupt(void)
130{ 130{
131 irq_enter(); 131 irq_enter();
132 smp_local_timer_interrupt(regs); 132 smp_local_timer_interrupt();
133 irq_exit(); 133 irq_exit();
134} 134}
135 135
@@ -786,7 +786,7 @@ fastcall void
786smp_vic_sys_interrupt(struct pt_regs *regs) 786smp_vic_sys_interrupt(struct pt_regs *regs)
787{ 787{
788 ack_CPI(VIC_SYS_INT); 788 ack_CPI(VIC_SYS_INT);
789 printk("Voyager SYSTEM INTERRUPT\n"); 789 printk("Voyager SYSTEM INTERRUPT\n");
790} 790}
791 791
792/* Handle a voyager CMN_INT; These interrupts occur either because of 792/* Handle a voyager CMN_INT; These interrupts occur either because of
@@ -1135,7 +1135,9 @@ EXPORT_SYMBOL(smp_call_function);
1135fastcall void 1135fastcall void
1136smp_apic_timer_interrupt(struct pt_regs *regs) 1136smp_apic_timer_interrupt(struct pt_regs *regs)
1137{ 1137{
1138 wrapper_smp_local_timer_interrupt(regs); 1138 struct pt_regs *old_regs = set_irq_regs(regs);
1139 wrapper_smp_local_timer_interrupt();
1140 set_irq_regs(old_regs);
1139} 1141}
1140 1142
1141/* All of the QUAD interrupt GATES */ 1143/* All of the QUAD interrupt GATES */
@@ -1143,7 +1145,9 @@ fastcall void
1143smp_qic_timer_interrupt(struct pt_regs *regs) 1145smp_qic_timer_interrupt(struct pt_regs *regs)
1144{ 1146{
1145 ack_QIC_CPI(QIC_TIMER_CPI); 1147 ack_QIC_CPI(QIC_TIMER_CPI);
1146 wrapper_smp_local_timer_interrupt(regs); 1148 struct pt_regs *old_regs = set_irq_regs(regs);
1149 wrapper_smp_local_timer_interrupt(void);
1150 set_irq_regs(old_regs);
1147} 1151}
1148 1152
1149fastcall void 1153fastcall void
@@ -1177,6 +1181,7 @@ smp_qic_call_function_interrupt(struct pt_regs *regs)
1177fastcall void 1181fastcall void
1178smp_vic_cpi_interrupt(struct pt_regs *regs) 1182smp_vic_cpi_interrupt(struct pt_regs *regs)
1179{ 1183{
1184 struct pt_regs *old_regs = set_irq_regs(regs);
1180 __u8 cpu = smp_processor_id(); 1185 __u8 cpu = smp_processor_id();
1181 1186
1182 if(is_cpu_quad()) 1187 if(is_cpu_quad())
@@ -1185,7 +1190,7 @@ smp_vic_cpi_interrupt(struct pt_regs *regs)
1185 ack_VIC_CPI(VIC_CPI_LEVEL0); 1190 ack_VIC_CPI(VIC_CPI_LEVEL0);
1186 1191
1187 if(test_and_clear_bit(VIC_TIMER_CPI, &vic_cpi_mailbox[cpu])) 1192 if(test_and_clear_bit(VIC_TIMER_CPI, &vic_cpi_mailbox[cpu]))
1188 wrapper_smp_local_timer_interrupt(regs); 1193 wrapper_smp_local_timer_interrupt();
1189 if(test_and_clear_bit(VIC_INVALIDATE_CPI, &vic_cpi_mailbox[cpu])) 1194 if(test_and_clear_bit(VIC_INVALIDATE_CPI, &vic_cpi_mailbox[cpu]))
1190 smp_invalidate_interrupt(); 1195 smp_invalidate_interrupt();
1191 if(test_and_clear_bit(VIC_RESCHEDULE_CPI, &vic_cpi_mailbox[cpu])) 1196 if(test_and_clear_bit(VIC_RESCHEDULE_CPI, &vic_cpi_mailbox[cpu]))
@@ -1194,6 +1199,7 @@ smp_vic_cpi_interrupt(struct pt_regs *regs)
1194 smp_enable_irq_interrupt(); 1199 smp_enable_irq_interrupt();
1195 if(test_and_clear_bit(VIC_CALL_FUNCTION_CPI, &vic_cpi_mailbox[cpu])) 1200 if(test_and_clear_bit(VIC_CALL_FUNCTION_CPI, &vic_cpi_mailbox[cpu]))
1196 smp_call_function_interrupt(); 1201 smp_call_function_interrupt();
1202 set_irq_regs(old_regs);
1197} 1203}
1198 1204
1199static void 1205static void
@@ -1266,8 +1272,10 @@ smp_send_stop(void)
1266void 1272void
1267smp_vic_timer_interrupt(struct pt_regs *regs) 1273smp_vic_timer_interrupt(struct pt_regs *regs)
1268{ 1274{
1275 struct pt_regs *old_regs = set_irq_regs(regs);
1269 send_CPI_allbutself(VIC_TIMER_CPI); 1276 send_CPI_allbutself(VIC_TIMER_CPI);
1270 smp_local_timer_interrupt(regs); 1277 smp_local_timer_interrupt();
1278 set_irq_regs(old_regs);
1271} 1279}
1272 1280
1273/* local (per CPU) timer interrupt. It does both profiling and 1281/* local (per CPU) timer interrupt. It does both profiling and
@@ -1279,12 +1287,12 @@ smp_vic_timer_interrupt(struct pt_regs *regs)
1279 * value into /proc/profile. 1287 * value into /proc/profile.
1280 */ 1288 */
1281void 1289void
1282smp_local_timer_interrupt(struct pt_regs * regs) 1290smp_local_timer_interrupt(void)
1283{ 1291{
1284 int cpu = smp_processor_id(); 1292 int cpu = smp_processor_id();
1285 long weight; 1293 long weight;
1286 1294
1287 profile_tick(CPU_PROFILING, regs); 1295 profile_tick(CPU_PROFILING);
1288 if (--per_cpu(prof_counter, cpu) <= 0) { 1296 if (--per_cpu(prof_counter, cpu) <= 0) {
1289 /* 1297 /*
1290 * The multiplier may have changed since the last time we got 1298 * The multiplier may have changed since the last time we got
@@ -1302,7 +1310,7 @@ smp_local_timer_interrupt(struct pt_regs * regs)
1302 per_cpu(prof_counter, cpu); 1310 per_cpu(prof_counter, cpu);
1303 } 1311 }
1304 1312
1305 update_process_times(user_mode_vm(regs)); 1313 update_process_times(user_mode_vm(irq_regs));
1306 } 1314 }
1307 1315
1308 if( ((1<<cpu) & voyager_extended_vic_processors) == 0) 1316 if( ((1<<cpu) & voyager_extended_vic_processors) == 0)
diff --git a/arch/i386/pci/direct.c b/arch/i386/pci/direct.c
index 5acf0b4743cf..431c9a51b157 100644
--- a/arch/i386/pci/direct.c
+++ b/arch/i386/pci/direct.c
@@ -256,6 +256,8 @@ static int __init pci_check_type2(void)
256 256
257void __init pci_direct_init(int type) 257void __init pci_direct_init(int type)
258{ 258{
259 if (type == 0)
260 return;
259 printk(KERN_INFO "PCI: Using configuration type %d\n", type); 261 printk(KERN_INFO "PCI: Using configuration type %d\n", type);
260 if (type == 1) 262 if (type == 1)
261 raw_pci_ops = &pci_direct_conf1; 263 raw_pci_ops = &pci_direct_conf1;
diff --git a/arch/i386/pci/init.c b/arch/i386/pci/init.c
index d028e1b05c36..b21b6da8ab1d 100644
--- a/arch/i386/pci/init.c
+++ b/arch/i386/pci/init.c
@@ -28,6 +28,10 @@ static __init int pci_access_init(void)
28#ifdef CONFIG_PCI_DIRECT 28#ifdef CONFIG_PCI_DIRECT
29 pci_direct_init(type); 29 pci_direct_init(type);
30#endif 30#endif
31 if (!raw_pci_ops)
32 printk(KERN_ERR
33 "PCI: Fatal: No config space access function found\n");
34
31 return 0; 35 return 0;
32} 36}
33arch_initcall(pci_access_init); 37arch_initcall(pci_access_init);
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c
index 47f02af74be3..dbc4aae91959 100644
--- a/arch/i386/pci/irq.c
+++ b/arch/i386/pci/irq.c
@@ -1141,10 +1141,6 @@ static int pirq_enable_irq(struct pci_dev *dev)
1141 } 1141 }
1142 dev = temp_dev; 1142 dev = temp_dev;
1143 if (irq >= 0) { 1143 if (irq >= 0) {
1144#ifdef CONFIG_PCI_MSI
1145 if (!platform_legacy_irq(irq))
1146 irq = IO_APIC_VECTOR(irq);
1147#endif
1148 printk(KERN_INFO "PCI->APIC IRQ transform: %s[%c] -> IRQ %d\n", 1144 printk(KERN_INFO "PCI->APIC IRQ transform: %s[%c] -> IRQ %d\n",
1149 pci_name(dev), 'A' + pin, irq); 1145 pci_name(dev), 'A' + pin, irq);
1150 dev->irq = irq; 1146 dev->irq = irq;