Re: [RFC v3 PATCH 5/5] x86: check VM_DEAD flag in page fault

From: Yang Shi
Date: Mon Jul 02 2018 - 14:10:46 EST




On 7/2/18 10:57 AM, Michal Hocko wrote:
On Mon 02-07-18 10:24:27, Yang Shi wrote:

On 7/2/18 6:37 AM, Michal Hocko wrote:
On Mon 02-07-18 15:33:11, Laurent Dufour wrote:
On 02/07/2018 14:45, Michal Hocko wrote:
On Mon 02-07-18 14:26:09, Laurent Dufour wrote:
On 02/07/2018 14:15, Michal Hocko wrote:
[...]
We already do have a model for that. Have a look at MMF_UNSTABLE.
MMF_UNSTABLE is a mm's flag, here this is a VMA's flag which is checked.
Yeah, and we have the VMA ready for all places where we do check the
flag. check_stable_address_space can be made to get vma rather than mm.
Yeah, this would have been more efficient to check that flag at the beginning
of the page fault handler rather than the end, but this way it will be easier
to handle the speculative page fault too ;)
The thing is that it doesn't really need to be called earlier. You are
not risking data corruption on file backed mappings.
OK, I just think it could save a few cycles to check the flag earlier.
This should be an extremely rare case. Just think about it. It should
only ever happen when an access races with munmap which itself is
questionable if not an outright bug.

If nobody think it is necessary, we definitely could re-use
check_stable_address_space(),
If we really need this whole VM_DEAD thing then it should be better
handled at the same place rather than some ad-hoc places.

just return VM_FAULT_SIGSEGV for VM_DEAD vma,
and check for both shared and non-shared.
Why would you even care about shared mappings?

Just thought about we are dealing with VM_DEAD, which means the vma will be tore down soon regardless it is shared or non-shared.

MMF_UNSTABLE doesn't care about !shared case.