kernel_optimize_test/arch/s390/mm
Christian Borntraeger fa41ba0d08 s390/mm: avoid empty zero pages for KVM guests to avoid postcopy hangs
Right now there is a potential hang situation for postcopy migrations,
if the guest is enabling storage keys on the target system during the
postcopy process.

For storage key virtualization, we have to forbid the empty zero page as
the storage key is a property of the physical page frame.  As we enable
storage key handling lazily we then drop all mappings for empty zero
pages for lazy refaulting later on.

This does not work with the postcopy migration, which relies on the
empty zero page never triggering a fault again in the future. The reason
is that postcopy migration will simply read a page on the target system
if that page is a known zero page to fault in an empty zero page.  At
the same time postcopy remembers that this page was already transferred
- so any future userfault on that page will NOT be retransmitted again
to avoid races.

If now the guest enters the storage key mode while in postcopy, we will
break this assumption of postcopy.

The solution is to disable the empty zero page for KVM guests early on
and not during storage key enablement. With this change, the postcopy
migration process is guaranteed to start after no zero pages are left.

As guest pages are very likely not empty zero pages anyway the memory
overhead is also pretty small.

While at it this also adds proper page table locking to the zero page
removal.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Janosch Frank <frankja@linux.vnet.ibm.com>
Cc: stable@vger.kernel.org
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2017-08-29 16:31:27 +02:00
..
cmm.c s390: mm: Audit and remove any unnecessary uses of module.h 2017-02-17 07:40:35 +01:00
dump_pagetables.c s390/mm: implement 5 level pages tables 2017-06-12 16:25:54 +02:00
extmem.c s390: mm: Audit and remove any unnecessary uses of module.h 2017-02-17 07:40:35 +01:00
fault.c s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
gmap.c s390/mm: avoid empty zero pages for KVM guests to avoid postcopy hangs 2017-08-29 16:31:27 +02:00
gup.c s390/mm: implement 5 level pages tables 2017-06-12 16:25:54 +02:00
hugetlbpage.c mm/hugetlb: add size parameter to huge_pte_offset() 2017-07-06 16:24:34 -07:00
init.c s390/mm: prevent memory offline for memory blocks with cma areas 2017-08-09 09:09:28 -04:00
maccess.c s390/maccess: reduce stnsm instructions 2016-02-17 09:05:04 +01:00
Makefile s390/extable: use generic search and sort routines 2016-03-22 15:36:02 -07:00
mem_detect.c s390: mm: Audit and remove any unnecessary uses of module.h 2017-02-17 07:40:35 +01:00
mmap.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-07-03 15:39:36 -07:00
page-states.c s390/mm: tag normal pages vs pages used in page tables 2017-07-25 06:55:28 +02:00
pageattr.c s390/mm,vmem: simplify region and segment table allocation code 2017-07-26 08:25:12 +02:00
pgalloc.c s390/mm: use new mm defines instead of magic values 2017-07-26 08:25:09 +02:00
pgtable.c Merge branch 'tlb-flushing' into features 2017-07-26 08:23:27 +02:00
vmem.c s390/mm,vmem: simplify region and segment table allocation code 2017-07-26 08:25:12 +02:00