On 20/03/18 20:24, Brijen Raval wrote:
Hello Julien,
Hello,
As requested I am moving the conversation to email from IRC
To summarize my setup:
1. I am running a custom kernel on QEMU ARM64(without KVM) on my linux
machine
2. I have my custom implementation of Hypervisor
3. I am trying to run the same custom kernel as guest OS on top of my
Hypervisor
- I am able to boot my kernel to shell on QEMU
- I am able to start my guest OS
- From the logs I see that my guest OS finishes booting up, I can see
the $sign for the shell and then it goes into idle state, but I cannot
use the shell
To debug further I enabled tracing in QEMU and printed the exceptions to
understand what state is my guest in
Before I paste some logs here, some more information about my system
IRQ 30 is the physical timer interrupt of my host OS running on QEMU
IRQ 27 is the virtual timer interrupt of my guest OS
I have added some extra logging in QEMU to print out the VTTBR so as to
understand where the exception is coming from
From 1st Attachment (GIC 1) I observe that every once in a while the
phys timer interrupt occurs (IRQ 30) and its handled by the host VM, and
then after about 10-20 times the virtirq 27 level changes to 1 and back
to 0 again and again..this is how its looping currently after boot up
Adding a 2nd attachment with extra logging of traps of exceptions as
well. It just shows 2 different IRQ exceptions taken, one with VTTBR = 0
(IRQ30) and other with a VTTBR value of the guest (IRQ 27, since the irq
27 level is changed to 1 just before it..
Any idea what am I missing, and why my guest OS is not handling the
pending interrupt.
Upon receiving the IRQ 27, I do set the HCR_EL2.VI <http://HCR_EL2.VI>
bit to 1 to signal the guest about a pending virual interrupt but I dont
think thats working.
HCR_EL2.VI should not be necessary is you are using the GIC HW
virtualization extension. Can you confirm you are using it?
If so, I would recommend to look at the content of the LRs and checking
you effectively have IRQ 27 pending in it.
Another thing I noticed that the qemu logging, never shows anything for
the virt_interrupt.
What do you mean by "virt_interrupt"? is it a message QEMU is supposed
to print when injecting interrupt to the guest?
Cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel