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 > > 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; > [...] > > Regards, > Wu Zhangjin > >