s390/mm,tlb: optimize TLB flushing for zEC12
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 3 Apr 2014 11:55:01 +0000 (13:55 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 3 Apr 2014 12:31:00 +0000 (14:31 +0200)
commit1b948d6caec4f28e3524244ca0f77c6ae8ddceef
treebc7e1d5800f10c39979d3f47872ba7047568f8a4
parent02a8f3abb708919149cb657a5202f4603f0c38e2
s390/mm,tlb: optimize TLB flushing for zEC12

The zEC12 machines introduced the local-clearing control for the IDTE
and IPTE instruction. If the control is set only the TLB of the local
CPU is cleared of entries, either all entries of a single address space
for IDTE, or the entry for a single page-table entry for IPTE.
Without the local-clearing control the TLB flush is broadcasted to all
CPUs in the configuration, which is expensive.

The reset of the bit mask of the CPUs that need flushing after a
non-local IDTE is tricky. As TLB entries for an address space remain
in the TLB even if the address space is detached a new bit field is
required to keep track of attached CPUs vs. CPUs in the need of a
flush. After a non-local flush with IDTE the bit-field of attached CPUs
is copied to the bit-field of CPUs in need of a flush. The ordering
of operations on cpu_attach_mask, attach_count and mm_cpumask(mm) is
such that an underindication in mm_cpumask(mm) is prevented but an
overindication in mm_cpumask(mm) is possible.

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