I''m a student for Google Summer of Code. this year. My project, as I described before, is adapt the POK as an hypervisor to run the RTEMS.
Now I have make some changes in POK kernel, make a pull request in github. And I have write a explanation in this wiki page[1].
But I'd like to give an brief introduction.
When an interrupt occurs, like time interrupt, we will mask it in vCPU. when a partition resumes it will check the vCPU, if there is an interrupt pending on vCPU, then store the interrupt frame and change eip in the stack of current interrupt as interrupt handler in user spcae. After interrupt handler, it will invoke an hypercall(syscall) do_iret. this will check whether there are still some interrupt pending on vCPU. If no, then restore the interrupt frame and return to normal program execution.
Unlucky, this mechanism is not working now. I have spent lots of time to debug it.
The pok will crash when I disable all
breakpoint and continue it. But if I running step by step, the kernel won't crash. Also the iret can't be tracked(to execute
iret once will not cause the crash of POK). I can't locate the reason of this problem, can you give me some suggestions?
Thank you very much.
--
Best Regards.
Youren Shen.