On 2/23/23 4:32 AM, Juergen Gross wrote:
+
+       for (reg = 0; reg < MTRR_MAX_VAR_RANGES; reg++) {
+               op.u.read_memtype.reg = reg;
+               if (HYPERVISOR_platform_op(&op))
+                       break;


If we fail on the first iteration, do we still want to mark MTRRs are 
enabled/set in mtrr_overwrite_state()?


-boris


+
+               /*
+                * Only called in dom0, which has all RAM PFNs mapped at
+                * RAM MFNs, and all PCI space etc. is identity mapped.
+                * This means we can treat MFN == PFN regarding MTTR settings.
+                */
+               var[reg].base_lo = op.u.read_memtype.type;
+               var[reg].base_lo |= op.u.read_memtype.mfn << PAGE_SHIFT;
+               var[reg].base_hi = op.u.read_memtype.mfn >> (32 - PAGE_SHIFT);
+               mask = ~((op.u.read_memtype.nr_mfns << PAGE_SHIFT) - 1);
+               mask &= (1UL << width) - 1;
+               if (mask)
+                       mask |= 1 << 11;
+               var[reg].mask_lo = mask;
+               var[reg].mask_hi = mask >> 32;
+       }
+
+       mtrr_overwrite_state(var, reg, MTRR_TYPE_UNCACHABLE);
+#endif
+}

Reply via email to