hi Phillipe, everyone, happy 06 !
Out of curiosity, I applied adeos-ipipe-2.6.14-i386-1.1-01.patch on top of 15.
the rejects were small, and simple enough looking, that even a lazy sod like myself might manually fix them, so I did. whats more, it built clean and booted ! I havent done anything more demanding than ls, df, etc, but hey, low hanging fruit tastes just as good / even better ;-) So heres hoping that you've not started this particular thankless task,and Ive saved your cycles for something more dependent on your particular talents.
enjoy. jimc
diff.try-15-ipipe-101.20060104.170829.bz2
Description: application/bzip
./arch/i386/kernel/io_apic.c.rej
./include/linux/preempt.h.rej
./init/main.c.rej
./kernel/irq/handle.c.rej
./kernel/Makefile.rej
***************
*** 1313,1322 ****
/*
* Add it to the IO-APIC irq-routing table:
*/
- spin_lock_irqsave(&ioapic_lock, flags);
io_apic_write(0, 0x11+2*pin, *(((int *)&entry)+1));
io_apic_write(0, 0x10+2*pin, *(((int *)&entry)+0));
- spin_unlock_irqrestore(&ioapic_lock, flags);
enable_8259A_irq(0);
}
--- 1315,1324 ----
/*
* Add it to the IO-APIC irq-routing table:
*/
+ spin_lock_irqsave_hw(&ioapic_lock, flags);
io_apic_write(0, 0x11+2*pin, *(((int *)&entry)+1));
io_apic_write(0, 0x10+2*pin, *(((int *)&entry)+0));
+ spin_unlock_irqrestore_hw(&ioapic_lock, flags);
enable_8259A_irq(0);
}
***************
*** 13,53 ****
extern void fastcall add_preempt_count(int val);
extern void fastcall sub_preempt_count(int val);
#else
- # define add_preempt_count(val) do { preempt_count() += (val); } while
(0)
- # define sub_preempt_count(val) do { preempt_count() -= (val); } while
(0)
#endif
- #define inc_preempt_count() add_preempt_count(1)
- #define dec_preempt_count() sub_preempt_count(1)
- #define preempt_count() (current_thread_info()->preempt_count)
#ifdef CONFIG_PREEMPT
asmlinkage void preempt_schedule(void);
- #define preempt_disable() \
- do { \
- inc_preempt_count(); \
- barrier(); \
} while (0)
- #define preempt_enable_no_resched() \
- do { \
- barrier(); \
- dec_preempt_count(); \
} while (0)
- #define preempt_check_resched() \
- do { \
- if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
- preempt_schedule(); \
} while (0)
- #define preempt_enable() \
- do { \
- preempt_enable_no_resched(); \
- preempt_check_resched(); \
} while (0)
#else
--- 13,70 ----
extern void fastcall add_preempt_count(int val);
extern void fastcall sub_preempt_count(int val);
#else
+ #define add_preempt_count(val) do { preempt_count() += (val); } while
(0)
+ #define sub_preempt_count(val) do { preempt_count() -= (val); } while
(0)
#endif
+ #define inc_preempt_count() add_preempt_count(1)
+ #define dec_preempt_count() sub_preempt_count(1)
+ #define preempt_count() (current_thread_info()->preempt_count)
#ifdef CONFIG_PREEMPT
asmlinkage void preempt_schedule(void);
+ #ifdef CONFIG_IPIPE
+
+ #include <asm/ipipe.h>
+
+ extern struct ipipe_domain *ipipe_percpu_domain[], *ipipe_root_domain;
+
+ #define ipipe_preempt_guard() (ipipe_percpu_domain[ipipe_processor_id()] ==
ipipe_root_domain)
+ #else
+ #define ipipe_preempt_guard() 1
+ #endif
+
+ #define preempt_disable() \
+ do { \
+ if (ipipe_preempt_guard()) { \
+ inc_preempt_count(); \
+ barrier(); \
+ } \
} while (0)
+ #define preempt_enable_no_resched() \
+ do { \
+ if (ipipe_preempt_guard()) { \
+ barrier(); \
+ dec_preempt_count(); \
+ } \
} while (0)
+ #define preempt_check_resched()
\
+ do { \
+ if (ipipe_preempt_guard()) { \
+ if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
+ preempt_schedule(); \
+ } \
} while (0)
+ #define preempt_enable() \
+ do { \
+ preempt_enable_no_resched(); \
+ preempt_check_resched(); \
} while (0)
#else
***************
*** 402,407 ****
*/
schedule();
cpu_idle();
}
--- 402,408 ----
*/
schedule();
+ ipipe_reset_stats();
cpu_idle();
}
***************
*** 117,130 ****
/*
* No locking required for CPU-local interrupts:
*/
desc->handler->ack(irq);
action_ret = handle_IRQ_event(irq, regs, desc->action);
desc->handler->end(irq);
return 1;
}
spin_lock(&desc->lock);
desc->handler->ack(irq);
/*
* REPLAY is when Linux resends an IRQ that was dropped earlier
* WAITING is used by probe to mark irqs that are being tested
--- 128,145 ----
/*
* No locking required for CPU-local interrupts:
*/
+ #ifndef CONFIG_IPIPE
desc->handler->ack(irq);
+ #endif /* CONFIG_IPIPE */
action_ret = handle_IRQ_event(irq, regs, desc->action);
desc->handler->end(irq);
return 1;
}
spin_lock(&desc->lock);
+ #ifndef CONFIG_IPIPE
desc->handler->ack(irq);
+ #endif /* CONFIG_IPIPE */
/*
* REPLAY is when Linux resends an IRQ that was dropped earlier
* WAITING is used by probe to mark irqs that are being tested
***************
*** 32,37 ****
obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
obj-$(CONFIG_SECCOMP) += seccomp.o
ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
# According to Alan Modra <[EMAIL PROTECTED]>, the -fno-omit-frame-pointer is
--- 32,38 ----
obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
obj-$(CONFIG_SECCOMP) += seccomp.o
+ obj-$(CONFIG_IPIPE) += ipipe/
ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
# According to Alan Modra <[EMAIL PROTECTED]>, the -fno-omit-frame-pointer is
