[PATCH v4 0/3] mm: fixes of tlb_flush_pending

Nadav Amit
2017-07-31T17:52:29Z

These three patches address tlb_flush_pending issues. The first one address
a race when accessing tlb_flush_pending and is the important one.

The next two patch addresses Andrew Morton question regarding the barriers.
These patches are not really related to the first one: the atomic
operations atomic_read() and atomic_inc() do not act as a memory barrier,
and replacing existing barriers with smp_mb__after_atomic() did not seem
beneficial. Yet, while reviewing the memory barriers around the use of
tlb_flush_pending, few issues were identified.

v3 -> v4:
- Change function names to indicate they inc/dec and not set/clear
(Sergey)
- Avoid additional barriers, and instead revert the patch that accessed
mm_tlb_flush_pending without a lock (Mel)

v2 -> v3:
- Do not init tlb_flush_pending if it is not defined without (Sergey)
- Internalize memory barriers to mm_tlb_flush_pending (Minchan)

v1 -> v2:
- Explain the implications of the implications of the race (Andrew)
- Mark the patch that address the race as stable (Andrew)
- Add another patch to clean the use of barriers (Andrew)

Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Rik van Riel <riel@redhat.com>

Nadav Amit (3):
mm: migrate: prevent racy access to tlb_flush_pending
mm: migrate: fix barriers around tlb_flush_pending
Revert "mm: numa: defer TLB flush for THP migration as long as
possible"

include/linux/mm_types.h | 45 ++++++++++++++++++++++++++++++++-------------
kernel/fork.c | 2 +-
mm/debug.c | 2 +-
mm/huge_memory.c | 7 +++++++
mm/migrate.c | 6 ------
mm/mprotect.c | 4 ++--
6 files changed, 43 insertions(+), 23 deletions(-)