]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Jan 2016 00:00:30 +0000 (16:00 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Jan 2016 00:00:30 +0000 (16:00 -0800)
added patches:
kvm-x86-correctly-print-ac-in-traces.patch
kvm-x86-expose-msr_tsc_aux-to-userspace.patch
kvm-x86-fix-vmwrite-to-secondary_vm_exec_control.patch
x86-boot-double-boot_heap_size-to-64kb.patch
x86-mm-add-barriers-and-document-switch_mm-vs-flush-synchronization.patch
x86-mm-improve-switch_mm-barrier-comments.patch
x86-reboot-quirks-add-imac10-1-to-pci_reboot_dmi_table.patch
x86-xen-don-t-reset-vcpu_info-on-a-cancelled-suspend.patch

queue-4.4/kvm-x86-correctly-print-ac-in-traces.patch [new file with mode: 0644]
queue-4.4/kvm-x86-expose-msr_tsc_aux-to-userspace.patch [new file with mode: 0644]
queue-4.4/kvm-x86-fix-vmwrite-to-secondary_vm_exec_control.patch [new file with mode: 0644]
queue-4.4/series
queue-4.4/x86-boot-double-boot_heap_size-to-64kb.patch [new file with mode: 0644]
queue-4.4/x86-mm-add-barriers-and-document-switch_mm-vs-flush-synchronization.patch [new file with mode: 0644]
queue-4.4/x86-mm-improve-switch_mm-barrier-comments.patch [new file with mode: 0644]
queue-4.4/x86-reboot-quirks-add-imac10-1-to-pci_reboot_dmi_table.patch [new file with mode: 0644]
queue-4.4/x86-xen-don-t-reset-vcpu_info-on-a-cancelled-suspend.patch [new file with mode: 0644]

diff --git a/queue-4.4/kvm-x86-correctly-print-ac-in-traces.patch b/queue-4.4/kvm-x86-correctly-print-ac-in-traces.patch
new file mode 100644 (file)
index 0000000..32edafb
--- /dev/null
@@ -0,0 +1,31 @@
+From aba2f06c070f604e388cf77b1dcc7f4cf4577eb0 Mon Sep 17 00:00:00 2001
+From: Paolo Bonzini <pbonzini@redhat.com>
+Date: Thu, 12 Nov 2015 16:42:18 +0100
+Subject: KVM: x86: correctly print #AC in traces
+
+From: Paolo Bonzini <pbonzini@redhat.com>
+
+commit aba2f06c070f604e388cf77b1dcc7f4cf4577eb0 upstream.
+
+Poor #AC was so unimportant until a few days ago that we were
+not even tracing its name correctly.  But now it's all over
+the place.
+
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kvm/trace.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/kvm/trace.h
++++ b/arch/x86/kvm/trace.h
+@@ -268,7 +268,7 @@ TRACE_EVENT(kvm_inj_virq,
+ #define kvm_trace_sym_exc                                             \
+       EXS(DE), EXS(DB), EXS(BP), EXS(OF), EXS(BR), EXS(UD), EXS(NM),  \
+       EXS(DF), EXS(TS), EXS(NP), EXS(SS), EXS(GP), EXS(PF),           \
+-      EXS(MF), EXS(MC)
++      EXS(MF), EXS(AC), EXS(MC)
+ /*
+  * Tracepoint for kvm interrupt injection:
diff --git a/queue-4.4/kvm-x86-expose-msr_tsc_aux-to-userspace.patch b/queue-4.4/kvm-x86-expose-msr_tsc_aux-to-userspace.patch
new file mode 100644 (file)
index 0000000..ce40217
--- /dev/null
@@ -0,0 +1,54 @@
+From 9dbe6cf941a6fe82933aef565e4095fb10f65023 Mon Sep 17 00:00:00 2001
+From: Paolo Bonzini <pbonzini@redhat.com>
+Date: Thu, 12 Nov 2015 14:49:17 +0100
+Subject: KVM: x86: expose MSR_TSC_AUX to userspace
+
+From: Paolo Bonzini <pbonzini@redhat.com>
+
+commit 9dbe6cf941a6fe82933aef565e4095fb10f65023 upstream.
+
+If we do not do this, it is not properly saved and restored across
+migration.  Windows notices due to its self-protection mechanisms,
+and is very upset about it (blue screen of death).
+
+Cc: Radim Krcmar <rkrcmar@redhat.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kvm/x86.c |   11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -951,7 +951,7 @@ static u32 msrs_to_save[] = {
+       MSR_CSTAR, MSR_KERNEL_GS_BASE, MSR_SYSCALL_MASK, MSR_LSTAR,
+ #endif
+       MSR_IA32_TSC, MSR_IA32_CR_PAT, MSR_VM_HSAVE_PA,
+-      MSR_IA32_FEATURE_CONTROL, MSR_IA32_BNDCFGS
++      MSR_IA32_FEATURE_CONTROL, MSR_IA32_BNDCFGS, MSR_TSC_AUX,
+ };
+ static unsigned num_msrs_to_save;
+@@ -4006,16 +4006,17 @@ static void kvm_init_msr_list(void)
+               /*
+                * Even MSRs that are valid in the host may not be exposed
+-               * to the guests in some cases.  We could work around this
+-               * in VMX with the generic MSR save/load machinery, but it
+-               * is not really worthwhile since it will really only
+-               * happen with nested virtualization.
++               * to the guests in some cases.
+                */
+               switch (msrs_to_save[i]) {
+               case MSR_IA32_BNDCFGS:
+                       if (!kvm_x86_ops->mpx_supported())
+                               continue;
+                       break;
++              case MSR_TSC_AUX:
++                      if (!kvm_x86_ops->rdtscp_supported())
++                              continue;
++                      break;
+               default:
+                       break;
+               }
diff --git a/queue-4.4/kvm-x86-fix-vmwrite-to-secondary_vm_exec_control.patch b/queue-4.4/kvm-x86-fix-vmwrite-to-secondary_vm_exec_control.patch
new file mode 100644 (file)
index 0000000..45ed160
--- /dev/null
@@ -0,0 +1,44 @@
+From 45bdbcfdf241149642fb6c25ab0c209d59c371b7 Mon Sep 17 00:00:00 2001
+From: Huaitong Han <huaitong.han@intel.com>
+Date: Tue, 12 Jan 2016 16:04:20 +0800
+Subject: kvm: x86: Fix vmwrite to SECONDARY_VM_EXEC_CONTROL
+
+From: Huaitong Han <huaitong.han@intel.com>
+
+commit 45bdbcfdf241149642fb6c25ab0c209d59c371b7 upstream.
+
+vmx_cpuid_tries to update SECONDARY_VM_EXEC_CONTROL in the VMCS, but
+it will cause a vmwrite error on older CPUs because the code does not
+check for the presence of CPU_BASED_ACTIVATE_SECONDARY_CONTROLS.
+
+This will get rid of the following trace on e.g. Core2 6600:
+
+vmwrite error: reg 401e value 10 (err 12)
+Call Trace:
+[<ffffffff8116e2b9>] dump_stack+0x40/0x57
+[<ffffffffa020b88d>] vmx_cpuid_update+0x5d/0x150 [kvm_intel]
+[<ffffffffa01d8fdc>] kvm_vcpu_ioctl_set_cpuid2+0x4c/0x70 [kvm]
+[<ffffffffa01b8363>] kvm_arch_vcpu_ioctl+0x903/0xfa0 [kvm]
+
+Fixes: feda805fe7c4ed9cf78158e73b1218752e3b4314
+Reported-by: Zdenek Kaspar <zkaspar82@gmail.com>
+Signed-off-by: Huaitong Han <huaitong.han@intel.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kvm/vmx.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/kvm/vmx.c
++++ b/arch/x86/kvm/vmx.c
+@@ -8932,7 +8932,8 @@ static void vmx_cpuid_update(struct kvm_
+                       best->ebx &= ~bit(X86_FEATURE_INVPCID);
+       }
+-      vmcs_set_secondary_exec_control(secondary_exec_ctl);
++      if (cpu_has_secondary_exec_ctrls())
++              vmcs_set_secondary_exec_control(secondary_exec_ctl);
+       if (static_cpu_has(X86_FEATURE_PCOMMIT) && nested) {
+               if (guest_cpuid_has_pcommit(vcpu))
index 3e0e6c7366364fb100747012f5e820c4d28ee979..ce80e98f2041051982d9fbd5b58e89dabded6071 100644 (file)
@@ -1 +1,9 @@
 keys-fix-keyring-ref-leak-in-join_session_keyring.patch
+x86-xen-don-t-reset-vcpu_info-on-a-cancelled-suspend.patch
+kvm-x86-expose-msr_tsc_aux-to-userspace.patch
+kvm-x86-correctly-print-ac-in-traces.patch
+kvm-x86-fix-vmwrite-to-secondary_vm_exec_control.patch
+x86-reboot-quirks-add-imac10-1-to-pci_reboot_dmi_table.patch
+x86-boot-double-boot_heap_size-to-64kb.patch
+x86-mm-add-barriers-and-document-switch_mm-vs-flush-synchronization.patch
+x86-mm-improve-switch_mm-barrier-comments.patch
diff --git a/queue-4.4/x86-boot-double-boot_heap_size-to-64kb.patch b/queue-4.4/x86-boot-double-boot_heap_size-to-64kb.patch
new file mode 100644 (file)
index 0000000..779c462
--- /dev/null
@@ -0,0 +1,43 @@
+From 8c31902cffc4d716450be549c66a67a8a3dd479c Mon Sep 17 00:00:00 2001
+From: "H.J. Lu" <hjl.tools@gmail.com>
+Date: Mon, 4 Jan 2016 10:17:09 -0800
+Subject: x86/boot: Double BOOT_HEAP_SIZE to 64KB
+
+From: "H.J. Lu" <hjl.tools@gmail.com>
+
+commit 8c31902cffc4d716450be549c66a67a8a3dd479c upstream.
+
+When decompressing kernel image during x86 bootup, malloc memory
+for ELF program headers may run out of heap space, which leads
+to system halt.  This patch doubles BOOT_HEAP_SIZE to 64KB.
+
+Tested with 32-bit kernel which failed to boot without this patch.
+
+Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
+Acked-by: H. Peter Anvin <hpa@zytor.com>
+Cc: Andy Lutomirski <luto@amacapital.net>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Brian Gerst <brgerst@gmail.com>
+Cc: Denys Vlasenko <dvlasenk@redhat.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: linux-kernel@vger.kernel.org
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/boot.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/x86/include/asm/boot.h
++++ b/arch/x86/include/asm/boot.h
+@@ -27,7 +27,7 @@
+ #define BOOT_HEAP_SIZE             0x400000
+ #else /* !CONFIG_KERNEL_BZIP2 */
+-#define BOOT_HEAP_SIZE        0x8000
++#define BOOT_HEAP_SIZE        0x10000
+ #endif /* !CONFIG_KERNEL_BZIP2 */
diff --git a/queue-4.4/x86-mm-add-barriers-and-document-switch_mm-vs-flush-synchronization.patch b/queue-4.4/x86-mm-add-barriers-and-document-switch_mm-vs-flush-synchronization.patch
new file mode 100644 (file)
index 0000000..330550d
--- /dev/null
@@ -0,0 +1,158 @@
+From 71b3c126e61177eb693423f2e18a1914205b165e Mon Sep 17 00:00:00 2001
+From: Andy Lutomirski <luto@kernel.org>
+Date: Wed, 6 Jan 2016 12:21:01 -0800
+Subject: x86/mm: Add barriers and document switch_mm()-vs-flush synchronization
+
+From: Andy Lutomirski <luto@kernel.org>
+
+commit 71b3c126e61177eb693423f2e18a1914205b165e upstream.
+
+When switch_mm() activates a new PGD, it also sets a bit that
+tells other CPUs that the PGD is in use so that TLB flush IPIs
+will be sent.  In order for that to work correctly, the bit
+needs to be visible prior to loading the PGD and therefore
+starting to fill the local TLB.
+
+Document all the barriers that make this work correctly and add
+a couple that were missing.
+
+Signed-off-by: Andy Lutomirski <luto@kernel.org>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: Andy Lutomirski <luto@amacapital.net>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Brian Gerst <brgerst@gmail.com>
+Cc: Dave Hansen <dave.hansen@linux.intel.com>
+Cc: Denys Vlasenko <dvlasenk@redhat.com>
+Cc: H. Peter Anvin <hpa@zytor.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Rik van Riel <riel@redhat.com>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: linux-mm@kvack.org
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/mmu_context.h |   33 ++++++++++++++++++++++++++++++++-
+ arch/x86/mm/tlb.c                  |   29 ++++++++++++++++++++++++++---
+ 2 files changed, 58 insertions(+), 4 deletions(-)
+
+--- a/arch/x86/include/asm/mmu_context.h
++++ b/arch/x86/include/asm/mmu_context.h
+@@ -116,8 +116,34 @@ static inline void switch_mm(struct mm_s
+ #endif
+               cpumask_set_cpu(cpu, mm_cpumask(next));
+-              /* Re-load page tables */
++              /*
++               * Re-load page tables.
++               *
++               * This logic has an ordering constraint:
++               *
++               *  CPU 0: Write to a PTE for 'next'
++               *  CPU 0: load bit 1 in mm_cpumask.  if nonzero, send IPI.
++               *  CPU 1: set bit 1 in next's mm_cpumask
++               *  CPU 1: load from the PTE that CPU 0 writes (implicit)
++               *
++               * We need to prevent an outcome in which CPU 1 observes
++               * the new PTE value and CPU 0 observes bit 1 clear in
++               * mm_cpumask.  (If that occurs, then the IPI will never
++               * be sent, and CPU 0's TLB will contain a stale entry.)
++               *
++               * The bad outcome can occur if either CPU's load is
++               * reordered before that CPU's store, so both CPUs much
++               * execute full barriers to prevent this from happening.
++               *
++               * Thus, switch_mm needs a full barrier between the
++               * store to mm_cpumask and any operation that could load
++               * from next->pgd.  This barrier synchronizes with
++               * remote TLB flushers.  Fortunately, load_cr3 is
++               * serializing and thus acts as a full barrier.
++               *
++               */
+               load_cr3(next->pgd);
++
+               trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
+               /* Stop flush ipis for the previous mm */
+@@ -156,10 +182,15 @@ static inline void switch_mm(struct mm_s
+                        * schedule, protecting us from simultaneous changes.
+                        */
+                       cpumask_set_cpu(cpu, mm_cpumask(next));
++
+                       /*
+                        * We were in lazy tlb mode and leave_mm disabled
+                        * tlb flush IPI delivery. We must reload CR3
+                        * to make sure to use no freed page tables.
++                       *
++                       * As above, this is a barrier that forces
++                       * TLB repopulation to be ordered after the
++                       * store to mm_cpumask.
+                        */
+                       load_cr3(next->pgd);
+                       trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
+--- a/arch/x86/mm/tlb.c
++++ b/arch/x86/mm/tlb.c
+@@ -161,7 +161,10 @@ void flush_tlb_current_task(void)
+       preempt_disable();
+       count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
++
++      /* This is an implicit full barrier that synchronizes with switch_mm. */
+       local_flush_tlb();
++
+       trace_tlb_flush(TLB_LOCAL_SHOOTDOWN, TLB_FLUSH_ALL);
+       if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids)
+               flush_tlb_others(mm_cpumask(mm), mm, 0UL, TLB_FLUSH_ALL);
+@@ -188,17 +191,29 @@ void flush_tlb_mm_range(struct mm_struct
+       unsigned long base_pages_to_flush = TLB_FLUSH_ALL;
+       preempt_disable();
+-      if (current->active_mm != mm)
++      if (current->active_mm != mm) {
++              /* Synchronize with switch_mm. */
++              smp_mb();
++
+               goto out;
++      }
+       if (!current->mm) {
+               leave_mm(smp_processor_id());
++
++              /* Synchronize with switch_mm. */
++              smp_mb();
++
+               goto out;
+       }
+       if ((end != TLB_FLUSH_ALL) && !(vmflag & VM_HUGETLB))
+               base_pages_to_flush = (end - start) >> PAGE_SHIFT;
++      /*
++       * Both branches below are implicit full barriers (MOV to CR or
++       * INVLPG) that synchronize with switch_mm.
++       */
+       if (base_pages_to_flush > tlb_single_page_flush_ceiling) {
+               base_pages_to_flush = TLB_FLUSH_ALL;
+               count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
+@@ -228,10 +243,18 @@ void flush_tlb_page(struct vm_area_struc
+       preempt_disable();
+       if (current->active_mm == mm) {
+-              if (current->mm)
++              if (current->mm) {
++                      /*
++                       * Implicit full barrier (INVLPG) that synchronizes
++                       * with switch_mm.
++                       */
+                       __flush_tlb_one(start);
+-              else
++              } else {
+                       leave_mm(smp_processor_id());
++
++                      /* Synchronize with switch_mm. */
++                      smp_mb();
++              }
+       }
+       if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids)
diff --git a/queue-4.4/x86-mm-improve-switch_mm-barrier-comments.patch b/queue-4.4/x86-mm-improve-switch_mm-barrier-comments.patch
new file mode 100644 (file)
index 0000000..e1d071d
--- /dev/null
@@ -0,0 +1,67 @@
+From 4eaffdd5a5fe6ff9f95e1ab4de1ac904d5e0fa8b Mon Sep 17 00:00:00 2001
+From: Andy Lutomirski <luto@kernel.org>
+Date: Tue, 12 Jan 2016 12:47:40 -0800
+Subject: x86/mm: Improve switch_mm() barrier comments
+
+From: Andy Lutomirski <luto@kernel.org>
+
+commit 4eaffdd5a5fe6ff9f95e1ab4de1ac904d5e0fa8b upstream.
+
+My previous comments were still a bit confusing and there was a
+typo. Fix it up.
+
+Reported-by: Peter Zijlstra <peterz@infradead.org>
+Signed-off-by: Andy Lutomirski <luto@kernel.org>
+Cc: Andy Lutomirski <luto@amacapital.net>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Brian Gerst <brgerst@gmail.com>
+Cc: Dave Hansen <dave.hansen@linux.intel.com>
+Cc: Denys Vlasenko <dvlasenk@redhat.com>
+Cc: H. Peter Anvin <hpa@zytor.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Rik van Riel <riel@redhat.com>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Fixes: 71b3c126e611 ("x86/mm: Add barriers and document switch_mm()-vs-flush synchronization")
+Link: http://lkml.kernel.org/r/0a0b43cdcdd241c5faaaecfbcc91a155ddedc9a1.1452631609.git.luto@kernel.org
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/mmu_context.h |   15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+--- a/arch/x86/include/asm/mmu_context.h
++++ b/arch/x86/include/asm/mmu_context.h
+@@ -132,14 +132,16 @@ static inline void switch_mm(struct mm_s
+                * be sent, and CPU 0's TLB will contain a stale entry.)
+                *
+                * The bad outcome can occur if either CPU's load is
+-               * reordered before that CPU's store, so both CPUs much
++               * reordered before that CPU's store, so both CPUs must
+                * execute full barriers to prevent this from happening.
+                *
+                * Thus, switch_mm needs a full barrier between the
+                * store to mm_cpumask and any operation that could load
+-               * from next->pgd.  This barrier synchronizes with
+-               * remote TLB flushers.  Fortunately, load_cr3 is
+-               * serializing and thus acts as a full barrier.
++               * from next->pgd.  TLB fills are special and can happen
++               * due to instruction fetches or for no reason at all,
++               * and neither LOCK nor MFENCE orders them.
++               * Fortunately, load_cr3() is serializing and gives the
++               * ordering guarantee we need.
+                *
+                */
+               load_cr3(next->pgd);
+@@ -188,9 +190,8 @@ static inline void switch_mm(struct mm_s
+                        * tlb flush IPI delivery. We must reload CR3
+                        * to make sure to use no freed page tables.
+                        *
+-                       * As above, this is a barrier that forces
+-                       * TLB repopulation to be ordered after the
+-                       * store to mm_cpumask.
++                       * As above, load_cr3() is serializing and orders TLB
++                       * fills with respect to the mm_cpumask write.
+                        */
+                       load_cr3(next->pgd);
+                       trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL);
diff --git a/queue-4.4/x86-reboot-quirks-add-imac10-1-to-pci_reboot_dmi_table.patch b/queue-4.4/x86-reboot-quirks-add-imac10-1-to-pci_reboot_dmi_table.patch
new file mode 100644 (file)
index 0000000..5e6f3a3
--- /dev/null
@@ -0,0 +1,48 @@
+From 2f0c0b2d96b1205efb14347009748d786c2d9ba5 Mon Sep 17 00:00:00 2001
+From: Mario Kleiner <mario.kleiner.de@gmail.com>
+Date: Fri, 18 Dec 2015 20:24:06 +0100
+Subject: x86/reboot/quirks: Add iMac10,1 to pci_reboot_dmi_table[]
+
+From: Mario Kleiner <mario.kleiner.de@gmail.com>
+
+commit 2f0c0b2d96b1205efb14347009748d786c2d9ba5 upstream.
+
+Without the reboot=pci method, the iMac 10,1 simply
+hangs after printing "Restarting system" at the point
+when it should reboot. This fixes it.
+
+Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
+Cc: Andy Lutomirski <luto@amacapital.net>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Brian Gerst <brgerst@gmail.com>
+Cc: Dave Jones <davej@codemonkey.org.uk>
+Cc: Denys Vlasenko <dvlasenk@redhat.com>
+Cc: H. Peter Anvin <hpa@zytor.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Link: http://lkml.kernel.org/r/1450466646-26663-1-git-send-email-mario.kleiner.de@gmail.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kernel/reboot.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/arch/x86/kernel/reboot.c
++++ b/arch/x86/kernel/reboot.c
+@@ -182,6 +182,14 @@ static struct dmi_system_id __initdata r
+                       DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"),
+               },
+       },
++      {       /* Handle problems with rebooting on the iMac10,1. */
++              .callback = set_pci_reboot,
++              .ident = "Apple iMac10,1",
++              .matches = {
++                  DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
++                  DMI_MATCH(DMI_PRODUCT_NAME, "iMac10,1"),
++              },
++      },
+       /* ASRock */
+       {       /* Handle problems with rebooting on ASRock Q1900DC-ITX */
diff --git a/queue-4.4/x86-xen-don-t-reset-vcpu_info-on-a-cancelled-suspend.patch b/queue-4.4/x86-xen-don-t-reset-vcpu_info-on-a-cancelled-suspend.patch
new file mode 100644 (file)
index 0000000..56f14c2
--- /dev/null
@@ -0,0 +1,36 @@
+From 6a1f513776b78c994045287073e55bae44ed9f8c Mon Sep 17 00:00:00 2001
+From: "Ouyang Zhaowei (Charles)" <ouyangzhaowei@huawei.com>
+Date: Wed, 6 May 2015 09:47:04 +0800
+Subject: x86/xen: don't reset vcpu_info on a cancelled suspend
+
+From: "Ouyang Zhaowei (Charles)" <ouyangzhaowei@huawei.com>
+
+commit 6a1f513776b78c994045287073e55bae44ed9f8c upstream.
+
+On a cancelled suspend the vcpu_info location does not change (it's
+still in the per-cpu area registered by xen_vcpu_setup()).  So do not
+call xen_hvm_init_shared_info() which would make the kernel think its
+back in the shared info.  With the wrong vcpu_info, events cannot be
+received and the domain will hang after a cancelled suspend.
+
+Signed-off-by: Charles Ouyang <ouyangzhaowei@huawei.com>
+Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Signed-off-by: David Vrabel <david.vrabel@citrix.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/xen/suspend.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/xen/suspend.c
++++ b/arch/x86/xen/suspend.c
+@@ -34,7 +34,8 @@ static void xen_hvm_post_suspend(int sus
+ {
+ #ifdef CONFIG_XEN_PVHVM
+       int cpu;
+-      xen_hvm_init_shared_info();
++      if (!suspend_cancelled)
++          xen_hvm_init_shared_info();
+       xen_callback_vector();
+       xen_unplug_emulated_devices();
+       if (xen_feature(XENFEAT_hvm_safe_pvclock)) {