Received: by 10.223.164.202 with SMTP id h10csp1044782wrb; Tue, 7 Nov 2017 20:32:29 -0800 (PST) X-Google-Smtp-Source: ABhQp+RDgm2/Ea0pasE+12Nto+oRZJKVMGZtQ3ewRa3Qr11x243/bMEbD/auJ1O1X7yWGOLIMV6S X-Received: by 10.159.234.10 with SMTP id be10mr1006308plb.386.1510115549112; Tue, 07 Nov 2017 20:32:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510115549; cv=none; d=google.com; s=arc-20160816; b=MQbGP3l1DXT/1VmjtKJDNITe6UxEUxFOkjE9l0KBuBGLfv9jnOXvU3mF5mETLHUHKQ yCOmrtuocj+rIsqTWISNfQrT2y1MvUw2NjAZZ/pwmftKefafYwMkCy2+LdXPwsG3D0Io 1CgqP7dofrFH6V4PrhYY0LoUkUmXG8Vcf9raltitc9dmwMSk72qETluRqrITBX+FThHx RhvpPa1mGOMo5G27LHwzUiW3HzcN4qAnmvt6Xn6HCBvncfpE+orh9DfmdcSafXfJjl5T ewWw0wMM9VX0AAfgtzTxOn/BWAOF022FkSQUhf2hLl+WSHyndHoFDGpiVPvLvFGMVIXb eOpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:subject:dkim-signature :arc-authentication-results; bh=/XC9iXM9flDtwV9WqD8gqqV+/XmfOF/sP652UzmFFLY=; b=jx/mXBf76pZsZIVNQ6wAUdLK6z0+Rt598FZ8JF7sQ2tbDnhTcLsdYFBGRpLYNesJwr 3/x9lY7kQBY1z0RV2qTDsnkpD6Uv7C3mA0CVgdNrYGJhms9pNWBUyhPVJEWmZGlAc7wW zHvt2MCha2+S9R9tuuoAUD2MKgIuUcmUeqjxclk6J4MWLbsPLuhIQFWIcBjr0JOk8nwz HOyBEr10vpOMwOqNn59nWrtoT+j2iOJaH3s2BphQAywVsoXGbCtrnGEAZJJPGhAj7On8 a9UM478glpdKZ2D11qB8bdurUBzXMW3TJUzHHOpRRdHM2Oz5RgRsQtW0N10DU0BSnCDO oxkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=dt2p4hI7; 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=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t18si2873658plo.255.2017.11.07.20.32.16; Tue, 07 Nov 2017 20:32:29 -0800 (PST) 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=@gmail.com header.s=20161025 header.b=dt2p4hI7; 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=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754734AbdKHDmB (ORCPT + 90 others); Tue, 7 Nov 2017 22:42:01 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:55430 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752222AbdKHDl6 (ORCPT ); Tue, 7 Nov 2017 22:41:58 -0500 Received: by mail-pf0-f195.google.com with SMTP id 17so918389pfn.12; Tue, 07 Nov 2017 19:41:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=/XC9iXM9flDtwV9WqD8gqqV+/XmfOF/sP652UzmFFLY=; b=dt2p4hI7qsKFW7kkLgQYEfXArdL0Y8oHkJ0ZM4AzbiSqQX+8Kw6/ltwWKP3uKzkJLt jKpZgjzxK2WrinNHG4ygeRRcTy/c96sMp+elfuYHPgCvl12FIxnMPxF9WCWyPCRIAzDO Sd9P8oZmm3AMTBs+WyobPDqwjM8wxAbBvUyDubUYzVQNfmLzjDkvHbtklm6CXsh+JTqs VszQ5LO6hT0WfqUIteYMRm8EnyHAaLBplok7U05WNeDTL+Tuf7QLvwjZ9vl5wu0GWzTb KZkQIQOxyN25IVFkHkm+HYHsTbsHnh7IH13Ro8UR2JJC3dhwQC0QUBVADoehrDfIdSeG JDnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=/XC9iXM9flDtwV9WqD8gqqV+/XmfOF/sP652UzmFFLY=; b=rGvON87JVA9fiRuf2/+KcuRmqf0q+PtED/peIVOPY3YHYtxW0nR56WrpkmQ83NBnxw ofNn0PKuAF+wJ3SKSfntWCImc4fEvAWQ4ONMXgeoa0QirTpYzgoaOqnibqNw8ZpADXKB qiF8dWHZKwKLcgzU7nsdfECUw/M3bcu0I0SyoDoflG49LWUOQ0vwJG6jz/T2EC8XpCtK PVuleSTUI2YrNMjPKNSKogZOSdhZMKCj0piO2w2AMYO0I2XA0j10DErjoBi8mY9dAyez 2z9CR4Z5svi9Ltzh4TIOLQxsDQ+kMqYEV+wW4d4p+qWQ+2kPINMRGv1JUx5yoXNvqpny yk3A== X-Gm-Message-State: AJaThX7a62b8/GjI6I1VBVMQBlqMFFoxzkAt5H7pilmEFposIbdLTHfs iFfZaMH3CuOO/IMJ3fzh6hI= X-Received: by 10.99.100.67 with SMTP id y64mr38590pgb.19.1510112518307; Tue, 07 Nov 2017 19:41:58 -0800 (PST) Received: from eric.tencent.com ([203.205.141.35]) by smtp.gmail.com with ESMTPSA id r80sm5925254pfa.169.2017.11.07.19.41.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Nov 2017 19:41:57 -0800 (PST) Subject: Re: [PATCH v4 3/3] KVM: MMU: consider host cache mode in MMIO page check To: Xiao Guangrong , kvm@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org, Paolo Bonzini , rkrcmar@redhat.com, Dan Williams , ivan.d.cuevas.escareno@intel.com, karthik.kumar@intel.com, Konrad Rzeszutek Wilk , Olif Chapman , Ingo Molnar References: <20171103055327.21684-1-haozhong.zhang@intel.com> <20171103055327.21684-4-haozhong.zhang@intel.com> <745df599-b65b-bcfe-a20c-05ae6d99a0b5@gmail.com> <20171103085130.itjzxoaorvw34vnm@hz-desktop> <20171103090244.swsna6h4hk5j4bdh@hz-desktop> <20171103092956.y6sbvvyh3dg3mjyw@hz-desktop> From: Xiao Guangrong Message-ID: Date: Wed, 8 Nov 2017 11:42:17 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171103092956.y6sbvvyh3dg3mjyw@hz-desktop> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/03/2017 05:29 PM, Haozhong Zhang wrote: > On 11/03/17 17:24 +0800, Xiao Guangrong wrote: >> >> >> On 11/03/2017 05:02 PM, Haozhong Zhang wrote: >>> On 11/03/17 16:51 +0800, Haozhong Zhang wrote: >>>> On 11/03/17 14:54 +0800, Xiao Guangrong wrote: >>>>> >>>>> >>>>> On 11/03/2017 01:53 PM, Haozhong Zhang wrote: >>>>>> Some reserved pages, such as those from NVDIMM DAX devices, are >>>>>> not for MMIO, and can be mapped with cached memory type for better >>>>>> performance. However, the above check misconceives those pages as >>>>>> MMIO. Because KVM maps MMIO pages with UC memory type, the >>>>>> performance of guest accesses to those pages would be harmed. >>>>>> Therefore, we check the host memory type by lookup_memtype() in >>>>>> addition and only treat UC/UC- pages as MMIO. >>>>>> >>>>>> Signed-off-by: Haozhong Zhang >>>>>> Reported-by: Cuevas Escareno, Ivan D >>>>>> Reported-by: Kumar, Karthik >>>>>> --- >>>>>> arch/x86/kvm/mmu.c | 19 ++++++++++++++++++- >>>>>> 1 file changed, 18 insertions(+), 1 deletion(-) >>>>>> >>>>>> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c >>>>>> index 0b481cc9c725..e9ed0e666a83 100644 >>>>>> --- a/arch/x86/kvm/mmu.c >>>>>> +++ b/arch/x86/kvm/mmu.c >>>>>> @@ -2708,7 +2708,24 @@ static bool mmu_need_write_protect(struct kvm_vcpu *vcpu, gfn_t gfn, >>>>>> static bool kvm_is_mmio_pfn(kvm_pfn_t pfn) >>>>>> { >>>>>> if (pfn_valid(pfn)) >>>>>> - return !is_zero_pfn(pfn) && PageReserved(pfn_to_page(pfn)); >>>>>> + return !is_zero_pfn(pfn) && PageReserved(pfn_to_page(pfn)) && >>>>>> + /* >>>>>> + * Some reserved pages, such as those from >>>>>> + * NVDIMM DAX devices, are not for MMIO, and >>>>>> + * can be mapped with cached memory type for >>>>>> + * better performance. However, the above >>>>>> + * check misconceives those pages as MMIO. >>>>>> + * Because KVM maps MMIO pages with UC memory >>>>>> + * type, the performance of guest accesses to >>>>>> + * those pages would be harmed. Therefore, we >>>>>> + * check the host memory type in addition and >>>>>> + * only treat UC/UC- pages as MMIO. >>>>>> + * >>>>>> + * pat_pfn_is_uc() works only when PAT is enabled, >>>>>> + * so check pat_enabled() as well. >>>>>> + */ >>>>>> + (!pat_enabled() || >>>>>> + pat_pfn_is_uc(kvm_pfn_t_to_pfn_t(pfn))); >>>>> >>>>> Can it be compiled if !CONFIG_PAT? >>>> >>>> Yes. >>>> >>>> What I check via pat_enabled() is not only whether PAT support is >>>> compiled, but also whether PAT is enabled at runtime. >>>> >>>>> >>>>> It would be better if we move pat_enabled out of kvm as well, >>>> >>>> Surely I can combine them in one function like >>>> >>>> bool pat_pfn_is_uc(pfn_t pfn) >>>> { >>>> enum page_cache_mode cm; >>>> >>>> if (!pat_enabled()) >>>> return false; >>>> >>>> cm = lookup_memtype(pfn_t_to_phys(pfn)); >>>> >>>> return cm == _PAGE_CACHE_MODE_UC || cm == _PAGE_CACHE_MODE_UC_MINUS; >>>> } >>> >>> In addition, I think it's better to split this function into >>> pat_pfn_is_uc() and pat_pfn_is_uc_minus() to avoid additional >>> confusion. >> >> Why not use pat_pfn_is_uc_or_uc_minus(). :) > > Just in case that other places other than KVM do not need both of them. > I think we need not care the future case too much, it is not ABI anyway. i.e, it can be easily adjusted if it is really needed in the future. But it is not a big deal... From 1583470747082542275@xxx Wed Nov 08 04:29:42 +0000 2017 X-GM-THRID: 1583005689428392726 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread