[PATCH v1 02/10] KVM: x86/mmu: Prepare kvm_is_mmio_pfn() for PG_reserved changes

David Hildenbrand david at redhat.com
Tue Nov 5 22:09:33 AEDT 2019


On 05.11.19 02:37, Dan Williams wrote:
> On Thu, Oct 24, 2019 at 5:10 AM David Hildenbrand <david at redhat.com> wrote:
>>
>> Right now, ZONE_DEVICE memory is always set PG_reserved. We want to
>> change that.
>>
>> KVM has this weird use case that you can map anything from /dev/mem
>> into the guest. pfn_valid() is not a reliable check whether the memmap
>> was initialized and can be touched. pfn_to_online_page() makes sure
>> that we have an initialized memmap (and don't have ZONE_DEVICE memory).
>>
>> Rewrite kvm_is_mmio_pfn() to make sure the function produces the
>> same result once we stop setting ZONE_DEVICE pages PG_reserved.
>>
>> Cc: Paolo Bonzini <pbonzini at redhat.com>
>> Cc: "Radim Krčmář" <rkrcmar at redhat.com>
>> Cc: Sean Christopherson <sean.j.christopherson at intel.com>
>> Cc: Vitaly Kuznetsov <vkuznets at redhat.com>
>> Cc: Wanpeng Li <wanpengli at tencent.com>
>> Cc: Jim Mattson <jmattson at google.com>
>> Cc: Joerg Roedel <joro at 8bytes.org>
>> Cc: Thomas Gleixner <tglx at linutronix.de>
>> Cc: Ingo Molnar <mingo at redhat.com>
>> Cc: Borislav Petkov <bp at alien8.de>
>> Cc: "H. Peter Anvin" <hpa at zytor.com>
>> Cc: KarimAllah Ahmed <karahmed at amazon.de>
>> Cc: Michal Hocko <mhocko at kernel.org>
>> Cc: Dan Williams <dan.j.williams at intel.com>
>> Signed-off-by: David Hildenbrand <david at redhat.com>
>> ---
>>   arch/x86/kvm/mmu.c | 29 +++++++++++++++++------------
>>   1 file changed, 17 insertions(+), 12 deletions(-)
>>
>> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
>> index 24c23c66b226..f03089a336de 100644
>> --- a/arch/x86/kvm/mmu.c
>> +++ b/arch/x86/kvm/mmu.c
>> @@ -2962,20 +2962,25 @@ static bool mmu_need_write_protect(struct kvm_vcpu *vcpu, gfn_t gfn,
>>
>>   static bool kvm_is_mmio_pfn(kvm_pfn_t pfn)
>>   {
>> +       struct page *page = pfn_to_online_page(pfn);
>> +
>> +       /*
>> +        * ZONE_DEVICE pages are never online. Online pages that are reserved
>> +        * either indicate the zero page or MMIO pages.
>> +        */
>> +       if (page)
>> +               return !is_zero_pfn(pfn) && PageReserved(pfn_to_page(pfn));
>> +
>> +       /*
>> +        * Anything with a valid (but not online) memmap could be ZONE_DEVICE.
>> +        * Treat only UC/UC-/WC pages as MMIO.
> 
> You might clarify that ZONE_DEVICE pages that belong to WB cacheable
> pmem have the correct memtype established by devm_memremap_pages().

/*
  * Anything with a valid (but not online) memmap could be ZONE_DEVICE.
  * Treat only UC/UC-/WC pages as MMIO. devm_memremap_pages() established
  * the correct memtype for WB cacheable ZONE_DEVICE pages.
  */

Thanks!

> 
> Other than that, feel free to add:
> 
> Reviewed-by: Dan Williams <dan.j.williams at intel.com>
> 


-- 

Thanks,

David / dhildenb



More information about the Linuxppc-dev mailing list