At 10/08/2012 12:37 PM, Andi Kleen Wrote:Yasuaki Ishimatsu <isimatu.yasuaki@xxxxxxxxxxxxxx> writes:Yes, it will cause kernek panicked in __pa() if CONFI_DEBUG_VIRTUAL is set.+ }What happens when the allocation fails?
+
+ /*
+ * 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);
alloc_low_page seems to be buggy there too, it would __pa a NULL
pointer.
Otherwise, it will return a NULL pointer. I will update this patch to deal
with NULL pointer.
+ if (pud_large(*pud)) {Same here
+ 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);
+ __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?How to flush the other CPU's tlb? use on_each_cpu() to run __flush_tlb_all()
on each online cpu?
Thanks
Wen Congyang
-Andi--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxxx For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>