[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[XenPPC] [pushed][ppc] Must check softirq conditions on return from hcall.



changeset:   9667:910d71f2bf1b
tag:         tip
user:        jimix@xxxxxxxxxxxxxxxxxxxxx
date:        Wed Mar 29 12:33:40 2006 -0500
summary:     [ppc] Must check softirq conditions on return from hcall.

diff -r 06bc81089a95 -r 910d71f2bf1b xen/arch/ppc/ppc64/exceptions.S
--- a/xen/arch/ppc/ppc64/exceptions.S   Wed Mar 29 12:32:25 2006 -0500
+++ b/xen/arch/ppc/ppc64/exceptions.S   Wed Mar 29 12:33:40 2006 -0500
@@ -365,9 +365,33 @@ ex_hcall_continued:
     mr r3, r1                           /* pass pointer to cpu_user_regs */
     subi r1, r1, STACK_FRAME_OVERHEAD   /* make a "caller" stack frame */
     CALL_CFUNC r12
-
+    /* test for pending softirqs, and loop until there are no more. */
+hcall_test_all_events:
+    ld r3, PAREA_vcpu(r13)
+    lwz r3, VCPU_processor(r3)
+    LOADADDR r4, irq_stat
+    sldi r3, r3, IRQSTAT_shift
+    add r4, r3, r4
+    ld r5, IRQSTAT_pending(r4)
+    cmpldi r5, 0
+    beq hcall_out
+
+    /* we could use nonvolatile GPRs across do_softirq calls, but those are
+     * volatile across exceptions :( */
+    LOADADDR r6, ppc_do_softirq
+    mfmsr r3                            /* we pass this MSR to _do_softirq so
+                                         * it can give it to us back without
+                                         * having to save it */
+    ori r8, r3, MSR_EE
+
+    mtmsrd r8                           /* enable interrupts */
+    CALL_CFUNC r6                       /* process softirqs returns r3 */
+    mtmsrd r3                           /* disable interrupts */
+    b hcall_test_all_events                   /* look for more */
+hcall_out:     
     addi r1, r1, STACK_FRAME_OVERHEAD   /* restore stack to cpu_user_regs */
     b fast_resume
+
 
 ex_dec_continued:
     EXCEPTION_SAVE_STATE r1



_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ppc-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.