[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XenPPC] Why no do_softirq() after external interrupt ?
There are currently three places in xen code where do_softirq() is called. - return to the guest from the hypervisor decrementer interrupt handler - return to the guest from a hypercall() - in idle_loop() But it is kind of strange that do_softirq() is not called after external interrupt handler, ex_external_continued: EXCEPTION_SAVE_STATE r1 LOADADDR r12, do_external mr r3, r1 /* pass pointer to cpu_user_regs */ subi r1, r1, STACK_FRAME_OVERHEAD /* make a "caller" stack frame */ CALL_CFUNC r12 addi r1, r1, STACK_FRAME_OVERHEAD /* restore stack to cpu_user_regs */ b fast_resume This can cause quite large delay in interrupt processing because context switching is done by SCHEDULE_SOFTIRQ. For example, Let's assume that domU is now running and there is an external interrupt. - domU is interrupted and Xen's do_external() is called - an event channel toward dom0 is set to 'pending' - domU is resumed by fast_resume - dom0 is never scheduled even if it has the higher priority until do_softirq() is called by the next hyperviosr decrementer interrupt. When I look at the same parts for the x86 arch, it seems that softirq is processed in every 'ret_from_int' which, I think, is expected behaviour. Is there anyone who can tell me the reason why do_softirq() is not called after external interrupt handling? Or is it just a simple missing(but important) code in XenPPC port ? - HyeonSeung Jang. _______________________________________________ Xen-ppc-devel mailing list Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ppc-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |