background image

4-42 Vol. 3A

PAGING

— If CR4.PCIDE = 1 and bit 63 of the instruction’s source operand is 1, the instruction is not required to 

invalidate any TLB entries or entries in paging-structure caches.

MOV to CR4. The behavior of the instruction depends on the bits being modified:
— The instruction invalidates all TLB entries (including global entries) and all entries in all paging-structure 

caches (for all PCIDs) if (1) it changes the value of CR4.PGE;

1

 or (2) it changes the value of the CR4.PCIDE 

from 1 to 0.

— The instruction invalidates all TLB entries and all entries in all paging-structure caches for the current PCID 

if (1) it changes the value of CR4.PAE; or (2) it changes the value of CR4.SMEP from 0 to 1.

Task switch. If a task switch changes the value of CR3, it invalidates all TLB entries associated with PCID 000H 
except those for global pages. It also invalidates all entries in all paging-structure caches associated with PCID 
000H.

2

VMX transitions. See Section 4.11.1.

The processor is always free to invalidate additional entries in the TLBs and paging-structure caches. The following 
are some examples:

INVLPG may invalidate TLB entries for pages other than the one corresponding to its linear-address operand. It 
may invalidate TLB entries and paging-structure-cache entries associated with PCIDs other than the current 
PCID.

INVPCID may invalidate TLB entries for pages other than the one corresponding to the specified linear address. 
It may invalidate TLB entries and paging-structure-cache entries associated with PCIDs other than the specified 
PCID.

MOV to CR0 may invalidate TLB entries even if CR0.PG is not changing. For example, this may occur if either 
CR0.CD or CR0.NW is modified.

MOV to CR3 may invalidate TLB entries for global pages. If CR4.PCIDE = 1 and bit 63 of the instruction’s source 
operand is 0, it may invalidate TLB entries and entries in the paging-structure caches associated with PCIDs 
other than the PCID it is establishing. It may invalidate entries if CR4.PCIDE = 1 and bit 63 of the instruction’s 
source operand is 1. 

MOV to CR4 may invalidate TLB entries when changing CR4.PSE or when changing CR4.SMEP from 1 to 0.

On a processor supporting Hyper-Threading Technology, invalidations performed on one logical processor may 
invalidate entries in the TLBs and paging-structure caches used by other logical processors.

(Other instructions and operations may invalidate entries in the TLBs and the paging-structure caches, but the 
instructions identified above are recommended.)
In addition to the instructions identified above, page faults invalidate entries in the TLBs and paging-structure 
caches. In particular, a page-fault exception resulting from an attempt to use a linear address will invalidate any 
TLB entries that are for a page number corresponding to that linear address and that are associated with the 
current PCID. It also invalidates all entries in the paging-structure caches that would be used for that linear address 
and that are associated with the current PCID.

3

 These invalidations ensure that the page-fault exception will not 

recur (if the faulting instruction is re-executed) if it would not be caused by the contents of the paging structures 
in memory (and if, therefore, it resulted from cached entries that were not invalidated after the paging structures 
were modified in memory).
As noted in Section 4.10.2, some processors may choose to cache multiple smaller-page TLB entries for a transla-
tion specified by the paging structures to use a page larger than 4 KBytes. There is no way for software to be aware 
that multiple translations for smaller pages have been used for a large page. The INVLPG instruction and page 
faults provide the same assurances that they provide when a single TLB entry is used: they invalidate all TLB 
entries corresponding to the translation specified by the paging structures.

1. If CR4.PGE is changing from 0 to 1, there were no global TLB entries before the execution; if CR4.PGE is changing from 1 to 0, there 

will be no global TLB entries after the execution.

2. Task switches do not occur in IA-32e mode and thus cannot occur with IA-32e paging. Since CR4.PCIDE can be set only with IA-32e 

paging, task switches occur only with CR4.PCIDE = 0.

3. Unlike INVLPG, page faults need not invalidate all entries in the paging-structure caches, only those that would be used to translate 

the faulting linear address.