Re: Re: mttr failures on 2.6.12-mm1
flat view
From: Antonino A. Daplas <adaplas@gmail.com>
Date: 2005-07-29 13:43:38
Andrew Morton wrote:
Badari Pulavarty [off-list ref] wrote:quoted
Andi, I noticed these on my AMD64 box earlier. Just a warning or anything to be concerned about ?What happened with this one? Looks like a bug in the vesafb code. Do we know if it is fixed in 2.6.13-rc4? (Badari is on leave - could one of the fbdev developers please help out?) Thanks.quoted
vesafb: mode is 800x600x16, linelength=1600, pages=16 vesafb: scrolling: redraw vesafb: Truecolor: size=0:5:6:5, shift=0:11:5:0 mtrr: type mismatch for fc000000,1000000 old: write-back new: write- combining
Range is already set to write-back, vesafb attempts to add a write- combining mtrr (default for vesafb).
quoted
mtrr: size and base must be multiples of 4 kiB
This is a bug, vesafb attempts to add a size < PAGE_SIZE triggering the messages below.
quoted
Call Trace:<ffffffff8011662d>{mtrr_check+77} <ffffffff801169b9>{mtrr_add +41} <ffffffff80647afe>{vesafb_probe+1390} <ffffffff802f3f2f>{driver_probe_device+79} <ffffffff802f4010>{__device_attach+0} <ffffffff802f38c6>{bus_for_each_drv+70} <ffffffff802f4079>{device_attach+89} <ffffffff802f378e>{bus_add_device+62} <ffffffff802f28ad>{device_add+173} <ffffffff802f575f>{platform_device_register+255} <ffffffff80647e7e>{vesafb_init+542} <ffffffff8010b24a>{init+506} <ffffffff8010e967>{child_rip+8} <ffffffff8010b050>{init+0} <ffffffff8010e95f>{child_rip+0} mtrr: size and base must be multiples of 4 kiB
Here's a patch to fix the above. To eliminate the warning messages,
you can add the option mtrr:2 to add a write-back mtrr for vesafb. Or
just use nomtrr option.
Full changelog attached.
Tony
vesafb: Fix mtrr bugs
1. Fix algorithm for finding the best power of 2 size with mtrr_add().
2. Add option to choose the mtrr type by extending the mtrr boot option:
mtrr:n where n
0 = no mtrr (equivalent to using the nomtrr option)
1 = uncachable
2 = write back
3 = write combining (default)
4 = write through
From: Antonino Daplas [off-list ref]
Signed-off-by: Antonino Daplas [off-list ref]
---
vesafb.c | 47 ++++++++++++++++++++++++++++++++++++-----------
1 files changed, 36 insertions(+), 11 deletions(-)
--- a/drivers/video/vesafb.c
+++ b/drivers/video/vesafb.c@@ -46,7 +46,7 @@ static struct fb_fix_screeninfo vesafb_f}; static int inverse = 0; -static int mtrr = 1; +static int mtrr = 3; /* default to write-combining */ static int vram_remap __initdata = 0; /* Set amount of memory to be used */ static int vram_total __initdata = 0; /* Set total amount of memory */ static int pmi_setpal = 0; /* pmi for palette changes ??? */
@@ -237,8 +237,8 @@ static int __init vesafb_setup(char *optpmi_setpal=0; else if (! strcmp(this_opt, "pmipal")) pmi_setpal=1; - else if (! strcmp(this_opt, "mtrr")) - mtrr=1; + else if (! strncmp(this_opt, "mtrr:", 5)) + mtrr = simple_strtoul(this_opt+5, NULL, 0); else if (! strcmp(this_opt, "nomtrr")) mtrr=0; else if (! strncmp(this_opt, "vtotal:", 7))
@@ -420,14 +420,39 @@ static int __init vesafb_probe(struct de
if (mtrr) {
unsigned int temp_size = size_total;
- /* Find the largest power-of-two */
- while (temp_size & (temp_size - 1))
- temp_size &= (temp_size - 1);
-
- /* Try and find a power of two to add */
- while (temp_size > PAGE_SIZE &&
- mtrr_add(vesafb_fix.smem_start, temp_size, MTRR_TYPE_WRCOMB, 1)==-EINVAL) {
- temp_size >>= 1;
+ unsigned int type = 0;
+
+ switch (mtrr) {
+ case 1:
+ type = MTRR_TYPE_UNCACHABLE;
+ break;
+ case 2:
+ type = MTRR_TYPE_WRBACK;
+ break;
+ case 3:
+ type = MTRR_TYPE_WRCOMB;
+ break;
+ case 4:
+ type = MTRR_TYPE_WRTHROUGH;
+ break;
+ default:
+ type = 0;
+ break;
+ }
+
+ if (type) {
+ int rc;
+
+ /* Find the largest power-of-two */
+ while (temp_size & (temp_size - 1))
+ temp_size &= (temp_size - 1);
+
+ /* Try and find a power of two to add */
+ do { + rc = mtrr_add(vesafb_fix.smem_start, temp_size,
+ type, 1);
+ temp_size >>= 1;
+ } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
}
}
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO September
19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf