/* Pass mapped memory to allocator /before/ creating new mappings. */
init_boot_pages(s, min(map_s, e));
+#ifndef CONFIG_DIRECTMAP
+ destroy_xen_mappings((unsigned long)__va(s),
+ (unsigned long)__va(min(map_s, e)));
+#endif
s = map_s;
if ( s < map_e )
{
map_s = (s + mask) & ~mask;
map_e &= ~mask;
init_boot_pages(map_s, map_e);
+#ifndef CONFIG_DIRECTMAP
+ destroy_xen_mappings((unsigned long)__va(map_s),
+ (unsigned long)__va(map_e));
+#endif
}
if ( map_s > map_e )
if ( map_e < end )
{
+#ifdef CONFIG_DIRECTMAP
map_pages_to_xen((unsigned long)__va(map_e), maddr_to_mfn(map_e),
PFN_DOWN(end - map_e), PAGE_HYPERVISOR);
+#endif
init_boot_pages(map_e, end);
map_e = end;
}
}
+#ifdef CONFIG_DIRECTMAP
if ( map_e < e )
{
/* This range must not be passed to the boot allocator and
map_pages_to_xen((unsigned long)__va(map_e), maddr_to_mfn(map_e),
PFN_DOWN(e - map_e), __PAGE_HYPERVISOR_RW);
}
+#endif
if ( s < map_s )
{
+#ifdef CONFIG_DIRECTMAP
map_pages_to_xen((unsigned long)__va(s), maddr_to_mfn(s),
PFN_DOWN(map_s - s), PAGE_HYPERVISOR);
+#endif
init_boot_pages(s, map_s);
}
}