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 参数设置为零,或设置为以下一个或多个标志位的按位 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 定义的处理器停止上下文的指针。 此指针作为参数传递到 Halt 回调例程。 此上下文对于 Windows 电源管理框架 (PoFx) 是不透明的。
[in] Halt
指向 PEP 实现的 Halt 回调例程的指针。 PoFx 在完成停止处理器的准备工作后调用此例程。 在此回调期间,PEP 预期会将处理器转换为 已停止 状态。
返回值
ProcessorHalt 返回STATUS_SUCCESS如果处理器已成功准备停止。 可能的错误返回值包括以下状态代码。
返回值 | 说明 |
---|---|
|
Halt 参数为 NULL;或在 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 已选择的空闲状态。 以下是进入处理器空闲状态的两种方法:
- 对于处理器空闲状态,其中处理器的缓存保持一致以便保持所有系统和处理器状态,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 |