diff --git a/queue-4.14/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch b/queue-4.14/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch
deleted file mode 100644
index d42fda4..0000000
--- a/queue-4.14/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-From 5ac14bac08ae827b619f21bcceaaac3b8c497e31 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 1 Feb 2021 17:26:54 +0100
-Subject: KVM: s390: extend kvm_s390_shadow_fault to return entry pointer
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit 5ac14bac08ae827b619f21bcceaaac3b8c497e31 upstream.
-
-Extend kvm_s390_shadow_fault to return the pointer to the valid leaf
-DAT table entry, or to the invalid entry.
-
-Also return some flags in the lower bits of the address:
-PEI_DAT_PROT: indicates that DAT protection applies because of the
-              protection bit in the segment (or, if EDAT, region) tables.
-PEI_NOT_PTE: indicates that the address of the DAT table entry returned
-             does not refer to a PTE, but to a segment or region table.
-
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Cc: stable@vger.kernel.org
-Reviewed-by: Janosch Frank <frankja@de.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Link: https://lore.kernel.org/r/20210302174443.514363-3-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com: fold in a fix from Claudio]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/gaccess.c |   30 +++++++++++++++++++++++++-----
- arch/s390/kvm/gaccess.h |    6 +++++-
- arch/s390/kvm/vsie.c    |    8 ++++----
- 3 files changed, 34 insertions(+), 10 deletions(-)
-
---- a/arch/s390/kvm/gaccess.c
-+++ b/arch/s390/kvm/gaccess.c
-@@ -976,7 +976,9 @@ int kvm_s390_check_low_addr_prot_real(st
-  * kvm_s390_shadow_tables - walk the guest page table and create shadow tables
-  * @sg: pointer to the shadow guest address space structure
-  * @saddr: faulting address in the shadow gmap
-- * @pgt: pointer to the page table address result
-+ * @pgt: pointer to the beginning of the page table for the given address if
-+ *	 successful (return value 0), or to the first invalid DAT entry in
-+ *	 case of exceptions (return value > 0)
-  * @fake: pgt references contiguous guest memory block, not a pgtable
-  */
- static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
-@@ -1034,6 +1036,7 @@ static int kvm_s390_shadow_tables(struct
- 			rfte.val = ptr;
- 			goto shadow_r2t;
- 		}
-+		*pgt = ptr + vaddr.rfx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rfx * 8, &rfte.val);
- 		if (rc)
- 			return rc;
-@@ -1060,6 +1063,7 @@ shadow_r2t:
- 			rste.val = ptr;
- 			goto shadow_r3t;
- 		}
-+		*pgt = ptr + vaddr.rsx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rsx * 8, &rste.val);
- 		if (rc)
- 			return rc;
-@@ -1087,6 +1091,7 @@ shadow_r3t:
- 			rtte.val = ptr;
- 			goto shadow_sgt;
- 		}
-+		*pgt = ptr + vaddr.rtx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rtx * 8, &rtte.val);
- 		if (rc)
- 			return rc;
-@@ -1123,6 +1128,7 @@ shadow_sgt:
- 			ste.val = ptr;
- 			goto shadow_pgt;
- 		}
-+		*pgt = ptr + vaddr.sx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.sx * 8, &ste.val);
- 		if (rc)
- 			return rc;
-@@ -1157,6 +1163,8 @@ shadow_pgt:
-  * @vcpu: virtual cpu
-  * @sg: pointer to the shadow guest address space structure
-  * @saddr: faulting address in the shadow gmap
-+ * @datptr: will contain the address of the faulting DAT table entry, or of
-+ *	    the valid leaf, plus some flags
-  *
-  * Returns: - 0 if the shadow fault was successfully resolved
-  *	    - > 0 (pgm exception code) on exceptions while faulting
-@@ -1165,11 +1173,11 @@ shadow_pgt:
-  *	    - -ENOMEM if out of memory
-  */
- int kvm_s390_shadow_fault(struct kvm_vcpu *vcpu, struct gmap *sg,
--			  unsigned long saddr)
-+			  unsigned long saddr, unsigned long *datptr)
- {
- 	union vaddress vaddr;
- 	union page_table_entry pte;
--	unsigned long pgt;
-+	unsigned long pgt = 0;
- 	int dat_protection, fake;
- 	int rc;
- 
-@@ -1191,8 +1199,20 @@ int kvm_s390_shadow_fault(struct kvm_vcp
- 		pte.val = pgt + vaddr.px * PAGE_SIZE;
- 		goto shadow_page;
- 	}
--	if (!rc)
--		rc = gmap_read_table(sg->parent, pgt + vaddr.px * 8, &pte.val);
-+
-+	switch (rc) {
-+	case PGM_SEGMENT_TRANSLATION:
-+	case PGM_REGION_THIRD_TRANS:
-+	case PGM_REGION_SECOND_TRANS:
-+	case PGM_REGION_FIRST_TRANS:
-+		pgt |= PEI_NOT_PTE;
-+		break;
-+	case 0:
-+		pgt += vaddr.px * 8;
-+		rc = gmap_read_table(sg->parent, pgt, &pte.val);
-+	}
-+	if (datptr)
-+		*datptr = pgt | dat_protection * PEI_DAT_PROT;
- 	if (!rc && pte.i)
- 		rc = PGM_PAGE_TRANSLATION;
- 	if (!rc && pte.z)
---- a/arch/s390/kvm/gaccess.h
-+++ b/arch/s390/kvm/gaccess.h
-@@ -390,7 +390,11 @@ void ipte_unlock(struct kvm_vcpu *vcpu);
- int ipte_lock_held(struct kvm_vcpu *vcpu);
- int kvm_s390_check_low_addr_prot_real(struct kvm_vcpu *vcpu, unsigned long gra);
- 
-+/* MVPG PEI indication bits */
-+#define PEI_DAT_PROT 2
-+#define PEI_NOT_PTE 4
-+
- int kvm_s390_shadow_fault(struct kvm_vcpu *vcpu, struct gmap *shadow,
--			  unsigned long saddr);
-+			  unsigned long saddr, unsigned long *datptr);
- 
- #endif /* __KVM_S390_GACCESS_H */
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -440,10 +440,10 @@ static int map_prefix(struct kvm_vcpu *v
- 	/* with mso/msl, the prefix lies at offset *mso* */
- 	prefix += scb_s->mso;
- 
--	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, prefix);
-+	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, prefix, NULL);
- 	if (!rc && (scb_s->ecb & ECB_TE))
- 		rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--					   prefix + PAGE_SIZE);
-+					   prefix + PAGE_SIZE, NULL);
- 	/*
- 	 * We don't have to mprotect, we will be called for all unshadows.
- 	 * SIE will detect if protection applies and trigger a validity.
-@@ -746,7 +746,7 @@ static int handle_fault(struct kvm_vcpu
- 				    current->thread.gmap_addr, 1);
- 
- 	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--				   current->thread.gmap_addr);
-+				   current->thread.gmap_addr, NULL);
- 	if (rc > 0) {
- 		rc = inject_fault(vcpu, rc,
- 				  current->thread.gmap_addr,
-@@ -768,7 +768,7 @@ static void handle_last_fault(struct kvm
- {
- 	if (vsie_page->fault_addr)
- 		kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--				      vsie_page->fault_addr);
-+				      vsie_page->fault_addr, NULL);
- 	vsie_page->fault_addr = 0;
- }
- 
diff --git a/queue-4.14/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch b/queue-4.14/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch
deleted file mode 100644
index aabe416..0000000
--- a/queue-4.14/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From bdf7509bbefa20855d5f6bacdc5b62a8489477c9 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 1 Feb 2021 21:54:13 +0100
-Subject: KVM: s390: VSIE: correctly handle MVPG when in VSIE
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit bdf7509bbefa20855d5f6bacdc5b62a8489477c9 upstream.
-
-Correctly handle the MVPG instruction when issued by a VSIE guest.
-
-Fixes: a3508fbe9dc6d ("KVM: s390: vsie: initial support for nested virtualization")
-Cc: stable@vger.kernel.org # f85f1baaa189: KVM: s390: split kvm_s390_logical_to_effective
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Acked-by: Janosch Frank <frankja@linux.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Link: https://lore.kernel.org/r/20210302174443.514363-4-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com: apply fixup from Claudio]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/vsie.c |   98 ++++++++++++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 93 insertions(+), 5 deletions(-)
-
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -249,11 +249,6 @@ static void unshadow_scb(struct kvm_vcpu
- 		memcpy((void *)((u64)scb_o + 0xc0),
- 		       (void *)((u64)scb_s + 0xc0), 0xf0 - 0xc0);
- 		break;
--	case ICPT_PARTEXEC:
--		/* MVPG only */
--		memcpy((void *)((u64)scb_o + 0xc0),
--		       (void *)((u64)scb_s + 0xc0), 0xd0 - 0xc0);
--		break;
- 	}
- 
- 	if (scb_s->ihcpu != 0xffffU)
-@@ -821,6 +816,95 @@ static int handle_stfle(struct kvm_vcpu
- }
- 
- /*
-+ * Get a register for a nested guest.
-+ * @vcpu the vcpu of the guest
-+ * @vsie_page the vsie_page for the nested guest
-+ * @reg the register number, the upper 4 bits are ignored.
-+ * returns: the value of the register.
-+ */
-+static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, u8 reg)
-+{
-+	/* no need to validate the parameter and/or perform error handling */
-+	reg &= 0xf;
-+	switch (reg) {
-+	case 15:
-+		return vsie_page->scb_s.gg15;
-+	case 14:
-+		return vsie_page->scb_s.gg14;
-+	default:
-+		return vcpu->run->s.regs.gprs[reg];
-+	}
-+}
-+
-+static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
-+{
-+	struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
-+	unsigned long pei_dest, pei_src, src, dest, mask;
-+	u64 *pei_block = &vsie_page->scb_o->mcic;
-+	int edat, rc_dest, rc_src;
-+	union ctlreg0 cr0;
-+
-+	cr0.val = vcpu->arch.sie_block->gcr[0];
-+	edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
-+	mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK);
-+
-+	dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
-+	src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
-+
-+	rc_dest = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, dest, &pei_dest);
-+	rc_src = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, src, &pei_src);
-+	/*
-+	 * Either everything went well, or something non-critical went wrong
-+	 * e.g. because of a race. In either case, simply retry.
-+	 */
-+	if (rc_dest == -EAGAIN || rc_src == -EAGAIN || (!rc_dest && !rc_src)) {
-+		retry_vsie_icpt(vsie_page);
-+		return -EAGAIN;
-+	}
-+	/* Something more serious went wrong, propagate the error */
-+	if (rc_dest < 0)
-+		return rc_dest;
-+	if (rc_src < 0)
-+		return rc_src;
-+
-+	/* The only possible suppressing exception: just deliver it */
-+	if (rc_dest == PGM_TRANSLATION_SPEC || rc_src == PGM_TRANSLATION_SPEC) {
-+		clear_vsie_icpt(vsie_page);
-+		rc_dest = kvm_s390_inject_program_int(vcpu, PGM_TRANSLATION_SPEC);
-+		WARN_ON_ONCE(rc_dest);
-+		return 1;
-+	}
-+
-+	/*
-+	 * Forward the PEI intercept to the guest if it was a page fault, or
-+	 * also for segment and region table faults if EDAT applies.
-+	 */
-+	if (edat) {
-+		rc_dest = rc_dest == PGM_ASCE_TYPE ? rc_dest : 0;
-+		rc_src = rc_src == PGM_ASCE_TYPE ? rc_src : 0;
-+	} else {
-+		rc_dest = rc_dest != PGM_PAGE_TRANSLATION ? rc_dest : 0;
-+		rc_src = rc_src != PGM_PAGE_TRANSLATION ? rc_src : 0;
-+	}
-+	if (!rc_dest && !rc_src) {
-+		pei_block[0] = pei_dest;
-+		pei_block[1] = pei_src;
-+		return 1;
-+	}
-+
-+	retry_vsie_icpt(vsie_page);
-+
-+	/*
-+	 * The host has edat, and the guest does not, or it was an ASCE type
-+	 * exception. The host needs to inject the appropriate DAT interrupts
-+	 * into the guest.
-+	 */
-+	if (rc_dest)
-+		return inject_fault(vcpu, rc_dest, dest, 1);
-+	return inject_fault(vcpu, rc_src, src, 0);
-+}
-+
-+/*
-  * Run the vsie on a shadow scb and a shadow gmap, without any further
-  * sanity checks, handling SIE faults.
-  *
-@@ -898,6 +982,10 @@ static int do_vsie_run(struct kvm_vcpu *
- 		if ((scb_s->ipa & 0xf000) != 0xf000)
- 			scb_s->ipa += 0x1000;
- 		break;
-+	case ICPT_PARTEXEC:
-+		if (scb_s->ipa == 0xb254)
-+			rc = vsie_handle_mvpg(vcpu, vsie_page);
-+		break;
- 	}
- 	return rc;
- }
diff --git a/queue-4.14/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch b/queue-4.14/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch
deleted file mode 100644
index e7c0125..0000000
--- a/queue-4.14/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From c3171e94cc1cdcc3229565244112e869f052b8d9 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 22 Mar 2021 15:05:59 +0100
-Subject: KVM: s390: VSIE: fix MVPG handling for prefixing and MSO
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit c3171e94cc1cdcc3229565244112e869f052b8d9 upstream.
-
-Prefixing needs to be applied to the guest real address to translate it
-into a guest absolute address.
-
-The value of MSO needs to be added to a guest-absolute address in order to
-obtain the host-virtual.
-
-Fixes: bdf7509bbefa ("s390/kvm: VSIE: correctly handle MVPG when in VSIE")
-Reported-by: Janosch Frank <frankja@linux.ibm.com>
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Cc: stable@vger.kernel.org
-Link: https://lore.kernel.org/r/20210322140559.500716-3-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com simplify mso]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/vsie.c |    5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -839,7 +839,7 @@ static u64 vsie_get_register(struct kvm_
- static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
- {
- 	struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
--	unsigned long pei_dest, pei_src, src, dest, mask;
-+	unsigned long pei_dest, pei_src, src, dest, mask, prefix;
- 	u64 *pei_block = &vsie_page->scb_o->mcic;
- 	int edat, rc_dest, rc_src;
- 	union ctlreg0 cr0;
-@@ -847,9 +847,12 @@ static int vsie_handle_mvpg(struct kvm_v
- 	cr0.val = vcpu->arch.sie_block->gcr[0];
- 	edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
- 	mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK);
-+	prefix = scb_s->prefix << GUEST_PREFIX_SHIFT;
- 
- 	dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
-+	dest = _kvm_s390_real_to_abs(prefix, dest) + scb_s->mso;
- 	src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
-+	src = _kvm_s390_real_to_abs(prefix, src) + scb_s->mso;
- 
- 	rc_dest = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, dest, &pei_dest);
- 	rc_src = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, src, &pei_src);
diff --git a/queue-4.19/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch b/queue-4.19/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch
deleted file mode 100644
index 2a54ecb..0000000
--- a/queue-4.19/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-From 5ac14bac08ae827b619f21bcceaaac3b8c497e31 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 1 Feb 2021 17:26:54 +0100
-Subject: KVM: s390: extend kvm_s390_shadow_fault to return entry pointer
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit 5ac14bac08ae827b619f21bcceaaac3b8c497e31 upstream.
-
-Extend kvm_s390_shadow_fault to return the pointer to the valid leaf
-DAT table entry, or to the invalid entry.
-
-Also return some flags in the lower bits of the address:
-PEI_DAT_PROT: indicates that DAT protection applies because of the
-              protection bit in the segment (or, if EDAT, region) tables.
-PEI_NOT_PTE: indicates that the address of the DAT table entry returned
-             does not refer to a PTE, but to a segment or region table.
-
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Cc: stable@vger.kernel.org
-Reviewed-by: Janosch Frank <frankja@de.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Link: https://lore.kernel.org/r/20210302174443.514363-3-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com: fold in a fix from Claudio]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/gaccess.c |   30 +++++++++++++++++++++++++-----
- arch/s390/kvm/gaccess.h |    6 +++++-
- arch/s390/kvm/vsie.c    |    8 ++++----
- 3 files changed, 34 insertions(+), 10 deletions(-)
-
---- a/arch/s390/kvm/gaccess.c
-+++ b/arch/s390/kvm/gaccess.c
-@@ -976,7 +976,9 @@ int kvm_s390_check_low_addr_prot_real(st
-  * kvm_s390_shadow_tables - walk the guest page table and create shadow tables
-  * @sg: pointer to the shadow guest address space structure
-  * @saddr: faulting address in the shadow gmap
-- * @pgt: pointer to the page table address result
-+ * @pgt: pointer to the beginning of the page table for the given address if
-+ *	 successful (return value 0), or to the first invalid DAT entry in
-+ *	 case of exceptions (return value > 0)
-  * @fake: pgt references contiguous guest memory block, not a pgtable
-  */
- static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
-@@ -1034,6 +1036,7 @@ static int kvm_s390_shadow_tables(struct
- 			rfte.val = ptr;
- 			goto shadow_r2t;
- 		}
-+		*pgt = ptr + vaddr.rfx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rfx * 8, &rfte.val);
- 		if (rc)
- 			return rc;
-@@ -1059,6 +1062,7 @@ shadow_r2t:
- 			rste.val = ptr;
- 			goto shadow_r3t;
- 		}
-+		*pgt = ptr + vaddr.rsx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rsx * 8, &rste.val);
- 		if (rc)
- 			return rc;
-@@ -1085,6 +1089,7 @@ shadow_r3t:
- 			rtte.val = ptr;
- 			goto shadow_sgt;
- 		}
-+		*pgt = ptr + vaddr.rtx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rtx * 8, &rtte.val);
- 		if (rc)
- 			return rc;
-@@ -1120,6 +1125,7 @@ shadow_sgt:
- 			ste.val = ptr;
- 			goto shadow_pgt;
- 		}
-+		*pgt = ptr + vaddr.sx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.sx * 8, &ste.val);
- 		if (rc)
- 			return rc;
-@@ -1154,6 +1160,8 @@ shadow_pgt:
-  * @vcpu: virtual cpu
-  * @sg: pointer to the shadow guest address space structure
-  * @saddr: faulting address in the shadow gmap
-+ * @datptr: will contain the address of the faulting DAT table entry, or of
-+ *	    the valid leaf, plus some flags
-  *
-  * Returns: - 0 if the shadow fault was successfully resolved
-  *	    - > 0 (pgm exception code) on exceptions while faulting
-@@ -1162,11 +1170,11 @@ shadow_pgt:
-  *	    - -ENOMEM if out of memory
-  */
- int kvm_s390_shadow_fault(struct kvm_vcpu *vcpu, struct gmap *sg,
--			  unsigned long saddr)
-+			  unsigned long saddr, unsigned long *datptr)
- {
- 	union vaddress vaddr;
- 	union page_table_entry pte;
--	unsigned long pgt;
-+	unsigned long pgt = 0;
- 	int dat_protection, fake;
- 	int rc;
- 
-@@ -1188,8 +1196,20 @@ int kvm_s390_shadow_fault(struct kvm_vcp
- 		pte.val = pgt + vaddr.px * PAGE_SIZE;
- 		goto shadow_page;
- 	}
--	if (!rc)
--		rc = gmap_read_table(sg->parent, pgt + vaddr.px * 8, &pte.val);
-+
-+	switch (rc) {
-+	case PGM_SEGMENT_TRANSLATION:
-+	case PGM_REGION_THIRD_TRANS:
-+	case PGM_REGION_SECOND_TRANS:
-+	case PGM_REGION_FIRST_TRANS:
-+		pgt |= PEI_NOT_PTE;
-+		break;
-+	case 0:
-+		pgt += vaddr.px * 8;
-+		rc = gmap_read_table(sg->parent, pgt, &pte.val);
-+	}
-+	if (datptr)
-+		*datptr = pgt | dat_protection * PEI_DAT_PROT;
- 	if (!rc && pte.i)
- 		rc = PGM_PAGE_TRANSLATION;
- 	if (!rc && pte.z)
---- a/arch/s390/kvm/gaccess.h
-+++ b/arch/s390/kvm/gaccess.h
-@@ -387,7 +387,11 @@ void ipte_unlock(struct kvm_vcpu *vcpu);
- int ipte_lock_held(struct kvm_vcpu *vcpu);
- int kvm_s390_check_low_addr_prot_real(struct kvm_vcpu *vcpu, unsigned long gra);
- 
-+/* MVPG PEI indication bits */
-+#define PEI_DAT_PROT 2
-+#define PEI_NOT_PTE 4
-+
- int kvm_s390_shadow_fault(struct kvm_vcpu *vcpu, struct gmap *shadow,
--			  unsigned long saddr);
-+			  unsigned long saddr, unsigned long *datptr);
- 
- #endif /* __KVM_S390_GACCESS_H */
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -447,10 +447,10 @@ static int map_prefix(struct kvm_vcpu *v
- 	/* with mso/msl, the prefix lies at offset *mso* */
- 	prefix += scb_s->mso;
- 
--	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, prefix);
-+	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, prefix, NULL);
- 	if (!rc && (scb_s->ecb & ECB_TE))
- 		rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--					   prefix + PAGE_SIZE);
-+					   prefix + PAGE_SIZE, NULL);
- 	/*
- 	 * We don't have to mprotect, we will be called for all unshadows.
- 	 * SIE will detect if protection applies and trigger a validity.
-@@ -741,7 +741,7 @@ static int handle_fault(struct kvm_vcpu
- 				    current->thread.gmap_addr, 1);
- 
- 	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--				   current->thread.gmap_addr);
-+				   current->thread.gmap_addr, NULL);
- 	if (rc > 0) {
- 		rc = inject_fault(vcpu, rc,
- 				  current->thread.gmap_addr,
-@@ -763,7 +763,7 @@ static void handle_last_fault(struct kvm
- {
- 	if (vsie_page->fault_addr)
- 		kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--				      vsie_page->fault_addr);
-+				      vsie_page->fault_addr, NULL);
- 	vsie_page->fault_addr = 0;
- }
- 
diff --git a/queue-4.19/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch b/queue-4.19/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch
deleted file mode 100644
index 327a3e9..0000000
--- a/queue-4.19/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From bdf7509bbefa20855d5f6bacdc5b62a8489477c9 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 1 Feb 2021 21:54:13 +0100
-Subject: KVM: s390: VSIE: correctly handle MVPG when in VSIE
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit bdf7509bbefa20855d5f6bacdc5b62a8489477c9 upstream.
-
-Correctly handle the MVPG instruction when issued by a VSIE guest.
-
-Fixes: a3508fbe9dc6d ("KVM: s390: vsie: initial support for nested virtualization")
-Cc: stable@vger.kernel.org # f85f1baaa189: KVM: s390: split kvm_s390_logical_to_effective
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Acked-by: Janosch Frank <frankja@linux.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Link: https://lore.kernel.org/r/20210302174443.514363-4-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com: apply fixup from Claudio]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/vsie.c |   98 ++++++++++++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 93 insertions(+), 5 deletions(-)
-
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -252,11 +252,6 @@ static void unshadow_scb(struct kvm_vcpu
- 		memcpy((void *)((u64)scb_o + 0xc0),
- 		       (void *)((u64)scb_s + 0xc0), 0xf0 - 0xc0);
- 		break;
--	case ICPT_PARTEXEC:
--		/* MVPG only */
--		memcpy((void *)((u64)scb_o + 0xc0),
--		       (void *)((u64)scb_s + 0xc0), 0xd0 - 0xc0);
--		break;
- 	}
- 
- 	if (scb_s->ihcpu != 0xffffU)
-@@ -816,6 +811,95 @@ static int handle_stfle(struct kvm_vcpu
- }
- 
- /*
-+ * Get a register for a nested guest.
-+ * @vcpu the vcpu of the guest
-+ * @vsie_page the vsie_page for the nested guest
-+ * @reg the register number, the upper 4 bits are ignored.
-+ * returns: the value of the register.
-+ */
-+static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, u8 reg)
-+{
-+	/* no need to validate the parameter and/or perform error handling */
-+	reg &= 0xf;
-+	switch (reg) {
-+	case 15:
-+		return vsie_page->scb_s.gg15;
-+	case 14:
-+		return vsie_page->scb_s.gg14;
-+	default:
-+		return vcpu->run->s.regs.gprs[reg];
-+	}
-+}
-+
-+static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
-+{
-+	struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
-+	unsigned long pei_dest, pei_src, src, dest, mask;
-+	u64 *pei_block = &vsie_page->scb_o->mcic;
-+	int edat, rc_dest, rc_src;
-+	union ctlreg0 cr0;
-+
-+	cr0.val = vcpu->arch.sie_block->gcr[0];
-+	edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
-+	mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK);
-+
-+	dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
-+	src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
-+
-+	rc_dest = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, dest, &pei_dest);
-+	rc_src = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, src, &pei_src);
-+	/*
-+	 * Either everything went well, or something non-critical went wrong
-+	 * e.g. because of a race. In either case, simply retry.
-+	 */
-+	if (rc_dest == -EAGAIN || rc_src == -EAGAIN || (!rc_dest && !rc_src)) {
-+		retry_vsie_icpt(vsie_page);
-+		return -EAGAIN;
-+	}
-+	/* Something more serious went wrong, propagate the error */
-+	if (rc_dest < 0)
-+		return rc_dest;
-+	if (rc_src < 0)
-+		return rc_src;
-+
-+	/* The only possible suppressing exception: just deliver it */
-+	if (rc_dest == PGM_TRANSLATION_SPEC || rc_src == PGM_TRANSLATION_SPEC) {
-+		clear_vsie_icpt(vsie_page);
-+		rc_dest = kvm_s390_inject_program_int(vcpu, PGM_TRANSLATION_SPEC);
-+		WARN_ON_ONCE(rc_dest);
-+		return 1;
-+	}
-+
-+	/*
-+	 * Forward the PEI intercept to the guest if it was a page fault, or
-+	 * also for segment and region table faults if EDAT applies.
-+	 */
-+	if (edat) {
-+		rc_dest = rc_dest == PGM_ASCE_TYPE ? rc_dest : 0;
-+		rc_src = rc_src == PGM_ASCE_TYPE ? rc_src : 0;
-+	} else {
-+		rc_dest = rc_dest != PGM_PAGE_TRANSLATION ? rc_dest : 0;
-+		rc_src = rc_src != PGM_PAGE_TRANSLATION ? rc_src : 0;
-+	}
-+	if (!rc_dest && !rc_src) {
-+		pei_block[0] = pei_dest;
-+		pei_block[1] = pei_src;
-+		return 1;
-+	}
-+
-+	retry_vsie_icpt(vsie_page);
-+
-+	/*
-+	 * The host has edat, and the guest does not, or it was an ASCE type
-+	 * exception. The host needs to inject the appropriate DAT interrupts
-+	 * into the guest.
-+	 */
-+	if (rc_dest)
-+		return inject_fault(vcpu, rc_dest, dest, 1);
-+	return inject_fault(vcpu, rc_src, src, 0);
-+}
-+
-+/*
-  * Run the vsie on a shadow scb and a shadow gmap, without any further
-  * sanity checks, handling SIE faults.
-  *
-@@ -895,6 +979,10 @@ static int do_vsie_run(struct kvm_vcpu *
- 		if ((scb_s->ipa & 0xf000) != 0xf000)
- 			scb_s->ipa += 0x1000;
- 		break;
-+	case ICPT_PARTEXEC:
-+		if (scb_s->ipa == 0xb254)
-+			rc = vsie_handle_mvpg(vcpu, vsie_page);
-+		break;
- 	}
- 	return rc;
- }
diff --git a/queue-4.19/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch b/queue-4.19/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch
deleted file mode 100644
index 5863706..0000000
--- a/queue-4.19/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From c3171e94cc1cdcc3229565244112e869f052b8d9 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 22 Mar 2021 15:05:59 +0100
-Subject: KVM: s390: VSIE: fix MVPG handling for prefixing and MSO
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit c3171e94cc1cdcc3229565244112e869f052b8d9 upstream.
-
-Prefixing needs to be applied to the guest real address to translate it
-into a guest absolute address.
-
-The value of MSO needs to be added to a guest-absolute address in order to
-obtain the host-virtual.
-
-Fixes: bdf7509bbefa ("s390/kvm: VSIE: correctly handle MVPG when in VSIE")
-Reported-by: Janosch Frank <frankja@linux.ibm.com>
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Cc: stable@vger.kernel.org
-Link: https://lore.kernel.org/r/20210322140559.500716-3-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com simplify mso]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/vsie.c |    5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -834,7 +834,7 @@ static u64 vsie_get_register(struct kvm_
- static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
- {
- 	struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
--	unsigned long pei_dest, pei_src, src, dest, mask;
-+	unsigned long pei_dest, pei_src, src, dest, mask, prefix;
- 	u64 *pei_block = &vsie_page->scb_o->mcic;
- 	int edat, rc_dest, rc_src;
- 	union ctlreg0 cr0;
-@@ -842,9 +842,12 @@ static int vsie_handle_mvpg(struct kvm_v
- 	cr0.val = vcpu->arch.sie_block->gcr[0];
- 	edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
- 	mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK);
-+	prefix = scb_s->prefix << GUEST_PREFIX_SHIFT;
- 
- 	dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
-+	dest = _kvm_s390_real_to_abs(prefix, dest) + scb_s->mso;
- 	src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
-+	src = _kvm_s390_real_to_abs(prefix, src) + scb_s->mso;
- 
- 	rc_dest = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, dest, &pei_dest);
- 	rc_src = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, src, &pei_src);
diff --git a/queue-5.4/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch b/queue-5.4/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch
deleted file mode 100644
index dec4c0f..0000000
--- a/queue-5.4/kvm-s390-extend-kvm_s390_shadow_fault-to-return-entry-pointer.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-From 5ac14bac08ae827b619f21bcceaaac3b8c497e31 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 1 Feb 2021 17:26:54 +0100
-Subject: KVM: s390: extend kvm_s390_shadow_fault to return entry pointer
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit 5ac14bac08ae827b619f21bcceaaac3b8c497e31 upstream.
-
-Extend kvm_s390_shadow_fault to return the pointer to the valid leaf
-DAT table entry, or to the invalid entry.
-
-Also return some flags in the lower bits of the address:
-PEI_DAT_PROT: indicates that DAT protection applies because of the
-              protection bit in the segment (or, if EDAT, region) tables.
-PEI_NOT_PTE: indicates that the address of the DAT table entry returned
-             does not refer to a PTE, but to a segment or region table.
-
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Cc: stable@vger.kernel.org
-Reviewed-by: Janosch Frank <frankja@de.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Link: https://lore.kernel.org/r/20210302174443.514363-3-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com: fold in a fix from Claudio]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/gaccess.c |   30 +++++++++++++++++++++++++-----
- arch/s390/kvm/gaccess.h |    6 +++++-
- arch/s390/kvm/vsie.c    |    8 ++++----
- 3 files changed, 34 insertions(+), 10 deletions(-)
-
---- a/arch/s390/kvm/gaccess.c
-+++ b/arch/s390/kvm/gaccess.c
-@@ -976,7 +976,9 @@ int kvm_s390_check_low_addr_prot_real(st
-  * kvm_s390_shadow_tables - walk the guest page table and create shadow tables
-  * @sg: pointer to the shadow guest address space structure
-  * @saddr: faulting address in the shadow gmap
-- * @pgt: pointer to the page table address result
-+ * @pgt: pointer to the beginning of the page table for the given address if
-+ *	 successful (return value 0), or to the first invalid DAT entry in
-+ *	 case of exceptions (return value > 0)
-  * @fake: pgt references contiguous guest memory block, not a pgtable
-  */
- static int kvm_s390_shadow_tables(struct gmap *sg, unsigned long saddr,
-@@ -1034,6 +1036,7 @@ static int kvm_s390_shadow_tables(struct
- 			rfte.val = ptr;
- 			goto shadow_r2t;
- 		}
-+		*pgt = ptr + vaddr.rfx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rfx * 8, &rfte.val);
- 		if (rc)
- 			return rc;
-@@ -1059,6 +1062,7 @@ shadow_r2t:
- 			rste.val = ptr;
- 			goto shadow_r3t;
- 		}
-+		*pgt = ptr + vaddr.rsx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rsx * 8, &rste.val);
- 		if (rc)
- 			return rc;
-@@ -1085,6 +1089,7 @@ shadow_r3t:
- 			rtte.val = ptr;
- 			goto shadow_sgt;
- 		}
-+		*pgt = ptr + vaddr.rtx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.rtx * 8, &rtte.val);
- 		if (rc)
- 			return rc;
-@@ -1120,6 +1125,7 @@ shadow_sgt:
- 			ste.val = ptr;
- 			goto shadow_pgt;
- 		}
-+		*pgt = ptr + vaddr.sx * 8;
- 		rc = gmap_read_table(parent, ptr + vaddr.sx * 8, &ste.val);
- 		if (rc)
- 			return rc;
-@@ -1154,6 +1160,8 @@ shadow_pgt:
-  * @vcpu: virtual cpu
-  * @sg: pointer to the shadow guest address space structure
-  * @saddr: faulting address in the shadow gmap
-+ * @datptr: will contain the address of the faulting DAT table entry, or of
-+ *	    the valid leaf, plus some flags
-  *
-  * Returns: - 0 if the shadow fault was successfully resolved
-  *	    - > 0 (pgm exception code) on exceptions while faulting
-@@ -1162,11 +1170,11 @@ shadow_pgt:
-  *	    - -ENOMEM if out of memory
-  */
- int kvm_s390_shadow_fault(struct kvm_vcpu *vcpu, struct gmap *sg,
--			  unsigned long saddr)
-+			  unsigned long saddr, unsigned long *datptr)
- {
- 	union vaddress vaddr;
- 	union page_table_entry pte;
--	unsigned long pgt;
-+	unsigned long pgt = 0;
- 	int dat_protection, fake;
- 	int rc;
- 
-@@ -1188,8 +1196,20 @@ int kvm_s390_shadow_fault(struct kvm_vcp
- 		pte.val = pgt + vaddr.px * PAGE_SIZE;
- 		goto shadow_page;
- 	}
--	if (!rc)
--		rc = gmap_read_table(sg->parent, pgt + vaddr.px * 8, &pte.val);
-+
-+	switch (rc) {
-+	case PGM_SEGMENT_TRANSLATION:
-+	case PGM_REGION_THIRD_TRANS:
-+	case PGM_REGION_SECOND_TRANS:
-+	case PGM_REGION_FIRST_TRANS:
-+		pgt |= PEI_NOT_PTE;
-+		break;
-+	case 0:
-+		pgt += vaddr.px * 8;
-+		rc = gmap_read_table(sg->parent, pgt, &pte.val);
-+	}
-+	if (datptr)
-+		*datptr = pgt | dat_protection * PEI_DAT_PROT;
- 	if (!rc && pte.i)
- 		rc = PGM_PAGE_TRANSLATION;
- 	if (!rc && pte.z)
---- a/arch/s390/kvm/gaccess.h
-+++ b/arch/s390/kvm/gaccess.h
-@@ -387,7 +387,11 @@ void ipte_unlock(struct kvm_vcpu *vcpu);
- int ipte_lock_held(struct kvm_vcpu *vcpu);
- int kvm_s390_check_low_addr_prot_real(struct kvm_vcpu *vcpu, unsigned long gra);
- 
-+/* MVPG PEI indication bits */
-+#define PEI_DAT_PROT 2
-+#define PEI_NOT_PTE 4
-+
- int kvm_s390_shadow_fault(struct kvm_vcpu *vcpu, struct gmap *shadow,
--			  unsigned long saddr);
-+			  unsigned long saddr, unsigned long *datptr);
- 
- #endif /* __KVM_S390_GACCESS_H */
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -613,10 +613,10 @@ static int map_prefix(struct kvm_vcpu *v
- 	/* with mso/msl, the prefix lies at offset *mso* */
- 	prefix += scb_s->mso;
- 
--	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, prefix);
-+	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, prefix, NULL);
- 	if (!rc && (scb_s->ecb & ECB_TE))
- 		rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--					   prefix + PAGE_SIZE);
-+					   prefix + PAGE_SIZE, NULL);
- 	/*
- 	 * We don't have to mprotect, we will be called for all unshadows.
- 	 * SIE will detect if protection applies and trigger a validity.
-@@ -907,7 +907,7 @@ static int handle_fault(struct kvm_vcpu
- 				    current->thread.gmap_addr, 1);
- 
- 	rc = kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--				   current->thread.gmap_addr);
-+				   current->thread.gmap_addr, NULL);
- 	if (rc > 0) {
- 		rc = inject_fault(vcpu, rc,
- 				  current->thread.gmap_addr,
-@@ -929,7 +929,7 @@ static void handle_last_fault(struct kvm
- {
- 	if (vsie_page->fault_addr)
- 		kvm_s390_shadow_fault(vcpu, vsie_page->gmap,
--				      vsie_page->fault_addr);
-+				      vsie_page->fault_addr, NULL);
- 	vsie_page->fault_addr = 0;
- }
- 
diff --git a/queue-5.4/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch b/queue-5.4/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch
deleted file mode 100644
index 1d58dd8..0000000
--- a/queue-5.4/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From bdf7509bbefa20855d5f6bacdc5b62a8489477c9 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 1 Feb 2021 21:54:13 +0100
-Subject: KVM: s390: VSIE: correctly handle MVPG when in VSIE
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit bdf7509bbefa20855d5f6bacdc5b62a8489477c9 upstream.
-
-Correctly handle the MVPG instruction when issued by a VSIE guest.
-
-Fixes: a3508fbe9dc6d ("KVM: s390: vsie: initial support for nested virtualization")
-Cc: stable@vger.kernel.org # f85f1baaa189: KVM: s390: split kvm_s390_logical_to_effective
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Acked-by: Janosch Frank <frankja@linux.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Link: https://lore.kernel.org/r/20210302174443.514363-4-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com: apply fixup from Claudio]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/vsie.c |   98 ++++++++++++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 93 insertions(+), 5 deletions(-)
-
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -416,11 +416,6 @@ static void unshadow_scb(struct kvm_vcpu
- 		memcpy((void *)((u64)scb_o + 0xc0),
- 		       (void *)((u64)scb_s + 0xc0), 0xf0 - 0xc0);
- 		break;
--	case ICPT_PARTEXEC:
--		/* MVPG only */
--		memcpy((void *)((u64)scb_o + 0xc0),
--		       (void *)((u64)scb_s + 0xc0), 0xd0 - 0xc0);
--		break;
- 	}
- 
- 	if (scb_s->ihcpu != 0xffffU)
-@@ -982,6 +977,95 @@ static int handle_stfle(struct kvm_vcpu
- }
- 
- /*
-+ * Get a register for a nested guest.
-+ * @vcpu the vcpu of the guest
-+ * @vsie_page the vsie_page for the nested guest
-+ * @reg the register number, the upper 4 bits are ignored.
-+ * returns: the value of the register.
-+ */
-+static u64 vsie_get_register(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page, u8 reg)
-+{
-+	/* no need to validate the parameter and/or perform error handling */
-+	reg &= 0xf;
-+	switch (reg) {
-+	case 15:
-+		return vsie_page->scb_s.gg15;
-+	case 14:
-+		return vsie_page->scb_s.gg14;
-+	default:
-+		return vcpu->run->s.regs.gprs[reg];
-+	}
-+}
-+
-+static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
-+{
-+	struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
-+	unsigned long pei_dest, pei_src, src, dest, mask;
-+	u64 *pei_block = &vsie_page->scb_o->mcic;
-+	int edat, rc_dest, rc_src;
-+	union ctlreg0 cr0;
-+
-+	cr0.val = vcpu->arch.sie_block->gcr[0];
-+	edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
-+	mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK);
-+
-+	dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
-+	src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
-+
-+	rc_dest = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, dest, &pei_dest);
-+	rc_src = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, src, &pei_src);
-+	/*
-+	 * Either everything went well, or something non-critical went wrong
-+	 * e.g. because of a race. In either case, simply retry.
-+	 */
-+	if (rc_dest == -EAGAIN || rc_src == -EAGAIN || (!rc_dest && !rc_src)) {
-+		retry_vsie_icpt(vsie_page);
-+		return -EAGAIN;
-+	}
-+	/* Something more serious went wrong, propagate the error */
-+	if (rc_dest < 0)
-+		return rc_dest;
-+	if (rc_src < 0)
-+		return rc_src;
-+
-+	/* The only possible suppressing exception: just deliver it */
-+	if (rc_dest == PGM_TRANSLATION_SPEC || rc_src == PGM_TRANSLATION_SPEC) {
-+		clear_vsie_icpt(vsie_page);
-+		rc_dest = kvm_s390_inject_program_int(vcpu, PGM_TRANSLATION_SPEC);
-+		WARN_ON_ONCE(rc_dest);
-+		return 1;
-+	}
-+
-+	/*
-+	 * Forward the PEI intercept to the guest if it was a page fault, or
-+	 * also for segment and region table faults if EDAT applies.
-+	 */
-+	if (edat) {
-+		rc_dest = rc_dest == PGM_ASCE_TYPE ? rc_dest : 0;
-+		rc_src = rc_src == PGM_ASCE_TYPE ? rc_src : 0;
-+	} else {
-+		rc_dest = rc_dest != PGM_PAGE_TRANSLATION ? rc_dest : 0;
-+		rc_src = rc_src != PGM_PAGE_TRANSLATION ? rc_src : 0;
-+	}
-+	if (!rc_dest && !rc_src) {
-+		pei_block[0] = pei_dest;
-+		pei_block[1] = pei_src;
-+		return 1;
-+	}
-+
-+	retry_vsie_icpt(vsie_page);
-+
-+	/*
-+	 * The host has edat, and the guest does not, or it was an ASCE type
-+	 * exception. The host needs to inject the appropriate DAT interrupts
-+	 * into the guest.
-+	 */
-+	if (rc_dest)
-+		return inject_fault(vcpu, rc_dest, dest, 1);
-+	return inject_fault(vcpu, rc_src, src, 0);
-+}
-+
-+/*
-  * Run the vsie on a shadow scb and a shadow gmap, without any further
-  * sanity checks, handling SIE faults.
-  *
-@@ -1072,6 +1156,10 @@ static int do_vsie_run(struct kvm_vcpu *
- 		if ((scb_s->ipa & 0xf000) != 0xf000)
- 			scb_s->ipa += 0x1000;
- 		break;
-+	case ICPT_PARTEXEC:
-+		if (scb_s->ipa == 0xb254)
-+			rc = vsie_handle_mvpg(vcpu, vsie_page);
-+		break;
- 	}
- 	return rc;
- }
diff --git a/queue-5.4/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch b/queue-5.4/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch
deleted file mode 100644
index 1dd4e4e..0000000
--- a/queue-5.4/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From c3171e94cc1cdcc3229565244112e869f052b8d9 Mon Sep 17 00:00:00 2001
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Date: Mon, 22 Mar 2021 15:05:59 +0100
-Subject: KVM: s390: VSIE: fix MVPG handling for prefixing and MSO
-
-From: Claudio Imbrenda <imbrenda@linux.ibm.com>
-
-commit c3171e94cc1cdcc3229565244112e869f052b8d9 upstream.
-
-Prefixing needs to be applied to the guest real address to translate it
-into a guest absolute address.
-
-The value of MSO needs to be added to a guest-absolute address in order to
-obtain the host-virtual.
-
-Fixes: bdf7509bbefa ("s390/kvm: VSIE: correctly handle MVPG when in VSIE")
-Reported-by: Janosch Frank <frankja@linux.ibm.com>
-Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Cc: stable@vger.kernel.org
-Link: https://lore.kernel.org/r/20210322140559.500716-3-imbrenda@linux.ibm.com
-[borntraeger@de.ibm.com simplify mso]
-Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/s390/kvm/vsie.c |    5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- a/arch/s390/kvm/vsie.c
-+++ b/arch/s390/kvm/vsie.c
-@@ -1000,7 +1000,7 @@ static u64 vsie_get_register(struct kvm_
- static int vsie_handle_mvpg(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
- {
- 	struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
--	unsigned long pei_dest, pei_src, src, dest, mask;
-+	unsigned long pei_dest, pei_src, src, dest, mask, prefix;
- 	u64 *pei_block = &vsie_page->scb_o->mcic;
- 	int edat, rc_dest, rc_src;
- 	union ctlreg0 cr0;
-@@ -1008,9 +1008,12 @@ static int vsie_handle_mvpg(struct kvm_v
- 	cr0.val = vcpu->arch.sie_block->gcr[0];
- 	edat = cr0.edat && test_kvm_facility(vcpu->kvm, 8);
- 	mask = _kvm_s390_logical_to_effective(&scb_s->gpsw, PAGE_MASK);
-+	prefix = scb_s->prefix << GUEST_PREFIX_SHIFT;
- 
- 	dest = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 20) & mask;
-+	dest = _kvm_s390_real_to_abs(prefix, dest) + scb_s->mso;
- 	src = vsie_get_register(vcpu, vsie_page, scb_s->ipb >> 16) & mask;
-+	src = _kvm_s390_real_to_abs(prefix, src) + scb_s->mso;
- 
- 	rc_dest = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, dest, &pei_dest);
- 	rc_src = kvm_s390_shadow_fault(vcpu, vsie_page->gmap, src, &pei_src);
