Thread (20 messages) 20 messages, 7 authors, 2015-08-07

Re: [Xen-devel] RIP MTRR - status update for upcoming v4.2

From: Toshi Kani <hidden>
Date: 2015-08-07 23:21:20
Also in: linux-media, linux-pci, lkml

On Fri, 2015-08-07 at 17:08 -0600, Toshi Kani wrote:
On Fri, 2015-08-07 at 15:23 -0700, Luis R. Rodriguez wrote:
quoted
On Fri, Aug 7, 2015 at 2:56 PM, Toshi Kani [off-list ref] wrote:
quoted
On Fri, 2015-08-07 at 13:25 -0700, Luis R. Rodriguez wrote:
quoted
On Thu, Aug 6, 2015 at 3:58 PM, Toshi Kani [off-list ref] 
wrote:
quoted
On Thu, 2015-08-06 at 12:53 -0700, Luis R. Rodriguez wrote:
quoted
On Fri, Jun 12, 2015 at 9:58 AM, Toshi Kani [off-list ref] 
wrote:
 :
quoted
quoted
quoted
quoted
No, there is no OS support necessary to use MTRR.  After firmware 
sets it up, CPUs continue to use it without any OS support.  I 
think the Linux change you are referring is to obsolete legacy
interfaces that modify the MTRR setup.  I agree that Linux should 
not modify MTRR.
Its a bit more than that though. Since you agree that the OS can 
live without MTRR code I was hoping to then see if we can fold out 
PAT Linux code from under the MTRR dependency on Linux and make PAT 
a first class citizen, maybe at least for x86-64. Right now you can
only get PAT support on Linux if you have MTRR code, but I'd like to 
see if instead we can rip MTRR code out completely under its own 
Kconfig and let it start rotting away.

Code-wise the only issue I saw was that PAT code also relies on
mtrr_type_lookup(), see pat_x_mtrr_type(), but other than this I 
found no other obvious issues.
We can rip of the MTTR code that modifies the MTRR setup, but not
mtrr_type_lookup().  This function provides necessary checks per 
documented in commit 7f0431e3dc89 as follows.

    1) reserve_memtype() tracks an effective memory type in case
       a request type is WB (ex. /dev/mem blindly uses WB). Missing
       to track with its effective type causes a subsequent request
       to map the same range with the effective type to fail.

    2) pud_set_huge() and pmd_set_huge() check if a requested range
       has any overlap with MTRRs. Missing to detect an overlap may
       cause a performance penalty or undefined behavior.

mtrr_type_lookup() is still admittedly awkward, but I do not think we 
have an immediate issue in PAT code calling it.  I do not think it 
makes 
PAT code a second class citizen.
OK since we know that if MTRR set up code ends up disabled and would
return MTRR_TYPE_INVALID what if we just static inline this for the
no-MTRR Kconfig build option immediately, and only then have the full
blown implementation for the case where MTRR Kconfig option is
enabled?
Yes, the MTRR code could be disabled by Kconfig with such inline stubs as
long as the kernel is built specifically for a particular platform with 
MTRR disabled, such as Xen guest kernel.
Noticed that we do have CONFIG_MTRR and mtrr_type_lookup() inline stub
returns MTRR_INVALID.

-Toshi
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help