Re: 2.4.10-r1 MTRR bug

From: Andrew Morton
Date: Thu Jan 13 2005 - 02:07:38 EST


Steve <s.egbert@xxxxxxxxxxxxx> wrote:
>
> For the Athlon 2100, I get the following outputs and then the VGA
> console is frozen from further output (but it doesn't prevent the full
> bootup into X windows session of which I am able to resume normal
> Linux/X session, but not able to regain any virtual console session.)

hm. Not sure what could have caused that.

> The virtual console (locked) shows the following outputs:
>
> vesafb: scrolling: redraw:

Have you tried disabling vesafb in config?

> mtrr: size and base must be multiples of 4kiB (<<-- this line is
> repeated 20 times).

Could you add this so we can track down the culprit?

--- 25/arch/i386/kernel/cpu/mtrr/main.c~mtrr-size-and-base-debug 2005-01-12 23:01:03.732426224 -0800
+++ 25-akpm/arch/i386/kernel/cpu/mtrr/main.c 2005-01-12 23:03:14.081610136 -0800
@@ -375,6 +375,19 @@ int mtrr_add_page(unsigned long base, un
return error;
}

+static int mtrr_check(unsigned long base, unsigned long size)
+{
+ if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) {
+ printk(KERN_WARNING
+ "mtrr: size and base must be multiples of 4 kiB\n");
+ printk(KERN_DEBUG
+ "mtrr: size: 0x%lx base: 0x%lx\n", size, base);
+ dump_stack();
+ return -1;
+ }
+ return 0;
+}
+
/**
* mtrr_add - Add a memory type region
* @base: Physical base address of region
@@ -415,11 +428,8 @@ int
mtrr_add(unsigned long base, unsigned long size, unsigned int type,
char increment)
{
- if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) {
- printk(KERN_WARNING "mtrr: size and base must be multiples of 4 kiB\n");
- printk(KERN_DEBUG "mtrr: size: 0x%lx base: 0x%lx\n", size, base);
+ if (mtrr_check(base, size))
return -EINVAL;
- }
return mtrr_add_page(base >> PAGE_SHIFT, size >> PAGE_SHIFT, type,
increment);
}
@@ -511,11 +521,8 @@ int mtrr_del_page(int reg, unsigned long
int
mtrr_del(int reg, unsigned long base, unsigned long size)
{
- if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) {
- printk(KERN_INFO "mtrr: size and base must be multiples of 4 kiB\n");
- printk(KERN_DEBUG "mtrr: size: 0x%lx base: 0x%lx\n", size, base);
+ if (mtrr_check(base, size))
return -EINVAL;
- }
return mtrr_del_page(reg, base >> PAGE_SHIFT, size >> PAGE_SHIFT);
}

_

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/