Hi all, On 04/08/2013 05:56 PM, Lin Feng wrote: > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c > index 474e28f..e2a7277 100644 > --- a/arch/x86/mm/init_64.c > +++ b/arch/x86/mm/init_64.c > @@ -1318,6 +1318,8 @@ vmemmap_populate(struct page *start_page, unsigned long > size, int node) > if (!p) > return -ENOMEM; > > + vmemmap_verify((pte_t *)p, node, addr, addr + > PAGE_SIZE); > + > addr_end = addr + PAGE_SIZE; > p_end = p + PAGE_SIZE; > } else { IIUC it seems that the original 'p_end = p + PAGE_SIZE' assignment is buggy, because:
1309 if (!cpu_has_pse) { 1310 next = (addr + PAGE_SIZE) & PAGE_MASK; 1311 pmd = vmemmap_pmd_populate(pud, addr, node); 1312 1313 if (!pmd) 1314 return -ENOMEM; 1315 1316 p = vmemmap_pte_populate(pmd, addr, node); 1317 1318 if (!p) 1319 return -ENOMEM; 1320 1321 addr_end = addr + PAGE_SIZE; 1322 p_end = p + PAGE_SIZE; The return value of vmemmap_pte_populate() is the virtual address of pte, not the allocated virtual address, which is different from vmemmap_alloc_block_buf() in cpu_has_pse case, so the addition PAGE_SIZE in !cpu_has_pse case is nonsense. Or am I missing something? thanks, linfeng -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/