From: Greg Kroah-Hartman Date: Mon, 7 Dec 2015 13:43:31 +0000 (-0500) Subject: 4.2-stable patches X-Git-Tag: v3.10.94~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d124df05c6604d302bc472ba02a9635fd3248e76;p=thirdparty%2Fkernel%2Fstable-queue.git 4.2-stable patches added patches: kvm-s390-enable-simd-only-when-no-vcpus-were-created.patch xen-events-always-allocate-legacy-interrupts-on-pv-guests.patch --- diff --git a/queue-4.2/kvm-s390-enable-simd-only-when-no-vcpus-were-created.patch b/queue-4.2/kvm-s390-enable-simd-only-when-no-vcpus-were-created.patch new file mode 100644 index 00000000000..9fab19cc265 --- /dev/null +++ b/queue-4.2/kvm-s390-enable-simd-only-when-no-vcpus-were-created.patch @@ -0,0 +1,47 @@ +From 5967c17b118a2bd1dd1d554cc4eee16233e52bec Mon Sep 17 00:00:00 2001 +From: David Hildenbrand +Date: Fri, 6 Nov 2015 12:08:48 +0100 +Subject: KVM: s390: enable SIMD only when no VCPUs were created + +From: David Hildenbrand + +commit 5967c17b118a2bd1dd1d554cc4eee16233e52bec upstream. + +We should never allow to enable/disable any facilities for the guest +when other VCPUs were already created. + +kvm_arch_vcpu_(load|put) relies on SIMD not changing during runtime. +If somebody would create and run VCPUs and then decides to enable +SIMD, undefined behaviour could be possible (e.g. vector save area +not being set up). + +Acked-by: Christian Borntraeger +Acked-by: Cornelia Huck +Signed-off-by: David Hildenbrand +Signed-off-by: Christian Borntraeger +Signed-off-by: Greg Kroah-Hartman + +--- + arch/s390/kvm/kvm-s390.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- a/arch/s390/kvm/kvm-s390.c ++++ b/arch/s390/kvm/kvm-s390.c +@@ -289,12 +289,16 @@ static int kvm_vm_ioctl_enable_cap(struc + r = 0; + break; + case KVM_CAP_S390_VECTOR_REGISTERS: +- if (MACHINE_HAS_VX) { ++ mutex_lock(&kvm->lock); ++ if (atomic_read(&kvm->online_vcpus)) { ++ r = -EBUSY; ++ } else if (MACHINE_HAS_VX) { + set_kvm_facility(kvm->arch.model.fac->mask, 129); + set_kvm_facility(kvm->arch.model.fac->list, 129); + r = 0; + } else + r = -EINVAL; ++ mutex_unlock(&kvm->lock); + break; + case KVM_CAP_S390_USER_STSI: + kvm->arch.user_stsi = 1; diff --git a/queue-4.2/series b/queue-4.2/series index 109cc453301..c677ea5bcd8 100644 --- a/queue-4.2/series +++ b/queue-4.2/series @@ -120,3 +120,5 @@ tty-audit-fix-audit-source.patch tty-fix-tty_send_xchar-lock-order-inversion.patch xhci-workaround-to-get-intel-xhci-reset-working-more-reliably.patch staging-lustre-use-jiffies-for-lp_last_query-times.patch +xen-events-always-allocate-legacy-interrupts-on-pv-guests.patch +kvm-s390-enable-simd-only-when-no-vcpus-were-created.patch diff --git a/queue-4.2/xen-events-always-allocate-legacy-interrupts-on-pv-guests.patch b/queue-4.2/xen-events-always-allocate-legacy-interrupts-on-pv-guests.patch new file mode 100644 index 00000000000..41c0f3b14c3 --- /dev/null +++ b/queue-4.2/xen-events-always-allocate-legacy-interrupts-on-pv-guests.patch @@ -0,0 +1,81 @@ +From b4ff8389ed14b849354b59ce9b360bdefcdbf99c Mon Sep 17 00:00:00 2001 +From: Boris Ostrovsky +Date: Fri, 20 Nov 2015 11:25:04 -0500 +Subject: xen/events: Always allocate legacy interrupts on PV guests + +From: Boris Ostrovsky + +commit b4ff8389ed14b849354b59ce9b360bdefcdbf99c upstream. + +After commit 8c058b0b9c34 ("x86/irq: Probe for PIC presence before +allocating descs for legacy IRQs") early_irq_init() will no longer +preallocate descriptors for legacy interrupts if PIC does not +exist, which is the case for Xen PV guests. + +Therefore we may need to allocate those descriptors ourselves. + +Signed-off-by: Boris Ostrovsky +Suggested-by: Thomas Gleixner +Signed-off-by: David Vrabel +Cc: Vitaly Kuznetsov +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/include/asm/irq.h | 5 +++++ + arch/arm64/include/asm/irq.h | 5 +++++ + drivers/xen/events/events_base.c | 5 +++-- + 3 files changed, 13 insertions(+), 2 deletions(-) + +--- a/arch/arm/include/asm/irq.h ++++ b/arch/arm/include/asm/irq.h +@@ -37,5 +37,10 @@ extern void set_handle_irq(void (*handle + + #endif + ++static inline int nr_legacy_irqs(void) ++{ ++ return NR_IRQS_LEGACY; ++} ++ + #endif + +--- a/arch/arm64/include/asm/irq.h ++++ b/arch/arm64/include/asm/irq.h +@@ -21,4 +21,9 @@ static inline void acpi_irq_init(void) + } + #define acpi_irq_init acpi_irq_init + ++static inline int nr_legacy_irqs(void) ++{ ++ return 0; ++} ++ + #endif +--- a/drivers/xen/events/events_base.c ++++ b/drivers/xen/events/events_base.c +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + #include + #include + #endif +@@ -420,7 +421,7 @@ static int __must_check xen_allocate_irq + return xen_allocate_irq_dynamic(); + + /* Legacy IRQ descriptors are already allocated by the arch. */ +- if (gsi < NR_IRQS_LEGACY) ++ if (gsi < nr_legacy_irqs()) + irq = gsi; + else + irq = irq_alloc_desc_at(gsi, -1); +@@ -446,7 +447,7 @@ static void xen_free_irq(unsigned irq) + kfree(info); + + /* Legacy IRQ descriptors are managed by the arch. */ +- if (irq < NR_IRQS_LEGACY) ++ if (irq < nr_legacy_irqs()) + return; + + irq_free_desc(irq);