Messages in this thread Patch in this message | | | Date | Thu, 1 Jun 2023 10:19:01 +0200 | From | Juergen Gross <> | Subject | Re: [PATCH v6 00/16] x86/mtrr: fix handling with PAT but without MTRR |
| |
On 31.05.23 19:48, Borislav Petkov wrote: > On Wed, May 31, 2023 at 04:20:08PM +0200, Juergen Gross wrote: >> One other note: why does mtrr_cleanup() think that using 8 instead of 6 >> variable MTRRs would be an "optimal setting"? > > Maybe the more extensive debug output below would help answer that...
Patch 2 wants this diff on top:
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c index 59b48bd8380c..ce254ca89c62 100644 --- a/arch/x86/kernel/cpu/mtrr/generic.c +++ b/arch/x86/kernel/cpu/mtrr/generic.c @@ -655,7 +655,7 @@ static bool set_mtrr_var_ranges(unsigned int index, struct mtrr_var_range *vr) bool changed = false;
rdmsr(MTRRphysBase_MSR(index), lo, hi); - if ((vr->base_lo & MTRR_PHYSBASE_RSVD) != (lo & MTRR_PHYSBASE_RSVD) + if ((vr->base_lo & ~MTRR_PHYSBASE_RSVD) != (lo & ~MTRR_PHYSBASE_RSVD) || (vr->base_hi & ~phys_hi_rsvd) != (hi & ~phys_hi_rsvd)) {
mtrr_wrmsr(MTRRphysBase_MSR(index), vr->base_lo, vr->base_hi); @@ -664,7 +664,7 @@ static bool set_mtrr_var_ranges(unsigned int index, struct mtrr_var_range *vr)
rdmsr(MTRRphysMask_MSR(index), lo, hi);
- if ((vr->mask_lo & MTRR_PHYSMASK_RSVD) != (lo & MTRR_PHYSMASK_RSVD) + if ((vr->mask_lo & ~MTRR_PHYSMASK_RSVD) != (lo & ~MTRR_PHYSMASK_RSVD) || (vr->mask_hi & ~phys_hi_rsvd) != (hi & ~phys_hi_rsvd)) { mtrr_wrmsr(MTRRphysMask_MSR(index), vr->mask_lo, vr->mask_hi); changed = true;
Juergen [unhandled content-type:application/pgp-keys][unhandled content-type:application/pgp-signature] | |