New to armv8 kernel development, and i'm finding some weird jumps between execution levels. Developing on qemu currently, and this is the weird thing i was talking about:
Exception return from AArch64 EL2 to AArch64 EL1 PC 0x8004cTaking exception 5 [IRQ]...from EL1 to EL1...with ESR 0x0/0x0...with ELR 0x81fa8...to EL1 PC 0x81280 PSTATE 0x3c5Exception return from AArch64 EL1 to AArch64 EL1 PC 0x83380Taking exception 5 [IRQ]...from EL1 to EL1...with ESR 0x0/0x0...with ELR 0x81fa0...to EL1 PC 0x81280 PSTATE 0x3c5Taking exception 3 [Prefetch Abort]...from EL2 to EL2...with ESR 0x21/0x86000010...with FAR 0x400000000...with ELR 0x400000000...to EL2 PC 0x200 PSTATE 0x3c9
As it can be seen two interrupt requests arrive to the CPU, the first is handled correctly (as a exception return is shown...), the second one does not execute the eret instruction apparently and a exception is taken from EL2 to EL2 somehow.
This makes me think... is there another way to jump from one EL to another other than exceptions?