From: Janosch Frank <frankja@linux.ibm.com>
Subject: s390/mm: hugetlb pages within a gmap can not be freed
Patch-mainline: v4.19-rc1
Git-commit: 7d735b9ae82d073e23ff7d2648e0aa8056049d16
References: FATE#326372, LTC#169184, bsc#1113484
Summary: kernel: Introduce huge page KVM backing support
Description: This adds the KVM support for libhugetlbfs backings of
s390 KVM guests.
Upstream-Description:
s390/mm: hugetlb pages within a gmap can not be freed
Guests backed by huge pages could theoretically free unused pages via
the diagnose 10 instruction. We currently don't allow that, so we
don't have to refault it once it's needed again.
Signed-off-by: Dominik Dingel <dingel@linux.vnet.ibm.com>
Reviewed-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
arch/s390/mm/gmap.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/arch/s390/mm/gmap.c
+++ b/arch/s390/mm/gmap.c
@@ -702,6 +702,12 @@ void gmap_discard(struct gmap *gmap, uns
vmaddr |= gaddr & ~PMD_MASK;
/* Find vma in the parent mm */
vma = find_vma(gmap->mm, vmaddr);
+ /*
+ * We do not discard pages that are backed by
+ * hugetlbfs, so we don't have to refault them.
+ */
+ if (vma && is_vm_hugetlb_page(vma))
+ continue;
size = min(to - gaddr, PMD_SIZE - (gaddr & ~PMD_MASK));
zap_page_range(vma, vmaddr, size);
}