Есть ли сценарий, когда VMM не сможет внедрить прерывание в гостевую систему при выходе из окна прерывания? - PullRequest
2 голосов
/ 20 июня 2019

Я работаю над пользовательским гипервизором типа 2.Мой вопрос связан с инжекцией прерываний эмулируемых устройств в гостевой системе.

Сценарий: гость сделал несколько vmexit, прежде чем следующая vmresume VMM обнаружит, что в эмулируемом прерывании присутствует ожидающее прерываниеконтроллер.VMM запрашивает Interrupt Window Exit(IWE) на последующем vmresume.Как только мы получим IWE VMM записывает информацию о прерывании в VM-entry interruption-information field 4016H и возобновляет выполнение гостя.

Вопрос: Гарантируется ли, что прерывание будет введено в госте и обработано через гостя IDT?Существуют ли случаи, когда внедрение прерывания может завершиться неудачей?

Я вижу сценарий, в котором вместо входа в соответствующую запись гостевой IDT, гостевой сервер возобновляет работу и начинает выполнять что-то еще в гостевом ядре.

Подробности: Windows 64 bit guest, Intel VTx

1 Ответ

3 голосов
/ 20 июня 2019

Есть причины, по которым прерывание не может быть введено, но они вызовут сбой входа vm; он никогда не будет просто игнорировать введенное прерывание. Например, если IF сброшен или если предыдущая инструкция загружена SS, прерывания блокируются для одной инструкции. Однако, когда эти случаи применимы, вы не получили бы выход окна прерывания.

Возможно, прерывание не было введено. Одна из причин, по которой я могу думать о том, что это может произойти, заключается в том, что информационное поле прерывания vm-entry было настроено для доставки ошибки, поэтому прерывание не может быть доставлено одновременно.

...