HvCallStartVirtualProcessor 是啟動虛擬處理器的啟發式方法。 它在功能上等同於傳統的基於 INIT 的方法,不同之處在於 VP 可以從所需的暫存器狀態啟動。
這是在非零VTL中啟動VP的唯一方法。
介面
HV_STATUS
HvCallStartVirtualProcessor(
_In_ HV_PARTITION_ID PartitionId,
_In_ HV_VP_INDEX VpIndex,
_In_ HV_VTL TargetVtl,
_In_ HV_INITIAL_VP_CONTEXT VpContext
);
呼叫代碼
0x0099 (簡單)
輸入參數
x64 佈局
| 名稱 | Offset | 大小 | 提供的資訊 |
|---|---|---|---|
PartitionId |
0 | 8 | Partition |
VpIndex |
8 | 4 | VP 索引開始。 要從APIC ID獲取VP索引,請使用HvCallGetVpIndexFromApicId。 |
TargetVtl |
12 | 1 | 目標 VTL |
VpContext |
16 | 224 | 指定 VP 應啟動的初始環境定義。 |
ARM64 佈局
| 名稱 | Offset | 大小 | 提供的資訊 |
|---|---|---|---|
PartitionId |
0 | 8 | Partition |
VpIndex |
8 | 4 | VP 索引開始。 要從 MPIDR 值取得 VP 索引,請使用 HvCallGetVpIndexFromApicId。 |
TargetVtl |
12 | 1 | 目標 VTL |
VpContext |
16 | 72 | 指定 VP 應啟動的初始環境定義。 |
傳回值
| 狀態碼 | 錯誤狀況 |
|---|---|
HV_STATUS_ACCESS_DENIED |
拒絕存取 |
HV_STATUS_INVALID_PARTITION_ID |
指定的分割區 ID 無效。 |
HV_STATUS_INVALID_VP_INDEX |
HV_VP_INDEX指定的虛擬處理器無效。 |
HV_STATUS_INVALID_REGISTER_VALUE |
提供的暫存器值無效。 |
HV_STATUS_INVALID_VP_STATE |
虛擬處理器未處於正確狀態,無法執行所指出的作業。 |
HV_STATUS_INVALID_PARTITION_STATE |
指定的分割區未處於「作用中」狀態。 |
HV_STATUS_INVALID_VTL_STATE |
VTL 狀態與要求的作業衝突。 |