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 from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/