2009/10/27 Frederic Weisbecker <fweisbec@xxxxxxxxx>: > 2009/10/26 Wu Zhangjin <wuzhangjin@xxxxxxxxx>: >> ooh, Sorry, only this patch added(I stopped after fixing the compiling >> errors, no more check! so lazy a guy!). >> >> Just checked the source code of MIPS, the do_IRQ() is defined as a >> macro, so, I must move the macro to a C file, and also, there is a >> irq_enter...irq_exit block in a "big" function, I need to split it out. >> >> [...] >> /* >> * do_IRQ handles all normal device IRQ's (the special >> * SMP cross-CPU interrupts have their own specific >> * handlers). >> * >> * Ideally there should be away to get this into kernel/irq/handle.c to >> * avoid the overhead of a call for just a tiny function ... >> */ >> #define do_IRQ(irq) >> \ >> do { >> \ >> irq_enter(); >> \ >> __DO_IRQ_SMTC_HOOK(irq); >> \ >> generic_handle_irq(irq); >> \ >> irq_exit(); >> \ >> } while (0) >> [...] >> >> But The comment told us: do not make this tiny function be a standalone >> function, so??? > > > I can't check that currently. But may be the caller of this m Sorry, my message has been sent in the middle. I'm dealing with a strange keyboard where I am (and also with my strange hands). So, may be the caller of this macro can take the irqentry tag? > > >> >> the same to do_IRQ_no_affinity. >> >> and, about the following function, I need to split the >> irq_enter()...irq_exit() block out. >> >> void ipi_decode(struct smtc_ipi *pipi) >> { >> [...] >> switch (type_copy) { >> case SMTC_CLOCK_TICK: >> irq_enter(); >> kstat_incr_irqs_this_cpu(irq, irq_to_desc(irq)); >> cd = &per_cpu(mips_clockevent_device, cpu); >> cd->event_handler(cd); >> irq_exit(); >> break; >> >> case LINUX_SMP_IPI: >> switch ((int)arg_copy) { >> case SMP_RESCHEDULE_YOURSELF: >> ipi_resched_interrupt(); >> break; >> case SMP_CALL_FUNCTION: >> ipi_call_interrupt(); >> break; >> [...] >> Oh right, this one is more tricky. Well, if that's important for someone, we can deal with that later.