diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-06-17 13:20:30 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1997-06-17 13:20:30 +0000 |
commit | 7acb77a6e7bddd4c4c5aa975bbf976927c013798 (patch) | |
tree | 4139829ec6edb85f73774bb95cdec376758bfc73 /arch/i386 | |
parent | 64d58d4c8cd6a89ee218301ec0dc0ebfec91a4db (diff) |
Merge with 2.1.43.
Diffstat (limited to 'arch/i386')
-rw-r--r-- | arch/i386/config.in | 2 | ||||
-rw-r--r-- | arch/i386/defconfig | 5 | ||||
-rw-r--r-- | arch/i386/kernel/head.S | 4 | ||||
-rw-r--r-- | arch/i386/kernel/irq.c | 19 | ||||
-rw-r--r-- | arch/i386/kernel/irq.h | 14 | ||||
-rw-r--r-- | arch/i386/kernel/smp.c | 14 | ||||
-rw-r--r-- | arch/i386/kernel/time.c | 2 | ||||
-rw-r--r-- | arch/i386/kernel/traps.c | 2 |
8 files changed, 23 insertions, 39 deletions
diff --git a/arch/i386/config.in b/arch/i386/config.in index f95590407..1612b614f 100644 --- a/arch/i386/config.in +++ b/arch/i386/config.in @@ -34,6 +34,7 @@ bool 'System V IPC' CONFIG_SYSVIPC bool 'Sysctl support' CONFIG_SYSCTL tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF +tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then tristate 'Kernel support for JAVA binaries' CONFIG_BINFMT_JAVA fi @@ -117,4 +118,5 @@ bool 'Kernel profiling support' CONFIG_PROFILE if [ "$CONFIG_PROFILE" = "y" ]; then int ' Profile shift count' CONFIG_PROFILE_SHIFT 2 fi +bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ endmenu diff --git a/arch/i386/defconfig b/arch/i386/defconfig index a27b6ebce..ab30a25c8 100644 --- a/arch/i386/defconfig +++ b/arch/i386/defconfig @@ -25,6 +25,7 @@ CONFIG_SYSVIPC=y CONFIG_SYSCTL=y CONFIG_BINFMT_AOUT=y CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=y # CONFIG_M386 is not set # CONFIG_M486 is not set # CONFIG_M586 is not set @@ -190,6 +191,9 @@ CONFIG_EEXPRESS_PRO100=y # Filesystems # # CONFIG_QUOTA is not set +# CONFIG_DCACHE_PRELOAD is not set +# CONFIG_OMIRR is not set +# CONFIG_TRANS_NAMES is not set CONFIG_MINIX_FS=y CONFIG_EXT2_FS=y CONFIG_FAT_FS=y @@ -241,3 +245,4 @@ CONFIG_82C710_MOUSE=y # Kernel hacking # # CONFIG_PROFILE is not set +# CONFIG_MAGIC_SYSRQ is not set diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S index a42b87b1b..bd4bf56cf 100644 --- a/arch/i386/kernel/head.S +++ b/arch/i386/kernel/head.S @@ -532,8 +532,8 @@ ENTRY(gdt) .quad 0x0000000000000000 /* not used */ .quad 0x00cf9a000000ffff /* 0x10 kernel 4GB code at 0x00000000 */ .quad 0x00cf92000000ffff /* 0x18 kernel 4GB data at 0x00000000 */ - .quad 0x00cbfa000000ffff /* 0x23 user 3GB code at 0x00000000 */ - .quad 0x00cbf2000000ffff /* 0x2b user 3GB data at 0x00000000 */ + .quad 0x00cffa000000ffff /* 0x23 user 4GB code at 0x00000000 */ + .quad 0x00cff2000000ffff /* 0x2b user 4GB data at 0x00000000 */ .quad 0x0000000000000000 /* not used */ .quad 0x0000000000000000 /* not used */ .fill 2*NR_TASKS,8,0 /* space for LDT's and TSS's etc */ diff --git a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c index e5fb5acb1..eedb1d0fe 100644 --- a/arch/i386/kernel/irq.c +++ b/arch/i386/kernel/irq.c @@ -142,21 +142,6 @@ void enable_irq(unsigned int irq_nr) * the operations that are needed to keep the AT interrupt-controller * happy. They are also written to be fast - and to disable interrupts * as little as humanly possible. - * - * NOTE! These macros expand to three different handlers for each line: one - * complete handler that does all the fancy stuff (including signal handling), - * and one fast handler that is meant for simple IRQ's that want to be - * atomic. The specific handler is chosen depending on the SA_INTERRUPT - * flag when installing a handler. Finally, one "bad interrupt" handler, that - * is used when no handler is present. - * - * The timer interrupt is handled specially to insure that the jiffies - * variable is updated at all times. Specifically, the timer interrupt is - * just like the complete handlers except that it is invoked with interrupts - * disabled and should never re-enable them. If other interrupts were - * allowed to be processed while the timer interrupt is active, then the - * other interrupts would have to avoid using the jiffies variable for delay - * and interval timing operations to avoid hanging the system. */ #if NR_IRQS != 16 @@ -539,6 +524,9 @@ asmlinkage void do_IRQ(struct pt_regs regs) status = 0; action = *(irq + irq_action); if (action) { + if (!(action->flags & SA_INTERRUPT)) + __sti(); + do { status |= action->flags; action->handler(irq, action->dev_id, ®s); @@ -546,7 +534,6 @@ asmlinkage void do_IRQ(struct pt_regs regs) } while (action); if (status & SA_SAMPLE_RANDOM) add_interrupt_randomness(irq); - __cli(); spin_lock(&irq_controller_lock); unmask_irq(irq); diff --git a/arch/i386/kernel/irq.h b/arch/i386/kernel/irq.h index 1f9e89399..7d70264ba 100644 --- a/arch/i386/kernel/irq.h +++ b/arch/i386/kernel/irq.h @@ -9,24 +9,10 @@ #ifdef __SMP__ -#undef INIT_STUCK -#define INIT_STUCK 200000000 - -#undef STUCK -#define STUCK \ -if (!--stuck) {printk("irq_enter stuck (irq=%d, cpu=%d, global=%d)\n",irq,cpu,global_irq_holder); stuck = INIT_STUCK;} - static inline void irq_enter(int cpu, int irq) { - int stuck = INIT_STUCK; - hardirq_enter(cpu); while (test_bit(0,&global_irq_lock)) { - if ((unsigned char) cpu == global_irq_holder) { - printk("BAD! Local interrupts enabled, global disabled\n"); - break; - } - STUCK; /* nothing */; } } diff --git a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c index 1dc615501..5a020b723 100644 --- a/arch/i386/kernel/smp.c +++ b/arch/i386/kernel/smp.c @@ -870,6 +870,8 @@ __initfunc(static void do_boot_cpu(int i)) *((volatile unsigned long *)phys_to_virt(8192)) = 0; } +unsigned int prof_multiplier[NR_CPUS]; +unsigned int prof_counter[NR_CPUS]; /* * Cycle through the processors sending APIC IPI's to boot each. @@ -912,8 +914,15 @@ __initfunc(void smp_boot_cpus(void)) * of here now! */ - if (!smp_found_config) + if (!smp_found_config) { + /* + * For SMP-simulation on one CPU to work, we must initialize these + * values for the single CPU here: + */ + prof_counter[0] = prof_multiplier[0] = 1; + return; + } /* * Map the local APIC into kernel space @@ -1302,9 +1311,6 @@ void smp_flush_tlb(void) * value into /proc/profile. */ -unsigned int prof_multiplier[NR_CPUS]; -unsigned int prof_counter[NR_CPUS]; - void smp_local_timer_interrupt(struct pt_regs * regs) { int cpu = smp_processor_id(); diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c index e45cc7279..a08c9c49c 100644 --- a/arch/i386/kernel/time.c +++ b/arch/i386/kernel/time.c @@ -515,7 +515,7 @@ unsigned long get_cmos_time(void) return mktime(year, mon, day, hour, min, sec); } -static struct irqaction irq0 = { timer_interrupt, 0, 0, "timer", NULL, NULL}; +static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL}; __initfunc(void time_init(void)) diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 696e37004..b397fc76d 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c @@ -191,8 +191,6 @@ spinlock_t die_lock; spin_lock_irq(&die_lock); printk("%s: %04lx\n", str, err & 0xffff); show_registers(regs); -do { int i=2000000000; while (i) i--; } while (0); -do { int i=2000000000; while (i) i--; } while (0); spin_unlock_irq(&die_lock); do_exit(SIGSEGV); } |