linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH]  4KB stack + irq stack for x86
@ 2002-10-04 20:00 Dave Hansen
  2002-10-04 20:12 ` Dave Hansen
  0 siblings, 1 reply; 4+ messages in thread
From: Dave Hansen @ 2002-10-04 20:00 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-mm, linux-kernel, Benjamin LaHaise

[-- Attachment #1: Type: text/plain, Size: 1125 bytes --]

I fixed the problems that I was having.  thread_info->preempt_count is 
now used to store softirq state, unlike in 2.5.20.  Preempt count was 
not preserved once the switch to the interrupt stack occurred.  This 
caused two nested softirqs and a deadlock.  It is fixed now.

Any comments?  Is this right for -mm, or should I try to push right to 
Linus?

part of Ben LaHaise's original message:
 > Below is a patch against 2.5.20 that implements 4KB stacks for
 > tasks, plus a seperate 4KB irq stack for use by interrupts.  There
 > are a couple of reasons for doing this: 4KB stacks put less pressure
 > on the VM subsystem, reduces the overall memory usage for systems
 > with large numbers of tasks, and increases the reliability of the
 > system when under heavy irq load by provide a fixed stack size for
 > interrupt handlers that other kernel code will not eat into.
 >
 > The interrupt stacks are stackable, so we could use multiple
 > 4KB irq stacks.  The thread_info structure is included in each
 > interrupt stack, and has the current pointer copied into it upon
 > entry.

-- 
Dave Hansen
haveblue@us.ibm.com



[-- Attachment #2: 4k+interrupt-stack-2.5.40-1.patch --]
[-- Type: text/plain, Size: 11577 bytes --]

diff -ur linux-2.5.40-clean/arch/i386/config.in linux-2.5.40/arch/i386/config.in
--- linux-2.5.40-clean/arch/i386/config.in	2002-10-02 12:59:09.000000000 -0700
+++ linux-2.5.40/arch/i386/config.in	2002-10-02 12:59:55.000000000 -0700
@@ -35,6 +35,7 @@
 #
 # Define implied options from the CPU selection here
 #
+define_bool CONFIG_X86_HAVE_CMOV n
 
 if [ "$CONFIG_M386" = "y" ]; then
    define_bool CONFIG_X86_CMPXCHG n
@@ -91,18 +92,21 @@
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    define_bool CONFIG_X86_PPRO_FENCE y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MPENTIUMIII" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MPENTIUM4" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 7
    define_bool CONFIG_X86_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MK6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
@@ -116,6 +120,7 @@
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_3DNOW y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MELAN" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 4
@@ -132,6 +137,7 @@
 if [ "$CONFIG_MCRUSOE" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MWINCHIPC6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
diff -ur linux-2.5.40-clean/arch/i386/kernel/entry.S linux-2.5.40/arch/i386/kernel/entry.S
--- linux-2.5.40-clean/arch/i386/kernel/entry.S	2002-10-02 12:59:09.000000000 -0700
+++ linux-2.5.40/arch/i386/kernel/entry.S	2002-10-02 13:00:09.000000000 -0700
@@ -136,7 +136,7 @@
 	movl %ecx,CS(%esp)	#
 	movl %esp, %ebx
 	pushl %ebx
-	andl $-8192, %ebx	# GET_THREAD_INFO
+	GET_THREAD_INFO_WITH_ESP(%ebx)
 	movl TI_EXEC_DOMAIN(%ebx), %edx	# Get the execution domain
 	movl 4(%edx), %edx	# Get the lcall7 handler for the domain
 	pushl $0x7
@@ -158,7 +158,7 @@
 	movl %ecx,CS(%esp)	#
 	movl %esp, %ebx
 	pushl %ebx
-	andl $-8192, %ebx	# GET_THREAD_INFO
+	GET_THREAD_INFO_WITH_ESP(%ebx)
 	movl TI_EXEC_DOMAIN(%ebx), %edx	# Get the execution domain
 	movl 4(%edx), %edx	# Get the lcall7 handler for the domain
 	pushl $0x27
@@ -334,7 +334,30 @@
 	ALIGN
 common_interrupt:
 	SAVE_ALL
+	GET_THREAD_INFO(%ebx)
+
+	movl TI_IRQ_STACK(%ebx),%ecx
+	movl TI_TASK(%ebx),%edx
+	movl %esp,%eax
+	leal (THREAD_SIZE-4)(%ecx),%ebx
+	testl %ecx,%ecx			# is there a valid irq_stack?
+	# switch to the irq stack
+#ifdef CONFIG_X86_HAVE_CMOV
+	cmovnz %ebx,%esp
+#warning using cmov
+#else
+#warning cannot use cmov
+	jnz 1f
+	mov %ebx,%esp
+1:
+#endif
+
+	# update the task pointer in the irq stack
+	GET_THREAD_INFO(%ebx)
+	movl %edx,TI_TASK(%ebx)
+
 	call do_IRQ
+	movl %eax,%esp			# potentially restore non-irq stack
 	jmp ret_from_intr
 
 #define BUILD_INTERRUPT(name, nr)	\
diff -ur linux-2.5.40-clean/arch/i386/kernel/head.S linux-2.5.40/arch/i386/kernel/head.S
--- linux-2.5.40-clean/arch/i386/kernel/head.S	2002-10-02 12:59:09.000000000 -0700
+++ linux-2.5.40/arch/i386/kernel/head.S	2002-10-02 12:59:55.000000000 -0700
@@ -15,6 +15,7 @@
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/desc.h>
+#include <asm/thread_info.h>
 
 #define OLD_CL_MAGIC_ADDR	0x90020
 #define OLD_CL_MAGIC		0xA33F
@@ -305,7 +306,7 @@
 	ret
 
 ENTRY(stack_start)
-	.long init_thread_union+8192
+	.long init_thread_union+THREAD_SIZE
 	.long __KERNEL_DS
 
 /* This is the default interrupt "handler" :-) */
diff -ur linux-2.5.40-clean/arch/i386/kernel/init_task.c linux-2.5.40/arch/i386/kernel/init_task.c
--- linux-2.5.40-clean/arch/i386/kernel/init_task.c	2002-10-02 12:59:09.000000000 -0700
+++ linux-2.5.40/arch/i386/kernel/init_task.c	2002-10-02 12:59:55.000000000 -0700
@@ -13,6 +13,9 @@
 static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
 struct mm_struct init_mm = INIT_MM(init_mm);
 
+union thread_union init_irq_union
+	__attribute__((__section__(".data.init_task")));
+
 /*
  * Initial thread structure.
  *
@@ -22,7 +25,15 @@
  */
 union thread_union init_thread_union 
 	__attribute__((__section__(".data.init_task"))) =
-		{ INIT_THREAD_INFO(init_task) };
+		{ { 
+			task:		&init_task,
+			exec_domain:	&default_exec_domain,
+			flags:		0,
+			cpu:		0,
+			addr_limit:	KERNEL_DS,
+			irq_stack:	&init_irq_union,
+		} };
+
 
 /*
  * Initial task structure.
diff -ur linux-2.5.40-clean/arch/i386/kernel/irq.c linux-2.5.40/arch/i386/kernel/irq.c
--- linux-2.5.40-clean/arch/i386/kernel/irq.c	2002-10-02 12:59:09.000000000 -0700
+++ linux-2.5.40/arch/i386/kernel/irq.c	2002-10-02 12:59:55.000000000 -0700
@@ -311,7 +311,8 @@
  * SMP cross-CPU interrupts have their own specific
  * handlers).
  */
-asmlinkage unsigned int do_IRQ(struct pt_regs regs)
+struct pt_regs *do_IRQ(struct pt_regs *regs) __attribute__((regparm(1)));
+struct pt_regs *do_IRQ(struct pt_regs *regs)
 {	
 	/* 
 	 * We ack quickly, we don't want the irq controller
@@ -323,7 +324,7 @@
 	 * 0 return value means that this irq is already being
 	 * handled by some other CPU. (or is disabled)
 	 */
-	int irq = regs.orig_eax & 0xff; /* high bits used in ret_from_ code  */
+	int irq = regs->orig_eax & 0xff; /* high bits used in ret_from_ code  */
 	int cpu = smp_processor_id();
 	irq_desc_t *desc = irq_desc + irq;
 	struct irqaction * action;
@@ -373,7 +374,7 @@
 	 */
 	for (;;) {
 		spin_unlock(&desc->lock);
-		handle_IRQ_event(irq, &regs, action);
+		handle_IRQ_event(irq, regs, action);
 		spin_lock(&desc->lock);
 		
 		if (likely(!(desc->status & IRQ_PENDING)))
@@ -392,7 +393,7 @@
 
 	irq_exit();
 
-	return 1;
+	return regs;
 }
 
 /**
diff -ur linux-2.5.40-clean/arch/i386/kernel/process.c linux-2.5.40/arch/i386/kernel/process.c
--- linux-2.5.40-clean/arch/i386/kernel/process.c	2002-10-02 12:59:09.000000000 -0700
+++ linux-2.5.40/arch/i386/kernel/process.c	2002-10-02 12:59:55.000000000 -0700
@@ -413,6 +413,7 @@
 
 	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
 
+	next_p->thread_info->irq_stack = prev_p->thread_info->irq_stack;
 	unlazy_fpu(prev_p);
 
 	/*
diff -ur linux-2.5.40-clean/arch/i386/kernel/smpboot.c linux-2.5.40/arch/i386/kernel/smpboot.c
--- linux-2.5.40-clean/arch/i386/kernel/smpboot.c	2002-10-02 12:59:09.000000000 -0700
+++ linux-2.5.40/arch/i386/kernel/smpboot.c	2002-10-02 12:59:55.000000000 -0700
@@ -69,6 +69,10 @@
 /* Per CPU bogomips and other parameters */
 struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
 
+extern union thread_union init_irq_union;
+union thread_union *irq_stacks[NR_CPUS] __cacheline_aligned =
+	{ &init_irq_union, };
+
 /* Set when the idlers are all forked */
 int smp_threads_ready;
 
@@ -763,6 +767,27 @@
 	return (send_status | accept_status);
 }
 
+static void __init setup_irq_stack(struct task_struct *p, int cpu)
+{
+	unsigned long stk;
+
+	stk = __get_free_pages(GFP_KERNEL, THREAD_ORDER);
+	if (!stk)
+		panic("I can't seem to allocate my irq stack.  Oh well, giving up.");
+
+	irq_stacks[cpu] = (void *)stk;
+	memset(irq_stacks[cpu], 0, THREAD_SIZE);
+	irq_stacks[cpu]->thread_info.cpu = cpu;
+	irq_stacks[cpu]->thread_info.preempt_count = 1;
+					/* interrupts are not preemptable */
+	p->thread_info->irq_stack = irq_stacks[cpu];
+
+	/* If we want to make the irq stack more than one unit
+	 * deep, we can chain then off of the irq_stack pointer
+	 * here.
+	 */
+}
+
 extern unsigned long cpu_initialized;
 
 static void __init do_boot_cpu (int apicid) 
@@ -786,6 +811,8 @@
 	if (IS_ERR(idle))
 		panic("failed fork for CPU %d", cpu);
 
+	setup_irq_stack(idle, cpu);
+
 	/*
 	 * We remove it from the pidhash and the runqueue
 	 * once we got the process:
@@ -803,7 +830,7 @@
 
 	/* So we see what's up   */
 	printk("Booting processor %d/%d eip %lx\n", cpu, apicid, start_eip);
-	stack_start.esp = (void *) (1024 + PAGE_SIZE + (char *)idle->thread_info);
+	stack_start.esp = (void *) (THREAD_SIZE + (char *)idle->thread_info);
 
 	/*
 	 * This grunge runs the startup process for
diff -ur linux-2.5.40-clean/include/asm-i386/page.h linux-2.5.40/include/asm-i386/page.h
--- linux-2.5.40-clean/include/asm-i386/page.h	2002-10-02 12:59:03.000000000 -0700
+++ linux-2.5.40/include/asm-i386/page.h	2002-10-02 12:59:55.000000000 -0700
@@ -3,7 +3,11 @@
 
 /* PAGE_SHIFT determines the page size */
 #define PAGE_SHIFT	12
+#ifndef __ASSEMBLY__
 #define PAGE_SIZE	(1UL << PAGE_SHIFT)
+#else
+#define PAGE_SIZE	(1 << PAGE_SHIFT)
+#endif
 #define PAGE_MASK	(~(PAGE_SIZE-1))
 
 #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
diff -ur linux-2.5.40-clean/include/asm-i386/thread_info.h linux-2.5.40/include/asm-i386/thread_info.h
--- linux-2.5.40-clean/include/asm-i386/thread_info.h	2002-10-02 12:59:03.000000000 -0700
+++ linux-2.5.40/include/asm-i386/thread_info.h	2002-10-02 12:59:55.000000000 -0700
@@ -9,6 +9,7 @@
 
 #ifdef __KERNEL__
 
+#include <asm/page.h>
 #ifndef __ASSEMBLY__
 #include <asm/processor.h>
 #endif
@@ -28,9 +29,11 @@
 	__s32			preempt_count; /* 0 => preemptable, <0 => BUG */
 
 	mm_segment_t		addr_limit;	/* thread address space:
+						   0 for interrupts: illegal
 					 	   0-0xBFFFFFFF for user-thead
 						   0-0xFFFFFFFF for kernel-thread
 						*/
+	struct thread_info	*irq_stack;	/* pointer to cpu irq stack */
 
 	__u8			supervisor_stack[0];
 };
@@ -44,6 +47,7 @@
 #define TI_CPU		0x0000000C
 #define TI_PRE_COUNT	0x00000010
 #define TI_ADDR_LIMIT	0x00000014
+#define TI_IRQ_STACK	0x00000018
 
 #endif
 
@@ -54,42 +58,40 @@
  *
  * preempt_count needs to be 1 initially, until the scheduler is functional.
  */
+#define THREAD_ORDER	0
+ 
 #ifndef __ASSEMBLY__
-#define INIT_THREAD_INFO(tsk)			\
-{						\
-	.task		= &tsk,			\
-	.exec_domain	= &default_exec_domain,	\
-	.flags		= 0,			\
-	.cpu		= 0,			\
-	.preempt_count	= 1,			\
-	.addr_limit	= KERNEL_DS,		\
-}
-
 #define init_thread_info	(init_thread_union.thread_info)
 #define init_stack		(init_thread_union.stack)
 
+/* thread information allocation */
+#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
+#define alloc_thread_info() ((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER))
+#define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_ORDER)
+#define get_thread_info(ti) get_task_struct((ti)->task)
+#define put_thread_info(ti) put_task_struct((ti)->task)
+
 /* how to get the thread information struct from C */
 static inline struct thread_info *current_thread_info(void)
 {
 	struct thread_info *ti;
-	__asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~8191UL));
+	__asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~(THREAD_SIZE - 1)));
 	return ti;
 }
 
-/* thread information allocation */
-#define THREAD_SIZE (2*PAGE_SIZE)
-#define alloc_thread_info() ((struct thread_info *) __get_free_pages(GFP_KERNEL,1))
-#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
-#define get_thread_info(ti) get_task_struct((ti)->task)
-#define put_thread_info(ti) put_task_struct((ti)->task)
-
 #else /* !__ASSEMBLY__ */
 
+#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
+
 /* how to get the thread information struct from ASM */
 #define GET_THREAD_INFO(reg) \
-	movl $-8192, reg; \
+ 	movl $-THREAD_SIZE, reg; \
 	andl %esp, reg
 
+/* use this one if reg already contains %esp */
+#define GET_THREAD_INFO_WITH_ESP(reg) \
+	andl $-THREAD_SIZE, reg
+
 #endif
 
 /*


[-- Attachment #3: interrupt_stack-2.5.40-0.patch --]
[-- Type: text/plain, Size: 84142 bytes --]

Only in linux-2.5.40-irqstack/: ..tmp_vmlinux.cmd
Only in linux-2.5.40: .Makefile.swp
Only in linux-2.5.40-irqstack/: .config
Only in linux-2.5.40-irqstack/: .config.old
Only in linux-2.5.40-irqstack/: .hdepend
Only in linux-2.5.40-irqstack/: .tmp_export-objs
Only in linux-2.5.40-irqstack/: .tmp_kallsyms.o
Only in linux-2.5.40-irqstack/: .tmp_vmlinux
Only in linux-2.5.40-irqstack/: .version
Only in linux-2.5.40-irqstack/: .vmlinux.cmd
Only in linux-2.5.40-irqstack/: System.map
Only in linux-2.5.40-irqstack/arch/i386: .vmlinux.lds.s.cmd
diff -ur linux-2.5.40/arch/i386/Makefile linux-2.5.40-irqstack/arch/i386/Makefile
--- linux-2.5.40/arch/i386/Makefile	2002-10-01 00:06:29.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/Makefile	2002-10-02 15:44:07.000000000 -0700
@@ -91,6 +91,10 @@
 MACHINE	:= mach-generic
 endif
 
+ifdef CONFIG_X86_STACK_CHECK
+CFLAGS += -p
+endif
+
 HEAD := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
 
 libs-y 					+= arch/i386/lib/
Only in linux-2.5.40-irqstack/arch/i386: Makefile.orig
Only in linux-2.5.40-irqstack/arch/i386/boot: .bootsect.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot: .bootsect.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot: .bzImage.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot: .setup.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot: .setup.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot: .vmlinux.bin.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot: bootsect
Only in linux-2.5.40-irqstack/arch/i386/boot: bootsect.o
Only in linux-2.5.40-irqstack/arch/i386/boot: bzImage
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: .head.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: .misc.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: .piggy.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: .vmlinux.bin.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: .vmlinux.bin.gz.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: .vmlinux.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: head.o
diff -ur linux-2.5.40/arch/i386/boot/compressed/misc.c linux-2.5.40-irqstack/arch/i386/boot/compressed/misc.c
--- linux-2.5.40/arch/i386/boot/compressed/misc.c	2002-10-01 00:07:05.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/boot/compressed/misc.c	2002-10-02 15:44:07.000000000 -0700
@@ -377,3 +377,7 @@
 	if (high_loaded) close_output_buffer_if_we_run_high(mv);
 	return high_loaded;
 }
+
+/* We don't actually check for stack overflows this early. */
+__asm__(".globl mcount ; mcount: ret\n");
+
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: misc.c.orig
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: misc.o
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: piggy.o
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: vmlinux
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: vmlinux.bin
Only in linux-2.5.40-irqstack/arch/i386/boot/compressed: vmlinux.bin.gz
Only in linux-2.5.40-irqstack/arch/i386/boot: setup
Only in linux-2.5.40-irqstack/arch/i386/boot: setup.o
Only in linux-2.5.40-irqstack/arch/i386/boot/tools: .build.cmd
Only in linux-2.5.40-irqstack/arch/i386/boot/tools: build
Only in linux-2.5.40-irqstack/arch/i386/boot: vmlinux.bin
diff -ur linux-2.5.40/arch/i386/config.in linux-2.5.40-irqstack/arch/i386/config.in
--- linux-2.5.40/arch/i386/config.in	2002-10-01 00:06:28.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/config.in	2002-10-04 12:32:25.000000000 -0700
@@ -35,6 +35,7 @@
 #
 # Define implied options from the CPU selection here
 #
+define_bool CONFIG_X86_HAVE_CMOV n
 
 if [ "$CONFIG_M386" = "y" ]; then
    define_bool CONFIG_X86_CMPXCHG n
@@ -91,18 +92,21 @@
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    define_bool CONFIG_X86_PPRO_FENCE y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MPENTIUMIII" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MPENTIUM4" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 7
    define_bool CONFIG_X86_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MK6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
@@ -116,6 +120,7 @@
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_3DNOW y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MELAN" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 4
@@ -132,6 +137,7 @@
 if [ "$CONFIG_MCRUSOE" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MWINCHIPC6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
@@ -453,6 +459,7 @@
       bool '  Highmem debugging' CONFIG_DEBUG_HIGHMEM
    fi
    bool '  Load all symbols for debugging/kksymoops' CONFIG_KALLSYMS
+   bool '  Check for stack overflows' CONFIG_X86_STACK_CHECK
 fi
 
 if [ "$CONFIG_X86_LOCAL_APIC" = "y" ]; then
Only in linux-2.5.40-irqstack/arch/i386: config.in.orig
Only in linux-2.5.40-irqstack/arch/i386: config.in.rej
Only in linux-2.5.40-irqstack/arch/i386/kernel: .apic.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .bluesmoke.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .bootflag.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .built-in.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .cpuid.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .dmi_scan.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .entry.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .head.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .i386_ksyms.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .i387.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .i8259.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .init_task.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .io_apic.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .ioport.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .irq.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .ldt.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .mpparse.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .msr.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .nmi.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .pci-dma.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .process.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .ptrace.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .reboot.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .semaphore.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .setup.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .signal.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .smp.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .smpboot.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .sys_i386.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .time.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .trampoline.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .traps.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: .vm86.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel: apic.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: bluesmoke.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: bootflag.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: built-in.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .amd.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .built-in.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .centaur.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .common.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .cyrix.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .intel.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .nexgen.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .proc.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .rise.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .transmeta.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: .umc.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: amd.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: built-in.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: centaur.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: common.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: cyrix.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: intel.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: .amd.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: .built-in.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: .centaur.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: .cyrix.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: .generic.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: .if.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: .main.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: .state.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: amd.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: built-in.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: centaur.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: cyrix.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: generic.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: if.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: main.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu/mtrr: state.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: nexgen.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: proc.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: rise.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: transmeta.o
Only in linux-2.5.40-irqstack/arch/i386/kernel/cpu: umc.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: cpuid.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: dmi_scan.o
diff -ur linux-2.5.40/arch/i386/kernel/entry.S linux-2.5.40-irqstack/arch/i386/kernel/entry.S
--- linux-2.5.40/arch/i386/kernel/entry.S	2002-10-01 00:06:26.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/kernel/entry.S	2002-10-04 12:32:57.000000000 -0700
@@ -136,7 +136,7 @@
 	movl %ecx,CS(%esp)	#
 	movl %esp, %ebx
 	pushl %ebx
-	andl $-8192, %ebx	# GET_THREAD_INFO
+	GET_THREAD_INFO_WITH_ESP(%ebx)
 	movl TI_EXEC_DOMAIN(%ebx), %edx	# Get the execution domain
 	movl 4(%edx), %edx	# Get the lcall7 handler for the domain
 	pushl $0x7
@@ -158,7 +158,7 @@
 	movl %ecx,CS(%esp)	#
 	movl %esp, %ebx
 	pushl %ebx
-	andl $-8192, %ebx	# GET_THREAD_INFO
+	GET_THREAD_INFO_WITH_ESP(%ebx)
 	movl TI_EXEC_DOMAIN(%ebx), %edx	# Get the execution domain
 	movl 4(%edx), %edx	# Get the lcall7 handler for the domain
 	pushl $0x27
@@ -334,7 +334,35 @@
 	ALIGN
 common_interrupt:
 	SAVE_ALL
+	GET_THREAD_INFO(%ebx)
+
+	movl TI_IRQ_STACK(%ebx),%ecx
+	movl TI_TASK(%ebx),%edx
+	movl %esp,%eax
+	leal (THREAD_SIZE-4)(%ecx),%esi # %ecx+THREAD_SIZE is next stack
+	                                # -4 keeps us in the right one
+	testl %ecx,%ecx                 # is there a valid irq_stack?
+	# switch to the irq stack
+	cmovnz %esi,%esp
+
+	# update the task pointer in the irq stack
+	GET_THREAD_INFO(%esi)
+	movl %edx,TI_TASK(%esi)
+	# preempt_count must be transferred, otherwise we get deadlocking
+	# softirqs and other madness
+	movl TI_PRE_COUNT(%ebx),%ecx
+	movl %ecx,TI_PRE_COUNT(%esi)
+
 	call do_IRQ
+	movl %eax,%esp                  # potentially restore non-irq stack
+	
+	# copy flags from the irq stack back into the task's thread_info
+	# %esi is saved over the do_IRQ call and contains the irq stack
+	# thread_info pointer
+	# %ebx contains the original thread_info pointer
+	movl TI_FLAGS(%esi),%eax
+	movl $0,TI_FLAGS(%esi)
+	LOCK orl %eax,TI_FLAGS(%ebx)
 	jmp ret_from_intr
 
 #define BUILD_INTERRUPT(name, nr)	\
@@ -481,6 +509,62 @@
 	pushl $do_spurious_interrupt_bug
 	jmp error_code
 
+#ifdef CONFIG_X86_STACK_CHECK
+.data
+	.globl	stack_overflowed
+stack_overflowed:
+	.long	0
+
+.text
+
+ENTRY(mcount)
+	push %eax
+	movl $(THREAD_SIZE - 1),%eax
+	andl %esp,%eax
+	cmpl $0x400,%eax        /* 512 byte danger zone */
+	jle 1f
+2:
+	popl %eax
+	ret
+1:
+	int $3	 
+	lock; btsl $0,stack_overflowed	/* Prevent reentry via printk */
+	jc      2b
+
+	# switch to overflow stack
+	movl	%esp,%eax
+	movl	$(stack_overflow_stack + THREAD_SIZE - 4),%esp
+
+	pushf
+	cli
+	pushl	%eax
+
+	# push eip then esp of error for stack_overflow_panic
+	pushl	4(%eax)
+	pushl	%eax
+
+	# update the task pointer and cpu in the overflow stack's thread_info.
+	GET_THREAD_INFO_WITH_ESP(%eax)
+	movl	TI_TASK(%eax),%ebx
+	movl	%ebx,stack_overflow_stack+TI_TASK
+	movl	TI_CPU(%eax),%ebx
+	movl	%ebx,stack_overflow_stack+TI_CPU
+
+	# never neverland
+	call	stack_overflow_panic
+
+	addl	$8,%esp
+
+	popf
+	popl	%eax
+	movl	%eax,%esp
+	popl	%eax
+	movl	$0,stack_overflowed
+	ret
+
+#warning stack check enabled
+#endif
+
 .data
 ENTRY(sys_call_table)
 	.long sys_ni_syscall	/* 0 - old "setup()" system call*/
Only in linux-2.5.40-irqstack/arch/i386/kernel: entry.S.orig
Only in linux-2.5.40-irqstack/arch/i386/kernel: entry.S.rej
Only in linux-2.5.40-irqstack/arch/i386/kernel: entry.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: gdbstub.c
Only in linux-2.5.40-irqstack/arch/i386/kernel: gdbstub.c.orig
Only in linux-2.5.40-irqstack/arch/i386/kernel: gdbstub.c.rej
diff -ur linux-2.5.40/arch/i386/kernel/head.S linux-2.5.40-irqstack/arch/i386/kernel/head.S
--- linux-2.5.40/arch/i386/kernel/head.S	2002-10-01 00:06:17.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/kernel/head.S	2002-10-02 15:44:07.000000000 -0700
@@ -15,6 +15,7 @@
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/desc.h>
+#include <asm/thread_info.h>
 
 #define OLD_CL_MAGIC_ADDR	0x90020
 #define OLD_CL_MAGIC		0xA33F
@@ -305,7 +306,7 @@
 	ret
 
 ENTRY(stack_start)
-	.long init_thread_union+8192
+	.long init_thread_union+THREAD_SIZE
 	.long __KERNEL_DS
 
 /* This is the default interrupt "handler" :-) */
Only in linux-2.5.40-irqstack/arch/i386/kernel: head.S.orig
Only in linux-2.5.40-irqstack/arch/i386/kernel: head.S.rej
Only in linux-2.5.40-irqstack/arch/i386/kernel: head.o
diff -ur linux-2.5.40/arch/i386/kernel/i386_ksyms.c linux-2.5.40-irqstack/arch/i386/kernel/i386_ksyms.c
--- linux-2.5.40/arch/i386/kernel/i386_ksyms.c	2002-10-01 00:06:59.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/kernel/i386_ksyms.c	2002-10-04 12:29:45.000000000 -0700
@@ -179,3 +179,8 @@
 EXPORT_SYMBOL(is_sony_vaio_laptop);
 
 EXPORT_SYMBOL(__PAGE_KERNEL);
+
+#ifdef CONFIG_X86_STACK_CHECK
+extern void mcount(void);
+EXPORT_SYMBOL(mcount);
+#endif
Only in linux-2.5.40-irqstack/arch/i386/kernel: i386_ksyms.c.orig
Only in linux-2.5.40-irqstack/arch/i386/kernel: i386_ksyms.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: i387.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: i8259.o
diff -ur linux-2.5.40/arch/i386/kernel/init_task.c linux-2.5.40-irqstack/arch/i386/kernel/init_task.c
--- linux-2.5.40/arch/i386/kernel/init_task.c	2002-10-01 00:07:43.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/kernel/init_task.c	2002-10-02 15:44:07.000000000 -0700
@@ -13,6 +13,14 @@
 static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
 struct mm_struct init_mm = INIT_MM(init_mm);
 
+union thread_union init_irq_union
+	__attribute__((__section__(".data.init_task")));
+
+#ifdef CONFIG_X86_STACK_CHECK
+union thread_union stack_overflow_stack
+	__attribute__((__section__(".data.init_task")));
+#endif
+
 /*
  * Initial thread structure.
  *
@@ -22,7 +30,15 @@
  */
 union thread_union init_thread_union 
 	__attribute__((__section__(".data.init_task"))) =
-		{ INIT_THREAD_INFO(init_task) };
+		{ { 
+			task:		&init_task,
+			exec_domain:	&default_exec_domain,
+			flags:		0,
+			cpu:		0,
+			addr_limit:	KERNEL_DS,
+			irq_stack:	&init_irq_union,
+		} };
+
 
 /*
  * Initial task structure.
Only in linux-2.5.40-irqstack/arch/i386/kernel: init_task.c.orig
Only in linux-2.5.40-irqstack/arch/i386/kernel: init_task.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: io_apic.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: ioport.o
diff -ur linux-2.5.40/arch/i386/kernel/irq.c linux-2.5.40-irqstack/arch/i386/kernel/irq.c
--- linux-2.5.40/arch/i386/kernel/irq.c	2002-10-01 00:06:16.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/kernel/irq.c	2002-10-02 15:56:42.000000000 -0700
@@ -311,7 +311,8 @@
  * SMP cross-CPU interrupts have their own specific
  * handlers).
  */
-asmlinkage unsigned int do_IRQ(struct pt_regs regs)
+struct pt_regs *do_IRQ(struct pt_regs *regs) __attribute__((regparm(1)));
+struct pt_regs *do_IRQ(struct pt_regs *regs)
 {	
 	/* 
 	 * We ack quickly, we don't want the irq controller
@@ -323,7 +324,7 @@
 	 * 0 return value means that this irq is already being
 	 * handled by some other CPU. (or is disabled)
 	 */
-	int irq = regs.orig_eax & 0xff; /* high bits used in ret_from_ code  */
+	int irq = regs->orig_eax & 0xff; /* high bits used in ret_from_ code  */
 	int cpu = smp_processor_id();
 	irq_desc_t *desc = irq_desc + irq;
 	struct irqaction * action;
@@ -373,7 +374,7 @@
 	 */
 	for (;;) {
 		spin_unlock(&desc->lock);
-		handle_IRQ_event(irq, &regs, action);
+		handle_IRQ_event(irq, regs, action);
 		spin_lock(&desc->lock);
 		
 		if (likely(!(desc->status & IRQ_PENDING)))
@@ -392,7 +393,7 @@
 
 	irq_exit();
 
-	return 1;
+	return regs;
 }
 
 /**
Only in linux-2.5.40-irqstack/arch/i386/kernel: irq.c.orig
Only in linux-2.5.40-irqstack/arch/i386/kernel: irq.c.rej
Only in linux-2.5.40-irqstack/arch/i386/kernel: irq.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: ldt.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: mpparse.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: msr.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: nmi.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: pci-dma.o
diff -ur linux-2.5.40/arch/i386/kernel/process.c linux-2.5.40-irqstack/arch/i386/kernel/process.c
--- linux-2.5.40/arch/i386/kernel/process.c	2002-10-01 00:05:46.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/kernel/process.c	2002-10-03 19:47:28.000000000 -0700
@@ -156,7 +156,17 @@
 
 __setup("idle=", idle_setup);
 
-void show_regs(struct pt_regs * regs)
+#ifdef CONFIG_X86_STACK_CHECK
+void stack_overflow_panic(void *esp, void *eip)
+{
+	printk("stack overflow from %p.  esp: %p\n", eip, esp);
+	show_trace(esp);
+	panic("stack overflow\n");
+}
+
+#endif
+
+asmlinkage void show_regs(struct pt_regs * regs)
 {
 	unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
 
@@ -413,6 +423,7 @@
 
 	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
 
+	next_p->thread_info->irq_stack = prev_p->thread_info->irq_stack;
 	unlazy_fpu(prev_p);
 
 	/*
Only in linux-2.5.40-irqstack/arch/i386/kernel: process.c.orig
Only in linux-2.5.40-irqstack/arch/i386/kernel: process.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: ptrace.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: reboot.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: semaphore.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: setup.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: signal.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: smp.o
diff -ur linux-2.5.40/arch/i386/kernel/smpboot.c linux-2.5.40-irqstack/arch/i386/kernel/smpboot.c
--- linux-2.5.40/arch/i386/kernel/smpboot.c	2002-10-01 00:06:59.000000000 -0700
+++ linux-2.5.40-irqstack/arch/i386/kernel/smpboot.c	2002-10-04 08:56:05.000000000 -0700
@@ -69,6 +69,10 @@
 /* Per CPU bogomips and other parameters */
 struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
 
+extern union thread_union init_irq_union;
+union thread_union *irq_stacks[NR_CPUS] __cacheline_aligned =
+	{ &init_irq_union, };
+
 /* Set when the idlers are all forked */
 int smp_threads_ready;
 
@@ -763,6 +767,27 @@
 	return (send_status | accept_status);
 }
 
+static void __init setup_irq_stack(struct task_struct *p, int cpu)
+{
+	unsigned long stk;
+
+	stk = __get_free_pages(GFP_KERNEL, THREAD_ORDER);
+	if (!stk)
+		panic("I can't seem to allocate my irq stack.  Oh well, giving up.");
+
+	irq_stacks[cpu] = (void *)stk;
+	memset(irq_stacks[cpu], 0, THREAD_SIZE);
+	irq_stacks[cpu]->thread_info.cpu = cpu;
+	irq_stacks[cpu]->thread_info.preempt_count = 1;
+					/* interrupts are not preemptable */
+	p->thread_info->irq_stack = irq_stacks[cpu];
+
+	/* If we want to make the irq stack more than one unit
+	 * deep, we can chain then off of the irq_stack pointer
+	 * here.
+	 */
+}
+
 extern unsigned long cpu_initialized;
 
 static void __init do_boot_cpu (int apicid) 
@@ -786,6 +811,8 @@
 	if (IS_ERR(idle))
 		panic("failed fork for CPU %d", cpu);
 
+	setup_irq_stack(idle, cpu);
+
 	/*
 	 * We remove it from the pidhash and the runqueue
 	 * once we got the process:
@@ -803,7 +830,13 @@
 
 	/* So we see what's up   */
 	printk("Booting processor %d/%d eip %lx\n", cpu, apicid, start_eip);
-	stack_start.esp = (void *) (1024 + PAGE_SIZE + (char *)idle->thread_info);
+
+	/* The -4 is to correct for the fact that the stack pointer
+	 * is used to find the location of the thread_info structure
+	 * by masking off several of the LSBs.  Without the -4, esp
+	 * is pointing to the page after the one the stack is on.
+	 */
+	stack_start.esp = (void *)(THREAD_SIZE - 4 + (char *)idle->thread_info);
 
 	/*
 	 * This grunge runs the startup process for
Only in linux-2.5.40-irqstack/arch/i386/kernel: smpboot.c.orig
Only in linux-2.5.40-irqstack/arch/i386/kernel: smpboot.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: sys_i386.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: time.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: trampoline.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: traps.o
Only in linux-2.5.40-irqstack/arch/i386/kernel: vm86.o
Only in linux-2.5.40-irqstack/arch/i386/lib: .checksum.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: .dec_and_lock.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: .delay.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: .getuser.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: .lib.a.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: .memcpy.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: .old-checksum.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: .strstr.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: .usercopy.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/lib: checksum.o
Only in linux-2.5.40-irqstack/arch/i386/lib: dec_and_lock.o
Only in linux-2.5.40-irqstack/arch/i386/lib: delay.o
Only in linux-2.5.40-irqstack/arch/i386/lib: getuser.o
Only in linux-2.5.40-irqstack/arch/i386/lib: lib.a
Only in linux-2.5.40-irqstack/arch/i386/lib: memcpy.o
Only in linux-2.5.40-irqstack/arch/i386/lib: old-checksum.o
Only in linux-2.5.40-irqstack/arch/i386/lib: strstr.o
Only in linux-2.5.40-irqstack/arch/i386/lib: usercopy.o
Only in linux-2.5.40-irqstack/arch/i386/mach-generic: .built-in.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mach-generic: .setup.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mach-generic: built-in.o
Only in linux-2.5.40-irqstack/arch/i386/mach-generic: setup.o
Only in linux-2.5.40-irqstack/arch/i386/mm: .built-in.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mm: .extable.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mm: .fault.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mm: .init.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mm: .ioremap.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mm: .pageattr.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mm: .pgtable.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/mm: built-in.o
Only in linux-2.5.40-irqstack/arch/i386/mm: extable.o
Only in linux-2.5.40-irqstack/arch/i386/mm: fault.o
Only in linux-2.5.40-irqstack/arch/i386/mm: init.o
Only in linux-2.5.40-irqstack/arch/i386/mm: ioremap.o
Only in linux-2.5.40-irqstack/arch/i386/mm: pageattr.o
Only in linux-2.5.40-irqstack/arch/i386/mm: pgtable.o
Only in linux-2.5.40-irqstack/arch/i386/pci: .built-in.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/pci: .common.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/pci: .direct.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/pci: .fixup.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/pci: .i386.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/pci: .irq.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/pci: .legacy.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/pci: .pcbios.o.cmd
Only in linux-2.5.40-irqstack/arch/i386/pci: built-in.o
Only in linux-2.5.40-irqstack/arch/i386/pci: common.o
Only in linux-2.5.40-irqstack/arch/i386/pci: direct.o
Only in linux-2.5.40-irqstack/arch/i386/pci: fixup.o
Only in linux-2.5.40-irqstack/arch/i386/pci: i386.o
Only in linux-2.5.40-irqstack/arch/i386/pci: irq.o
Only in linux-2.5.40-irqstack/arch/i386/pci: legacy.o
Only in linux-2.5.40-irqstack/arch/i386/pci: pcbios.o
Only in linux-2.5.40-irqstack/arch/i386: vmlinux.lds.s
Only in linux-2.5.40-irqstack/drivers: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .bus.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .class.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .core.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .cpu.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .driver.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .interface.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .intf.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .platform.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .power.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: .sys.o.cmd
Only in linux-2.5.40-irqstack/drivers/base: built-in.o
Only in linux-2.5.40-irqstack/drivers/base: bus.o
Only in linux-2.5.40-irqstack/drivers/base: class.o
Only in linux-2.5.40-irqstack/drivers/base: core.o
Only in linux-2.5.40-irqstack/drivers/base: cpu.o
Only in linux-2.5.40-irqstack/drivers/base: driver.o
Only in linux-2.5.40-irqstack/drivers/base/fs: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/base/fs: .bus.o.cmd
Only in linux-2.5.40-irqstack/drivers/base/fs: .class.o.cmd
Only in linux-2.5.40-irqstack/drivers/base/fs: .device.o.cmd
Only in linux-2.5.40-irqstack/drivers/base/fs: .driver.o.cmd
Only in linux-2.5.40-irqstack/drivers/base/fs: .intf.o.cmd
Only in linux-2.5.40-irqstack/drivers/base/fs: built-in.o
Only in linux-2.5.40-irqstack/drivers/base/fs: bus.o
Only in linux-2.5.40-irqstack/drivers/base/fs: class.o
Only in linux-2.5.40-irqstack/drivers/base/fs: device.o
Only in linux-2.5.40-irqstack/drivers/base/fs: driver.o
Only in linux-2.5.40-irqstack/drivers/base/fs: intf.o
Only in linux-2.5.40-irqstack/drivers/base: interface.o
Only in linux-2.5.40-irqstack/drivers/base: intf.o
Only in linux-2.5.40-irqstack/drivers/base: platform.o
Only in linux-2.5.40-irqstack/drivers/base: power.o
Only in linux-2.5.40-irqstack/drivers/base: sys.o
Only in linux-2.5.40-irqstack/drivers/block: .blkpg.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: .block_ioctl.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: .deadline-iosched.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: .elevator.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: .floppy.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: .genhd.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: .ll_rw_blk.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: .loop.o.cmd
Only in linux-2.5.40-irqstack/drivers/block: blkpg.o
Only in linux-2.5.40-irqstack/drivers/block: block_ioctl.o
Only in linux-2.5.40-irqstack/drivers/block: built-in.o
Only in linux-2.5.40-irqstack/drivers/block: deadline-iosched.o
Only in linux-2.5.40-irqstack/drivers/block: elevator.o
Only in linux-2.5.40-irqstack/drivers/block: floppy.o
Only in linux-2.5.40-irqstack/drivers/block: genhd.o
Only in linux-2.5.40-irqstack/drivers/block: ll_rw_blk.o
Only in linux-2.5.40-irqstack/drivers/block: loop.o
Only in linux-2.5.40-irqstack/drivers: built-in.o
Only in linux-2.5.40-irqstack/drivers/cdrom: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/cdrom: .cdrom.o.cmd
Only in linux-2.5.40-irqstack/drivers/cdrom: built-in.o
Only in linux-2.5.40-irqstack/drivers/cdrom: cdrom.o
Only in linux-2.5.40-irqstack/drivers/char: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .consolemap.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .consolemap_deftbl.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .defkeymap.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .i810_rng.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .keyboard.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .mem.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .misc.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .n_tty.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .pty.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .random.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .selection.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .sysrq.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .tty_io.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .tty_ioctl.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .vc_screen.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .vt.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: .vt_ioctl.o.cmd
Only in linux-2.5.40-irqstack/drivers/char: built-in.o
Only in linux-2.5.40-irqstack/drivers/char: consolemap.o
Only in linux-2.5.40-irqstack/drivers/char: consolemap_deftbl.c
Only in linux-2.5.40-irqstack/drivers/char: consolemap_deftbl.o
Only in linux-2.5.40-irqstack/drivers/char: defkeymap.c
Only in linux-2.5.40-irqstack/drivers/char: defkeymap.o
Only in linux-2.5.40-irqstack/drivers/char: gdbserial.c
Only in linux-2.5.40-irqstack/drivers/char: gdbserial.c.orig
Only in linux-2.5.40-irqstack/drivers/char: gdbserial.c.rej
Only in linux-2.5.40-irqstack/drivers/char: i810_rng.o
Only in linux-2.5.40-irqstack/drivers/char: keyboard.o
Only in linux-2.5.40-irqstack/drivers/char: mem.o
Only in linux-2.5.40-irqstack/drivers/char: misc.o
Only in linux-2.5.40-irqstack/drivers/char: n_tty.o
Only in linux-2.5.40-irqstack/drivers/char: pty.o
Only in linux-2.5.40-irqstack/drivers/char: random.o
Only in linux-2.5.40-irqstack/drivers/char: selection.o
Only in linux-2.5.40-irqstack/drivers/char: sysrq.o
Only in linux-2.5.40-irqstack/drivers/char: tty_io.o
Only in linux-2.5.40-irqstack/drivers/char: tty_ioctl.o
Only in linux-2.5.40-irqstack/drivers/char: vc_screen.o
Only in linux-2.5.40-irqstack/drivers/char: vt.o
Only in linux-2.5.40-irqstack/drivers/char: vt_ioctl.o
Only in linux-2.5.40-irqstack/drivers/ide: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-cd.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-disk.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-dma.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-geometry.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-iops.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-lib.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-probe.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-proc.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide-taskfile.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .ide.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide: .setup-pci.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide/arm: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide/arm: built-in.o
Only in linux-2.5.40-irqstack/drivers/ide: built-in.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-cd.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-disk.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-dma.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-geometry.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-iops.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-lib.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-probe.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-proc.o
Only in linux-2.5.40-irqstack/drivers/ide: ide-taskfile.o
Only in linux-2.5.40-irqstack/drivers/ide: ide.o
Only in linux-2.5.40-irqstack/drivers/ide/legacy: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide/legacy: built-in.o
Only in linux-2.5.40-irqstack/drivers/ide/pci: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide/pci: .cmd640.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide/pci: .piix.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide/pci: built-in.o
Only in linux-2.5.40-irqstack/drivers/ide/pci: cmd640.o
Only in linux-2.5.40-irqstack/drivers/ide/pci: piix.o
Only in linux-2.5.40-irqstack/drivers/ide/ppc: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/ide/ppc: built-in.o
Only in linux-2.5.40-irqstack/drivers/ide: setup-pci.o
Only in linux-2.5.40-irqstack/drivers/input: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/input: .evbug.o.cmd
Only in linux-2.5.40-irqstack/drivers/input: .evdev.o.cmd
Only in linux-2.5.40-irqstack/drivers/input: .input.o.cmd
Only in linux-2.5.40-irqstack/drivers/input: .joydev.o.cmd
Only in linux-2.5.40-irqstack/drivers/input: .mousedev.o.cmd
Only in linux-2.5.40-irqstack/drivers/input: built-in.o
Only in linux-2.5.40-irqstack/drivers/input: evbug.o
Only in linux-2.5.40-irqstack/drivers/input: evdev.o
Only in linux-2.5.40-irqstack/drivers/input: input.o
Only in linux-2.5.40-irqstack/drivers/input: joydev.o
Only in linux-2.5.40-irqstack/drivers/input/keyboard: .atkbd.o.cmd
Only in linux-2.5.40-irqstack/drivers/input/keyboard: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/input/keyboard: atkbd.o
Only in linux-2.5.40-irqstack/drivers/input/keyboard: built-in.o
Only in linux-2.5.40-irqstack/drivers/input/mouse: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/input/mouse: .psmouse.o.cmd
Only in linux-2.5.40-irqstack/drivers/input/mouse: built-in.o
Only in linux-2.5.40-irqstack/drivers/input/mouse: psmouse.o
Only in linux-2.5.40-irqstack/drivers/input: mousedev.o
Only in linux-2.5.40-irqstack/drivers/input/serio: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/input/serio: .i8042.o.cmd
Only in linux-2.5.40-irqstack/drivers/input/serio: .serio.o.cmd
Only in linux-2.5.40-irqstack/drivers/input/serio: .serport.o.cmd
Only in linux-2.5.40-irqstack/drivers/input/serio: built-in.o
Only in linux-2.5.40-irqstack/drivers/input/serio: i8042.o
Only in linux-2.5.40-irqstack/drivers/input/serio: serio.o
Only in linux-2.5.40-irqstack/drivers/input/serio: serport.o
Only in linux-2.5.40-irqstack/drivers/media: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/media: built-in.o
Only in linux-2.5.40-irqstack/drivers/media/radio: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/media/radio: built-in.o
Only in linux-2.5.40-irqstack/drivers/media/video: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/media/video: built-in.o
Only in linux-2.5.40-irqstack/drivers/misc: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/misc: built-in.o
Only in linux-2.5.40-irqstack/drivers/net: .Space.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .dummy.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .eepro100.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .loopback.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .mii.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .net_init.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .pcnet32.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .setup.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: .starfire.o.cmd
Only in linux-2.5.40-irqstack/drivers/net: Space.o
Only in linux-2.5.40-irqstack/drivers/net: built-in.o
Only in linux-2.5.40-irqstack/drivers/net: dummy.o
Only in linux-2.5.40-irqstack/drivers/net: eepro100.o
Only in linux-2.5.40-irqstack/drivers/net: loopback.o
Only in linux-2.5.40-irqstack/drivers/net: mii.o
Only in linux-2.5.40-irqstack/drivers/net: net_init.o
Only in linux-2.5.40-irqstack/drivers/net: pcnet32.o
Only in linux-2.5.40-irqstack/drivers/net: setup.o
Only in linux-2.5.40-irqstack/drivers/net: starfire.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: .21142.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .eeprom.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .interrupt.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .media.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .pnic.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .pnic2.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .timer.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .tulip.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: .tulip_core.o.cmd
Only in linux-2.5.40-irqstack/drivers/net/tulip: 21142.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: built-in.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: eeprom.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: interrupt.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: media.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: pnic.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: pnic2.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: timer.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: tulip.o
Only in linux-2.5.40-irqstack/drivers/net/tulip: tulip_core.o
Only in linux-2.5.40-irqstack/drivers/pci: .access.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .compat.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .gen-devlist.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .hotplug.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .names.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .pci-driver.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .pci.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .pool.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .probe.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .proc.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .quirks.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .search.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: .setup-res.o.cmd
Only in linux-2.5.40-irqstack/drivers/pci: access.o
Only in linux-2.5.40-irqstack/drivers/pci: built-in.o
Only in linux-2.5.40-irqstack/drivers/pci: classlist.h
Only in linux-2.5.40-irqstack/drivers/pci: compat.o
Only in linux-2.5.40-irqstack/drivers/pci: devlist.h
Only in linux-2.5.40-irqstack/drivers/pci: gen-devlist
Only in linux-2.5.40-irqstack/drivers/pci: hotplug.o
Only in linux-2.5.40-irqstack/drivers/pci: names.o
Only in linux-2.5.40-irqstack/drivers/pci: pci-driver.o
Only in linux-2.5.40-irqstack/drivers/pci: pci.o
Only in linux-2.5.40-irqstack/drivers/pci: pool.o
Only in linux-2.5.40-irqstack/drivers/pci: probe.o
Only in linux-2.5.40-irqstack/drivers/pci: proc.o
Only in linux-2.5.40-irqstack/drivers/pci: quirks.o
Only in linux-2.5.40-irqstack/drivers/pci: search.o
Only in linux-2.5.40-irqstack/drivers/pci: setup-res.o
Only in linux-2.5.40-irqstack/drivers/scsi: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .constants.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .hosts.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .ips.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .qlogicisp.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi_error.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi_ioctl.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi_lib.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi_merge.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi_mod.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi_proc.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi_scan.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsi_syms.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .scsicam.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .sd.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .sd_mod.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .sg.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .sr.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .sr_ioctl.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .sr_mod.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .sr_vendor.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi: .st.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7770.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7770_linux.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7xxx.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7xxx_93cx6.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7xxx_core.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7xxx_linux.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7xxx_linux_pci.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7xxx_pci.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .aic7xxx_proc.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7770.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7770_linux.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx_93cx6.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx_core.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx_linux.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx_linux_pci.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx_pci.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx_proc.o
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx_reg.h
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: aic7xxx_seq.h
Only in linux-2.5.40-irqstack/drivers/scsi/aic7xxx: built-in.o
Only in linux-2.5.40-irqstack/drivers/scsi: built-in.o
Only in linux-2.5.40-irqstack/drivers/scsi: constants.o
Only in linux-2.5.40-irqstack/drivers/scsi: hosts.o
Only in linux-2.5.40-irqstack/drivers/scsi: ips.o
Only in linux-2.5.40-irqstack/drivers/scsi: qlogicisp.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi_error.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi_ioctl.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi_lib.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi_merge.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi_mod.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi_proc.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi_scan.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsi_syms.o
Only in linux-2.5.40-irqstack/drivers/scsi: scsicam.o
Only in linux-2.5.40-irqstack/drivers/scsi: sd.o
Only in linux-2.5.40-irqstack/drivers/scsi: sd_mod.o
Only in linux-2.5.40-irqstack/drivers/scsi: sg.o
Only in linux-2.5.40-irqstack/drivers/scsi: sr.o
Only in linux-2.5.40-irqstack/drivers/scsi: sr_ioctl.o
Only in linux-2.5.40-irqstack/drivers/scsi: sr_mod.o
Only in linux-2.5.40-irqstack/drivers/scsi: sr_vendor.o
Only in linux-2.5.40-irqstack/drivers/scsi: st.o
Only in linux-2.5.40-irqstack/drivers/serial: .8250.o.cmd
Only in linux-2.5.40-irqstack/drivers/serial: .8250_pci.o.cmd
Only in linux-2.5.40-irqstack/drivers/serial: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/serial: .core.o.cmd
Only in linux-2.5.40-irqstack/drivers/serial: 8250.o
Only in linux-2.5.40-irqstack/drivers/serial: 8250_pci.o
Only in linux-2.5.40-irqstack/drivers/serial: built-in.o
Only in linux-2.5.40-irqstack/drivers/serial: core.o
Only in linux-2.5.40-irqstack/drivers/video: .built-in.o.cmd
Only in linux-2.5.40-irqstack/drivers/video: .vgacon.o.cmd
Only in linux-2.5.40-irqstack/drivers/video: built-in.o
Only in linux-2.5.40-irqstack/drivers/video: vgacon.o
Only in linux-2.5.40-irqstack/fs: .aio.o.cmd
Only in linux-2.5.40-irqstack/fs: .attr.o.cmd
Only in linux-2.5.40-irqstack/fs: .bad_inode.o.cmd
Only in linux-2.5.40-irqstack/fs: .binfmt_aout.o.cmd
Only in linux-2.5.40-irqstack/fs: .binfmt_elf.o.cmd
Only in linux-2.5.40-irqstack/fs: .binfmt_misc.o.cmd
Only in linux-2.5.40-irqstack/fs: .binfmt_script.o.cmd
Only in linux-2.5.40-irqstack/fs: .bio.o.cmd
Only in linux-2.5.40-irqstack/fs: .block_dev.o.cmd
Only in linux-2.5.40-irqstack/fs: .buffer.o.cmd
Only in linux-2.5.40-irqstack/fs: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs: .char_dev.o.cmd
Only in linux-2.5.40-irqstack/fs: .dcache.o.cmd
Only in linux-2.5.40-irqstack/fs: .devices.o.cmd
Only in linux-2.5.40-irqstack/fs: .direct-io.o.cmd
Only in linux-2.5.40-irqstack/fs: .dnotify.o.cmd
Only in linux-2.5.40-irqstack/fs: .exec.o.cmd
Only in linux-2.5.40-irqstack/fs: .fcntl.o.cmd
Only in linux-2.5.40-irqstack/fs: .fifo.o.cmd
Only in linux-2.5.40-irqstack/fs: .file.o.cmd
Only in linux-2.5.40-irqstack/fs: .file_table.o.cmd
Only in linux-2.5.40-irqstack/fs: .filesystems.o.cmd
Only in linux-2.5.40-irqstack/fs: .fs-writeback.o.cmd
Only in linux-2.5.40-irqstack/fs: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs: .iobuf.o.cmd
Only in linux-2.5.40-irqstack/fs: .ioctl.o.cmd
Only in linux-2.5.40-irqstack/fs: .libfs.o.cmd
Only in linux-2.5.40-irqstack/fs: .locks.o.cmd
Only in linux-2.5.40-irqstack/fs: .mpage.o.cmd
Only in linux-2.5.40-irqstack/fs: .namei.o.cmd
Only in linux-2.5.40-irqstack/fs: .namespace.o.cmd
Only in linux-2.5.40-irqstack/fs: .nfsctl.o.cmd
Only in linux-2.5.40-irqstack/fs: .open.o.cmd
Only in linux-2.5.40-irqstack/fs: .pipe.o.cmd
Only in linux-2.5.40-irqstack/fs: .read_write.o.cmd
Only in linux-2.5.40-irqstack/fs: .readdir.o.cmd
Only in linux-2.5.40-irqstack/fs: .select.o.cmd
Only in linux-2.5.40-irqstack/fs: .seq_file.o.cmd
Only in linux-2.5.40-irqstack/fs: .stat.o.cmd
Only in linux-2.5.40-irqstack/fs: .super.o.cmd
Only in linux-2.5.40-irqstack/fs: .xattr.o.cmd
Only in linux-2.5.40-irqstack/fs: aio.o
Only in linux-2.5.40-irqstack/fs: attr.o
Only in linux-2.5.40-irqstack/fs: bad_inode.o
Only in linux-2.5.40-irqstack/fs: binfmt_aout.o
Only in linux-2.5.40-irqstack/fs: binfmt_elf.o
Only in linux-2.5.40-irqstack/fs: binfmt_misc.o
Only in linux-2.5.40-irqstack/fs: binfmt_script.o
Only in linux-2.5.40-irqstack/fs: bio.o
Only in linux-2.5.40-irqstack/fs: block_dev.o
Only in linux-2.5.40-irqstack/fs: buffer.o
Only in linux-2.5.40-irqstack/fs: built-in.o
Only in linux-2.5.40-irqstack/fs: char_dev.o
Only in linux-2.5.40-irqstack/fs: dcache.o
Only in linux-2.5.40-irqstack/fs: devices.o
Only in linux-2.5.40-irqstack/fs/devpts: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/devpts: .devpts.o.cmd
Only in linux-2.5.40-irqstack/fs/devpts: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/devpts: built-in.o
Only in linux-2.5.40-irqstack/fs/devpts: devpts.o
Only in linux-2.5.40-irqstack/fs/devpts: inode.o
Only in linux-2.5.40-irqstack/fs: direct-io.o
Only in linux-2.5.40-irqstack/fs: dnotify.o
Only in linux-2.5.40-irqstack/fs/driverfs: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/driverfs: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/driverfs: built-in.o
Only in linux-2.5.40-irqstack/fs/driverfs: inode.o
Only in linux-2.5.40-irqstack/fs: exec.o
Only in linux-2.5.40-irqstack/fs/exportfs: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/exportfs: .expfs.o.cmd
Only in linux-2.5.40-irqstack/fs/exportfs: .exportfs.o.cmd
Only in linux-2.5.40-irqstack/fs/exportfs: built-in.o
Only in linux-2.5.40-irqstack/fs/exportfs: expfs.o
Only in linux-2.5.40-irqstack/fs/exportfs: exportfs.o
Only in linux-2.5.40-irqstack/fs/ext2: .balloc.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .bitmap.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .dir.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .ext2.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .file.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .fsync.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .ialloc.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .ioctl.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .namei.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .super.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: .symlink.o.cmd
Only in linux-2.5.40-irqstack/fs/ext2: balloc.o
Only in linux-2.5.40-irqstack/fs/ext2: bitmap.o
Only in linux-2.5.40-irqstack/fs/ext2: built-in.o
Only in linux-2.5.40-irqstack/fs/ext2: dir.o
Only in linux-2.5.40-irqstack/fs/ext2: ext2.o
Only in linux-2.5.40-irqstack/fs/ext2: file.o
Only in linux-2.5.40-irqstack/fs/ext2: fsync.o
Only in linux-2.5.40-irqstack/fs/ext2: ialloc.o
Only in linux-2.5.40-irqstack/fs/ext2: inode.o
Only in linux-2.5.40-irqstack/fs/ext2: ioctl.o
Only in linux-2.5.40-irqstack/fs/ext2: namei.o
Only in linux-2.5.40-irqstack/fs/ext2: super.o
Only in linux-2.5.40-irqstack/fs/ext2: symlink.o
Only in linux-2.5.40-irqstack/fs/ext3: .balloc.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .bitmap.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .dir.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .ext3.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .file.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .fsync.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .ialloc.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .ioctl.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .namei.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .super.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: .symlink.o.cmd
Only in linux-2.5.40-irqstack/fs/ext3: balloc.o
Only in linux-2.5.40-irqstack/fs/ext3: bitmap.o
Only in linux-2.5.40-irqstack/fs/ext3: built-in.o
Only in linux-2.5.40-irqstack/fs/ext3: dir.o
Only in linux-2.5.40-irqstack/fs/ext3: ext3.o
Only in linux-2.5.40-irqstack/fs/ext3: file.o
Only in linux-2.5.40-irqstack/fs/ext3: fsync.o
Only in linux-2.5.40-irqstack/fs/ext3: ialloc.o
Only in linux-2.5.40-irqstack/fs/ext3: inode.o
Only in linux-2.5.40-irqstack/fs/ext3: ioctl.o
Only in linux-2.5.40-irqstack/fs/ext3: namei.o
Only in linux-2.5.40-irqstack/fs/ext3: super.o
Only in linux-2.5.40-irqstack/fs/ext3: symlink.o
Only in linux-2.5.40-irqstack/fs: fcntl.o
Only in linux-2.5.40-irqstack/fs: fifo.o
Only in linux-2.5.40-irqstack/fs: file.o
Only in linux-2.5.40-irqstack/fs: file_table.o
Only in linux-2.5.40-irqstack/fs: filesystems.o
Only in linux-2.5.40-irqstack/fs: fs-writeback.o
Only in linux-2.5.40-irqstack/fs: inode.o
Only in linux-2.5.40-irqstack/fs: iobuf.o
Only in linux-2.5.40-irqstack/fs: ioctl.o
Only in linux-2.5.40-irqstack/fs/isofs: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: .compress.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: .dir.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: .isofs.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: .joliet.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: .namei.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: .rock.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: .util.o.cmd
Only in linux-2.5.40-irqstack/fs/isofs: built-in.o
Only in linux-2.5.40-irqstack/fs/isofs: compress.o
Only in linux-2.5.40-irqstack/fs/isofs: dir.o
Only in linux-2.5.40-irqstack/fs/isofs: inode.o
Only in linux-2.5.40-irqstack/fs/isofs: isofs.o
Only in linux-2.5.40-irqstack/fs/isofs: joliet.o
Only in linux-2.5.40-irqstack/fs/isofs: namei.o
Only in linux-2.5.40-irqstack/fs/isofs: rock.o
Only in linux-2.5.40-irqstack/fs/isofs: util.o
Only in linux-2.5.40-irqstack/fs/jbd: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/jbd: .checkpoint.o.cmd
Only in linux-2.5.40-irqstack/fs/jbd: .commit.o.cmd
Only in linux-2.5.40-irqstack/fs/jbd: .jbd.o.cmd
Only in linux-2.5.40-irqstack/fs/jbd: .journal.o.cmd
Only in linux-2.5.40-irqstack/fs/jbd: .recovery.o.cmd
Only in linux-2.5.40-irqstack/fs/jbd: .revoke.o.cmd
Only in linux-2.5.40-irqstack/fs/jbd: .transaction.o.cmd
Only in linux-2.5.40-irqstack/fs/jbd: built-in.o
Only in linux-2.5.40-irqstack/fs/jbd: checkpoint.o
Only in linux-2.5.40-irqstack/fs/jbd: commit.o
Only in linux-2.5.40-irqstack/fs/jbd: jbd.o
Only in linux-2.5.40-irqstack/fs/jbd: journal.o
Only in linux-2.5.40-irqstack/fs/jbd: recovery.o
Only in linux-2.5.40-irqstack/fs/jbd: revoke.o
Only in linux-2.5.40-irqstack/fs/jbd: transaction.o
Only in linux-2.5.40-irqstack/fs: libfs.o
Only in linux-2.5.40-irqstack/fs/lockd: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .clntlock.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .clntproc.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .host.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .lockd.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .lockd_syms.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .mon.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .svc.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .svc4proc.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .svclock.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .svcproc.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .svcshare.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .svcsubs.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .xdr.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: .xdr4.o.cmd
Only in linux-2.5.40-irqstack/fs/lockd: built-in.o
Only in linux-2.5.40-irqstack/fs/lockd: clntlock.o
Only in linux-2.5.40-irqstack/fs/lockd: clntproc.o
Only in linux-2.5.40-irqstack/fs/lockd: host.o
Only in linux-2.5.40-irqstack/fs/lockd: lockd.o
Only in linux-2.5.40-irqstack/fs/lockd: lockd_syms.o
Only in linux-2.5.40-irqstack/fs/lockd: mon.o
Only in linux-2.5.40-irqstack/fs/lockd: svc.o
Only in linux-2.5.40-irqstack/fs/lockd: svc4proc.o
Only in linux-2.5.40-irqstack/fs/lockd: svclock.o
Only in linux-2.5.40-irqstack/fs/lockd: svcproc.o
Only in linux-2.5.40-irqstack/fs/lockd: svcshare.o
Only in linux-2.5.40-irqstack/fs/lockd: svcsubs.o
Only in linux-2.5.40-irqstack/fs/lockd: xdr.o
Only in linux-2.5.40-irqstack/fs/lockd: xdr4.o
Only in linux-2.5.40-irqstack/fs: locks.o
Only in linux-2.5.40-irqstack/fs: mpage.o
Only in linux-2.5.40-irqstack/fs: namei.o
Only in linux-2.5.40-irqstack/fs: namespace.o
Only in linux-2.5.40-irqstack/fs/nfs: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .dir.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .file.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .flushd.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .nfs.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .nfs2xdr.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .nfs3proc.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .nfs3xdr.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .pagelist.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .proc.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .read.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .symlink.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .unlink.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: .write.o.cmd
Only in linux-2.5.40-irqstack/fs/nfs: built-in.o
Only in linux-2.5.40-irqstack/fs/nfs: dir.o
Only in linux-2.5.40-irqstack/fs/nfs: file.o
Only in linux-2.5.40-irqstack/fs/nfs: flushd.o
Only in linux-2.5.40-irqstack/fs/nfs: inode.o
Only in linux-2.5.40-irqstack/fs/nfs: nfs.o
Only in linux-2.5.40-irqstack/fs/nfs: nfs2xdr.o
Only in linux-2.5.40-irqstack/fs/nfs: nfs3proc.o
Only in linux-2.5.40-irqstack/fs/nfs: nfs3xdr.o
Only in linux-2.5.40-irqstack/fs/nfs: pagelist.o
Only in linux-2.5.40-irqstack/fs/nfs: proc.o
Only in linux-2.5.40-irqstack/fs/nfs: read.o
Only in linux-2.5.40-irqstack/fs/nfs: symlink.o
Only in linux-2.5.40-irqstack/fs/nfs: unlink.o
Only in linux-2.5.40-irqstack/fs/nfs: write.o
Only in linux-2.5.40-irqstack/fs: nfsctl.o
Only in linux-2.5.40-irqstack/fs/nfsd: .auth.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .export.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .lockd.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfs3proc.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfs3xdr.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfscache.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfsctl.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfsd.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfsfh.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfsproc.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfssvc.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .nfsxdr.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .stats.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: .vfs.o.cmd
Only in linux-2.5.40-irqstack/fs/nfsd: auth.o
Only in linux-2.5.40-irqstack/fs/nfsd: built-in.o
Only in linux-2.5.40-irqstack/fs/nfsd: export.o
Only in linux-2.5.40-irqstack/fs/nfsd: lockd.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfs3proc.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfs3xdr.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfscache.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfsctl.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfsd.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfsfh.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfsproc.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfssvc.o
Only in linux-2.5.40-irqstack/fs/nfsd: nfsxdr.o
Only in linux-2.5.40-irqstack/fs/nfsd: stats.o
Only in linux-2.5.40-irqstack/fs/nfsd: vfs.o
Only in linux-2.5.40-irqstack/fs/nls: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/nls: .nls_base.o.cmd
Only in linux-2.5.40-irqstack/fs/nls: built-in.o
Only in linux-2.5.40-irqstack/fs/nls: nls_base.o
Only in linux-2.5.40-irqstack/fs: open.o
Only in linux-2.5.40-irqstack/fs/partitions: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/partitions: .check.o.cmd
Only in linux-2.5.40-irqstack/fs/partitions: .msdos.o.cmd
Only in linux-2.5.40-irqstack/fs/partitions: built-in.o
Only in linux-2.5.40-irqstack/fs/partitions: check.o
Only in linux-2.5.40-irqstack/fs/partitions: msdos.o
Only in linux-2.5.40-irqstack/fs: pipe.o
Only in linux-2.5.40-irqstack/fs/proc: .array.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .base.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .generic.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .kcore.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .kmsg.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .proc.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .proc_misc.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .proc_tty.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: .root.o.cmd
Only in linux-2.5.40-irqstack/fs/proc: array.o
Only in linux-2.5.40-irqstack/fs/proc: base.o
Only in linux-2.5.40-irqstack/fs/proc: built-in.o
Only in linux-2.5.40-irqstack/fs/proc: generic.o
Only in linux-2.5.40-irqstack/fs/proc: inode.o
Only in linux-2.5.40-irqstack/fs/proc: kcore.o
Only in linux-2.5.40-irqstack/fs/proc: kmsg.o
Only in linux-2.5.40-irqstack/fs/proc: proc.o
Only in linux-2.5.40-irqstack/fs/proc: proc_misc.o
Only in linux-2.5.40-irqstack/fs/proc: proc_tty.o
Only in linux-2.5.40-irqstack/fs/proc: root.o
Only in linux-2.5.40-irqstack/fs/ramfs: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/ramfs: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/ramfs: .ramfs.o.cmd
Only in linux-2.5.40-irqstack/fs/ramfs: built-in.o
Only in linux-2.5.40-irqstack/fs/ramfs: inode.o
Only in linux-2.5.40-irqstack/fs/ramfs: ramfs.o
Only in linux-2.5.40-irqstack/fs: read_write.o
Only in linux-2.5.40-irqstack/fs: readdir.o
Only in linux-2.5.40-irqstack/fs: select.o
Only in linux-2.5.40-irqstack/fs: seq_file.o
Only in linux-2.5.40-irqstack/fs/smbfs: .built-in.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .cache.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .dir.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .file.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .getopt.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .inode.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .ioctl.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .proc.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .request.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .smbfs.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .smbiod.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .sock.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: .symlink.o.cmd
Only in linux-2.5.40-irqstack/fs/smbfs: built-in.o
Only in linux-2.5.40-irqstack/fs/smbfs: cache.o
Only in linux-2.5.40-irqstack/fs/smbfs: dir.o
Only in linux-2.5.40-irqstack/fs/smbfs: file.o
Only in linux-2.5.40-irqstack/fs/smbfs: getopt.o
Only in linux-2.5.40-irqstack/fs/smbfs: inode.o
Only in linux-2.5.40-irqstack/fs/smbfs: ioctl.o
Only in linux-2.5.40-irqstack/fs/smbfs: proc.o
Only in linux-2.5.40-irqstack/fs/smbfs: request.o
Only in linux-2.5.40-irqstack/fs/smbfs: smbfs.o
Only in linux-2.5.40-irqstack/fs/smbfs: smbiod.o
Only in linux-2.5.40-irqstack/fs/smbfs: sock.o
Only in linux-2.5.40-irqstack/fs/smbfs: symlink.o
Only in linux-2.5.40-irqstack/fs: stat.o
Only in linux-2.5.40-irqstack/fs: super.o
Only in linux-2.5.40-irqstack/fs: xattr.o
Only in linux-2.5.40-irqstack/include: asm
diff -ur linux-2.5.40/include/asm-i386/page.h linux-2.5.40-irqstack/include/asm-i386/page.h
--- linux-2.5.40/include/asm-i386/page.h	2002-10-01 00:06:18.000000000 -0700
+++ linux-2.5.40-irqstack/include/asm-i386/page.h	2002-10-04 12:29:45.000000000 -0700
@@ -3,7 +3,11 @@
 
 /* PAGE_SHIFT determines the page size */
 #define PAGE_SHIFT	12
+#ifndef __ASSEMBLY__
 #define PAGE_SIZE	(1UL << PAGE_SHIFT)
+#else
+#define PAGE_SIZE	(1 << PAGE_SHIFT)
+#endif
 #define PAGE_MASK	(~(PAGE_SIZE-1))
 
 #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
Only in linux-2.5.40-irqstack/include/asm-i386: page.h.orig
diff -ur linux-2.5.40/include/asm-i386/thread_info.h linux-2.5.40-irqstack/include/asm-i386/thread_info.h
--- linux-2.5.40/include/asm-i386/thread_info.h	2002-10-01 00:06:18.000000000 -0700
+++ linux-2.5.40-irqstack/include/asm-i386/thread_info.h	2002-10-03 18:08:08.000000000 -0700
@@ -9,6 +9,7 @@
 
 #ifdef __KERNEL__
 
+#include <asm/page.h>
 #ifndef __ASSEMBLY__
 #include <asm/processor.h>
 #endif
@@ -28,9 +29,11 @@
 	__s32			preempt_count; /* 0 => preemptable, <0 => BUG */
 
 	mm_segment_t		addr_limit;	/* thread address space:
+						   0 for interrupts: illegal
 					 	   0-0xBFFFFFFF for user-thead
 						   0-0xFFFFFFFF for kernel-thread
 						*/
+	struct thread_info	*irq_stack;	/* pointer to cpu irq stack */
 
 	__u8			supervisor_stack[0];
 };
@@ -44,6 +47,7 @@
 #define TI_CPU		0x0000000C
 #define TI_PRE_COUNT	0x00000010
 #define TI_ADDR_LIMIT	0x00000014
+#define TI_IRQ_STACK	0x00000018
 
 #endif
 
@@ -54,42 +58,43 @@
  *
  * preempt_count needs to be 1 initially, until the scheduler is functional.
  */
+#define THREAD_ORDER 0 
+#define INIT_THREAD_SIZE       THREAD_SIZE
+
 #ifndef __ASSEMBLY__
-#define INIT_THREAD_INFO(tsk)			\
-{						\
-	.task		= &tsk,			\
-	.exec_domain	= &default_exec_domain,	\
-	.flags		= 0,			\
-	.cpu		= 0,			\
-	.preempt_count	= 1,			\
-	.addr_limit	= KERNEL_DS,		\
-}
 
 #define init_thread_info	(init_thread_union.thread_info)
 #define init_stack		(init_thread_union.stack)
 
+/* thread information allocation */
+#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
+#define alloc_thread_info() ((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER))
+#define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_ORDER)
+#define get_thread_info(ti) get_task_struct((ti)->task)
+#define put_thread_info(ti) put_task_struct((ti)->task)
+
 /* how to get the thread information struct from C */
 static inline struct thread_info *current_thread_info(void)
 {
 	struct thread_info *ti;
-	__asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~8191UL));
+	__asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~(THREAD_SIZE - 1)));
 	return ti;
 }
 
 /* thread information allocation */
-#define THREAD_SIZE (2*PAGE_SIZE)
-#define alloc_thread_info() ((struct thread_info *) __get_free_pages(GFP_KERNEL,1))
-#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
-#define get_thread_info(ti) get_task_struct((ti)->task)
-#define put_thread_info(ti) put_task_struct((ti)->task)
-
 #else /* !__ASSEMBLY__ */
 
+#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
+
 /* how to get the thread information struct from ASM */
 #define GET_THREAD_INFO(reg) \
-	movl $-8192, reg; \
+	movl $-THREAD_SIZE, reg; \
 	andl %esp, reg
 
+/* use this one if reg already contains %esp */
+#define GET_THREAD_INFO_WITH_ESP(reg) \
+	andl $-THREAD_SIZE, reg
+	
 #endif
 
 /*
Only in linux-2.5.40-irqstack/include/asm-i386: thread_info.h.orig
Only in linux-2.5.40-irqstack/include/asm-i386: thread_info.h.rej
Only in linux-2.5.40-irqstack/include: config
Only in linux-2.5.40-irqstack/include/linux: autoconf.h
Only in linux-2.5.40-irqstack/include/linux: compile.h
Only in linux-2.5.40-irqstack/include/linux: modules
Only in linux-2.5.40-irqstack/include/linux: modversions.h
Only in linux-2.5.40-irqstack/include/linux: version.h
Only in linux-2.5.40-irqstack/init: .built-in.o.cmd
Only in linux-2.5.40-irqstack/init: .do_mounts.o.cmd
Only in linux-2.5.40-irqstack/init: .main.o.cmd
Only in linux-2.5.40-irqstack/init: .version.o.cmd
Only in linux-2.5.40-irqstack/init: built-in.o
Only in linux-2.5.40-irqstack/init: do_mounts.o
Only in linux-2.5.40-irqstack/init: main.o
Only in linux-2.5.40-irqstack/init: version.o
Only in linux-2.5.40-irqstack/ipc: .built-in.o.cmd
Only in linux-2.5.40-irqstack/ipc: .msg.o.cmd
Only in linux-2.5.40-irqstack/ipc: .sem.o.cmd
Only in linux-2.5.40-irqstack/ipc: .shm.o.cmd
Only in linux-2.5.40-irqstack/ipc: .util.o.cmd
Only in linux-2.5.40-irqstack/ipc: built-in.o
Only in linux-2.5.40-irqstack/ipc: msg.o
Only in linux-2.5.40-irqstack/ipc: sem.o
Only in linux-2.5.40-irqstack/ipc: shm.o
Only in linux-2.5.40-irqstack/ipc: util.o
Only in linux-2.5.40-irqstack/kernel: .built-in.o.cmd
Only in linux-2.5.40-irqstack/kernel: .capability.o.cmd
Only in linux-2.5.40-irqstack/kernel: .context.o.cmd
Only in linux-2.5.40-irqstack/kernel: .cpu.o.cmd
Only in linux-2.5.40-irqstack/kernel: .dma.o.cmd
Only in linux-2.5.40-irqstack/kernel: .exec_domain.o.cmd
Only in linux-2.5.40-irqstack/kernel: .exit.o.cmd
Only in linux-2.5.40-irqstack/kernel: .fork.o.cmd
Only in linux-2.5.40-irqstack/kernel: .futex.o.cmd
Only in linux-2.5.40-irqstack/kernel: .itimer.o.cmd
Only in linux-2.5.40-irqstack/kernel: .kallsyms.o.cmd
Only in linux-2.5.40-irqstack/kernel: .kmod.o.cmd
Only in linux-2.5.40-irqstack/kernel: .ksyms.o.cmd
Only in linux-2.5.40-irqstack/kernel: .module.o.cmd
Only in linux-2.5.40-irqstack/kernel: .panic.o.cmd
Only in linux-2.5.40-irqstack/kernel: .pid.o.cmd
Only in linux-2.5.40-irqstack/kernel: .platform.o.cmd
Only in linux-2.5.40-irqstack/kernel: .printk.o.cmd
Only in linux-2.5.40-irqstack/kernel: .ptrace.o.cmd
Only in linux-2.5.40-irqstack/kernel: .resource.o.cmd
Only in linux-2.5.40-irqstack/kernel: .sched.o.cmd
Only in linux-2.5.40-irqstack/kernel: .signal.o.cmd
Only in linux-2.5.40-irqstack/kernel: .softirq.o.cmd
Only in linux-2.5.40-irqstack/kernel: .sys.o.cmd
Only in linux-2.5.40-irqstack/kernel: .sysctl.o.cmd
Only in linux-2.5.40-irqstack/kernel: .time.o.cmd
Only in linux-2.5.40-irqstack/kernel: .timer.o.cmd
Only in linux-2.5.40-irqstack/kernel: .uid16.o.cmd
Only in linux-2.5.40-irqstack/kernel: .user.o.cmd
Only in linux-2.5.40-irqstack/kernel: built-in.o
Only in linux-2.5.40-irqstack/kernel: capability.o
Only in linux-2.5.40-irqstack/kernel: context.o
Only in linux-2.5.40-irqstack/kernel: cpu.o
Only in linux-2.5.40-irqstack/kernel: dma.o
Only in linux-2.5.40-irqstack/kernel: exec_domain.o
Only in linux-2.5.40-irqstack/kernel: exit.o
Only in linux-2.5.40-irqstack/kernel: fork.o
Only in linux-2.5.40-irqstack/kernel: futex.o
Only in linux-2.5.40-irqstack/kernel: itimer.o
Only in linux-2.5.40-irqstack/kernel: kallsyms.o
Only in linux-2.5.40-irqstack/kernel: kmod.o
Only in linux-2.5.40-irqstack/kernel: ksyms.o
Only in linux-2.5.40-irqstack/kernel: module.o
Only in linux-2.5.40-irqstack/kernel: panic.o
Only in linux-2.5.40-irqstack/kernel: pid.o
Only in linux-2.5.40-irqstack/kernel: platform.o
Only in linux-2.5.40-irqstack/kernel: printk.o
Only in linux-2.5.40-irqstack/kernel: ptrace.o
Only in linux-2.5.40-irqstack/kernel: resource.o
Only in linux-2.5.40-irqstack/kernel: sched.o
Only in linux-2.5.40-irqstack/kernel: signal.o
Only in linux-2.5.40-irqstack/kernel: softirq.o
Only in linux-2.5.40-irqstack/kernel: sys.o
Only in linux-2.5.40-irqstack/kernel: sysctl.o
Only in linux-2.5.40-irqstack/kernel: time.o
Only in linux-2.5.40-irqstack/kernel: timer.o
Only in linux-2.5.40-irqstack/kernel: uid16.o
Only in linux-2.5.40-irqstack/kernel: user.o
Only in linux-2.5.40-irqstack/lib: .brlock.o.cmd
Only in linux-2.5.40-irqstack/lib: .bust_spinlocks.o.cmd
Only in linux-2.5.40-irqstack/lib: .cmdline.o.cmd
Only in linux-2.5.40-irqstack/lib: .crc32.o.cmd
Only in linux-2.5.40-irqstack/lib: .ctype.o.cmd
Only in linux-2.5.40-irqstack/lib: .dump_stack.o.cmd
Only in linux-2.5.40-irqstack/lib: .errno.o.cmd
Only in linux-2.5.40-irqstack/lib: .lib.a.cmd
Only in linux-2.5.40-irqstack/lib: .radix-tree.o.cmd
Only in linux-2.5.40-irqstack/lib: .rbtree.o.cmd
Only in linux-2.5.40-irqstack/lib: .rwsem.o.cmd
Only in linux-2.5.40-irqstack/lib: .string.o.cmd
Only in linux-2.5.40-irqstack/lib: .vsprintf.o.cmd
Only in linux-2.5.40-irqstack/lib: brlock.o
Only in linux-2.5.40-irqstack/lib: bust_spinlocks.o
Only in linux-2.5.40-irqstack/lib: cmdline.o
Only in linux-2.5.40-irqstack/lib: crc32.o
Only in linux-2.5.40-irqstack/lib: ctype.o
Only in linux-2.5.40-irqstack/lib: dump_stack.o
Only in linux-2.5.40-irqstack/lib: errno.o
Only in linux-2.5.40-irqstack/lib: lib.a
Only in linux-2.5.40-irqstack/lib: radix-tree.o
Only in linux-2.5.40-irqstack/lib: rbtree.o
Only in linux-2.5.40-irqstack/lib: rwsem.o
Only in linux-2.5.40-irqstack/lib: string.o
Only in linux-2.5.40-irqstack/lib: vsprintf.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .built-in.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .infblock.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .infcodes.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .inffast.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .inflate.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .inflate_syms.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .inftrees.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .infutil.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: .zlib_inflate.o.cmd
Only in linux-2.5.40-irqstack/lib/zlib_inflate: built-in.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: infblock.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: infcodes.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: inffast.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: inflate.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: inflate_syms.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: inftrees.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: infutil.o
Only in linux-2.5.40-irqstack/lib/zlib_inflate: zlib_inflate.o
Only in linux-2.5.40-irqstack/mm: .bootmem.o.cmd
Only in linux-2.5.40-irqstack/mm: .built-in.o.cmd
Only in linux-2.5.40-irqstack/mm: .filemap.o.cmd
Only in linux-2.5.40-irqstack/mm: .highmem.o.cmd
Only in linux-2.5.40-irqstack/mm: .madvise.o.cmd
Only in linux-2.5.40-irqstack/mm: .memory.o.cmd
Only in linux-2.5.40-irqstack/mm: .mempool.o.cmd
Only in linux-2.5.40-irqstack/mm: .mincore.o.cmd
Only in linux-2.5.40-irqstack/mm: .mlock.o.cmd
Only in linux-2.5.40-irqstack/mm: .mmap.o.cmd
Only in linux-2.5.40-irqstack/mm: .mprotect.o.cmd
Only in linux-2.5.40-irqstack/mm: .mremap.o.cmd
Only in linux-2.5.40-irqstack/mm: .msync.o.cmd
Only in linux-2.5.40-irqstack/mm: .numa.o.cmd
Only in linux-2.5.40-irqstack/mm: .oom_kill.o.cmd
Only in linux-2.5.40-irqstack/mm: .page-writeback.o.cmd
Only in linux-2.5.40-irqstack/mm: .page_alloc.o.cmd
Only in linux-2.5.40-irqstack/mm: .page_io.o.cmd
Only in linux-2.5.40-irqstack/mm: .pdflush.o.cmd
Only in linux-2.5.40-irqstack/mm: .readahead.o.cmd
Only in linux-2.5.40-irqstack/mm: .rmap.o.cmd
Only in linux-2.5.40-irqstack/mm: .shmem.o.cmd
Only in linux-2.5.40-irqstack/mm: .slab.o.cmd
Only in linux-2.5.40-irqstack/mm: .swap.o.cmd
Only in linux-2.5.40-irqstack/mm: .swap_state.o.cmd
Only in linux-2.5.40-irqstack/mm: .swapfile.o.cmd
Only in linux-2.5.40-irqstack/mm: .vcache.o.cmd
Only in linux-2.5.40-irqstack/mm: .vmalloc.o.cmd
Only in linux-2.5.40-irqstack/mm: .vmscan.o.cmd
Only in linux-2.5.40-irqstack/mm: bootmem.o
Only in linux-2.5.40-irqstack/mm: built-in.o
Only in linux-2.5.40-irqstack/mm: filemap.o
Only in linux-2.5.40-irqstack/mm: highmem.o
Only in linux-2.5.40-irqstack/mm: madvise.o
Only in linux-2.5.40-irqstack/mm: memory.o
Only in linux-2.5.40-irqstack/mm: mempool.o
Only in linux-2.5.40-irqstack/mm: mincore.o
Only in linux-2.5.40-irqstack/mm: mlock.o
Only in linux-2.5.40-irqstack/mm: mmap.o
Only in linux-2.5.40-irqstack/mm: mprotect.o
Only in linux-2.5.40-irqstack/mm: mremap.o
Only in linux-2.5.40-irqstack/mm: msync.o
Only in linux-2.5.40-irqstack/mm: numa.o
Only in linux-2.5.40-irqstack/mm: oom_kill.o
Only in linux-2.5.40-irqstack/mm: page-writeback.o
Only in linux-2.5.40-irqstack/mm: page_alloc.o
Only in linux-2.5.40-irqstack/mm: page_io.o
Only in linux-2.5.40-irqstack/mm: pdflush.o
Only in linux-2.5.40-irqstack/mm: readahead.o
Only in linux-2.5.40-irqstack/mm: rmap.o
Only in linux-2.5.40-irqstack/mm: shmem.o
Only in linux-2.5.40-irqstack/mm: slab.o
Only in linux-2.5.40-irqstack/mm: swap.o
Only in linux-2.5.40-irqstack/mm: swap_state.o
Only in linux-2.5.40-irqstack/mm: swapfile.o
Only in linux-2.5.40-irqstack/mm: vcache.o
Only in linux-2.5.40-irqstack/mm: vmalloc.o
Only in linux-2.5.40-irqstack/mm: vmscan.o
Only in linux-2.5.40-irqstack/net: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net: .netsyms.o.cmd
Only in linux-2.5.40-irqstack/net: .socket.o.cmd
Only in linux-2.5.40-irqstack/net: .sysctl_net.o.cmd
Only in linux-2.5.40-irqstack/net/802: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/802: .p8023.o.cmd
Only in linux-2.5.40-irqstack/net/802: .sysctl_net_802.o.cmd
Only in linux-2.5.40-irqstack/net/802: built-in.o
Only in linux-2.5.40-irqstack/net/802: p8023.o
Only in linux-2.5.40-irqstack/net/802: sysctl_net_802.o
Only in linux-2.5.40-irqstack/net: built-in.o
Only in linux-2.5.40-irqstack/net/core: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/core: .datagram.o.cmd
Only in linux-2.5.40-irqstack/net/core: .dev.o.cmd
Only in linux-2.5.40-irqstack/net/core: .dev_mcast.o.cmd
Only in linux-2.5.40-irqstack/net/core: .dst.o.cmd
Only in linux-2.5.40-irqstack/net/core: .filter.o.cmd
Only in linux-2.5.40-irqstack/net/core: .iovec.o.cmd
Only in linux-2.5.40-irqstack/net/core: .neighbour.o.cmd
Only in linux-2.5.40-irqstack/net/core: .rtnetlink.o.cmd
Only in linux-2.5.40-irqstack/net/core: .scm.o.cmd
Only in linux-2.5.40-irqstack/net/core: .skbuff.o.cmd
Only in linux-2.5.40-irqstack/net/core: .sock.o.cmd
Only in linux-2.5.40-irqstack/net/core: .sysctl_net_core.o.cmd
Only in linux-2.5.40-irqstack/net/core: .utils.o.cmd
Only in linux-2.5.40-irqstack/net/core: built-in.o
Only in linux-2.5.40-irqstack/net/core: datagram.o
Only in linux-2.5.40-irqstack/net/core: dev.o
Only in linux-2.5.40-irqstack/net/core: dev_mcast.o
Only in linux-2.5.40-irqstack/net/core: dst.o
Only in linux-2.5.40-irqstack/net/core: filter.o
Only in linux-2.5.40-irqstack/net/core: iovec.o
Only in linux-2.5.40-irqstack/net/core: neighbour.o
Only in linux-2.5.40-irqstack/net/core: rtnetlink.o
Only in linux-2.5.40-irqstack/net/core: scm.o
Only in linux-2.5.40-irqstack/net/core: skbuff.o
Only in linux-2.5.40-irqstack/net/core: sock.o
Only in linux-2.5.40-irqstack/net/core: sysctl_net_core.o
Only in linux-2.5.40-irqstack/net/core: utils.o
Only in linux-2.5.40-irqstack/net/ethernet: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/ethernet: .eth.o.cmd
Only in linux-2.5.40-irqstack/net/ethernet: .sysctl_net_ether.o.cmd
Only in linux-2.5.40-irqstack/net/ethernet: built-in.o
Only in linux-2.5.40-irqstack/net/ethernet: eth.o
Only in linux-2.5.40-irqstack/net/ethernet: sysctl_net_ether.o
Only in linux-2.5.40-irqstack/net/ipv4: .af_inet.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .arp.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .devinet.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .fib_frontend.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .fib_hash.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .fib_semantics.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .icmp.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .igmp.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .inetpeer.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .ip_forward.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .ip_fragment.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .ip_input.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .ip_options.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .ip_output.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .ip_sockglue.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .proc.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .protocol.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .raw.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .route.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .sysctl_net_ipv4.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .tcp.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .tcp_diag.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .tcp_input.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .tcp_ipv4.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .tcp_minisocks.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .tcp_output.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .tcp_timer.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .udp.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: .utils.o.cmd
Only in linux-2.5.40-irqstack/net/ipv4: af_inet.o
Only in linux-2.5.40-irqstack/net/ipv4: arp.o
Only in linux-2.5.40-irqstack/net/ipv4: built-in.o
Only in linux-2.5.40-irqstack/net/ipv4: devinet.o
Only in linux-2.5.40-irqstack/net/ipv4: fib_frontend.o
Only in linux-2.5.40-irqstack/net/ipv4: fib_hash.o
Only in linux-2.5.40-irqstack/net/ipv4: fib_semantics.o
Only in linux-2.5.40-irqstack/net/ipv4: icmp.o
Only in linux-2.5.40-irqstack/net/ipv4: igmp.o
Only in linux-2.5.40-irqstack/net/ipv4: inetpeer.o
Only in linux-2.5.40-irqstack/net/ipv4: ip_forward.o
Only in linux-2.5.40-irqstack/net/ipv4: ip_fragment.o
Only in linux-2.5.40-irqstack/net/ipv4: ip_input.o
Only in linux-2.5.40-irqstack/net/ipv4: ip_options.o
Only in linux-2.5.40-irqstack/net/ipv4: ip_output.o
Only in linux-2.5.40-irqstack/net/ipv4: ip_sockglue.o
Only in linux-2.5.40-irqstack/net/ipv4: proc.o
Only in linux-2.5.40-irqstack/net/ipv4: protocol.o
Only in linux-2.5.40-irqstack/net/ipv4: raw.o
Only in linux-2.5.40-irqstack/net/ipv4: route.o
Only in linux-2.5.40-irqstack/net/ipv4: sysctl_net_ipv4.o
Only in linux-2.5.40-irqstack/net/ipv4: tcp.o
Only in linux-2.5.40-irqstack/net/ipv4: tcp_diag.o
Only in linux-2.5.40-irqstack/net/ipv4: tcp_input.o
Only in linux-2.5.40-irqstack/net/ipv4: tcp_ipv4.o
Only in linux-2.5.40-irqstack/net/ipv4: tcp_minisocks.o
Only in linux-2.5.40-irqstack/net/ipv4: tcp_output.o
Only in linux-2.5.40-irqstack/net/ipv4: tcp_timer.o
Only in linux-2.5.40-irqstack/net/ipv4: udp.o
Only in linux-2.5.40-irqstack/net/ipv4: utils.o
Only in linux-2.5.40-irqstack/net/netlink: .af_netlink.o.cmd
Only in linux-2.5.40-irqstack/net/netlink: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/netlink: .netlink_dev.o.cmd
Only in linux-2.5.40-irqstack/net/netlink: af_netlink.o
Only in linux-2.5.40-irqstack/net/netlink: built-in.o
Only in linux-2.5.40-irqstack/net/netlink: netlink_dev.o
Only in linux-2.5.40-irqstack/net: netsyms.o
Only in linux-2.5.40-irqstack/net/packet: .af_packet.o.cmd
Only in linux-2.5.40-irqstack/net/packet: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/packet: af_packet.o
Only in linux-2.5.40-irqstack/net/packet: built-in.o
Only in linux-2.5.40-irqstack/net/sched: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/sched: .sch_generic.o.cmd
Only in linux-2.5.40-irqstack/net/sched: built-in.o
Only in linux-2.5.40-irqstack/net/sched: sch_generic.o
Only in linux-2.5.40-irqstack/net: socket.o
Only in linux-2.5.40-irqstack/net/sunrpc: .auth.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .auth_null.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .auth_unix.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .clnt.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .pmap_clnt.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .sched.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .stats.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .sunrpc.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .sunrpc_syms.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .svc.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .svcauth.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .svcsock.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .sysctl.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .timer.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .xdr.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: .xprt.o.cmd
Only in linux-2.5.40-irqstack/net/sunrpc: auth.o
Only in linux-2.5.40-irqstack/net/sunrpc: auth_null.o
Only in linux-2.5.40-irqstack/net/sunrpc: auth_unix.o
Only in linux-2.5.40-irqstack/net/sunrpc: built-in.o
Only in linux-2.5.40-irqstack/net/sunrpc: clnt.o
Only in linux-2.5.40-irqstack/net/sunrpc: pmap_clnt.o
Only in linux-2.5.40-irqstack/net/sunrpc: sched.o
Only in linux-2.5.40-irqstack/net/sunrpc: stats.o
Only in linux-2.5.40-irqstack/net/sunrpc: sunrpc.o
Only in linux-2.5.40-irqstack/net/sunrpc: sunrpc_syms.o
Only in linux-2.5.40-irqstack/net/sunrpc: svc.o
Only in linux-2.5.40-irqstack/net/sunrpc: svcauth.o
Only in linux-2.5.40-irqstack/net/sunrpc: svcsock.o
Only in linux-2.5.40-irqstack/net/sunrpc: sysctl.o
Only in linux-2.5.40-irqstack/net/sunrpc: timer.o
Only in linux-2.5.40-irqstack/net/sunrpc: xdr.o
Only in linux-2.5.40-irqstack/net/sunrpc: xprt.o
Only in linux-2.5.40-irqstack/net: sysctl_net.o
Only in linux-2.5.40-irqstack/net/unix: .af_unix.o.cmd
Only in linux-2.5.40-irqstack/net/unix: .built-in.o.cmd
Only in linux-2.5.40-irqstack/net/unix: .garbage.o.cmd
Only in linux-2.5.40-irqstack/net/unix: .sysctl_net_unix.o.cmd
Only in linux-2.5.40-irqstack/net/unix: .unix.o.cmd
Only in linux-2.5.40-irqstack/net/unix: af_unix.o
Only in linux-2.5.40-irqstack/net/unix: built-in.o
Only in linux-2.5.40-irqstack/net/unix: garbage.o
Only in linux-2.5.40-irqstack/net/unix: sysctl_net_unix.o
Only in linux-2.5.40-irqstack/net/unix: unix.o
Only in linux-2.5.40-irqstack/scripts: .conmakehash.cmd
Only in linux-2.5.40-irqstack/scripts: .docproc.cmd
Only in linux-2.5.40-irqstack/scripts: .fixdep.cmd
Only in linux-2.5.40-irqstack/scripts: .split-include.cmd
Only in linux-2.5.40-irqstack/scripts: .split-include.tmp
Only in linux-2.5.40-irqstack/scripts: conmakehash
Only in linux-2.5.40-irqstack/scripts: docproc
Only in linux-2.5.40-irqstack/scripts: fixdep
Only in linux-2.5.40-irqstack/scripts/lxdialog: .checklist.o.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: .inputbox.o.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: .lxdialog.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: .lxdialog.o.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: .menubox.o.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: .msgbox.o.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: .textbox.o.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: .util.o.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: .yesno.o.cmd
Only in linux-2.5.40-irqstack/scripts/lxdialog: checklist.o
Only in linux-2.5.40-irqstack/scripts/lxdialog: inputbox.o
Only in linux-2.5.40-irqstack/scripts/lxdialog: lxdialog
Only in linux-2.5.40-irqstack/scripts/lxdialog: lxdialog.o
Only in linux-2.5.40-irqstack/scripts/lxdialog: menubox.o
Only in linux-2.5.40-irqstack/scripts/lxdialog: msgbox.o
Only in linux-2.5.40-irqstack/scripts/lxdialog: textbox.o
Only in linux-2.5.40-irqstack/scripts/lxdialog: util.o
Only in linux-2.5.40-irqstack/scripts/lxdialog: yesno.o
Only in linux-2.5.40-irqstack/scripts: split-include
Only in linux-2.5.40-irqstack/security: .built-in.o.cmd
Only in linux-2.5.40-irqstack/security: .capability.o.cmd
Only in linux-2.5.40-irqstack/security: .dummy.o.cmd
Only in linux-2.5.40-irqstack/security: .security.o.cmd
Only in linux-2.5.40-irqstack/security: built-in.o
Only in linux-2.5.40-irqstack/security: capability.o
Only in linux-2.5.40-irqstack/security: dummy.o
Only in linux-2.5.40-irqstack/security: security.o
Only in linux-2.5.40-irqstack/sound: .built-in.o.cmd
Only in linux-2.5.40-irqstack/sound: built-in.o
Only in linux-2.5.40-irqstack/: vmlinux

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH]  4KB stack + irq stack for x86
  2002-10-04 20:00 [PATCH] 4KB stack + irq stack for x86 Dave Hansen
@ 2002-10-04 20:12 ` Dave Hansen
  0 siblings, 0 replies; 4+ messages in thread
From: Dave Hansen @ 2002-10-04 20:12 UTC (permalink / raw)
  To: Dave Hansen; +Cc: Andrew Morton, linux-mm, linux-kernel, Benjamin LaHaise

Dave Hansen wrote:
> I fixed the problems that I was having.  thread_info->preempt_count is 
> now used to store softirq state, unlike in 2.5.20.  Preempt count was 
> not preserved once the switch to the interrupt stack occurred.  This 
> caused two nested softirqs and a deadlock.  It is fixed now.

That'll teach me to get excited and send a patch.  Sorry about the 
"Only in"'s.  I also think that there is still a small race window in 
the code that I sent.  I think that the old preempt_count need to be 
placed into the new thread_info's preempt_count _before_ the stack 
switch occurs.

-- 
Dave Hansen
haveblue@us.ibm.com


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH]  4KB stack + irq stack for x86
  2002-09-11 23:00 Dave Hansen
@ 2002-09-18  3:22 ` Rusty Russell
  0 siblings, 0 replies; 4+ messages in thread
From: Rusty Russell @ 2002-09-18  3:22 UTC (permalink / raw)
  To: Dave Hansen; +Cc: akpm, linux-kernel, torvalds, mingo, Benjamin LaHaise

On Wed, 11 Sep 2002 16:00:25 -0700
Dave Hansen <haveblue@us.ibm.com> wrote:

> This is a resync of the last patch for 2.5.34 that resulted from this discussion 
> (not the original patch):
> http://lwn.net/Articles/1642/
> The only change was readding the reference to task_info in the beginning of 
> common_interrupt.  It had been dropped when we stopped messing with 
> preempt_count there.
> 
> I've beaten this thing with my normal array of Specweb tests and it is behaving 
> so far.  I've booted on an 8-way with and without SMP.

I'd really like to see this in 2.5, if only to make massively threaded
programs using Ingo's pthreads mods even more viable, and show up those people
who think userspace threading libraries are a good idea 8)

Rusty.
-- 
   there are those who do and those who hang on and you don't see too
   many doers quoting their contemporaries.  -- Larry McVoy

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH]  4KB stack + irq stack for x86
@ 2002-09-11 23:00 Dave Hansen
  2002-09-18  3:22 ` Rusty Russell
  0 siblings, 1 reply; 4+ messages in thread
From: Dave Hansen @ 2002-09-11 23:00 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Martin J. Bligh, Benjamin LaHaise, linux-mm, linux-kernel,
	Linus Torvalds

[-- Attachment #1: Type: text/plain, Size: 1201 bytes --]

This is a resync of the last patch for 2.5.34 that resulted from this discussion 
(not the original patch):
http://lwn.net/Articles/1642/
The only change was readding the reference to task_info in the beginning of 
common_interrupt.  It had been dropped when we stopped messing with 
preempt_count there.

I've beaten this thing with my normal array of Specweb tests and it is behaving 
so far.  I've booted on an 8-way with and without SMP.

part of Ben's original message:
> Below is a patch against 2.5.20 that implements 4KB stacks for tasks, 
> plus a seperate 4KB irq stack for use by interrupts.  There are a couple 
> of reasons for doing this: 4KB stacks put less pressure on the VM 
> subsystem, reduces the overall memory usage for systems with large 
> numbers of tasks, and increases the reliability of the system when 
> under heavy irq load by provide a fixed stack size for interrupt 
> handlers that other kernel code will not eat into.
> 
> The interrupt stacks are stackable, so we could use multiple 
> 4KB irq stacks.  The thread_info structure is included in each 
> interrupt stack, and has the current pointer copied into it upon 
> entry.

-- 
Dave Hansen
haveblue@us.ibm.com

[-- Attachment #2: irqstack-2.5.34-1.patch --]
[-- Type: text/plain, Size: 15636 bytes --]

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.624   -> 1.626  
#	arch/i386/kernel/process.c	1.40    -> 1.41   
#	arch/i386/kernel/irq.c	1.18    -> 1.19   
#	arch/i386/kernel/head.S	1.15    -> 1.16   
#	include/asm-i386/thread_info.h	1.7     -> 1.8    
#	include/asm-i386/page.h	1.16    -> 1.17   
#	arch/i386/kernel/entry.S	1.41    -> 1.43   
#	 arch/i386/config.in	1.47    -> 1.48   
#	  arch/i386/Makefile	1.17    -> 1.18   
#	arch/i386/kernel/i386_ksyms.c	1.30    -> 1.31   
#	arch/i386/kernel/smpboot.c	1.33    -> 1.34   
#	arch/i386/boot/compressed/misc.c	1.7     -> 1.8    
#	arch/i386/kernel/init_task.c	1.6     -> 1.7    
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/09	haveblue@elm3b96.(none)	1.625
# Import patch v2.5.20-stack-A2.diff
# --------------------------------------------
# 02/09/11	haveblue@elm3b96.(none)	1.626
# don't fetch things out of ebx when it has garbage in it :(
# --------------------------------------------
#
diff -Nru a/arch/i386/Makefile b/arch/i386/Makefile
--- a/arch/i386/Makefile	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/Makefile	Wed Sep 11 15:30:18 2002
@@ -85,6 +85,10 @@
 CFLAGS += -march=i586
 endif
 
+ifdef CONFIG_X86_STACK_CHECK
+CFLAGS += -p
+endif
+
 HEAD := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
 
 SUBDIRS += arch/i386/kernel arch/i386/mm arch/i386/lib
diff -Nru a/arch/i386/boot/compressed/misc.c b/arch/i386/boot/compressed/misc.c
--- a/arch/i386/boot/compressed/misc.c	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/boot/compressed/misc.c	Wed Sep 11 15:30:18 2002
@@ -377,3 +377,7 @@
 	if (high_loaded) close_output_buffer_if_we_run_high(mv);
 	return high_loaded;
 }
+
+/* We don't actually check for stack overflows this early. */
+__asm__(".globl mcount ; mcount: ret\n");
+
diff -Nru a/arch/i386/config.in b/arch/i386/config.in
--- a/arch/i386/config.in	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/config.in	Wed Sep 11 15:30:18 2002
@@ -35,6 +35,7 @@
 #
 # Define implied options from the CPU selection here
 #
+define_bool CONFIG_X86_HAVE_CMOV n
 
 if [ "$CONFIG_M386" = "y" ]; then
    define_bool CONFIG_X86_CMPXCHG n
@@ -91,18 +92,21 @@
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    define_bool CONFIG_X86_PPRO_FENCE y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MPENTIUMIII" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MPENTIUM4" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 7
    define_bool CONFIG_X86_TSC y
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MK6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
@@ -116,6 +120,7 @@
    define_bool CONFIG_X86_GOOD_APIC y
    define_bool CONFIG_X86_USE_3DNOW y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MELAN" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 4
@@ -132,6 +137,7 @@
 if [ "$CONFIG_MCRUSOE" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_TSC y
+   define_bool CONFIG_X86_HAVE_CMOV y
 fi
 if [ "$CONFIG_MWINCHIPC6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
@@ -429,6 +435,7 @@
    if [ "$CONFIG_HIGHMEM" = "y" ]; then
       bool '  Highmem debugging' CONFIG_DEBUG_HIGHMEM
    fi
+   bool '  Check for stack overflows' CONFIG_X86_STACK_CHECK
 fi
 
 endmenu
diff -Nru a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S
--- a/arch/i386/kernel/entry.S	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/kernel/entry.S	Wed Sep 11 15:30:18 2002
@@ -136,7 +136,7 @@
 	movl %ecx,CS(%esp)	#
 	movl %esp, %ebx
 	pushl %ebx
-	andl $-8192, %ebx	# GET_THREAD_INFO
+	GET_THREAD_INFO_WITH_ESP(%ebx)
 	movl TI_EXEC_DOMAIN(%ebx), %edx	# Get the execution domain
 	movl 4(%edx), %edx	# Get the lcall7 handler for the domain
 	pushl $0x7
@@ -158,7 +158,7 @@
 	movl %ecx,CS(%esp)	#
 	movl %esp, %ebx
 	pushl %ebx
-	andl $-8192, %ebx	# GET_THREAD_INFO
+	GET_THREAD_INFO_WITH_ESP(%ebx)
 	movl TI_EXEC_DOMAIN(%ebx), %edx	# Get the execution domain
 	movl 4(%edx), %edx	# Get the lcall7 handler for the domain
 	pushl $0x27
@@ -334,7 +334,39 @@
 	ALIGN
 common_interrupt:
 	SAVE_ALL
+
+	GET_THREAD_INFO(%ebx)
+	movl TI_IRQ_STACK(%ebx),%ecx
+	movl TI_TASK(%ebx),%edx
+	movl %esp,%eax
+	leal (THREAD_SIZE-4)(%ecx),%esi
+	testl %ecx,%ecx			# is there a valid irq_stack?
+
+	# switch to the irq stack
+#ifdef CONFIG_X86_HAVE_CMOV
+	cmovnz %esi,%esp
+#else
+	jnz 1f
+	mov %esi,%esp
+1:
+#endif
+
+	# update the task pointer in the irq stack
+	GET_THREAD_INFO(%esi)
+	movl %edx,TI_TASK(%esi)
+
 	call do_IRQ
+
+	movl %eax,%esp			# potentially restore non-irq stack
+
+	# copy flags from the irq stack back into the task's thread_info
+	# %esi is saved over the do_IRQ call and contains the irq stack
+	# thread_info pointer
+	# %ebx contains the original thread_info pointer
+	movl TI_FLAGS(%esi),%eax
+	movl $0,TI_FLAGS(%esi)
+	LOCK orl %eax,TI_FLAGS(%ebx)
+
 	jmp ret_from_intr
 
 #define BUILD_INTERRUPT(name, nr)	\
@@ -506,6 +538,61 @@
 	pushl $0
 	pushl $do_spurious_interrupt_bug
 	jmp error_code
+
+#ifdef CONFIG_X86_STACK_CHECK
+.data
+	.globl	stack_overflowed
+stack_overflowed:
+	.long	0
+
+.text
+
+ENTRY(mcount)
+	push %eax
+	movl $(THREAD_SIZE - 1),%eax
+	andl %esp,%eax
+	cmpl $0x200,%eax        /* 512 byte danger zone */
+	jle 1f
+2:
+	popl %eax
+	ret
+1:
+	lock; btsl $0,stack_overflowed	/* Prevent reentry via printk */
+	jc      2b
+
+	# switch to overflow stack
+	movl	%esp,%eax
+	movl	$(stack_overflow_stack + THREAD_SIZE - 4),%esp
+
+	pushf
+	cli
+	pushl	%eax
+
+	# push eip then esp of error for stack_overflow_panic
+	pushl	4(%eax)
+	pushl	%eax
+
+	# update the task pointer and cpu in the overflow stack's thread_info.
+	GET_THREAD_INFO_WITH_ESP(%eax)
+	movl	TI_TASK(%eax),%ebx
+	movl	%ebx,stack_overflow_stack+TI_TASK
+	movl	TI_CPU(%eax),%ebx
+	movl	%ebx,stack_overflow_stack+TI_CPU
+
+	# never neverland
+	call	stack_overflow_panic
+
+	addl	$8,%esp
+
+	popf
+	popl	%eax
+	movl	%eax,%esp
+	popl	%eax
+	movl	$0,stack_overflowed
+	ret
+
+#warning stack check enabled
+#endif
 
 .data
 ENTRY(sys_call_table)
diff -Nru a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S
--- a/arch/i386/kernel/head.S	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/kernel/head.S	Wed Sep 11 15:30:18 2002
@@ -15,6 +15,7 @@
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/desc.h>
+#include <asm/thread_info.h>
 
 #define OLD_CL_MAGIC_ADDR	0x90020
 #define OLD_CL_MAGIC		0xA33F
@@ -305,7 +306,7 @@
 	ret
 
 ENTRY(stack_start)
-	.long init_thread_union+8192
+	.long init_thread_union+THREAD_SIZE
 	.long __KERNEL_DS
 
 /* This is the default interrupt "handler" :-) */
diff -Nru a/arch/i386/kernel/i386_ksyms.c b/arch/i386/kernel/i386_ksyms.c
--- a/arch/i386/kernel/i386_ksyms.c	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/kernel/i386_ksyms.c	Wed Sep 11 15:30:18 2002
@@ -172,3 +172,8 @@
 EXPORT_SYMBOL(is_sony_vaio_laptop);
 
 EXPORT_SYMBOL(__PAGE_KERNEL);
+
+#ifdef CONFIG_X86_STACK_CHECK
+extern void mcount(void);
+EXPORT_SYMBOL(mcount);
+#endif
diff -Nru a/arch/i386/kernel/init_task.c b/arch/i386/kernel/init_task.c
--- a/arch/i386/kernel/init_task.c	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/kernel/init_task.c	Wed Sep 11 15:30:18 2002
@@ -13,6 +13,14 @@
 static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
 struct mm_struct init_mm = INIT_MM(init_mm);
 
+union thread_union init_irq_union
+	__attribute__((__section__(".data.init_task")));
+
+#ifdef CONFIG_X86_STACK_CHECK
+union thread_union stack_overflow_stack
+	__attribute__((__section__(".data.init_task")));
+#endif
+
 /*
  * Initial thread structure.
  *
@@ -22,7 +30,15 @@
  */
 union thread_union init_thread_union 
 	__attribute__((__section__(".data.init_task"))) =
-		{ INIT_THREAD_INFO(init_task) };
+		{ { 
+			task:		&init_task,
+			exec_domain:	&default_exec_domain,
+			flags:		0,
+			cpu:		0,
+			addr_limit:	KERNEL_DS,
+			irq_stack:	&init_irq_union,
+		} };
+
 
 /*
  * Initial task structure.
diff -Nru a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c
--- a/arch/i386/kernel/irq.c	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/kernel/irq.c	Wed Sep 11 15:30:18 2002
@@ -311,7 +311,8 @@
  * SMP cross-CPU interrupts have their own specific
  * handlers).
  */
-asmlinkage unsigned int do_IRQ(struct pt_regs regs)
+struct pt_regs *do_IRQ(struct pt_regs *regs) __attribute__((regparm(1)));
+struct pt_regs *do_IRQ(struct pt_regs *regs)
 {	
 	/* 
 	 * We ack quickly, we don't want the irq controller
@@ -323,7 +324,7 @@
 	 * 0 return value means that this irq is already being
 	 * handled by some other CPU. (or is disabled)
 	 */
-	int irq = regs.orig_eax & 0xff; /* high bits used in ret_from_ code  */
+	int irq = regs->orig_eax & 0xff; /* high bits used in ret_from_ code  */
 	int cpu = smp_processor_id();
 	irq_desc_t *desc = irq_desc + irq;
 	struct irqaction * action;
@@ -373,7 +374,7 @@
 	 */
 	for (;;) {
 		spin_unlock(&desc->lock);
-		handle_IRQ_event(irq, &regs, action);
+		handle_IRQ_event(irq, regs, action);
 		spin_lock(&desc->lock);
 		
 		if (likely(!(desc->status & IRQ_PENDING)))
@@ -392,7 +393,7 @@
 
 	irq_exit();
 
-	return 1;
+	return regs;
 }
 
 /**
diff -Nru a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
--- a/arch/i386/kernel/process.c	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/kernel/process.c	Wed Sep 11 15:30:18 2002
@@ -438,6 +438,16 @@
 
 extern void show_trace(unsigned long* esp);
 
+#ifdef CONFIG_X86_STACK_CHECK
+void stack_overflow_panic(void *esp, void *eip)
+{
+	printk("stack overflow from %p.  esp: %p\n", eip, esp);
+	show_trace(esp);
+	panic("stack overflow\n");
+}
+
+#endif
+
 void show_regs(struct pt_regs * regs)
 {
 	unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
@@ -693,6 +703,7 @@
 
 	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
 
+	next_p->thread_info->irq_stack = prev_p->thread_info->irq_stack;
 	unlazy_fpu(prev_p);
 
 	/*
diff -Nru a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c
--- a/arch/i386/kernel/smpboot.c	Wed Sep 11 15:30:18 2002
+++ b/arch/i386/kernel/smpboot.c	Wed Sep 11 15:30:18 2002
@@ -67,6 +67,10 @@
 /* Per CPU bogomips and other parameters */
 struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
 
+extern union thread_union init_irq_union;
+union thread_union *irq_stacks[NR_CPUS] __cacheline_aligned =
+	{ &init_irq_union, };
+
 /* Set when the idlers are all forked */
 int smp_threads_ready;
 
@@ -762,6 +766,27 @@
 	return (send_status | accept_status);
 }
 
+static void __init setup_irq_stack(struct task_struct *p, int cpu)
+{
+	unsigned long stk;
+
+	stk = __get_free_pages(GFP_KERNEL, THREAD_ORDER);
+	if (!stk)
+		panic("I can't seem to allocate my irq stack.  Oh well, giving up.");
+
+	irq_stacks[cpu] = (void *)stk;
+	memset(irq_stacks[cpu], 0, THREAD_SIZE);
+	irq_stacks[cpu]->thread_info.cpu = cpu;
+	irq_stacks[cpu]->thread_info.preempt_count = 1;
+					/* interrupts are not preemptable */
+	p->thread_info->irq_stack = irq_stacks[cpu];
+
+	/* If we want to make the irq stack more than one unit
+	 * deep, we can chain then off of the irq_stack pointer
+	 * here.
+	 */
+}
+
 extern unsigned long cpu_initialized;
 
 static void __init do_boot_cpu (int apicid) 
@@ -785,6 +810,8 @@
 	if (IS_ERR(idle))
 		panic("failed fork for CPU %d", cpu);
 
+	setup_irq_stack(idle, cpu);
+
 	/*
 	 * We remove it from the pidhash and the runqueue
 	 * once we got the process:
@@ -802,7 +829,13 @@
 
 	/* So we see what's up   */
 	printk("Booting processor %d/%d eip %lx\n", cpu, apicid, start_eip);
-	stack_start.esp = (void *) (1024 + PAGE_SIZE + (char *)idle->thread_info);
+
+	/* The -4 is to correct for the fact that the stack pointer
+	 * is used to find the location of the thread_info structure
+	 * by masking off several of the LSBs.  Without the -4, esp
+	 * is pointing to the page after the one the stack is on.
+	 */
+	stack_start.esp = (void *)(THREAD_SIZE - 4 + (char *)idle->thread_info);
 
 	/*
 	 * This grunge runs the startup process for
diff -Nru a/include/asm-i386/page.h b/include/asm-i386/page.h
--- a/include/asm-i386/page.h	Wed Sep 11 15:30:18 2002
+++ b/include/asm-i386/page.h	Wed Sep 11 15:30:18 2002
@@ -3,7 +3,11 @@
 
 /* PAGE_SHIFT determines the page size */
 #define PAGE_SHIFT	12
+#ifndef __ASSEMBLY__
 #define PAGE_SIZE	(1UL << PAGE_SHIFT)
+#else
+#define PAGE_SIZE	(1 << PAGE_SHIFT)
+#endif
 #define PAGE_MASK	(~(PAGE_SIZE-1))
 
 #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
diff -Nru a/include/asm-i386/thread_info.h b/include/asm-i386/thread_info.h
--- a/include/asm-i386/thread_info.h	Wed Sep 11 15:30:18 2002
+++ b/include/asm-i386/thread_info.h	Wed Sep 11 15:30:18 2002
@@ -9,6 +9,7 @@
 
 #ifdef __KERNEL__
 
+#include <asm/page.h>
 #ifndef __ASSEMBLY__
 #include <asm/processor.h>
 #endif
@@ -28,9 +29,11 @@
 	__s32			preempt_count; /* 0 => preemptable, <0 => BUG */
 
 	mm_segment_t		addr_limit;	/* thread address space:
+						   0 for interrupts: illegal
 					 	   0-0xBFFFFFFF for user-thead
 						   0-0xFFFFFFFF for kernel-thread
 						*/
+	struct thread_info	*irq_stack;	/* pointer to cpu irq stack */
 
 	__u8			supervisor_stack[0];
 };
@@ -44,6 +47,7 @@
 #define TI_CPU		0x0000000C
 #define TI_PRE_COUNT	0x00000010
 #define TI_ADDR_LIMIT	0x00000014
+#define TI_IRQ_STACK	0x00000018
 
 #endif
 
@@ -54,42 +58,42 @@
  *
  * preempt_count needs to be 1 initially, until the scheduler is functional.
  */
+#define THREAD_ORDER  0
+#define INIT_THREAD_SIZE      THREAD_SIZE
+
 #ifndef __ASSEMBLY__
-#define INIT_THREAD_INFO(tsk)			\
-{						\
-	.task		= &tsk,			\
-	.exec_domain	= &default_exec_domain,	\
-	.flags		= 0,			\
-	.cpu		= 0,			\
-	.preempt_count	= 1,			\
-	.addr_limit	= KERNEL_DS,		\
-}
 
 #define init_thread_info	(init_thread_union.thread_info)
 #define init_stack		(init_thread_union.stack)
 
+/* thread information allocation */
+#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
+#define alloc_thread_info() ((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER))
+#define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_ORDER)
+#define get_thread_info(ti) get_task_struct((ti)->task)
+#define put_thread_info(ti) put_task_struct((ti)->task)
+ 
+	
 /* how to get the thread information struct from C */
 static inline struct thread_info *current_thread_info(void)
 {
 	struct thread_info *ti;
-	__asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~8191UL));
+	__asm__("andl %%esp,%0; ":"=r" (ti) : "0" (~(THREAD_SIZE - 1)));
 	return ti;
 }
 
-/* thread information allocation */
-#define THREAD_SIZE (2*PAGE_SIZE)
-#define alloc_thread_info() ((struct thread_info *) __get_free_pages(GFP_KERNEL,1))
-#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
-#define get_thread_info(ti) get_task_struct((ti)->task)
-#define put_thread_info(ti) put_task_struct((ti)->task)
-
 #else /* !__ASSEMBLY__ */
 
+#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
+
 /* how to get the thread information struct from ASM */
 #define GET_THREAD_INFO(reg) \
-	movl $-8192, reg; \
+	movl $-THREAD_SIZE, reg; \
 	andl %esp, reg
-
+/* use this one if reg already contains %esp */
+#define GET_THREAD_INFO_WITH_ESP(reg) \
+	andl $-THREAD_SIZE, reg
+ 
 #endif
 
 /*

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2002-10-04 20:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-04 20:00 [PATCH] 4KB stack + irq stack for x86 Dave Hansen
2002-10-04 20:12 ` Dave Hansen
  -- strict thread matches above, loose matches on Subject: below --
2002-09-11 23:00 Dave Hansen
2002-09-18  3:22 ` Rusty Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).