Я работаю над модулем ядра Linux и программой пользовательского пространства для тестирования VMX.
Код работает на ноутбуке Ubuntu16.04 с процессором Broadwell.
Программа пространства пользователя будет вызывать коды модулей ядра для выполнения инструкций VMX для запуска тестирующей виртуальной машины, таких как vmxon, vmclear, vmptrld, vmlaunch, vmxoff для vmlaunce VM или vmxon, vmptrld, vmresume, vmxoff toвозобновить выполнение виртуальной машины.
После VMexit (переключитесь обратно в программу пользовательского пространства для проверки состояний ВМ, затем вернитесь в пространство ядра для продолжения операций VMX), модуль вызовет vmresume для возобновления работы ВМ, но vmresume завершился ошибкой с ошибкой инструкциичисло 5 означает «вызов vmresume с незапущенной VMCS».
Затем я изменил код, не переключаясь обратно на пользовательское пространство, просто запустил vmlaunch, (vmexit) и vmresume в пространстве ядра (модуль ядра), он будет работать нормально.
Чтобы проверить причину сбоя, я переключился обратно, чтобы использовать пространство пользователя.И используйте sched_setaffinity, чтобы связать все мои исполнения VMX в одном ядре ЦП, и выгружать VMCS при каждой ошибке инструкции vmexit или vmx.
Я все еще сталкиваюсь с этой ошибкой, даже журналы ядра показывают, что все эти операции VMX выполняются в одном процессоре, например CPU0.И дамп VMCS показал почти пустой VMCS после сбоя.
Я не знаю, почему попал в эту ошибку с одной областью VMCS и привязкой к ядру ЦП.
Я что-то упустил?