POFXCALLBACKPROCESSORHALT コールバック関数 (pep_x.h)
ProcessorHalt ルーチンは、プロセッサを停止する準備をします。
構文
POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;
NTSTATUS Pofxcallbackprocessorhalt(
[in] ULONG Flags,
[in, out, optional] PVOID Context,
[in] PPROCESSOR_HALT_ROUTINE Halt
)
{...}
パラメーター
[in] Flags
プロセッサが入力するアイドル状態のプロパティを示すフラグ。 Flags パラメーターは、次の 1 つ以上のフラグ ビットの 0 またはビットごとの OR に設定されます。
フラグ名 | 値 | 説明 |
---|---|---|
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE | 0x01 | PEP の Halt コールバック ルーチンは、プロセッサのキャッシュをフラッシュする役割を担います。 このフラグが設定 されていない 場合、 ProcessorHalt はエントリのキャッシュをプロセッサのアイドル状態にフラッシュし、この状態から終了時にキャッシュを無効にします。 |
PROCESSOR_HALT_CACHE_COHERENT | 0x02 | プロセッサのキャッシュが一貫性を保つアイドル状態に入るためにプロセッサを準備します。 |
PROCESSOR_HALT_CONTEXT_RETAINED | 0x04 | プロセッサのスレッド コンテキストが保持されるアイドル状態に入るプロセッサを準備します。 |
PROCESSOR_HALT_RETURN_NOT_SAFE | 0x08 | PEP の Halt コールバック ルーチンは、返されないことが保証されます。 Halt コールバックがプロセッサを、ハードウェアで取り消すことができないコンテキストを失う電源ゲート状態に移行する場合は、このフラグを設定します。 このフラグを設定すると、オペレーティング システムは Halt コールバックからのリターンを致命的なエラーとして扱います。 |
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND | 0x16 |
[in, out, optional] Context
PEP で定義されたプロセッサ停止コンテキストへのポインター。 このポインターは、 停止 コールバック ルーチンにパラメーターとして渡されます。 このコンテキストは、Windows 電源管理フレームワーク (PoFx) に対して不透明です。
[in] Halt
PEP で実装された Halt コールバック ルーチンへのポインター。 PoFx は、プロセッサを停止する準備が完了した後、このルーチンを呼び出します。 このコールバック中に、PEP はプロセッサを 停止状態 に切り替える必要があります。
戻り値
ProcessorHalt は、プロセッサが正常に停止する準備ができた場合にSTATUS_SUCCESSを返します。 考えられるエラーの戻り値には、次の状態コードが含まれます。
戻り値 | 説明 |
---|---|
|
Halt パラメーターは NULL です。または、Flags で無効なフラグ値が指定されました。または Flags に無効なフラグ ビットの組み合わせが含まれています。 詳細については、「解説」を参照してください。 |
|
PEP の Halt コールバック ルーチンが、プロセッサのハードウェア コンテキストが保持されていないアイドル状態から予期せず返されました。 |
注釈
このルーチンは、電源管理フレームワーク (PoFx) によって実装され、プラットフォーム拡張機能プラグイン (PEP) によって呼び出されます。 PEP_KERNEL_INFORMATION_STRUCT_V3構造体の ProcessorHalt メンバーは、ProcessorHalt ルーチンへのポインターです。
プロセッサを停止する前に、PEP は ProcessorHalt ルーチンを呼び出して、PoFx にプロセッサのハードウェア コンテキストを保存する機会を与えます。 必要に応じて、 ProcessorHalt はこの状態を PoFx に内部的に保存して、プロセッサがアイドル状態を終了したときに後で状態を復元できるようにします。 プロセッサがアイドル状態に入る準備をした後、 ProcessorHalt は PEP の Halt コールバック ルーチンを呼び出してプロセッサを停止します。
PEP によるPEP_NOTIFY_PPM_IDLE_EXECUTE通知の処理の一環として、PEP はプロセッサを PEP が選択したアイドル状態に移行する必要があります。 プロセッサのアイドル状態を入力する 2 つの方法を次に示します。
- プロセッサのキャッシュが一貫性を保ち、すべてのシステムとプロセッサの状態が維持されるプロセッサアイドル状態の場合、PEP は最初に ProcessorHalt を呼び出さずにアイドル状態に直接入ることができます。
- プロセッサのキャッシュが一貫性を保たないプロセッサアイドル状態、またはプロセッサ ハードウェア コンテキストが保持されていないアイドル状態の場合、PEP はプロセッサをアイドル状態に移行する前に ProcessorHalt を呼び出す必要があります。
-
PROCESSOR_HALT_CONTEXT_RETAINED = 1、PROCESSOR_HALT_RETURN_NOT_SAFE = 1
PEP の Halt コールバック ルーチンは、コンテキストが保持されている任意の状態からを返す必要があります。
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1、PROCESSOR_HALT_CACHE_COHERENT = 1
cache-flush-override フラグは、キャッシュの一貫性のないアイドル状態に入る場合 にのみ 設定する必要があります。
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0、PROCESSOR_HALT_CACHE_COHERENT = 0
キャッシュの一貫性のない停止には、cache-flush-override フラグを設定する必要があります。
-
PROCESSOR_HALT_CONTEXT_RETAINED = 0、PROCESSOR_HALT_CACHE_COHERENT = 1
プロセッサ ハードウェア コンテキストを失うアイドル状態 (したがって 、マルチプロセッサ パーキング プロトコル を使用してアイドル状態を終了し、オペレーティング システムに制御を返す) は、キャッシュに一貫性のある状態ではありません。
PEP は、IRQL <= HIGH_LEVELでこのルーチンを呼び出すことができます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 以降でサポートされています。 |
対象プラットフォーム | Windows |
ヘッダー | pep_x.h (Pep_x.h を含む) |
IRQL | <= HIGH_LEVEL |