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 回调将处理器转换为硬件无法取消的上下文丢失、电源门控状态,请设置此标志。 设置此标志后,操作系统会将 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如果处理器已成功准备停止。 可能的错误返回值包括以下状态代码。

返回值 说明
STATUS_INVALID_PARAMETER
Halt 参数为 NULL;或在 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 已选择的空闲状态。 以下是进入处理器空闲状态的两种方法:

  • 对于处理器空闲状态,其中处理器的缓存保持一致以便保持所有系统和处理器状态,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
标头 pepfx.h (包括 Pep_x.h)
IRQL <= HIGH_LEVEL

另请参阅

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE