|
@@ -600,7 +600,7 @@ static void __init create_36bit_mapping(struct map_desc *md,
|
|
|
* offsets, and we take full advantage of sections and
|
|
|
* supersections.
|
|
|
*/
|
|
|
-void __init create_mapping(struct map_desc *md)
|
|
|
+static void __init create_mapping(struct map_desc *md)
|
|
|
{
|
|
|
unsigned long phys, addr, length, end;
|
|
|
const struct mem_type *type;
|
|
@@ -1014,6 +1014,32 @@ static void __init kmap_init(void)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
+static inline void map_memory_bank(struct membank *bank)
|
|
|
+{
|
|
|
+ struct map_desc map;
|
|
|
+
|
|
|
+ map.pfn = bank_pfn_start(bank);
|
|
|
+ map.virtual = __phys_to_virt(bank_phys_start(bank));
|
|
|
+ map.length = bank_phys_size(bank);
|
|
|
+ map.type = MT_MEMORY;
|
|
|
+
|
|
|
+ create_mapping(&map);
|
|
|
+}
|
|
|
+
|
|
|
+static void __init map_lowmem(void)
|
|
|
+{
|
|
|
+ struct meminfo *mi = &meminfo;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ /* Map all the lowmem memory banks. */
|
|
|
+ for (i = 0; i < mi->nr_banks; i++) {
|
|
|
+ struct membank *bank = &mi->bank[i];
|
|
|
+
|
|
|
+ if (!bank->highmem)
|
|
|
+ map_memory_bank(bank);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int __init meminfo_cmp(const void *_a, const void *_b)
|
|
|
{
|
|
|
const struct membank *a = _a, *b = _b;
|
|
@@ -1034,6 +1060,7 @@ void __init paging_init(struct machine_desc *mdesc)
|
|
|
build_mem_type_table();
|
|
|
sanity_check_meminfo();
|
|
|
prepare_page_table();
|
|
|
+ map_lowmem();
|
|
|
bootmem_init();
|
|
|
devicemaps_init(mdesc);
|
|
|
kmap_init();
|