Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 202308
b: refs/heads/master
c: 316b952
h: refs/heads/master
v: v3
  • Loading branch information
Avi Kivity committed Aug 1, 2010
1 parent 9a66715 commit cc1b180
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ec87fe2afcbcc4f430554980ec3e408bae34229d
refs/heads/master: 316b95216e277cdb22bd65346f9b9d9e10d0f53d
23 changes: 23 additions & 0 deletions trunk/Documentation/kvm/mmu.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
===============

Expand Down

0 comments on commit cc1b180

Please sign in to comment.