-
Notifications
You must be signed in to change notification settings - Fork 186
Closed
Description
Type of this issue (please specify)
- This is a bug in the upstream tree as-is unmodified.
- This is a support matter (i.e. your own modified tree)
- This is a technical question
In mm.c
, function mm_cache_mtrr_ranges
...
if ((cap >> 8) & 1 && (def >> 10) & 1) {
/* Read fixed range MTRRs. */
for (msr = __readmsr(MSR_MTRRfix64K_00000), offset = 0, base = 0;
msr != 0; msr >>= 8, offset += 0x10000, base += offset)
make_mtrr_range(&ranges[idx++], true, msr & 0xff, base, base + 0x10000 - 1);
for (val = MSR_MTRRfix16K_80000, offset = 0; val <= MSR_MTRRfix16K_A0000; ++val)
for (msr = __readmsr(val), base = 0x80000;
msr != 0; msr >>= 8, offset += 0x4000, base += offset)
make_mtrr_range(&ranges[idx++], true, msr & 0xff, base, base + 0x4000 - 1);
for (val = MSR_MTRRfix4K_C0000, offset = 0; val <= MSR_MTRRfix4K_F8000; ++val)
for (msr = __readmsr(val), base = 0xC0000;
msr != 0; msr >>= 8, offset += 0x1000, base += offset)
make_mtrr_range(&ranges[idx++], true, msr & 0xff, base, base + 0x1000 - 1);
}
...
offset should not be incremented each inner loop - it should be set once (with base, in the initial part of the for
expression).
This error creates this pattern:
ksm: CPU 1: ksm_init: MTRR Range: 0x0000000000000000 -> 0x000000000000FFFF fixed: 1 type: 6
ksm: CPU 1: ksm_init: MTRR Range: 0x0000000000010000 -> 0x000000000001FFFF fixed: 1 type: 6
ksm: CPU 1: ksm_init: MTRR Range: 0x0000000000030000 -> 0x000000000003FFFF fixed: 1 type: 6 // should be 0x0000000000020000 -> 0x000000000002FFFF
ksm: CPU 1: ksm_init: MTRR Range: 0x0000000000060000 -> 0x000000000006FFFF fixed: 1 type: 6 // should be 0x0000000000030000 -> 0x000000000003FFFF
ksm: CPU 1: ksm_init: MTRR Range: 0x00000000000A0000 -> 0x00000000000AFFFF fixed: 1 type: 6 // etc
ksm: CPU 1: ksm_init: MTRR Range: 0x00000000000F0000 -> 0x00000000000FFFFF fixed: 1 type: 6 // ...
Metadata
Metadata
Assignees
Labels
No labels