|
|
|
|
|
|
|
|
|
|
xen-ppc-devel
[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
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [XenPPC] Why no do_softirq() after external interrupt ?,
HYEONSEUNG JANG <=
|
|
|
|
|