? .tmp_export-objs
? build.sh
? build2.sh
? build3.sh
? config-tausq
? config-willy
? for-jda.tgz
? kernel.build.log
? ld.log
? t.diff
? include/linux/modules
? include/linux/modversions.h
? init/version.i
? scripts/lxdialog/lxdialog
Index: arch/parisc/vmlinux.lds.S
===================================================================
RCS file: /var/cvs/linux-2.5/arch/parisc/vmlinux.lds.S,v
retrieving revision 1.3
diff -u -p -r1.3 vmlinux.lds.S
--- arch/parisc/vmlinux.lds.S	9 Oct 2002 19:18:10 -0000	1.3
+++ arch/parisc/vmlinux.lds.S	12 Oct 2002 07:55:19 -0000
@@ -1,6 +1,6 @@
 #include <linux/config.h>
 #ifdef CONFIG_PARISC64
-#include "vmlinux64.lds.S"
+#include "vmlinux64.lds"
 #else
 #include "vmlinux32.lds.S"
 #endif
Index: arch/parisc/kernel/pdc_cons.c
===================================================================
RCS file: /var/cvs/linux-2.5/arch/parisc/kernel/pdc_cons.c,v
retrieving revision 1.5
diff -u -p -r1.5 pdc_cons.c
--- arch/parisc/kernel/pdc_cons.c	9 Oct 2002 14:31:05 -0000	1.5
+++ arch/parisc/kernel/pdc_cons.c	12 Oct 2002 07:55:19 -0000
@@ -12,7 +12,7 @@
 
 /* Define EARLY_BOOTUP_DEBUG to debug kernel related boot problems. 
  * On production kernels EARLY_BOOTUP_DEBUG should be undefined. */
-#undef EARLY_BOOTUP_DEBUG
+#define EARLY_BOOTUP_DEBUG
 
 
 #include <linux/config.h>
@@ -70,7 +70,7 @@ static struct console pdc_cons = {
 	write:		pdc_console_write,
 	device:		PDC_CONSOLE_DEVICE,
 	setup:		pdc_console_setup,
-	flags:		CON_PRINTBUFFER|CON_ENABLED,
+	flags:		CON_BOOT|CON_PRINTBUFFER|CON_ENABLED,
 	index:		-1,
 };
 
@@ -93,7 +93,7 @@ static void pdc_console_init_force(void)
 	register_console(&pdc_cons);
 }
 
-void pdc_console_init(void)
+void __init pdc_console_init(void)
 {
 #if defined(EARLY_BOOTUP_DEBUG) || defined(CONFIG_PDC_CONSOLE)
 	pdc_console_init_force();
Index: arch/parisc/kernel/time.c
===================================================================
RCS file: /var/cvs/linux-2.5/arch/parisc/kernel/time.c,v
retrieving revision 1.4
diff -u -p -r1.4 time.c
--- arch/parisc/kernel/time.c	9 Oct 2002 04:44:36 -0000	1.4
+++ arch/parisc/kernel/time.c	12 Oct 2002 07:55:19 -0000
@@ -150,6 +150,9 @@ gettimeoffset (void)
 	last_tick -= clocktick * (jiffies - wall_jiffies + 1);
 	elapsed_cycles = mfctl(16) - last_tick;
 
+	if (elapsed_cycles < 0)
+		elapsed_cycles = 0;
+
 	/* the precision of this math could be improved */
 	return elapsed_cycles / (PAGE0->mem_10msec / 10000);
 #else
Index: arch/parisc/kernel/traps.c
===================================================================
RCS file: /var/cvs/linux-2.5/arch/parisc/kernel/traps.c,v
retrieving revision 1.9
diff -u -p -r1.9 traps.c
--- arch/parisc/kernel/traps.c	9 Oct 2002 04:44:37 -0000	1.9
+++ arch/parisc/kernel/traps.c	12 Oct 2002 07:55:19 -0000
@@ -18,6 +18,7 @@
 #include <linux/ptrace.h>
 #include <linux/timer.h>
 #include <linux/mm.h>
+#include <linux/module.h>
 #include <linux/smp.h>
 #include <linux/smp_lock.h>
 #include <linux/spinlock.h>
@@ -116,77 +117,96 @@ void show_regs(struct pt_regs *regs)
 
 void dump_stack(void)
 {
-	show_stack(NULL);
+	unsigned long stack;
+	show_trace(&stack);
 }
 
 
-void show_stack(unsigned long *stack)
+static int kstack_depth_to_print = 48;
+extern struct module kernel_module;
+
+static inline int kernel_text_address(unsigned long addr)
 {
-#if 0
-	/* If regs->sr[7] == 0, we are on a kernel stack */
-	if (regs->sr[7] == 0) {
+#ifdef CONFIG_MODULES
+	struct module *mod;
+#endif
+	extern char _stext, _etext;
 
-		unsigned long sp = regs->gr[30];
-		unsigned long cr30;
-		unsigned long cr31;
-		unsigned long stack_start;
-		struct pt_regs *int_regs;
-
-		cr30 = mfctl(30);
-		cr31 = mfctl(31);
-		stack_start = sp & ~(ISTACK_SIZE - 1);
-		if (stack_start == cr31) {
-		    /*
-		     * We are on the interrupt stack, get the stack
-		     * pointer from the first pt_regs structure on
-		     * the interrupt stack, so we can dump the task
-		     * stack first.
-		     */
-
-		    int_regs = (struct pt_regs *)cr31;
-		    sp = int_regs->gr[30];
-		    stack_start = sp & ~(INIT_THREAD_SIZE - 1);
-		    if (stack_start != cr30) {
-			printk(KERN_CRIT "WARNING! Interrupt-Stack pointer and cr30 do not correspond!\n");
-			printk(KERN_CRIT "Dumping virtual address stack instead\n");
-			dump_stack((unsigned long)__va(stack_start), (unsigned long)__va(sp), 0);
-		    } else {
-			dump_stack(stack_start, sp, 0);
-		    };
-
-		    printk("\n\n" KERN_DEBUG "Registers at Interrupt:\n");
-		    show_regs(int_regs);
-
-		    /* Now dump the interrupt stack */
-
-		    sp = regs->gr[30];
-		    stack_start = sp & ~(ISTACK_SIZE - 1);
-		    dump_stack(stack_start,sp,1);
-		}
-		else
-		{
-		    stack_start = sp & ~(INIT_THREAD_SIZE - 1);
-		    if (stack_start == cr30) {
-			/* We're in a non-interrupt stack and cr30 matches
-			   the start of the stack */
-			dump_stack(stack_start, sp, 0);
-
-		    }
-		    else
-		    {
-			/* Stack Dump! */
-			printk(KERN_CRIT "WARNING! Stack pointer and cr30 do not correspond!\n");
-			printk(KERN_CRIT "Dumping virtual address stack instead\n");
-			dump_stack((unsigned long)__va(stack_start), (unsigned long)__va(sp), 0);
-		    }
-		}
+	if (addr >= (unsigned long) &_stext &&
+	    addr <= (unsigned long) &_etext)
+		return 1;
+
+#ifdef CONFIG_MODULES
+	for (mod = module_list; mod != &kernel_module; mod = mod->next) {
+		/* mod_bound tests for addr being inside the vmalloc'ed
+		 * module area. Of course it'd be better to test only
+		 * for the .text subset... */
+		if (mod_bound(addr, 0, mod))
+			return 1;
 	}
 #endif
+
+	return 0;
+}
+
+void show_stack(unsigned long *sp)
+{
+	unsigned long *stack;
+	int i;
+
+	/*
+	 * debugging aid: "show_stack(NULL);" prints the
+	 * back trace for this cpu.
+	 */
+	if(sp==NULL)
+		sp=(unsigned long*)&sp;
+
+	stack = sp;
+	for(i=0; i < kstack_depth_to_print; i++) {
+		if (((long) stack & (THREAD_SIZE-1)) == 0)
+			break;
+		if (i && ((i % 4) == 0))
+			printk("\n       ");
+		printk("%016lx ", *stack++);
+	}
+	printk("\n");
+	show_trace(sp);
 }
 
+
 void show_trace(unsigned long *stack)
 {
-	BUG();
+	unsigned long *endstack;
+	unsigned long addr;
+	int i;
+
+	printk("Call Trace:");
+	addr = (unsigned long)stack + THREAD_SIZE - 1;
+	endstack = (unsigned long *)(addr & -THREAD_SIZE);
+	i = 0;
+	while (stack + 1 <= endstack) {
+		addr = *stack++;
+		/*
+		 * If the address is either in the text segment of the
+		 * kernel, or in the region which contains vmalloc'ed
+		 * memory, it *may* be the address of a calling
+		 * routine; if so, print it so that someone tracing
+		 * down the cause of the crash will be able to figure
+		 * out the call path that was taken.
+		 */
+		if (kernel_text_address(addr)) {
+			if (i % 4 == 0)
+				printk("\n       ");
+			printk(" [<%08lx>]", addr);
+			i++;
+		}
+	}
+	printk("\n");
+}
+
+void show_trace_task(struct task_struct *tsk)
+{
+	show_trace((unsigned long *)tsk->thread.regs.ksp);
 }
 
 void die_if_kernel(char *str, struct pt_regs *regs, long err)
@@ -400,7 +420,7 @@ void parisc_terminate(char *msg, struct 
 	if (code == 1)
 	    transfer_pim_to_trap_frame(regs);
 
-	show_stack(regs);
+	show_stack(regs->gr[30]);
 
 	printk("\n");
 	printk(KERN_CRIT "%s: Code=%d regs=%p (Addr=" RFMT ")\n",
@@ -679,13 +699,6 @@ void handle_interruption(int code, struc
 
 	do_page_fault(regs, code, fault_address);
 }
-
-
-void show_trace_task(struct task_struct *tsk)
-{
-    	BUG();
-}
-
 
 
 int __init check_ivt(void *iva)
Index: drivers/serial/8250.c
===================================================================
RCS file: /var/cvs/linux-2.5/drivers/serial/8250.c,v
retrieving revision 1.3
diff -u -p -r1.3 8250.c
--- drivers/serial/8250.c	8 Oct 2002 22:47:49 -0000	1.3
+++ drivers/serial/8250.c	12 Oct 2002 07:55:23 -0000
@@ -445,7 +445,7 @@ static void autoconfig(struct uart_8250_
 	DEBUG_AUTOCONF("Testing ttyS%d (0x%04x, 0x%08lx)...\n",
 			up->port.line, up->port.iobase, up->port.membase);
 
-	if (!up->port.iobase && !up->port.membase)
+	if (!up->port.iobase && !up->port.mapbase && !up->port.membase)
 		return;
 
 	/*
@@ -1875,6 +1875,7 @@ static int __register_serial(struct seri
 	struct uart_port port;
 
 	port.iobase   = req->port;
+	port.mapbase  = req->iomap_base;
 	port.membase  = req->iomem_base;
 	port.irq      = req->irq;
 	port.uartclk  = req->baud_base * 16;
Index: drivers/serial/8250_pci.c
===================================================================
RCS file: /var/cvs/linux-2.5/drivers/serial/8250_pci.c,v
retrieving revision 1.3
diff -u -p -r1.3 8250_pci.c
--- drivers/serial/8250_pci.c	2 Sep 2002 06:57:26 -0000	1.3
+++ drivers/serial/8250_pci.c	12 Oct 2002 07:55:23 -0000
@@ -175,6 +175,7 @@ get_pci_port(struct pci_dev *dev, struct
 		return 0;
 	}
 	req->io_type = SERIAL_IO_MEM;
+	req->iomap_base = port;
 	req->iomem_base = ioremap(port, board->uart_offset);
 	if (req->iomem_base == NULL)
 		return -ENOMEM;
Index: drivers/serial/core.c
===================================================================
RCS file: /var/cvs/linux-2.5/drivers/serial/core.c,v
retrieving revision 1.3
diff -u -p -r1.3 core.c
--- drivers/serial/core.c	2 Sep 2002 06:57:26 -0000	1.3
+++ drivers/serial/core.c	12 Oct 2002 07:55:28 -0000
@@ -2017,7 +2017,7 @@ __uart_register_port(struct uart_driver 
 	/*
 	 * If there isn't a port here, don't do anything further.
 	 */
-	if (!port->iobase && !port->membase)
+	if (!port->iobase && !port->mapbase && !port->membase)
 		return;
 
 	/*
@@ -2412,6 +2412,7 @@ int uart_register_port(struct uart_drive
 		}
 
 		state->port->iobase   = port->iobase;
+		state->port->mapbase  = port->mapbase;
 		state->port->membase  = port->membase;
 		state->port->irq      = port->irq;
 		state->port->uartclk  = port->uartclk;
Index: include/linux/console.h
===================================================================
RCS file: /var/cvs/linux-2.5/include/linux/console.h,v
retrieving revision 1.2
diff -u -p -r1.2 console.h
--- include/linux/console.h	18 Jul 2002 16:17:11 -0000	1.2
+++ include/linux/console.h	12 Oct 2002 07:55:29 -0000
@@ -90,6 +90,7 @@ extern struct console_cmdline console_li
 #define CON_PRINTBUFFER	(1)
 #define CON_CONSDEV	(2) /* Last on the command line */
 #define CON_ENABLED	(4)
+#define CON_BOOT	(8)
 
 struct console
 {
Index: include/linux/serial.h
===================================================================
RCS file: /var/cvs/linux-2.5/include/linux/serial.h,v
retrieving revision 1.3
diff -u -p -r1.3 serial.h
--- include/linux/serial.h	8 Oct 2002 22:49:17 -0000	1.3
+++ include/linux/serial.h	12 Oct 2002 07:55:30 -0000
@@ -45,6 +45,7 @@ struct serial_struct {
 	int	hub6;
 	unsigned short	closing_wait; /* time to wait before closing */
 	unsigned short	closing_wait2; /* no longer used... */
+	unsigned long   iomap_base;
 	unsigned char	*iomem_base;
 	unsigned short	iomem_reg_shift;
 	unsigned int	port_high;
Index: kernel/printk.c
===================================================================
RCS file: /var/cvs/linux-2.5/kernel/printk.c,v
retrieving revision 1.5
diff -u -p -r1.5 printk.c
--- kernel/printk.c	8 Oct 2002 22:49:24 -0000	1.5
+++ kernel/printk.c	12 Oct 2002 07:55:30 -0000
@@ -637,6 +637,11 @@ void register_console(struct console * c
 	if (!(console->flags & CON_ENABLED))
 		return;
 
+	if (console_drivers && (console_drivers->flags & CON_BOOT)) {
+		unregister_console(console_drivers);
+		console->flags &= ~CON_PRINTBUFFER;
+	}
+
 	/*
 	 *	Put this console in the list - keep the
 	 *	preferred driver at the head of the list.
Index: kernel/timer.c
===================================================================
RCS file: /var/cvs/linux-2.5/kernel/timer.c,v
retrieving revision 1.4
diff -u -p -r1.4 timer.c
--- kernel/timer.c	8 Oct 2002 22:49:24 -0000	1.4
+++ kernel/timer.c	12 Oct 2002 07:55:33 -0000
@@ -739,6 +739,9 @@ static inline void update_times(void)
 {
 	unsigned long ticks;
 
+	if (wall_jiffies > jiffies)
+		wall_jiffies = jiffies;
+
 	ticks = jiffies - wall_jiffies;
 	if (ticks) {
 		wall_jiffies += ticks;
