Messages in this thread | | | Date | Fri, 26 Oct 2012 15:50:24 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH 26/31] sched, numa, mm: Add fault driven placement and migration policy |
| |
* Ingo Molnar <mingo@kernel.org> wrote:
> [ > task_numa_work() performance side note: > > We are also *very* close to be able to use down_read() instead > of down_write() in the sampling-unmap code in > task_numa_work(), as it should be safe in theory to call > change_protection(PROT_NONE) in parallel - but there's one > regression that disagrees with this theory so we use > down_write() at the moment. > > Maybe you could help us there: can you see a reason why the > change_prot_none()->change_protection() call in > task_numa_work() can not occur in parallel to a page fault in > another thread on another CPU? It should be safe - yet if we > change it I can see occasional corruption of user-space state: > segfaults and register corruption. > ]
Oh, just found the reason:
the ptep_modify_prot_start()/modify()/commit() sequence is SMP-unsafe - it has to be done under the mmap_sem write-locked.
It is safe against *hardware* updates to the PTE, but not safe against itself.
This is apparently a hidden cost of paravirt, it is forcing that weird sequence and thus the down_write() ...
Thanks,
Ingo
| |