kvm, x86: Properly check whether a pfn is an MMIO or not
authorKarimAllah Ahmed <karahmed@amazon.de>
Thu, 31 Jan 2019 20:24:44 +0000 (21:24 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 30 Apr 2019 19:49:46 +0000 (21:49 +0200)
commit0c55671f84fffe591e8435c93a8c83286fd6b8eb
tree19ffa33fdc2f35cadd344f601b60810b3758fcd1
parente0bf2665ca26c1f6d6909de29bd382e7a5ee41e7
kvm, x86: Properly check whether a pfn is an MMIO or not

pfn_valid check is not sufficient because it only checks if a page has a struct
page or not, if "mem=" was passed to the kernel some valid pages won't have a
struct page. This means that if guests were assigned valid memory that lies
after the mem= boundary it will be passed uncached to the guest no matter what
the guest caching attributes are for this memory.

Introduce a new function e820__mapped_raw_any which is equivalent to
e820__mapped_any but uses the original e820 unmodified and use it to
identify real *RAM*.

Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/include/asm/e820/api.h
arch/x86/kernel/e820.c
arch/x86/kvm/mmu.c