Assertion failure error in kernel vgic interrupt processing

Adam Lackorzynski adam at os.inf.tu-dresden.de
Mon May 14 21:11:16 CEST 2018


On Thu May 03, 2018 at 11:18:03 +0800, nico.hacker wrote:
> The previous test is not enough to cause error, this error is not related to peripherals, I have removed almost all peripheral drivers<br /><br />In the previous test, I added a delay operation before the vm2 start, so that vm1 completely up and then start vm2, this will greatly reduce the probability of the error. Now I removed this delay, vm1 and vm2 started simultaneously, then the error will occur frequently (about 1/10 probability). The error is generated when kernel processes vtimer interrupts. Under normal circumstances, after processing a vtimer interrupt, the vcpu thread will return to uvmm and then execute prepare_guest_entry(). This operation will eventually enter the kernel through the system call to set the state of vcpu thread, but when the error occurs, I find that the vcpu thread does not execute vcpu_resume, it processes two consecutive vtimer interrupts. As a result, the assertion fails.

Ok, I see. I've never experienced this, however I will try running VMs
aggressivly concurrent and see what happens.

> Is the kernel able to guarantee that the complete process of handling vgic and vtimer interrupts (including the process in uvmm) is not interrupted by a new interrupt?

Yes, this is supposed to be the case.

> Here's my configuration:

You're aware that you seem to give both VMs access to the same UART
device? (Will probably have nothing to do with the assertion.)




Adam




More information about the l4-hackers mailing list