Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 316b9521 authored by Avi Kivity's avatar Avi Kivity
Browse files

KVM: MMU: Document large pages



Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
parent ec87fe2a
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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
===============