hyperplatform筆記,關於xeon至強cpu碰見watchdog問題卡死[解決]

x64.asmwindows

guest發生異常時,陷入AsmVmmEntryPoint函數

以後保存現場,而後進入VmmVmExitHandler3d

而後VmmVmExitHandler根據異常的類型進行分發到不一樣的handle,如:調試

case VmxExitReason::kMsrRead:
      VmmpHandleMsrReadAccess(guest_context);
      break;
    case VmxExitReason::kMsrWrite:
      VmmpHandleMsrWriteAccess(guest_context);
      break;code

至強cpu會由於windows PG調用msr瘋狂陷入到這裏卡死ci

解決方法:文檔

VmmpHandleMsrAccess中進行處理,當msr=0x400000F0的時候,返回0,即edx和eax都爲0,由於rdmsr指令是經過ecx傳入,而後將返回值放在edx和eax中,這裏的ecx實際上就是0x400000F0,通過查閱intel developer manual,卷4,https://software.intel.com/en-us/download/intel-64-and-ia-32-architectures-software-developers-manual-volume-4-model-specific-registers,發現這個指令並無介紹,可是在正常狀況下調試vmware中的虛擬機,發現一直返回的是0,所以這裏直接返回0就好了。同步

 

另外關於xeon至強CPU和i系列CPU的差別:博客

xeon是經過pPmIdleGuestExecute陷入虛擬機

i7則是經過pPmIdleDefaultExecute陷入

上層調用則相同,目前暫未查到這兩個函數的說明文檔。

 

個人博客即將同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=1v4lrkv3u23dw

相關文章
相關標籤/搜索