|
@@ -531,7 +531,10 @@ static void lguest_write_cr3(unsigned long cr3)
|
|
|
{
|
|
|
lguest_data.pgdir = cr3;
|
|
|
lazy_hcall1(LHCALL_NEW_PGTABLE, cr3);
|
|
|
- cr3_changed = true;
|
|
|
+
|
|
|
+ /* These two page tables are simple, linear, and used during boot */
|
|
|
+ if (cr3 != __pa(swapper_pg_dir) && cr3 != __pa(initial_page_table))
|
|
|
+ cr3_changed = true;
|
|
|
}
|
|
|
|
|
|
static unsigned long lguest_read_cr3(void)
|
|
@@ -703,9 +706,9 @@ static void lguest_set_pmd(pmd_t *pmdp, pmd_t pmdval)
|
|
|
* to forget all of them. Fortunately, this is very rare.
|
|
|
*
|
|
|
* ... except in early boot when the kernel sets up the initial pagetables,
|
|
|
- * which makes booting astonishingly slow: 1.83 seconds! So we don't even tell
|
|
|
- * the Host anything changed until we've done the first page table switch,
|
|
|
- * which brings boot back to 0.25 seconds.
|
|
|
+ * which makes booting astonishingly slow: 48 seconds! So we don't even tell
|
|
|
+ * the Host anything changed until we've done the first real page table switch,
|
|
|
+ * which brings boot back to 4.3 seconds.
|
|
|
*/
|
|
|
static void lguest_set_pte(pte_t *ptep, pte_t pteval)
|
|
|
{
|