diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-07-20 14:56:40 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1997-07-20 14:56:40 +0000 |
commit | e308faf24f68e262d92d294a01ddca7a17e76762 (patch) | |
tree | 22c47cb315811834861f013067878ff664e95abd /arch/i386 | |
parent | 30c6397ce63178fcb3e7963ac247f0a03132aca9 (diff) |
Sync with Linux 2.1.46.
Diffstat (limited to 'arch/i386')
-rw-r--r-- | arch/i386/boot/compressed/Makefile | 2 | ||||
-rw-r--r-- | arch/i386/defconfig | 14 | ||||
-rw-r--r-- | arch/i386/kernel/bios32.c | 28 | ||||
-rw-r--r-- | arch/i386/kernel/entry.S | 4 | ||||
-rw-r--r-- | arch/i386/kernel/irq.c | 5 | ||||
-rw-r--r-- | arch/i386/kernel/process.c | 5 | ||||
-rw-r--r-- | arch/i386/kernel/setup.c | 19 | ||||
-rw-r--r-- | arch/i386/mm/fault.c | 20 |
8 files changed, 56 insertions, 41 deletions
diff --git a/arch/i386/boot/compressed/Makefile b/arch/i386/boot/compressed/Makefile index 9a78bca69..653c12eba 100644 --- a/arch/i386/boot/compressed/Makefile +++ b/arch/i386/boot/compressed/Makefile @@ -48,7 +48,7 @@ endif piggy.o: $(SYSTEM) - tmppiggy=/tmp/$$$$piggy; \ + tmppiggy=_tmp_$$$$piggy; \ rm -f $$tmppiggy $$tmppiggy.gz $$tmppiggy.lnk; \ $(OBJCOPY) $(SYSTEM) $$tmppiggy; \ gzip -f -9 < $$tmppiggy > $$tmppiggy.gz; \ diff --git a/arch/i386/defconfig b/arch/i386/defconfig index ab30a25c8..6e7700c91 100644 --- a/arch/i386/defconfig +++ b/arch/i386/defconfig @@ -80,6 +80,7 @@ CONFIG_INET=y # CONFIG_IP_ACCT is not set # CONFIG_IP_ROUTER is not set # CONFIG_NET_IPIP is not set +# CONFIG_SYN_COOKIES is not set # # (it is safe to leave these untouched) @@ -191,14 +192,11 @@ 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_MINIX_FS is not set CONFIG_EXT2_FS=y -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set # CONFIG_UMSDOS_FS is not set CONFIG_PROC_FS=y CONFIG_NFS_FS=y @@ -229,12 +227,14 @@ CONFIG_MOUSE=y # CONFIG_MS_BUSMOUSE is not set CONFIG_PSMOUSE=y CONFIG_82C710_MOUSE=y +# CONFIG_PC110_PAD is not set # CONFIG_UMISC is not set # CONFIG_QIC02_TAPE is not set # CONFIG_FTAPE is not set # CONFIG_APM is not set # CONFIG_WATCHDOG is not set # CONFIG_RTC is not set +# CONFIG_JOYSTICK is not set # # Sound diff --git a/arch/i386/kernel/bios32.c b/arch/i386/kernel/bios32.c index 157e62b2d..8f7a796fe 100644 --- a/arch/i386/kernel/bios32.c +++ b/arch/i386/kernel/bios32.c @@ -1,7 +1,7 @@ /* * bios32.c - BIOS32, PCI BIOS functions. * - * $Id: bios32.c,v 1.11 1997/05/07 13:35:21 mj Exp $ + * $Id: bios32.c,v 1.1.1.1 1997/06/01 03:16:32 ralf Exp $ * * Sponsored by * iX Multiuser Multitasking Magazine @@ -59,6 +59,8 @@ * * May 7, 1997 : Added some missing cli()'s. [mj] * + * Jun 20, 1997 : Corrected problems in "conf1" type accesses. + * (paubert@iram.es) */ #include <linux/config.h> @@ -512,16 +514,7 @@ static int pci_conf1_read_config_byte(unsigned char bus, unsigned char device_fn save_flags(flags); cli(); outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - switch (where & 3) { - case 0: *value = inb(0xCFC); - break; - case 1: *value = inb(0xCFD); - break; - case 2: *value = inb(0xCFE); - break; - case 3: *value = inb(0xCFF); - break; - } + *value = inb(0xCFC + (where&3)); restore_flags(flags); return PCIBIOS_SUCCESSFUL; } @@ -531,12 +524,10 @@ static int pci_conf1_read_config_word (unsigned char bus, { unsigned long flags; + if (where&1) return PCIBIOS_BAD_REGISTER_NUMBER; save_flags(flags); cli(); outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - if (where & 2) - *value = inw(0xCFE); - else - *value = inw(0xCFC); + *value = inw(0xCFC + (where&2)); restore_flags(flags); return PCIBIOS_SUCCESSFUL; } @@ -546,6 +537,7 @@ static int pci_conf1_read_config_dword (unsigned char bus, unsigned char device_ { unsigned long flags; + if (where&3) return PCIBIOS_BAD_REGISTER_NUMBER; save_flags(flags); cli(); outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); *value = inl(0xCFC); @@ -560,7 +552,7 @@ static int pci_conf1_write_config_byte (unsigned char bus, unsigned char device_ save_flags(flags); cli(); outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - outb(value, 0xCFC); + outb(value, 0xCFC + (where&3)); restore_flags(flags); return PCIBIOS_SUCCESSFUL; } @@ -570,9 +562,10 @@ static int pci_conf1_write_config_word (unsigned char bus, unsigned char device_ { unsigned long flags; + if (where&1) return PCIBIOS_BAD_REGISTER_NUMBER; save_flags(flags); cli(); outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - outw(value, 0xCFC); + outw(value, 0xCFC + (where&2)); restore_flags(flags); return PCIBIOS_SUCCESSFUL; } @@ -582,6 +575,7 @@ static int pci_conf1_write_config_dword (unsigned char bus, unsigned char device { unsigned long flags; + if (where&3) return PCIBIOS_BAD_REGISTER_NUMBER; save_flags(flags); cli(); outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); outl(value, 0xCFC); diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index ac67da797..e7b9e0779 100644 --- a/arch/i386/kernel/entry.S +++ b/arch/i386/kernel/entry.S @@ -526,6 +526,8 @@ ENTRY(sys_call_table) .long SYMBOL_NAME(sys_query_module) .long SYMBOL_NAME(sys_poll) .long SYMBOL_NAME(sys_nfsservctl) - .rept NR_syscalls-169 + .long SYMBOL_NAME(sys_setresgid) /* 170 */ + .long SYMBOL_NAME(sys_getresgid) + .rept NR_syscalls-171 .long SYMBOL_NAME(sys_ni_syscall) .endr diff --git a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c index eedb1d0fe..2e0f3e084 100644 --- a/arch/i386/kernel/irq.c +++ b/arch/i386/kernel/irq.c @@ -82,12 +82,13 @@ static inline void mask_and_ack_irq(int irq_nr) if (irq_nr & 8) { inb(0xA1); /* DUMMY */ outb(cached_A1,0xA1); + outb(0x62,0x20); /* Specific EOI to cascade */ outb(0x20,0xA0); } else { inb(0x21); /* DUMMY */ outb(cached_21,0x21); + outb(0x20,0x20); } - outb(0x20,0x20); spin_unlock(&irq_controller_lock); } @@ -207,7 +208,7 @@ static void math_error_irq(int cpl, void *dev_id, struct pt_regs *regs) math_error(); } -static struct irqaction irq13 = { math_error_irq, 0, 0, "math error", NULL, NULL }; +static struct irqaction irq13 = { math_error_irq, 0, 0, "fpu", NULL, NULL }; /* * IRQ2 is cascade interrupt to second interrupt controller diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c index 33842a21f..a8fe0315b 100644 --- a/arch/i386/kernel/process.c +++ b/arch/i386/kernel/process.c @@ -623,8 +623,9 @@ asmlinkage int sys_execve(struct pt_regs regs) char * filename; lock_kernel(); - error = getname((char *) regs.ebx, &filename); - if (error) + filename = getname((char *) regs.ebx); + error = PTR_ERR(filename); + if (IS_ERR(filename)) goto out; error = do_execve(filename, (char **) regs.ecx, (char **) regs.edx, ®s); putname(filename); diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index f62744d11..4dd8edf76 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c @@ -219,7 +219,7 @@ __initfunc(void setup_arch(char **cmdline_p, request_region(0x40,0x20,"timer"); request_region(0x80,0x10,"dma page reg"); request_region(0xc0,0x20,"dma2"); - request_region(0xf0,0x10,"npu"); + request_region(0xf0,0x10,"fpu"); } static const char * i486model(unsigned int nr) @@ -244,6 +244,17 @@ static const char * i586model(unsigned int nr) return NULL; } +static const char * k5model(unsigned int nr) +{ + static const char *model[] = { + "SSA5 (PR-75, PR-90, PR-100)", "5k86 (PR-120, PR-133)", + "5k86 (PR-166)", "5k86 (PR-200)", "", "", "K6" + }; + if (nr < sizeof(model)/sizeof(char *)) + return model[nr]; + return NULL; +} + static const char * i686model(unsigned int nr) { static const char *model[] = { @@ -263,7 +274,11 @@ static const char * getmodel(int x86, int model) p = i486model(model); break; case 5: - p = i586model(model); + if(strcmp(x86_vendor_id, "AuthenticAMD") == 0){ + p = k5model(model); + } else { + p = i586model(model); + } break; case 6: p = i686model(model); diff --git a/arch/i386/mm/fault.c b/arch/i386/mm/fault.c index b0404a6a9..e4847c070 100644 --- a/arch/i386/mm/fault.c +++ b/arch/i386/mm/fault.c @@ -161,23 +161,25 @@ good_area: bad_area: up(&mm->mmap_sem); - /* Are we prepared to handle this fault? */ + /* User mode accesses just cause a SIGSEGV */ + if (error_code & 4) { + tsk->tss.cr2 = address; + tsk->tss.error_code = error_code; + tsk->tss.trap_no = 14; + force_sig(SIGSEGV, tsk); + goto out; + } + + /* Are we prepared to handle this kernel fault? */ if ((fixup = search_exception_table(regs->eip)) != 0) { printk(KERN_DEBUG "%s: Exception at [<%lx>] (%lx)\n", - current->comm, + tsk->comm, regs->eip, fixup); regs->eip = fixup; goto out; } - if (error_code & 4) { - tsk->tss.cr2 = address; - tsk->tss.error_code = error_code; - tsk->tss.trap_no = 14; - force_sig(SIGSEGV, tsk); - goto out; - } /* * Oops. The kernel tried to access some bad page. We'll have to * terminate things with extreme prejudice. |