Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp899678imm; Wed, 4 Jul 2018 07:52:50 -0700 (PDT) X-Google-Smtp-Source: AAOMgpelVsRLIV2e5yzf5y1Fw05EQIeYlzlBqVyDqqTpSyMqabC9xQAaer12kaJqLBsDAFxrnRwj X-Received: by 2002:a62:9fd1:: with SMTP id v78-v6mr2488029pfk.233.1530715970439; Wed, 04 Jul 2018 07:52:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530715970; cv=none; d=google.com; s=arc-20160816; b=ASyuGM26Sh+Ko440vPHicUibiu+wMxq+/7gA40c0aIVFtu9cc9A1yyEfIKEEkB/50M jCgCiy+dDexWlicQuaUBnXgLlGu1TVitWi6wDYA4OwnMpAVrjpKUlVY8mLXZudSbQpx1 FLlx8Tvkdb4VlUMEt0hpGUhatOnkAUsw7DnVsnm9utlIfccchcD0zTTmp6wITQ1Xfqtx m8jbB9fQ5caVqv083P5jR0s360K8JWca3dDTgQgjuxN+uYS8Z3Cmz2Y1/qvQnkDvmwGI bzFJ4h6Rtk02vYrAYkuMjTq6uVDIWbe70Fh3XV6ztvdW4JTtXu/nTK+emU+tc9Rb4Pom ywdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=5ixtoC4W5ckvAB7DeXyyQnePpHsgpwvXLVECrdllidU=; b=ZoRfEtuaeJLK96rU1z/mUm6/y+ygwCxTXeIuDjjZNNxiyyMQFGHR9B4JJZBShyUTGq LuyWw6aFmRQLou3P6h8Y5bmk2FgjxIClMDHmhcLxf6o6jT36akMpV3WR9QjjKRwBor6T jtM5QCOYO2TatUb3yFQu6Uu1yeJIVSGc2yqPvx6HE/H2EiNVwCHsJ4van9Wgi+sqyn5v evehd547kZ/FNpUhi+qFwFaKW6XrZmCN4zR5QLD5jo+mUMhU6Je32Bb77hi0oKd2vaL5 niH5rfXYfT/+o5QZ2XzmpfhX33eNNHqG/kJK5KRYoz0hccbgs3QcZx/knu5LWorz7TFf vMWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=VvDzDuep; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o61-v6si3650517pld.109.2018.07.04.07.52.36; Wed, 04 Jul 2018 07:52:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@intel-com.20150623.gappssmtp.com header.s=20150623 header.b=VvDzDuep; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752533AbeGDOuS (ORCPT + 99 others); Wed, 4 Jul 2018 10:50:18 -0400 Received: from mail-oi0-f68.google.com ([209.85.218.68]:40280 "EHLO mail-oi0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752114AbeGDOuQ (ORCPT ); Wed, 4 Jul 2018 10:50:16 -0400 Received: by mail-oi0-f68.google.com with SMTP id w126-v6so11198446oie.7 for ; Wed, 04 Jul 2018 07:50:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=5ixtoC4W5ckvAB7DeXyyQnePpHsgpwvXLVECrdllidU=; b=VvDzDuepE1huhwzxZhXpjKgvljPgxcNsWwMxnJPs9Yg4qGxMfUTzGyWFzupluP46VA x5/Da8dTN/gOR2NwMPBRiRjCUYaCiwkwt8nE9CICEZORW+iWurNUA2LMMweTjTxpaVOe k71OlcXhE+xmYIZktnfBb+3iUggN9HWXGSGVCPAzXkAbvdTOtPfHCikxz5+DxLDxdyJk JpJ5ne7e/JFg33pPlmFivNvBROIjgvOkc3n3uyHBlIbNI+J2YFZpwsdRUKxMjFm6wOPq P+hFqxtWIM4o4lRKtlCe2RFzf1malq3LgFemg7jtHqeqHfB/aVYm0/Pz4K3kOWy/EFog GVrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=5ixtoC4W5ckvAB7DeXyyQnePpHsgpwvXLVECrdllidU=; b=YcD4Rq8+LQ3Oh+J6q8W1EeIY9Wj0UwMM08geumfpNWM+8W4EJ6AX0nF+AXC8rAXlJC Pw/crdkinsKFXyRRVIdEZCCefZimPhnJSa6V5Nof4PpwQvJzBO/EjO+tvL5wJHniOrw/ tLka9UABEqjS0sFIotDXNs4Vvp5k32WxihkqHGyBDbrUzz0dK3i2lcLBarJJhdmqD2Vz /3Jo5ECSwn9Yt37/2mVmcIC/9G2w1dSPQYRRs/7Czp2pvmhr/8UPdrFNjcOmdlPHgFRw 3RCMLx9Msuo5L6BqzbsvA+Ob+KhHitH2KI1kuYkxV/qNdDBMiRxDPgY58qGHZsBD5RX9 /hlQ== X-Gm-Message-State: APt69E2ffbrJ+t31piNPhIejE2cIg4onB/PsGrFiZ5oGgYPoM3tweGj+ TtHKGjvdZO3AcphY1v+HoWT/opoF7yLc6s9tyY90+w== X-Received: by 2002:aca:5f56:: with SMTP id t83-v6mr2702617oib.115.1530715815871; Wed, 04 Jul 2018 07:50:15 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a9d:3495:0:0:0:0:0 with HTTP; Wed, 4 Jul 2018 07:50:15 -0700 (PDT) In-Reply-To: <359fdf0103b61014bf811d88d4ce36bc793d18f2.1530716899.git.yi.z.zhang@linux.intel.com> References: <359fdf0103b61014bf811d88d4ce36bc793d18f2.1530716899.git.yi.z.zhang@linux.intel.com> From: Dan Williams Date: Wed, 4 Jul 2018 07:50:15 -0700 Message-ID: Subject: Re: [PATCH 3/3] kvm: add a function to check if page is from NVDIMM pmem. To: Zhang Yi Cc: KVM list , Linux Kernel Mailing List , linux-nvdimm , Paolo Bonzini , Jan Kara , Christoph Hellwig , "Zhang, Yu C" , Linux MM , rkrcmar@redhat.com, "Zhang, Yi Z" , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ adding Jerome ] On Wed, Jul 4, 2018 at 8:30 AM, Zhang Yi wrote: > For device specific memory space, when we move these area of pfn to > memory zone, we will set the page reserved flag at that time, some of > these reserved for device mmio, and some of these are not, such as > NVDIMM pmem. > > Now, we map these dev_dax or fs_dax pages to kvm for DIMM/NVDIMM > backend, since these pages are reserved. the check of > kvm_is_reserved_pfn() misconceives those pages as MMIO. Therefor, we > introduce 2 page map types, MEMORY_DEVICE_FS_DAX/MEMORY_DEVICE_DEV_DAX, > to indentify these pages are from NVDIMM pmem. and let kvm treat these > as normal pages. > > Without this patch, Many operations will be missed due to this > mistreatment to pmem pages. For example, a page may not have chance to > be unpinned for KVM guest(in kvm_release_pfn_clean); not able to be > marked as dirty/accessed(in kvm_set_pfn_dirty/accessed) etc. > > Signed-off-by: Zhang Yi > Signed-off-by: Zhang Yu > --- > virt/kvm/kvm_main.c | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index afb2e6e..1365d18 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -140,10 +140,23 @@ __weak void kvm_arch_mmu_notifier_invalidate_range(struct kvm *kvm, > { > } > > +static bool kvm_is_nd_pfn(kvm_pfn_t pfn) > +{ > + struct page *page = pfn_to_page(pfn); > + > + return is_zone_device_page(page) && > + ((page->pgmap->type == MEMORY_DEVICE_FS_DAX) || > + (page->pgmap->type == MEMORY_DEVICE_DEV_DAX)); Jerome, might there be any use case to pass MEMORY_DEVICE_PUBLIC memory to a guest vm? > +} > + > bool kvm_is_reserved_pfn(kvm_pfn_t pfn) > { > - if (pfn_valid(pfn)) > - return PageReserved(pfn_to_page(pfn)); > + struct page *page; > + > + if (pfn_valid(pfn)) { > + page = pfn_to_page(pfn); > + return kvm_is_nd_pfn(pfn) ? false : PageReserved(page); > + } > > return true; > } > -- > 2.7.4 >