KVM: MMU: Don't assume struct page for x86
authorAnthony Liguori <aliguori@us.ibm.com>
Wed, 2 Apr 2008 19:46:56 +0000 (14:46 -0500)
committerAvi Kivity <avi@qumranet.com>
Sun, 27 Apr 2008 09:01:15 +0000 (12:01 +0300)
commit35149e2129fe34fc8cb5917e1ecf5156b0fa3415
treeb67cb16fa6054769ee476fce99a32601b126af10
parentfdae862f91728aec6dd8fd62cd2398868c906b6b
KVM: MMU: Don't assume struct page for x86

This patch introduces a gfn_to_pfn() function and corresponding functions like
kvm_release_pfn_dirty().  Using these new functions, we can modify the x86
MMU to no longer assume that it can always get a struct page for any given gfn.

We don't want to eliminate gfn_to_page() entirely because a number of places
assume they can do gfn_to_page() and then kmap() the results.  When we support
IO memory, gfn_to_page() will fail for IO pages although gfn_to_pfn() will
succeed.

This does not implement support for avoiding reference counting for reserved
RAM or for IO memory.  However, it should make those things pretty straight
forward.

Since we're only introducing new common symbols, I don't think it will break
the non-x86 architectures but I haven't tested those.  I've tested Intel,
AMD, NPT, and hugetlbfs with Windows and Linux guests.

[avi: fix overflow when shifting left pfns by adding casts]

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
arch/x86/kvm/mmu.c
arch/x86/kvm/paging_tmpl.h
include/asm-x86/kvm_host.h
include/linux/kvm_host.h
include/linux/kvm_types.h
virt/kvm/kvm_main.c