[S390] fix tlb flushing vs. concurrent /proc accesses
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 24 Aug 2010 07:26:21 +0000 (09:26 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Tue, 24 Aug 2010 07:26:34 +0000 (09:26 +0200)
commit050eef364ad700590a605a0749f825cab4834b1e
tree2714c9cf7edcbf394971cc2c929e5ab2ea34d6a6
parent7af048dc7639db5202c56fecf2346c310647a218
[S390] fix tlb flushing vs. concurrent /proc accesses

The tlb flushing code uses the mm_users field of the mm_struct to
decide if each page table entry needs to be flushed individually with
IPTE or if a global flush for the mm_struct is sufficient after all page
table updates have been done. The comment for mm_users says "How many
users with user space?" but the /proc code increases mm_users after it
found the process structure by pid without creating a new user process.
Which makes mm_users useless for the decision between the two tlb
flusing methods. The current code can be confused to not flush tlb
entries by a concurrent access to /proc files if e.g. a fork is in
progres. The solution for this problem is to make the tlb flushing
logic independent from the mm_users field.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/hugetlb.h
arch/s390/include/asm/mmu.h
arch/s390/include/asm/mmu_context.h
arch/s390/include/asm/pgtable.h
arch/s390/include/asm/tlb.h
arch/s390/include/asm/tlbflush.h
arch/s390/kernel/smp.c
arch/s390/mm/init.c