WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ppc-devel

[XenPPC] Why no do_softirq() after external interrupt ?

To: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: [XenPPC] Why no do_softirq() after external interrupt ?
From: HYEONSEUNG JANG <hs8848.jang@xxxxxxxxxxx>
Date: Fri, 18 May 2007 01:03:35 +0000 (GMT)
Delivery-date: Thu, 17 May 2007 18:01:53 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ppc-devel-request@lists.xensource.com?subject=help>
List-id: Xen PPC development <xen-ppc-devel.lists.xensource.com>
List-post: <mailto:xen-ppc-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=unsubscribe>
Msgkey: 20070518010335219@xxxxxxxxxxx
Reply-to: hs8848.jang@xxxxxxxxxxx
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
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>