MTRR initialization

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: linux-kernel <linux-kernel@...>
Date: Friday, September 14, 2007 - 12:33 pm

Hi, was wondering if anyone else has been tripped up by this... I've got 4GB of 
RAM in my Asus A8V Deluxe and memory hole mapping enabled in the BIOS. By 
default, my system boots up with these MTRR settings:

reg00: base=0x00000000 (   0MB), size=4096MB: write-back, count=1
reg01: base=0x100000000 (4096MB), size=1024MB: write-back, count=1
reg02: base=0xc0000000 (3072MB), size=1024MB: uncachable, count=1
reg03: base=0xc0000000 (3072MB), size= 256MB: write-combining, count=1

The X server and various other programs try to add a mapping for my video 
card's buffer, at 0xd0000000, size=256MB, type=write-combining, and this always 
fails with a type mismatch error (old type is write-back). Apparently it's 
conflicting with mapping register 0. I can't just disable the existing settings 
and re-add them; the system hangs soon after disabling reg01.

I guess the kernel must be getting the initial setup from the BIOS. I've hacked 
around this in mtrr/generic.c by explicitly changing the MTRR state in 
get_mtrr_state to split the first mapping into two; one at base 0 size 2048M 
and one at base 2048M size 1024M. So now I have this, which is pretty much what 
I wanted:

reg00: base=0x00000000 (   0MB), size=2048MB: write-back, count=1
reg01: base=0x80000000 (2048MB), size=1024MB: write-back, count=1
reg02: base=0x100000000 (4096MB), size=1024MB: write-back, count=1
reg03: base=0xc0000000 (3072MB), size=1024MB: uncachable, count=1
reg04: base=0xc0000000 (3072MB), size= 256MB: write-combining, count=1
reg05: base=0xd0000000 (3328MB), size= 256MB: write-combining, count=1

So the question is - was there an easier/correct way to do this?

It might have been nice if the MTRR ioctls allowed the register number to be 
specified on the Set commands, though I'm not sure that would have helped in 
this case.
-- 
   -- Howard Chu
   Chief Architect, Symas Corp.  http://www.symas.com
   Director, Highland Sun        http://highlandsun.com/hyc/
   Chief Architect, OpenLDAP     http://www.openldap.org/project/
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
MTRR initialization, Howard Chu, (Fri Sep 14, 12:33 pm)
Re: MTRR initialization, Siddha, Suresh B, (Fri Sep 21, 8:27 pm)
Re: MTRR initialization, Howard Chu, (Fri Sep 21, 8:46 pm)
Re: MTRR initialization, Jesse Barnes, (Wed Sep 19, 5:52 pm)
Re: MTRR initialization, Andi Kleen, (Thu Sep 20, 2:50 am)
Re: MTRR initialization, Jesse Barnes, (Thu Sep 20, 11:03 am)
Re: MTRR initialization, Jesse Barnes, (Thu Sep 20, 1:08 pm)
Re: MTRR initialization, Avi Kivity, (Thu Sep 20, 8:05 am)
Re: MTRR initialization, Andi Kleen, (Thu Sep 20, 8:10 am)
Re: MTRR initialization, Avi Kivity, (Thu Sep 20, 8:46 am)
Re: MTRR initialization, Yinghai Lu, (Fri Sep 14, 1:12 pm)
Re: MTRR initialization, Howard Chu, (Sun Sep 16, 12:08 pm)
Re: MTRR initialization, Yinghai Lu, (Sun Sep 16, 1:53 pm)
Re: MTRR initialization, Eric W. Biederman, (Sun Sep 16, 2:40 pm)
Re: MTRR initialization, Howard Chu, (Tue Sep 18, 1:53 pm)
Re: MTRR initialization, Eric W. Biederman, (Tue Sep 18, 2:18 pm)