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を返します。 考えられるエラーの戻り値には、次の状態コードが含まれます。

戻り値 説明
STATUS_INVALID_PARAMETER
Halt パラメーターは NULL です。または、Flags で無効なフラグ値が指定されました。または Flags に無効なフラグ ビットの組み合わせが含まれています。 詳細については、「解説」を参照してください。
STATUS_UNSUCCESSFUL
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

    プロセッサ ハードウェア コンテキストを失うアイドル状態 (したがって 、マルチプロセッサ パーキング プロトコル を使用してアイドル状態を終了し、オペレーティング システムに制御を返す) は、キャッシュに一貫性のある状態ではありません。

Flags パラメーターに無効なフラグ ビットの組み合わせが含まれている場合、ProcessorHalt は失敗し、STATUS_INVALID_PARAMETERを返します。

PEP は、IRQL <= HIGH_LEVELでこのルーチンを呼び出すことができます。

要件

要件
サポートされている最小のクライアント Windows 10 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー pep_x.h (Pep_x.h を含む)
IRQL <= HIGH_LEVEL

こちらもご覧ください

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE