On Thu, Jan 12, 2012 at 02:34:53PM -0500, Naoya Horiguchi wrote: > + if (pmd_trans_splitting(*pmd)) { > + spin_unlock(&walk->mm->page_table_lock); > + wait_split_huge_page(vma->anon_vma, pmd); > + } else { > + for (; addr != end; addr += PAGE_SIZE) { > + unsigned long offset = (addr & ~PAGEMAP_WALK_MASK) > + >> PAGE_SHIFT; > + pfn = thp_pte_to_pagemap_entry(*(pte_t *)pmd, > + offset); What is this that then morphs into a pme (which still has a cast inside its creation)? thp_pte_to_pagemap_entry don't seem to be passed ptes too. The only case where it is valid to do a cast like that is when a function is used by both ptes sand pmds and the code tends to work for both with minimal modification to differentiate the two cases. Considering the function that gets the cast is called thp_ this is hardly the case here. Why don't you pass the pmd and then do "if (pmd_present(pmd)) page_to_pfn(pmd_page(pmd)) ? What's the argument for the cast. I'm just reviewing this series and maybe it was covered in previous versions. I don't get this pme thing for something as trivial as above that shouldn't require any cast at all. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. 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>