diff mbox series

[RFC] hw: nios2: update interrupt_request when STATUS_PIE disabled

Message ID DM5PR11MB18339389B4BD1BB2B4B5AB7A8D860@DM5PR11MB1833.namprd11.prod.outlook.com
State New
Headers show
Series [RFC] hw: nios2: update interrupt_request when STATUS_PIE disabled | expand

Commit Message

Wu, Wentong June 5, 2020, 5:59 a.m. UTC
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.wu@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.wu@intel.com>
diff mbox series

Patch

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);