Hi all,
I'm running icount mode on qemu_nios2 with customized  platform(almost same 
with 10m50_devboard),
but cpu abort happened(qemu: fatal: Raised interrupt while not in I/O function) 
when guest code changes
state register with wrctl instruction, add some debug code finding that it's 
caused by the interrupt_request
mismatch, so I made a patch as below, not sure if it's right, hope I can have 
some discussion with maintainers
first! Thanks a lot!



commit efdb3da4e145a7a34ba8b3ab1cdcfc346ae20a11 (HEAD -> master)
Author: Wentong Wu <wentong...@intel.com>
Date:   Fri Jun 5 09:29:43 2020 -0400

    hw: nios2: update interrupt_request when CR_STATUS_PIE disabled

    Update interrupt_request when external interupt pends for STATUS_PIE
    disabled. Otherwise on icount enabled nios2 target there will be cpu
    abort when guest code changes state register with wrctl instruction.

    Signed-off-by: Wentong Wu <wentong...@intel.com>

diff --git a/hw/nios2/cpu_pic.c b/hw/nios2/cpu_pic.c
index 1c1989d5..b04db4d7 100644
--- a/hw/nios2/cpu_pic.c
+++ b/hw/nios2/cpu_pic.c
@@ -42,7 +42,9 @@ static void nios2_pic_cpu_handler(void *opaque, int irq, int 
level)
         } else if (!level) {
             env->irq_pending = 0;
             cpu_reset_interrupt(cs, type);
-        }
+        } else {
+            cs->interrupt_request |= type;
+       }
     } else {
         if (level) {
             cpu_interrupt(cs, type);

Reply via email to