Condividi tramite


Funzione di callback POFXCALLBACKPROCESSORHALT (pep_x.h)

La routine ProcessorHalt prepara il processore da arrestare.

Sintassi

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

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

Parametri

[in] Flags

Flag che indicano le proprietà dello stato di inattività immesso dal processore. Il parametro Flags è impostato su zero o sull'OR bit per bit di uno o più dei bit di flag seguenti.

Nome flag Valore Descrizione
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 La routine di callback stop del PEP è responsabile dello svuotamento delle cache del processore. Se questo flag non è impostato, ProcessorHalt scarica le cache sullo stato di inattività del processore e invaliderà le cache all'uscita da questo stato.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Preparare il processore per entrare in uno stato di inattività in cui le cache del processore rimarranno coerenti.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Preparare il processore per immettere uno stato di inattività in cui verrà mantenuto il contesto del thread del processore.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 La routine di callback stop del PEP non viene restituita. Impostare questo flag se l'Stop callback esegue la transizione del processore a uno stato di perdita del contesto e di controllo dell'alimentazione che non può essere annullato dall'hardware. Quando questo flag è impostato, il sistema operativo considererà una restituzione dalla Stop callback come errore irreversibile.
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

Puntatore a un contesto di interruzione del processore definito da PEP. Questo puntatore viene passato come parametro alla routine di callback Stop. Questo contesto è opaco per il framework di risparmio energia di Windows (PoFx).

[in] Halt

Puntatore a una routine di callback implementata da PEP Stop. PoFx chiama questa routine dopo la preparazione per interrompere il completamento del processore. Durante questo callback, si prevede che il PEP passi il processore allo stato interrotto.

Valore restituito

ProcessorHalt restituisce STATUS_SUCCESS se il processore è pronto per essere arrestato correttamente. I possibili valori restituiti dall'errore includono il codice di stato seguente.

Valore restituito Descrizione
STATUS_INVALID_PARAMETER
Il parametro Halt è NULL; o un valore di flag non valido è stato specificato in Flag; o Flag contiene una combinazione non valida di bit di flag. Per altre informazioni, vedere Osservazioni.
STATUS_UNSUCCESSFUL
Il stop del PEP routine di callback restituito in modo imprevisto da uno stato di inattività in cui il contesto hardware del processore non è stato mantenuto.

Osservazioni

Questa routine viene implementata dal framework di risparmio energia (PoFx) e viene chiamata dal plug-in di estensione della piattaforma (PEP). Il membro ProcessorHalt della struttura PEP_KERNEL_INFORMATION_STRUCT_V3 è un puntatore a una routine ProcessorHalt.

Prima di interrompere il processore, pep chiama la routine ProcessorHalt per offrire a PoFx l'opportunità di salvare il contesto hardware del processore. Se necessario, ProcessorHalt salva questo stato internamente in PoFx in modo che lo stato possa essere ripristinato in un secondo momento quando il processore esce dallo stato di inattività. Dopo aver preparato il processore per entrare nello stato di inattività, ProcessorHalt chiama la routine di callback stoppa del PEP per interrompere il processore.

Nell'ambito della gestione del PEP di una notifica di PEP_NOTIFY_PPM_IDLE_EXECUTE, il PEP deve passare il processore allo stato di inattività selezionato dal PEP. Di seguito sono riportati i due modi per entrare nello stato di inattività del processore:

  • Per uno stato di inattività del processore in cui le cache del processore rimangono coerenti in modo che venga mantenuto tutto lo stato del sistema e del processore, il PEP può entrare direttamente nello stato di inattività senza prima chiamare ProcessorHalt.
  • Per uno stato di inattività del processore in cui le cache del processore potrebbero non rimanere coerenti o uno stato inattivo in cui il contesto hardware del processore non viene mantenuto, il PEP deve chiamare ProcessorHalt prima di passare il processore allo stato di inattività.
Le combinazioni seguenti di bit di flag non sono valide:
  • PROCESSOR_HALT_CONTEXT_RETAINED = 1 e PROCESSOR_HALT_RETURN_NOT_SAFE = 1

    La routine di callback stop del PEP deve restituire da qualsiasi stato in cui viene conservato il contesto.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 e PROCESSOR_HALT_CACHE_COHERENT = 1

    Il flag cache-flush-override deve essere impostato solo se si immette uno stato di inattività che non è coerente nella cache.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 e PROCESSOR_HALT_CACHE_COHERENT = 0

    Il flag cache-flush-override deve essere impostato per qualsiasi interruzione coerente della cache.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 e PROCESSOR_HALT_CACHE_COHERENT = 1

    Tutti gli stati di inattività che perdono il contesto hardware del processore (e quindi usano il protocollo di parcheggio multiprocessore per uscire dallo stato di inattività e restituire il controllo al sistema operativo) non sono stati coerenti con la cache.

Se il parametro Flags contiene una combinazione non valida di bit flag, ProcessorHalt ha esito negativo e restituisce STATUS_INVALID_PARAMETER.

Il PEP può chiamare questa routine in IRQL <= HIGH_LEVEL.

Fabbisogno

Requisito Valore
client minimo supportato Supportato a partire da Windows 10.
piattaforma di destinazione Finestre
intestazione pep_x.h (includere Pep_x.h)
IRQL <= HIGH_LEVEL

Vedere anche

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE