POFXCALLBACKPROCESSORHALT 回调函数 (pepfx.h)

ProcessorHalt 例程准备要停止的处理器。

语法

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

NTSTATUS Pofxcallbackprocessorhalt(
  [in]                ULONG Flags,
  [in, out, optional] PVOID Context,
  [in]                PPROCESSOR_HALT_ROUTINE Halt
)
{...}

参数

[in] Flags

指示处理器将输入的空闲状态的属性的标志。 Flags 参数设置为零或以下一个或多个标志位的按位 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 回调的返回视为致命错误。
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

指向 PEP 定义的处理器停止上下文的指针。 此指针作为参数传递给 Halt 回调例程。 此上下文对 Windows 电源管理框架(PoFx)不透明。

[in] Halt

指向 PEP 实现的 停止 回调例程的指针。 PoFx 在准备停止处理器后调用此例程。 在此回调期间,PEP 预期会将处理器转换为已停止的 状态。

返回值

ProcessorHalt 如果处理器已成功准备好停止,则返回STATUS_SUCCESS。 可能的错误返回值包括以下状态代码。

返回值 描述
STATUS_INVALID_PARAMETER
Halt 参数为 NULL;或 标志中指定的标志值无效;或 标志 包含标志位的非法组合。 有关详细信息,请参阅“备注”。
STATUS_UNSUCCESSFUL
PEP 的 Halt 回调例程意外从未保留处理器的硬件上下文的空闲状态返回。

言论

此例程由电源管理框架(PoFx)实现,由平台扩展插件(PEP)调用。 PEP_KERNEL_INFORMATION_STRUCT_V3 结构的 ProcessorHalt 成员是指向 ProcessorHalt 例程的指针。

在停止处理器之前,PEP 调用 ProcessorHalt 例程,让 PoFx 有机会保存处理器的硬件上下文。 如有必要,ProcessorHalt 将此状态保存在 PoFx 中,以便在处理器退出空闲状态时可以稍后还原状态。 准备处理器进入空闲状态后,ProcessorHalt 调用 PEP 的 停止 回调例程来停止处理器。

作为 PEP 处理 PEP_NOTIFY_PPM_IDLE_EXECUTE 通知的一部分,PEP 必须将处理器转换为 PEP 已选择的空闲状态。 以下是进入处理器空闲状态的两种方法:

  • 对于处理器的空闲状态,处理器的缓存保持一致,以便维护所有系统和处理器状态,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

    仅当进入不一致缓存的空闲状态时,才应设置缓存刷新重写标志

  • 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 开始支持。
目标平台 窗户
标头 pepfx.h (include Pep_x.h)
IRQL <= HIGH_LEVEL

另请参阅

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE