Re: [PATCH RFC 0/3] Fix KVM misinterpreting Reserved page as an MMIO page

From: Yi Zhang
Date: Tue Dec 04 2018 - 01:59:38 EST


On 2018-12-03 at 11:25:20 -0800, Alexander Duyck wrote:
> I have loosely based this patch series off of the following patch series
> from Zhang Yi:
> https://lore.kernel.org/lkml/cover.1536342881.git.yi.z.zhang@xxxxxxxxxxxxxxx
>
> The original set had attempted to address the fact that DAX pages were
> treated like MMIO pages which had resulted in reduced performance. It
> attempted to address this by ignoring the PageReserved flag if the page
> was either a DEV_DAX or FS_DAX page.
>
> I am proposing this as an alternative to that set. The main reason for this
> is because I believe there are a few issues that were overlooked with that
> original set. Specifically KVM seems to have two different uses for the
> PageReserved flag. One being whether or not we can pin the memory, the other
> being if we should be marking the pages as dirty or accessed. I believe
> only the pinning really applies so I have split the uses of
> kvm_is_reserved_pfn and updated the function uses to determine support for
> page pinning to include a check of the pgmap to see if it supports pinning.
kvm is not the only one users of the dax page.

A similar user of PageReserved to look at is:
drivers/vfio/vfio_iommu_type1.c:is_invalid_reserved_pfn(
vfio is also want to know the page is capable for pinning.

I throught that you have removed the reserved flag on the dax page

in https://patchwork.kernel.org/patch/10707267/

is something I missing here?

>
> ---
>
> Alexander Duyck (3):
> kvm: Split use cases for kvm_is_reserved_pfn to kvm_is_refcounted_pfn
> mm: Add support for exposing if dev_pagemap supports refcount pinning
> kvm: Add additional check to determine if a page is refcounted
>
>
> arch/x86/kvm/mmu.c | 6 +++---
> drivers/nvdimm/pfn_devs.c | 2 ++
> include/linux/kvm_host.h | 2 +-
> include/linux/memremap.h | 5 ++++-
> include/linux/mm.h | 11 +++++++++++
> virt/kvm/kvm_main.c | 34 +++++++++++++++++++++++++---------
> 6 files changed, 46 insertions(+), 14 deletions(-)
>
> --