From: Greg Kroah-Hartman Date: Wed, 12 May 2021 11:55:28 +0000 (+0200) Subject: drop some kvm s390 4.9 patches X-Git-Tag: v5.4.119~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=883d4ac7ab1badf9bc84c0b0b4832ced557b4c7f;p=thirdparty%2Fkernel%2Fstable-queue.git drop some kvm s390 4.9 patches --- diff --git a/queue-4.9/kvm-s390-split-kvm_s390_real_to_abs.patch b/queue-4.9/kvm-s390-split-kvm_s390_real_to_abs.patch deleted file mode 100644 index 76a119a20e7..00000000000 --- a/queue-4.9/kvm-s390-split-kvm_s390_real_to_abs.patch +++ /dev/null @@ -1,71 +0,0 @@ -From c5d1f6b531e68888cbe6718b3f77a60115d58b9c Mon Sep 17 00:00:00 2001 -From: Claudio Imbrenda -Date: Mon, 22 Mar 2021 15:05:58 +0100 -Subject: KVM: s390: split kvm_s390_real_to_abs - -From: Claudio Imbrenda - -commit c5d1f6b531e68888cbe6718b3f77a60115d58b9c upstream. - -A new function _kvm_s390_real_to_abs will apply prefixing to a real address -with a given prefix value. - -The old kvm_s390_real_to_abs becomes now a wrapper around the new function. - -This is needed to avoid code duplication in vSIE. - -Signed-off-by: Claudio Imbrenda -Reviewed-by: David Hildenbrand -Reviewed-by: Thomas Huth -Cc: stable@vger.kernel.org -Link: https://lore.kernel.org/r/20210322140559.500716-2-imbrenda@linux.ibm.com -Signed-off-by: Christian Borntraeger -Signed-off-by: Greg Kroah-Hartman ---- - arch/s390/kvm/gaccess.h | 23 +++++++++++++++++------ - 1 file changed, 17 insertions(+), 6 deletions(-) - ---- a/arch/s390/kvm/gaccess.h -+++ b/arch/s390/kvm/gaccess.h -@@ -21,17 +21,14 @@ - - /** - * kvm_s390_real_to_abs - convert guest real address to guest absolute address -- * @vcpu - guest virtual cpu -+ * @prefix - guest prefix - * @gra - guest real address - * - * Returns the guest absolute address that corresponds to the passed guest real -- * address @gra of a virtual guest cpu by applying its prefix. -+ * address @gra of by applying the given prefix. - */ --static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu, -- unsigned long gra) -+static inline unsigned long _kvm_s390_real_to_abs(u32 prefix, unsigned long gra) - { -- unsigned long prefix = kvm_s390_get_prefix(vcpu); -- - if (gra < 2 * PAGE_SIZE) - gra += prefix; - else if (gra >= prefix && gra < prefix + 2 * PAGE_SIZE) -@@ -40,6 +37,20 @@ static inline unsigned long kvm_s390_rea - } - - /** -+ * kvm_s390_real_to_abs - convert guest real address to guest absolute address -+ * @vcpu - guest virtual cpu -+ * @gra - guest real address -+ * -+ * Returns the guest absolute address that corresponds to the passed guest real -+ * address @gra of a virtual guest cpu by applying its prefix. -+ */ -+static inline unsigned long kvm_s390_real_to_abs(struct kvm_vcpu *vcpu, -+ unsigned long gra) -+{ -+ return _kvm_s390_real_to_abs(kvm_s390_get_prefix(vcpu), gra); -+} -+ -+/** - * kvm_s390_logical_to_effective - convert guest logical to effective address - * @vcpu: guest virtual cpu - * @ga: guest logical address diff --git a/queue-4.9/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch b/queue-4.9/kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch deleted file mode 100644 index 64fa96ad19e..00000000000 --- a/queue-4.9/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 -Date: Mon, 1 Feb 2021 21:54:13 +0100 -Subject: KVM: s390: VSIE: correctly handle MVPG when in VSIE - -From: Claudio Imbrenda - -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 -Acked-by: Janosch Frank -Reviewed-by: David Hildenbrand -Acked-by: Christian Borntraeger -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 -Signed-off-by: Greg Kroah-Hartman ---- - 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 -@@ -232,11 +232,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) -@@ -754,6 +749,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. - * -@@ -825,6 +909,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.9/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch b/queue-4.9/kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch deleted file mode 100644 index 4db00d3dbf5..00000000000 --- a/queue-4.9/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 -Date: Mon, 22 Mar 2021 15:05:59 +0100 -Subject: KVM: s390: VSIE: fix MVPG handling for prefixing and MSO - -From: Claudio Imbrenda - -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 -Signed-off-by: Claudio Imbrenda -Reviewed-by: David Hildenbrand -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 -Signed-off-by: Greg Kroah-Hartman ---- - 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 -@@ -772,7 +772,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; -@@ -780,9 +780,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.9/series b/queue-4.9/series index 551ead7218a..a1080662f23 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -89,7 +89,4 @@ alsa-hda-realtek-re-order-alc882-sony-quirk-table-entries.patch alsa-hda-realtek-re-order-alc269-sony-quirk-table-entries.patch alsa-hda-realtek-re-order-alc269-lenovo-quirk-table-entries.patch alsa-hda-realtek-remove-redundant-entry-for-alc861-haier-uniwill-devices.patch -kvm-s390-vsie-correctly-handle-mvpg-when-in-vsie.patch -kvm-s390-vsie-fix-mvpg-handling-for-prefixing-and-mso.patch -kvm-s390-split-kvm_s390_real_to_abs.patch usb-gadget-pch_udc-revert-d3cb25a12138-completely.patch