Fonction de rappel POFXCALLBACKPROCESSORHALT (pep_x.h)
La routine ProcessorHalt prépare l’arrêt du processeur.
Syntaxe
POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;
NTSTATUS Pofxcallbackprocessorhalt(
[in] ULONG Flags,
[in, out, optional] PVOID Context,
[in] PPROCESSOR_HALT_ROUTINE Halt
)
{...}
Paramètres
[in] Flags
Indicateurs qui indiquent les propriétés de l’état d’inactivité que le processeur entrera. Le paramètre Flags est défini sur zéro ou sur le bit-OR d’un ou plusieurs des bits d’indicateur suivants.
Nom de l’indicateur | Valeur | Description |
---|---|---|
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE | 0x01 | La routine de rappel Halt du PEP est chargée de vider les caches du processeur. Si cet indicateur n’est pas défini, ProcessorHalt videra les caches à l’entrée à l’état d’inactivité du processeur et invalidera les caches à la sortie de cet état. |
PROCESSOR_HALT_CACHE_COHERENT | 0x02 | Préparez le processeur à entrer dans un état inactif dans lequel les caches du processeur resteront cohérents. |
PROCESSOR_HALT_CONTEXT_RETAINED | 0x04 | Préparez le processeur à entrer dans un état inactif dans lequel le contexte de thread du processeur sera conservé. |
PROCESSOR_HALT_RETURN_NOT_SAFE | 0x08 | La routine de rappel Halt du PEP est garantie de ne pas retourner. Définissez cet indicateur si le rappel d’arrêt fait passer le processeur à un état de perte de contexte et de contrôle d’alimentation qui ne peut pas être annulé par le matériel. Lorsque cet indicateur est défini, le système d’exploitation traite un retour du rappel Halt comme une erreur irrécupérable. |
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND | 0x16 |
[in, out, optional] Context
Pointeur vers un contexte d’arrêt du processeur défini par PEP. Ce pointeur est passé en tant que paramètre à la routine de rappel Halt . Ce contexte est opaque pour l’infrastructure de gestion de l’alimentation Windows (PoFx).
[in] Halt
Pointeur vers une routine de rappel Halt implémentée par PEP. PoFx appelle cette routine une fois les préparatifs d’arrêt du processeur terminés. Pendant ce rappel, le PEP est censé faire passer le processeur à l’état arrêté .
Valeur retournée
ProcessorHalt retourne STATUS_SUCCESS si le processeur est correctement préparé pour être arrêté. Les valeurs de retour d’erreur possibles incluent le code status suivant.
Valeur retournée | Description |
---|---|
|
Le paramètre Halt a la valeur NULL ; ou une valeur d’indicateur non valide a été spécifiée dans Indicateurs ; ou Indicateurs contient une combinaison illégale de bits d’indicateur. Pour plus d'informations, consultez la section Notes. |
|
La routine de rappel Halt du PEP est retournée de manière inattendue à partir d’un état inactif dans lequel le contexte matériel du processeur n’a pas été conservé. |
Remarques
Cette routine est implémentée par l’infrastructure de gestion de l’alimentation (PoFx) et est appelée par le plug-in d’extension de plateforme (PEP). Le membre ProcessorHalt de la structure PEP_KERNEL_INFORMATION_STRUCT_V3 est un pointeur vers une routine ProcessorHalt .
Avant d’arrêter le processeur, le PEP appelle la routine ProcessorHalt pour permettre à PoFx d’enregistrer le contexte matériel du processeur. Si nécessaire, ProcessorHalt enregistre cet état en interne dans PoFx afin que l’état puisse être restauré ultérieurement lorsque le processeur quitte l’état inactif. Après avoir préparé le processeur à entrer dans l’état inactif, ProcessorHalt appelle la routine de rappel Halt du PEP pour arrêter le processeur.
Dans le cadre de la gestion par le PEP d’une notification de PEP_NOTIFY_PPM_IDLE_EXECUTE , le PEP doit faire passer le sous-traitant à l’état inactif sélectionné par le PEP. Voici les deux façons d’entrer l’état d’inactivité du processeur :
- Pour un état d’inactivité du processeur dans lequel les caches du processeur restent cohérents afin que tout l’état du système et du processeur soit conservé, le PEP peut entrer directement dans l’état inactif sans appeler d’abord ProcessorHalt.
- Pour un état d’inactivité du processeur dans lequel les caches du processeur peuvent ne pas rester cohérents ou un état inactif dans lequel le contexte matériel du processeur n’est pas conservé, le PEP doit appeler ProcessorHalt avant de faire passer le processeur à l’état inactif.
-
PROCESSOR_HALT_CONTEXT_RETAINED = 1 et PROCESSOR_HALT_RETURN_NOT_SAFE = 1
La routine de rappel Halt du PEP doit revenir de n’importe quel état dans lequel le contexte est conservé.
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 et PROCESSOR_HALT_CACHE_COHERENT = 1
L’indicateur cache-flush-override doit être défini uniquement si l’état inactif n’est pas cohérent dans le cache.
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 et PROCESSOR_HALT_CACHE_COHERENT = 0
L’indicateur cache-vidage-remplacement doit être défini pour tout arrêt cohérent non du cache.
-
PROCESSOR_HALT_CONTEXT_RETAINED = 0 et PROCESSOR_HALT_CACHE_COHERENT = 1
Les états inactifs qui perdent le contexte matériel du processeur (et qui utilisent donc le protocole de stationnement multiprocesseur pour quitter l’état d’inactivité et retourner le contrôle au système d’exploitation) ne sont pas des états cohérents du cache.
Le PEP peut appeler cette routine à l’adresse IRQL <= HIGH_LEVEL.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Pris en charge à partir de Windows 10. |
Plateforme cible | Windows |
En-tête | pep_x.h (include Pep_x.h) |
IRQL | <= HIGH_LEVEL |