mm, memory_hotplug: add nid parameter to arch_remove_memory
[sfrench/cifs-2.6.git] / arch / x86 / mm / init_64.c
index 5fab264948c2a2d35b29136d66f24968b44ef7db..bccff68e32670ddd70762020b68551053c7c3a58 100644 (file)
@@ -432,7 +432,7 @@ phys_pte_init(pte_t *pte_page, unsigned long paddr, unsigned long paddr_end,
                                             E820_TYPE_RAM) &&
                            !e820__mapped_any(paddr & PAGE_MASK, paddr_next,
                                             E820_TYPE_RESERVED_KERN))
-                               set_pte(pte, __pte(0));
+                               set_pte_safe(pte, __pte(0));
                        continue;
                }
 
@@ -452,7 +452,7 @@ phys_pte_init(pte_t *pte_page, unsigned long paddr, unsigned long paddr_end,
                        pr_info("   pte=%p addr=%lx pte=%016lx\n", pte, paddr,
                                pfn_pte(paddr >> PAGE_SHIFT, PAGE_KERNEL).pte);
                pages++;
-               set_pte(pte, pfn_pte(paddr >> PAGE_SHIFT, prot));
+               set_pte_safe(pte, pfn_pte(paddr >> PAGE_SHIFT, prot));
                paddr_last = (paddr & PAGE_MASK) + PAGE_SIZE;
        }
 
@@ -487,7 +487,7 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long paddr, unsigned long paddr_end,
                                             E820_TYPE_RAM) &&
                            !e820__mapped_any(paddr & PMD_MASK, paddr_next,
                                             E820_TYPE_RESERVED_KERN))
-                               set_pmd(pmd, __pmd(0));
+                               set_pmd_safe(pmd, __pmd(0));
                        continue;
                }
 
@@ -524,7 +524,7 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long paddr, unsigned long paddr_end,
                if (page_size_mask & (1<<PG_LEVEL_2M)) {
                        pages++;
                        spin_lock(&init_mm.page_table_lock);
-                       set_pte((pte_t *)pmd,
+                       set_pte_safe((pte_t *)pmd,
                                pfn_pte((paddr & PMD_MASK) >> PAGE_SHIFT,
                                        __pgprot(pgprot_val(prot) | _PAGE_PSE)));
                        spin_unlock(&init_mm.page_table_lock);
@@ -536,7 +536,7 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long paddr, unsigned long paddr_end,
                paddr_last = phys_pte_init(pte, paddr, paddr_end, new_prot);
 
                spin_lock(&init_mm.page_table_lock);
-               pmd_populate_kernel(&init_mm, pmd, pte);
+               pmd_populate_kernel_safe(&init_mm, pmd, pte);
                spin_unlock(&init_mm.page_table_lock);
        }
        update_page_count(PG_LEVEL_2M, pages);
@@ -573,7 +573,7 @@ phys_pud_init(pud_t *pud_page, unsigned long paddr, unsigned long paddr_end,
                                             E820_TYPE_RAM) &&
                            !e820__mapped_any(paddr & PUD_MASK, paddr_next,
                                             E820_TYPE_RESERVED_KERN))
-                               set_pud(pud, __pud(0));
+                               set_pud_safe(pud, __pud(0));
                        continue;
                }
 
@@ -584,7 +584,6 @@ phys_pud_init(pud_t *pud_page, unsigned long paddr, unsigned long paddr_end,
                                                           paddr_end,
                                                           page_size_mask,
                                                           prot);
-                               __flush_tlb_all();
                                continue;
                        }
                        /*
@@ -611,7 +610,7 @@ phys_pud_init(pud_t *pud_page, unsigned long paddr, unsigned long paddr_end,
                if (page_size_mask & (1<<PG_LEVEL_1G)) {
                        pages++;
                        spin_lock(&init_mm.page_table_lock);
-                       set_pte((pte_t *)pud,
+                       set_pte_safe((pte_t *)pud,
                                pfn_pte((paddr & PUD_MASK) >> PAGE_SHIFT,
                                        PAGE_KERNEL_LARGE));
                        spin_unlock(&init_mm.page_table_lock);
@@ -624,10 +623,9 @@ phys_pud_init(pud_t *pud_page, unsigned long paddr, unsigned long paddr_end,
                                           page_size_mask, prot);
 
                spin_lock(&init_mm.page_table_lock);
-               pud_populate(&init_mm, pud, pmd);
+               pud_populate_safe(&init_mm, pud, pmd);
                spin_unlock(&init_mm.page_table_lock);
        }
-       __flush_tlb_all();
 
        update_page_count(PG_LEVEL_1G, pages);
 
@@ -659,7 +657,7 @@ phys_p4d_init(p4d_t *p4d_page, unsigned long paddr, unsigned long paddr_end,
                                             E820_TYPE_RAM) &&
                            !e820__mapped_any(paddr & P4D_MASK, paddr_next,
                                             E820_TYPE_RESERVED_KERN))
-                               set_p4d(p4d, __p4d(0));
+                               set_p4d_safe(p4d, __p4d(0));
                        continue;
                }
 
@@ -668,7 +666,6 @@ phys_p4d_init(p4d_t *p4d_page, unsigned long paddr, unsigned long paddr_end,
                        paddr_last = phys_pud_init(pud, paddr,
                                        paddr_end,
                                        page_size_mask);
-                       __flush_tlb_all();
                        continue;
                }
 
@@ -677,10 +674,9 @@ phys_p4d_init(p4d_t *p4d_page, unsigned long paddr, unsigned long paddr_end,
                                           page_size_mask);
 
                spin_lock(&init_mm.page_table_lock);
-               p4d_populate(&init_mm, p4d, pud);
+               p4d_populate_safe(&init_mm, p4d, pud);
                spin_unlock(&init_mm.page_table_lock);
        }
-       __flush_tlb_all();
 
        return paddr_last;
 }
@@ -723,9 +719,9 @@ kernel_physical_mapping_init(unsigned long paddr_start,
 
                spin_lock(&init_mm.page_table_lock);
                if (pgtable_l5_enabled())
-                       pgd_populate(&init_mm, pgd, p4d);
+                       pgd_populate_safe(&init_mm, pgd, p4d);
                else
-                       p4d_populate(&init_mm, p4d_offset(pgd, vaddr), (pud_t *) p4d);
+                       p4d_populate_safe(&init_mm, p4d_offset(pgd, vaddr), (pud_t *) p4d);
                spin_unlock(&init_mm.page_table_lock);
                pgd_changed = true;
        }
@@ -733,8 +729,6 @@ kernel_physical_mapping_init(unsigned long paddr_start,
        if (pgd_changed)
                sync_global_pgds(vaddr_start, vaddr_end - 1);
 
-       __flush_tlb_all();
-
        return paddr_last;
 }
 
@@ -1147,7 +1141,8 @@ kernel_physical_mapping_remove(unsigned long start, unsigned long end)
        remove_pagetable(start, end, true, NULL);
 }
 
-int __ref arch_remove_memory(u64 start, u64 size, struct vmem_altmap *altmap)
+int __ref arch_remove_memory(int nid, u64 start, u64 size,
+                               struct vmem_altmap *altmap)
 {
        unsigned long start_pfn = start >> PAGE_SHIFT;
        unsigned long nr_pages = size >> PAGE_SHIFT;