On 22 September 2015 at 08:30, Maciej Bielski <biel...@eurecom.fr> wrote: > Hi, > > I am using qemu-system-arm for ARM emulation. I have found that an > interrupt may be sent by qemu_set_irq(), with all device configuration > done inside fdt. But then, the only result is that a cpu flag is set: > > cpu->tcg_exit_req = 1 > > Is there a way to invoke any kind of callback on such event?
What are you actually trying to achieve? qemu_set_irq() is used for doing the modelled equivalent of "my device just set its outbound 'interrupt' signal to 1". Typically the board model will connect that signal wire up to an interrupt controller. The interrupt controller in turn will have outbound wires that connect to the CPU's IRQ and FIQ inputs. So the device raises its interrupt line; the interrupt controller will handle that in the same way the hardware would (depending on how the guest has programmed it to set the interrupt priority, whether that interrupt is enabled/disabled, etc, whether the line is configured to raise IRQ or FIQ), and might raise either the IRQ or FIQ line to the CPU, or might do neither immediately. Then the CPU model handles having its IRQ or FIQ input set, by doing what a CPU does in that situation: it causes the guest to stop doing what it was doing and start executing at the appropriate entry point for an interrupt handler. The tcg_exit_req flag is part of QEMU's internal mechanism for causing the emulated CPU to stop doing whatever it was doing. When the CPU reaches the beginning of the next basic block it will check that flag and break out of its "execute code" inner loop, at which point it will notice that it has a pending exception to take. All of this should just work with no particular need for you to write any kind of callback function. thanks -- PMM