From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 6/6] Enable MTRR for EPT Date: Thu, 09 Oct 2008 10:44:19 +0200 Message-ID: <48EDC463.7030408@redhat.com> References: <1223539317-32379-1-git-send-email-sheng@linux.intel.com> <1223539317-32379-7-git-send-email-sheng@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: Sheng Yang Return-path: Received: from mx2.redhat.com ([66.187.237.31]:47537 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752678AbYJIIoX (ORCPT ); Thu, 9 Oct 2008 04:44:23 -0400 In-Reply-To: <1223539317-32379-7-git-send-email-sheng@linux.intel.com> Sender: kvm-owner@vger.kernel.org List-ID: Sheng Yang wrote: > The effective memory type of EPT is the mixture of MSR_IA32_CR_PAT and memory > type field of EPT entry. > > @@ -168,6 +168,7 @@ static u64 __read_mostly shadow_x_mask; /* mutual exclusive with nx_mask */ > static u64 __read_mostly shadow_user_mask; > static u64 __read_mostly shadow_accessed_mask; > static u64 __read_mostly shadow_dirty_mask; > +static u64 __read_mostly shadow_mt_mask; > > For shadow, the mt mask is different based on the level of the page table, so we need an array here. This can of course be left until shadow pat is implemented. > + if (mt_mask) { > + mt_mask = get_memory_type(vcpu, gfn) << > + kvm_x86_ops->get_mt_mask_shift(); > + spte |= mt_mask; > + } > For shadow, it's not a simple shift, since for large pages one of the bits is at position 12. So we would need the callback to calculate the mask value. Perhaps even simpler, have a 4x8 array, with the first index the page table level and the second index the memory type. The initialization code can prepare the array like it prepares the other masks. This can wait until we have a shadow pat implementation. -- Do not meddle in the internals of kernels, for they are subtle and quick to panic.