--- linux/arch/i386/kernel/mtrr.c.old1 Wed Oct 11 16:49:07 2000 +++ linux/arch/i386/kernel/mtrr.c Thu Oct 12 15:26:48 2000 @@ -1320,6 +1320,13 @@ /* At this point we know there is some kind of overlap/enclosure */ if ( (base < lbase) || (base + size > lbase + lsize) ) { + /* Allow overlap in some (tested) cases */ + if ( + ( ( type == MTRR_TYPE_WRBACK || type == MTRR_TYPE_WRTHROUGH || type == MTRR_TYPE_WRCOMB) && ltype == MTRR_TYPE_UNCACHABLE ) + || + ( ( type == MTRR_TYPE_WRBACK || type == MTRR_TYPE_WRTHROUGH ) && ltype == MTRR_TYPE_WRCOMB ) + ) + continue; up(&main_lock); printk ("mtrr: 0x%lx%s,0x%lx%s overlaps existing 0x%lx%s,0x%lx%s\n", base, base_suffix, size, size_suffix, @@ -1701,7 +1708,7 @@ { /* 1MB */ factor = 'k'; - size >>= 2; + size <<= 2; } else {