mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-02 07:46:43 +07:00
KVM: MMU: Document large pages
Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
ec87fe2afc
commit
316b95216e
@ -317,6 +317,29 @@ on fault type:
|
||||
|
||||
(user write faults generate a #PF)
|
||||
|
||||
Large pages
|
||||
===========
|
||||
|
||||
The mmu supports all combinations of large and small guest and host pages.
|
||||
Supported page sizes include 4k, 2M, 4M, and 1G. 4M pages are treated as
|
||||
two separate 2M pages, on both guest and host, since the mmu always uses PAE
|
||||
paging.
|
||||
|
||||
To instantiate a large spte, four constraints must be satisfied:
|
||||
|
||||
- the spte must point to a large host page
|
||||
- the guest pte must be a large pte of at least equivalent size (if tdp is
|
||||
enabled, there is no guest pte and this condition is satisified)
|
||||
- if the spte will be writeable, the large page frame may not overlap any
|
||||
write-protected pages
|
||||
- the guest page must be wholly contained by a single memory slot
|
||||
|
||||
To check the last two conditions, the mmu maintains a ->write_count set of
|
||||
arrays for each memory slot and large page size. Every write protected page
|
||||
causes its write_count to be incremented, thus preventing instantiation of
|
||||
a large spte. The frames at the end of an unaligned memory slot have
|
||||
artificically inflated ->write_counts so they can never be instantiated.
|
||||
|
||||
Further reading
|
||||
===============
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user