Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753630AbbFCH4Q (ORCPT ); Wed, 3 Jun 2015 03:56:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52796 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753391AbbFCH4F (ORCPT ); Wed, 3 Jun 2015 03:56:05 -0400 Message-ID: <556EB30F.8030100@redhat.com> Date: Wed, 03 Jun 2015 09:55:59 +0200 From: Paolo Bonzini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Xiao Guangrong CC: gleb@kernel.org, mtosatti@redhat.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 14/15] KVM: MTRR: do not map huage page for non-consistent range References: <1432983566-15773-1-git-send-email-guangrong.xiao@linux.intel.com> <1432983566-15773-15-git-send-email-guangrong.xiao@linux.intel.com> <556C27A5.1040908@redhat.com> <556E6CF8.9070602@linux.intel.com> In-Reply-To: <556E6CF8.9070602@linux.intel.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2169 Lines: 61 On 03/06/2015 04:56, Xiao Guangrong wrote: > > > On 06/01/2015 05:36 PM, Paolo Bonzini wrote: >> >> >> On 30/05/2015 12:59, Xiao Guangrong wrote: >>> Currently guest MTRR is completely prohibited if cache snoop is >>> supported on >>> IOMMU (!noncoherent_dma) and host does the emulation based on the >>> knowledge >>> from host side, however, host side is not the good point to know >>> what the purpose of guest is. A good example is that pass-throughed VGA >>> frame buffer is not always UC as host expected >> >> Can you explain how? The original idea was that such a framebuffer >> would be kvm_is_reserved_pfn and thus be unconditionally UC. > > Yes, frame-buffer is always UC in current code, however, UC for > frame-buffer causes bad performance. Understood now, thanks. > So that guest will configure the range to MTRR, this patchset follows > guest MTRR and cooperates with guest PAT (ept.VMX_EPT_IPAT_BIT = 0) to > emulate guest cache type as guest expects. Unlike e.g. CR0.CD=1, UC memory does not snoop the cache to preserve coherency. AMD, has special logic to do this, for example: - if guest PAT says "UC" and host MTRR says "WB", the processor will not cache the memory but will snoop the cache as if CR0.CD=1 - if guest PAT says "WC" and host (nested page table) PAT says "WB" and host MTRR says "WB", the processor will still do write combining but also snoop the cache as if CR0.CD=1 I am worried that the lack of this feature could cause problems if guests map QEMU's VGA framebuffer as uncached. We have this problem on ARM, so it's not 100% theoretical. So, why do you need to always use IPAT=0? Can patch 15 keep the current logic for RAM, like this: if (is_mmio || kvm_arch_has_noncoherent_dma(vcpu->kvm)) ret = kvm_mtrr_get_guest_memory_type(vcpu, gfn) << VMX_EPT_MT_EPTE_SHIFT; else ret = (MTRR_TYPE_WRBACK << VMX_EPT_MT_EPTE_SHIFT) | VMX_EPT_IPAT_BIT; ? Paolo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/