ARM: memory hotplug: stop cpus while memory hotremove
Avoid page table corruptions during memory hotremove by stopping all other cpus. Change-Id: If4084768044dd95601bdc5993d14bc6b0a5921c3 Signed-off-by: Venkata Rao Kakani <vkakani@codeaurora.org>
This commit is contained in:
parent
2386158c7b
commit
ebef173049
1 changed files with 7 additions and 0 deletions
|
@ -1037,7 +1037,11 @@ void remove_pagetable(unsigned long start, unsigned long end, bool direct)
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
pgd_t *pgd;
|
pgd_t *pgd;
|
||||||
pud_t *pud;
|
pud_t *pud;
|
||||||
|
int cpu;
|
||||||
|
|
||||||
|
for_each_possible_cpu(cpu)
|
||||||
|
if (current->cpu != cpu)
|
||||||
|
sched_isolate_cpu(cpu);
|
||||||
for (addr = start; addr < end; addr = next) {
|
for (addr = start; addr < end; addr = next) {
|
||||||
next = pgd_addr_end(addr, end);
|
next = pgd_addr_end(addr, end);
|
||||||
|
|
||||||
|
@ -1058,6 +1062,9 @@ void remove_pagetable(unsigned long start, unsigned long end, bool direct)
|
||||||
}
|
}
|
||||||
|
|
||||||
flush_tlb_all();
|
flush_tlb_all();
|
||||||
|
for_each_possible_cpu(cpu)
|
||||||
|
if (current->cpu != cpu)
|
||||||
|
sched_unisolate_cpu_unlocked(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue