On Thu, 2011-02-10 at 19:08 +0100, Andrea Arcangeli wrote: > the locking looks wrong, who is taking the &walk->mm->page_table_lock, > and isn't this going to deadlock on the pte_offset_map_lock for > NR_CPUS < 4, and where is it released? This spin_lock don't seem > necessary to me. > > The right locking would be: > > spin_lock(&walk->mm->page_table_lock); > if (pmd_trans_huge(*pmd)) { > if (pmd_trans_splitting(*pmd)) { > spin_unlock(&walk->mm->page_table_lock); > wait_split_huge_page(vma->anon_vma, pmd); > } else { > smaps_pte_entry(*(pte_t *)pmd, addr, HPAGE_SIZE, walk); > spin_unlock(&walk->mm->page_table_lock); > return 0; > } I was under the assumption that the mm->page_table_lock was already held here, but I think that's wrong. I'll go back, take another look, and retest. -- Dave -- 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/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>