Messages in this thread | | | From | Andi Kleen <> | Subject | Re: [PATCH 8/10] memory-hotplug : remove page table of x86_64 architecture | Date | Sun, 07 Oct 2012 21:37:00 -0700 |
| |
Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com> writes: > + } > + > + /* > + * We use 2M page, but we need to remove part of them, > + * so split 2M page to 4K page. > + */ > + pte = alloc_low_page(&pte_phys);
What happens when the allocation fails?
alloc_low_page seems to be buggy there too, it would __pa a NULL pointer.
> + if (pud_large(*pud)) { > + if ((addr & ~PUD_MASK) == 0 && next <= end) { > + set_pud(pud, __pud(0)); > + pages++; > + continue; > + } > + > + /* > + * We use 1G page, but we need to remove part of them, > + * so split 1G page to 2M page. > + */ > + pmd = alloc_low_page(&pmd_phys);
Same here
> + __split_large_page((pte_t *)pud, addr, (pte_t *)pmd); > + > + spin_lock(&init_mm.page_table_lock); > + pud_populate(&init_mm, pud, __va(pmd_phys)); > + spin_unlock(&init_mm.page_table_lock); > + } > + > + pmd = map_low_page(pmd_offset(pud, 0)); > + phys_pmd_remove(pmd, addr, end); > + unmap_low_page(pmd); > + __flush_tlb_all(); > + } > + __flush_tlb_all();
This doesn't flush the other CPUs doesn't it?
-Andi
-- ak@linux.intel.com -- Speaking for myself only
| |