summaryrefslogtreecommitdiffstats
path: root/arch/i386
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1997-07-20 14:56:40 +0000
committerRalf Baechle <ralf@linux-mips.org>1997-07-20 14:56:40 +0000
commite308faf24f68e262d92d294a01ddca7a17e76762 (patch)
tree22c47cb315811834861f013067878ff664e95abd /arch/i386
parent30c6397ce63178fcb3e7963ac247f0a03132aca9 (diff)
Sync with Linux 2.1.46.
Diffstat (limited to 'arch/i386')
-rw-r--r--arch/i386/boot/compressed/Makefile2
-rw-r--r--arch/i386/defconfig14
-rw-r--r--arch/i386/kernel/bios32.c28
-rw-r--r--arch/i386/kernel/entry.S4
-rw-r--r--arch/i386/kernel/irq.c5
-rw-r--r--arch/i386/kernel/process.c5
-rw-r--r--arch/i386/kernel/setup.c19
-rw-r--r--arch/i386/mm/fault.c20
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, &regs);
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.