Messages in this thread | | | Date | Fri, 06 Dec 2013 16:21:21 -0500 | From | Rik van Riel <> | Subject | Re: [PATCH 14/15] mm: fix TLB flush race between migration, and change_protection_range |
| |
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
| |