Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux-2.6-microblaze.git] / arch / arm / mm / mmu.c
index e98a2b5..31af3cb 100644 (file)
@@ -416,6 +416,11 @@ void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot)
                     FIXADDR_END);
        BUG_ON(idx >= __end_of_fixed_addresses);
 
+       /* we only support device mappings until pgprot_kernel has been set */
+       if (WARN_ON(pgprot_val(prot) != pgprot_val(FIXMAP_PAGE_IO) &&
+                   pgprot_val(pgprot_kernel) == 0))
+               return;
+
        if (pgprot_val(prot))
                set_pte_at(NULL, vaddr, pte,
                        pfn_pte(phys >> PAGE_SHIFT, prot));
@@ -1494,7 +1499,7 @@ pgtables_remap lpae_pgtables_remap_asm;
  * early_paging_init() recreates boot time page table setup, allowing machines
  * to switch over to a high (>4G) address space on LPAE systems
  */
-void __init early_paging_init(const struct machine_desc *mdesc)
+static void __init early_paging_init(const struct machine_desc *mdesc)
 {
        pgtables_remap *lpae_pgtables_remap;
        unsigned long pa_pgd;
@@ -1562,7 +1567,7 @@ void __init early_paging_init(const struct machine_desc *mdesc)
 
 #else
 
-void __init early_paging_init(const struct machine_desc *mdesc)
+static void __init early_paging_init(const struct machine_desc *mdesc)
 {
        long long offset;
 
@@ -1618,7 +1623,6 @@ void __init paging_init(const struct machine_desc *mdesc)
 {
        void *zero_page;
 
-       build_mem_type_table();
        prepare_page_table();
        map_lowmem();
        memblock_set_current_limit(arm_lowmem_limit);
@@ -1641,3 +1645,9 @@ void __init paging_init(const struct machine_desc *mdesc)
        /* Compute the virt/idmap offset, mostly for the sake of KVM */
        kimage_voffset = (unsigned long)&kimage_voffset - virt_to_idmap(&kimage_voffset);
 }
+
+void __init early_mm_init(const struct machine_desc *mdesc)
+{
+       build_mem_type_table();
+       early_paging_init(mdesc);
+}