Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758220AbcC2Uym (ORCPT ); Tue, 29 Mar 2016 16:54:42 -0400 Received: from g9t5008.houston.hp.com ([15.240.92.66]:34579 "EHLO g9t5008.houston.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754332AbcC2Uyk (ORCPT ); Tue, 29 Mar 2016 16:54:40 -0400 Message-ID: <1459288009.6393.699.camel@hpe.com> Subject: Re: [PATCH 2/2] x86/mtrr: Refactor PAT initialization code From: Toshi Kani To: "Luis R. Rodriguez" Cc: Boris Ostrovsky , "xen-devel@lists.xensource.com" , Thomas Gleixner , Matt Fleming , Paul Gortmaker , Borislav Petkov , X86 ML , Paul Stewart , Ingo Molnar , Olof Johansson , "linux-kernel@vger.kernel.org" , "H. Peter Anvin" , Juergen Gross , Jan Beulich , Stuart Hayes , Yinghai Lu , Prarit Bhargava Date: Tue, 29 Mar 2016 15:46:49 -0600 In-Reply-To: References: <1457671546-13486-1-git-send-email-toshi.kani@hpe.com> <1457671546-13486-3-git-send-email-toshi.kani@hpe.com> <20160311092400.GB4347@pd.tnic> <1457722632.6393.130.camel@hpe.com> <20160311221747.GC25147@wotan.suse.de> <1457740571.6393.236.camel@hpe.com> <1457745396.6393.257.camel@hpe.com> <20160315001501.GF25147@wotan.suse.de> <1458085724.6393.425.camel@hpe.com> <20160315232916.GJ1990@wotan.suse.de> <1458251807.6393.474.camel@hpe.com> <1458336958.6393.544.camel@hpe.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.4 (3.18.4-1.fc23) Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3603 Lines: 80 On Tue, 2016-03-29 at 10:14 -0700, Luis R. Rodriguez wrote: > On Fri, Mar 18, 2016 at 2:35 PM, Toshi Kani wrote: > > On Thu, 2016-03-17 at 17:06 -0700, Luis R. Rodriguez wrote: > > > On Mar 17, 2016 2:04 PM, "Toshi Kani" wrote: > > > >  : > > > > I do not see any issue for Xen, but sure, we can discuss about Xen in a > > separate thread. > > While on point -- I'll just wanted to clarify that a while ago you had > hinted we needed to have Xen return a valid type with > mtrr_type_lookup(), I then also explained how Xen disables MTRR [0], > it was however unclear if you still believe mtrr_type_lookup() is > needed on the guest side. Jan had pointed out that the Xen Hypervisor > implements the XENPF_read_memtype hypercall. On the recent thread I > posted [1] I got into my review of the prospects of implementing > support for using this hypercall on Linux xen guests and issues and > concerns with it. Please feel free to follow up there and we can take > up the other items below here as they relate to bare metal. What I said in the email [0] was that "When MTRRs are enabled, the kernel needs to check through mtrr_type_lookup()". Since Xen guests have MTRRs disabled, this statement does not apply. It returns MTRR_TYPE_INVALID when disabled, and this is fine for the guests. > [0] http://lkml.kernel.org/r/20150903235429.GZ8051@wotan.suse.de > [1] http://lkml.kernel.org/r/CAB=NE6UTp0T=rbOcAg88iPsfBJneY7O5-3c11VfFgAP > iepoTNg@mail.gmail.com > > > > > > On x86 Linux code we now have ioremap_uc() that can't use MTRR > > > > > behind the scenes, why would something like this on the BIOS not > > > > > be possible? That ultimately uses set_pte_at(). What limitations > > > > > are there on the BIOS that prevent us from just using strong UC > > > > > for PAT on the BIOS? > > > > > > > > Because it requires to run in virtual mode with page tables. > > > > > > Ah... interesting... is UC really needed, what is the default? If the > > > default is used would there be an issue ? Can such work be deferred > > > to a later time ? It seems like a high burden to require on large > > > piece of legacy architecture to just blow a fan. > > > > The default cache attribute (i.e. ranges not covered by MTRRs) is > > specified by the MTRR default type MSR. > > Do we really need UC for the fan? When you say "we", are you referring Xen guests?  Xen guests do not need to control the fan, so they do not need UC set in MTRRs. In general, yes, MMIO registers need UC when they need to be accessed. > What is the default for PAT? There is no such thing as the default for PAT.  > Can't > the same be used so that we way by default all ranges match what is > also the default by PAT? Would that really break fan control ? If we > have a match should't we be able to not have to worry about MTRRs at > all in-kernel even on bare metal? We do not need to know about BIOS impl, such as fan control, etc.  The point is that if BIOS sets MTRRs, then the kernel keeps their setup.  If (virtual) BIOS does not enable MTRRs, the kernel keeps them disabled.  We just need not to mess with the setup. > Another option, which I've alluded to on the Xen thread is skipping > over the MTRR space from the e820 map. Is that not possible ? This > could be last resort... but which I'm hinting more for the Xen side of > things if we *really* need get_mtrr() on the Xen guest side of > things... There is no MTRR space in the e820 map since they are MSRs.  Since Xen guests disable MTRRs, I do not think you have any issue here... Thanks, -Toshi