On Thu 21-02-13 14:41:40, Naoya Horiguchi wrote: [...] > diff --git v3.8.orig/mm/migrate.c v3.8/mm/migrate.c > index 2fd8b4a..7d84f4c 100644 > --- v3.8.orig/mm/migrate.c > +++ v3.8/mm/migrate.c > @@ -236,6 +236,30 @@ void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, > pte_unmap_unlock(ptep, ptl); > } > > +void migration_entry_wait_huge(struct mm_struct *mm, pmd_t *pmd, > + unsigned long address) > +{ > + spinlock_t *ptl = pte_lockptr(mm, pmd); > + pte_t pte; > + swp_entry_t entry; > + struct page *page; > + > + spin_lock(ptl); > + pte = huge_ptep_get((pte_t *)pmd); > + if (!is_hugetlb_entry_migration(pte)) > + goto out; > + entry = pte_to_swp_entry(pte); > + page = migration_entry_to_page(entry); > + if (!get_page_unless_zero(page)) > + goto out; > + spin_unlock(ptl); > + wait_on_page_locked(page); > + put_page(page); > + return; > +out: > + spin_unlock(ptl); > +} This duplicates a lot of code from migration_entry_wait. Can we just teach the generic one to be HugePage aware instead? All it takes is just opencoding pte_offset_map_lock and calling huge_ptep_get ofr HugePage and pte_offset_map otherwise. -- Michal Hocko SUSE Labs -- 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/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>