On 12/06/2013 03:32 PM, Christoph Lameter wrote: > On Fri, 6 Dec 2013, Rik van Riel wrote: >> >> The basic race looks like this: >> >> CPU A CPU B CPU C >> >> load TLB entry >> make entry PTE/PMD_NUMA >> fault on entry >> read/write old page >> start migrating page > > When you start migrating a page a special page migration entry is > created that will trap all accesses to the page. You can safely flush when > the migration entry is there. Only allow a new PTE/PMD to be put there > *after* the tlb flush. A PROT_NONE or NUMA pte is just as effective as a migration pte. The only problem is, the TLB flush was not always done... > >> change PTE/PMD to new page > > Dont do that. We have migration entries for a reason. We do not have migration entries for hugepages, do we? >> read/write old page [*] > > Should cause a page fault which should put the process to sleep. Process > will safely read the page after the migration entry is removed. > >> flush TLB > > Establish the new PTE/PMD after the flush removing the migration pte > entry and thereby avoiding the race. That is what this patch does. -- All rights reversed -- 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>