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)
|
(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
|
Further reading
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue