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. > change PTE/PMD to new page Dont do that. We have migration entries for a reason. > 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. > reload TLB from new entry > read/write new page > lose data > > [*] the old page may belong to a new user at this point! > -- 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>