1 --- linux-2.6.9/arch/i386/kernel/apic.c.orig 2005-08-04 08:11:13.000000000 -0400
2 +++ linux-2.6.9/arch/i386/kernel/apic.c 2005-08-04 08:27:04.000000000 -0400
3 @@ -1125,8 +1125,10 @@ asmlinkage void smp_local_timer_interrup
5 void smp_apic_timer_interrupt(struct pt_regs regs)
7 +#ifdef CONFIG_4KSTACKS
14 @@ -1147,11 +1149,11 @@ void smp_apic_timer_interrupt(struct pt_
15 * interrupt lock, which is the WrongThing (tm) to do.
19 +#ifdef CONFIG_4KSTACKS
20 curctx = (union irq_ctx *) current_thread_info();
21 irqctx = hardirq_ctx[cpu];
22 - if (curctx == irqctx) {
23 - smp_local_timer_interrupt(®s);
25 + if (curctx != irqctx) {
26 /* build the stack frame on the IRQ stack */
27 isp = (u32*) ((char*)irqctx + sizeof(*irqctx));
28 irqctx->tinfo.task = curctx->tinfo.task;
29 @@ -1167,7 +1169,10 @@ void smp_apic_timer_interrupt(struct pt_
31 : "memory", "cc", "edx", "ecx"
36 + smp_local_timer_interrupt(®s);
41 --- linux-2.6.9/include/asm-i386/crashdump.h.orig 2005-08-04 08:11:22.000000000 -0400
42 +++ linux-2.6.9/include/asm-i386/crashdump.h 2005-08-04 08:27:04.000000000 -0400
43 @@ -48,12 +48,14 @@ extern unsigned long next_ram_page (unsi
45 static inline void platform_init_stack(void **stackptr)
47 +#ifdef CONFIG_4KSTACKS
48 *stackptr = (void *)kmalloc(sizeof(union irq_ctx), GFP_KERNEL);
50 memset(*stackptr, 0, sizeof(union irq_ctx));
53 "crashdump: unable to allocate separate stack\n");
57 typedef asmlinkage void (*crashdump_func_t)(struct pt_regs *, void *);
58 @@ -62,6 +64,7 @@ static inline void platform_start_crashd
59 crashdump_func_t dumpfunc,
62 +#ifdef CONFIG_4KSTACKS
64 union irq_ctx * curctx;
65 union irq_ctx * dumpctx;
66 @@ -90,6 +93,10 @@ static inline void platform_start_crashd
67 : "memory", "cc", "edx", "ecx"
71 + dumpfunc(regs, NULL);
76 #define platform_cleanup_stack(stackptr) \